Delphi 사용 사례: 한 페이지에 한 가지 작업

제품 페이지는 컴포넌트가 무엇을 하는지 알려줘요. 레퍼런스 페이지는 모든 속성의 이름을 알려주고요. 하지만 어느 쪽도 여러분이 끝내려고 앉은 그 작업을 어떻게 끝내는지는 알려주지 않아요. 이 페이지들이 바로 그 역할을 해요. 각 페이지는 빈 폼에서 동작하는 코드까지 하나의 작업을 끝까지 데려가고, 단계마다 유닛과 컴포넌트의 이름을 밝히며, 어떤 제품과 어떤 에디션, 어떤 플랫폼이 필요한지 맨 앞에서 말해요. 그래서 첫 줄을 쓰기 전에 비용을 알 수 있어요.

한 페이지에 한 작업, 처음부터 끝까지
실제 배포 소스에서 가져온 Pascal
에디션과 플랫폼을 먼저 명시
Delphi 7부터 RAD Studio 13까지

사용 사례 페이지가 주는 것

이 목록의 모든 페이지는 같은 구조를 따라요. 질문이 언제나 같은 세 가지이고 순서도 같기 때문이에요.

컴포넌트가 아니라 작업 중심

페이지는 원하는 결과를 중심으로 짜여 있어요. 그래서 컴포넌트는 작업이 그 지점에 닿을 때 등장해요. 하나의 작업이 여러 컴포넌트에 걸쳐 있다면 실제로 만나게 되는 순서대로 전부 다뤄요. 경로가 두 가지라면 둘 다 보여주고 그 사이의 장단점을 분명히 적어요.

붙여넣어 쓸 수 있는 코드

Pascal 코드는 의사 코드가 아니라 실제 배포 소스와 제품에 들어 있는 데모 프로젝트에서 가져왔어요. 모든 uses 절에 유닛 이름이 적혀 있고, 이벤트 핸들러는 실제 시그니처를 그대로 쓰며, 오후 한나절을 날리게 만드는 실패 사례는 각주가 아니라 그것이 일어나는 자리에서 짚어줘요.

시작하기 전에 드는 비용

각 페이지는 그 작업에 필요한 제품과 에디션, 컴파일러 버전, 플랫폼을 맨 위에 밝혀요. 이 기능들의 절반은 sgcVer.inc{$IFDEF} 뒤에 가려져 있어요. 그래서 해석되지 않는 메서드는 문법 문제가 아니라 라이선스 문제이고, 그건 첫 페이지에서 아는 편이 좋아요.

지금 하려는 작업을 고르세요

아래 요약은 그 자체로 질문에 답할 만큼 충분히 길어요. 그래서 페이지를 열기 전에 다음 20분을 쓸 만한지 판단할 수 있어요.

Delphi에서 LLM 호출하기

VCL, FMX 또는 콘솔 애플리케이션에서 프롬프트를 보내고 답변을 받아요. OpenAI나 Anthropic Claude 같은 호스팅 모델도 되고, Ollama로 내 컴퓨터에서 돌아가는 모델도 돼요. 경로는 두 가지예요. TsgcAIChat은 모든 공급자를 하나의 API 뒤에 두기 때문에 공급자를 바꾸는 일은 Provider에 값을 한 번 대입하는 것으로 끝나요. 그리고 공급자별 클라이언트인 TsgcHTTP_API_OpenAI, TsgcHTTP_API_Anthropic, TsgcHTTP_API_Ollama는 비전 입력, 배치, Embeddings, 음성 전사가 필요할 때 각 공급자 API를 전부 노출해요.

이어서 모든 프로젝트가 다음으로 마주치는 세 가지를 다뤄요. 첫째는 스트리밍이에요. 모델이 아직 쓰고 있는 동안 메모에 텍스트가 나타나도록, 디코딩된 델타 수준과 원시 이벤트 수준 양쪽에서 설명해요. 둘째는 툴 호출이에요. Pascal 함수를 JSON Schema로 기술하면 모델이 그 함수를 실행해 달라고 요청해요. 셋째는 호스팅 모델과 로컬 모델 사이의 선택이에요. 데이터 처리 계약이 적용되는 경우라면 이건 성능이 아니라 컴플라이언스 결정이에요.

필요 사항: sgcWebSockets Enterprise 또는 단독 sgcAI 패키지가 필요해요. REST 클라이언트는 Windows, macOS, Linux, iOS, Android에서 컴파일돼요. TsgcAIChat은 Windows 전용이라 페이지에서 두 경로를 모두 보여줘요.

가이드 읽기 →

OAuth2와 PKCE로 사용자 로그인 처리하기

PKCE를 적용한 Authorization Code 플로우는 이제 모든 공급자가 네이티브 데스크톱 애플리케이션에 요구하는 방식이에요. 이걸 비주얼이 아닌 컴포넌트 하나로 처리해요. 내장 브라우저도, 직접 만든 웹 서버도, REST 프레임워크도 필요 없어요. TsgcHTTP_OAuth2_Client가 verifier를 만들고, challenge를 유도하고, 시스템 브라우저를 열고, 루프백 리디렉션을 수신하고, 코드를 교환한 뒤 토큰과 함께 OnAfterAccessToken을 발생시켜요.

데스크톱에서 이 플로우가 어긋나는 지점은 리디렉션이에요. 그래서 페이지는 거기에 충분한 분량을 써요. 리디렉션이 왜 공개 URL이 아니라 루프백 주소인지, 공급자에 무엇을 등록해야 하는지, redirect_uri_mismatch가 무엇을 말하고 있는지 설명해요. 이어서 브라우저가 두 번 다시 열리지 않게 해주는 리프레시 토큰, 자격 증명을 아무 데나 두지 않고 저장하는 방법, 미리 만들어진 Google과 Microsoft 컴포넌트, 그리고 Gmail과 Microsoft 365가 이제 SMTP와 IMAP에서 요구하는 XOAUTH2 전달 방식을 다뤄요.

필요 사항: sgcWebSockets Standard 이상, 또는 단독 sgcAuth 패키지가 필요해요. Windows, macOS, Linux, iOS, Android를 지원해요. Enterprise 기능인 것은 인증 서버 쪽뿐이에요.

가이드 읽기 →

WebRTC로 두 Delphi 애플리케이션 연결하기

서로 다른 두 네트워크에 있는 두 애플리케이션이 채팅 채널과 마이크 스트림, 카메라 스트림을 직접 주고받아요. 중간에 미디어 서버도 없고, 프로세스 안에 브라우저를 심지도 않아요. 페이지는 WebRTC를 실제로 구성하는 네 가지 문제로 나눠서 다뤄요. 세션을 SDP offer와 answer로 기술하기, 그 기술을 상대편에 전달하기, NAT를 통과하는 경로 찾기, 그리고 바이트를 실어 나르기예요.

시그널링은 직접 작성해야 하는 부분이라, 메시지 종류 세 개를 쓰는 TsgcWebSocketServer 기반의 단순 릴레이로 전체 코드를 실었어요. 그다음에는 피어 연결과 그 이벤트, ICE 후보, 그리고 host와 server reflexive, relay 후보가 각각 어떤 대가를 치르게 하는지, 사람들이 잊고 지나가는 TURN 스위치, 채널별 신뢰성을 설정하는 SCTP 데이터 채널, 그리고 데이터 채널과는 전송 방식도 실패 양상도 다른 오디오와 비디오 트랙을 다뤄요. 마지막은 오류를 전혀 남기지 않는 실패들로 마무리해요. 피어 투 피어 디버깅이 어려운 이유가 바로 그거예요.

필요 사항: 피어 연결과 ICE, TURN 클라이언트는 sgcWebSockets Enterprise에 들어 있어요. offer와 answer 메서드, 데이터 채널, 미디어 트랙은 Enterprise 위에 sgcWebRTC 팩이 더 필요하고, 이 팩은 All-Access에도 포함돼요. STUN 클라이언트는 Standard부터 제공돼요.

가이드 읽기 →

더 많은 작업을 정리하는 중이에요. 지금 하려는 작업이 아직 없다면 블로그가 같은 주제를 글마다 상당 부분 다루고 있고, 그동안 지원팀이 알맞은 데모 프로젝트를 안내해 드려요.

제품과 에디션, 플랫폼 한눈에 보기

각 페이지가 첫 섹션에서 밝히는 것과 같은 정보를 모아 두었어요. 탭 세 개를 열지 않고도 세 작업의 비용을 비교할 수 있어요.

가이드 주요 컴포넌트 제품과 에디션 플랫폼
Delphi에서 LLM 호출하기 TsgcAIChat, TsgcHTTP_API_OpenAI, TsgcHTTP_API_Anthropic, TsgcHTTP_API_Ollama sgcWebSockets Enterprise, 또는 단독 sgcAI 패키지 REST 클라이언트는 Windows, macOS, Linux, iOS, Android. TsgcAIChat은 Windows.
PKCE를 적용한 OAuth2 로그인 TsgcHTTP_OAuth2_Client, 그리고 Google과 Microsoft 래퍼 sgcWebSockets Standard 이상, 또는 단독 sgcAuth 패키지 Windows, macOS, Linux, iOS, Android
두 애플리케이션 사이의 WebRTC TsgcRTCPeerConnection, TsgcICEClient, TsgcTURNClient, TsgcWebSocketServer 피어 연결에는 sgcWebSockets Enterprise, offer와 answer, 데이터 채널, 미디어에는 sgcWebRTC 팩이 필요해요. 둘 다 All-Access에 들어 있어요. 캡처와 렌더링은 Windows. 전송 자체는 크로스플랫폼이에요.

위의 에디션 표기는 모두 실제 배포되는 sgcVer.inc가 강제하는 내용이에요. 전체 내역은 Delphi 기능 매트릭스에 있고, 어떤 에디션 페이지는 같은 결정을 반대 방향에서 짚어봐요.

작업 가이드가 찾던 것이 아니라면

이 페이지들은 그 옆의 질문에 답해요. 컴포넌트가 무엇을 하는지, 이름이 무엇인지, 다른 제품과 어떻게 비교되는지, 그리고 비용이 얼마인지예요.

sgcWebSockets 이 페이지의 모든 가이드 뒤에 있는 라이브러리예요. WebSocket과 HTTP/2부터 MQTT, AMQP, WebRTC, AI 클라이언트까지 다뤄요.
라이브러리 비교 코드를 쓰기 전에 아직 라이브러리를 고르는 중인가요? 비교 허브는 sgcWebSockets를 Indy, ICS, TMS, mORMot 2, IPWorks, Chilkat과 나란히 놓고 봐요.
컴포넌트 레퍼런스 라이브러리의 모든 컴포넌트와 각 컴포넌트가 공개하는 속성, 메서드, 이벤트, 그리고 그 뒤를 받치는 기술 문서를 담았어요.
용어집 이 가이드들이 쓰는 프로토콜과 암호화, 인증 용어를 정리했어요. 각 용어는 그것을 정의한 RFC로 연결돼요.
블로그 수백 편의 실전 글이 있어요. 이 가이드들이 참고한 릴리스 글도 들어 있어요.
에디션과 가격 Standard, Professional, Enterprise, All-Access에 각각 무엇이 들어 있는지, 그리고 단독 팩이 어디에 들어맞는지 정리했어요.

모든 가이드는 같은 다운로드에서 시작해요

체험판은 모든 컴포넌트가 켜져 있는 전체 라이브러리이고, 각 가이드가 참조하는 데모 프로젝트도 그 안에 들어 있어요.