sgcIndy 5분 시작 가이드

sgcIndy는 이름만 바꾼 포크가 아니라 계속 유지 보수되는 Indy 빌드예요. 유닛 이름, 클래스 이름, 컴포넌트 팔레트 페이지가 모두 이미 쓰고 있는 것과 같아요. 그래서 빠른 시작은 "이 코드를 작성하세요"가 아니라 "설치하고, 다시 빌드하고, 새 속성 하나를 설정하세요"예요.

Indy와 같은 유닛 및 클래스 이름
OpenSSL 1.0, 1.1, 3.0과 TLS 1.3
Delphi, C++Builder, FreePascal, Lazarus

나머지 모든 것을 결정짓는 사실

sgcId 접두사가 없어요. 유닛도 클래스도 하나도 없어요. 기존 코드가 그대로 컴파일돼요.

유닛 이름

일반 Indy 이름 그대로예요. IdTCPClient, IdHTTP, IdSSLOpenSSL 등 약 사백 개가 더 있어요. 라이브러리의 어떤 유닛도 sgc 접두사가 붙은 이름이 아니에요.

클래스 이름

클래스 이름도 일반 Indy 이름 그대로예요. TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL, TIdSSHClient, TIdSFTPClient가 있어요.

팔레트 페이지

같은 다섯 개예요. Indy Clients, Indy Servers, Indy Intercepts, Indy I/O Handlers, Indy Misc. 이 페이지들에 약 166개의 컴포넌트가 이미 익숙한 위치에 있어요.

그럼 무엇이 바뀌나요

설치 프로그램이 IDE가 로드하는 패키지를 교체하고 검색 경로를 다시 써요. 프로젝트는 바뀌지 않아요. 눈에 보이는 차이는 새 속성 SSLOptions.APIVersion과 그 아래의 수정 사항이에요.

요구 사항과 에디션

sgcIndy에는 기능 등급이 없어요. 라이선스 등급은 패키지에 무엇이 들어 있는지를 바꿀 뿐, 코드가 할 수 있는 일을 바꾸지 않아요.

항목 값
IDE Delphi 7부터 RAD Studio 13까지, 그리고 C++Builder 2007부터 13까지. 각각에 맞는 패키지 그룹이 제공돼요.
Uses 절 바뀌지 않아요. 프로젝트가 이미 작성한 것은 그대로 동작해요. 유닛 이름이 기본 Indy와 똑같기 때문이에요.
Indy 기반 버전 라이브러리는 스스로를 Indy 10.6.3.12로 보고해요. sgc의 변경 사항은 이름을 바꾸는 대신 원래 유닛 안에 주석과 조건부 define으로 표시되어 있어요.
에디션 기능 등급이 없어요. 에디션 플래그는 빌드 시점에 주입되며 사용처는 정확히 두 곳, 정보 상자와 IDE 스플래시 화면뿐이에요. 라이브러리의 어떤 것도 그 플래그로 제어되지 않아요. 등급이 실제로 바꾸는 것은 패키지 구성이에요. Community와 Basic 빌드는 .pas와 .inc 파일을 제외한 컴파일된 바이너리를 제공하고, 소스 빌드에는 그 파일이 포함돼요.
FreePascal과 Lazarus 지원해요. Lazarus 패키지가 FreePascal 패키지 스텁 및 빌드 파일과 함께 제공되며, 컴파일러 범위는 FPC 2.2.2부터 3.3.1까지예요. 한 가지 주의할 점이 있어요. Lazarus에서는 Delphi 모드를 의도적으로 비활성화했으므로 그것을 전제로 하는 유닛은 조정해야 해요.
플랫폼 Windows, Linux, macOS, FreeBSD, iOS, Android 모두 각자의 조건 블록이 있어요. iOS에서는 OpenSSL을 정적으로 링크해야 해요.

시작하기 전에 알아 두면 가장 유용한 점이에요. 유닛 이름이 RAD Studio에 포함된 Indy와 충돌하기 때문에 설치 프로그램이 교체를 대신 관리해요. 내장 Indy 디자인 패키지의 등록을 해제하고, 자체 패키지를 등록하고, IDE 검색 경로를 다시 써요.

설치하고 교체 확인하기

설치 프로그램이 작업을 처리해요. 중요한 것은 그 뒤에 IDE가 실제로 sgcIndy를 로드하는지 확인하는 거예요.

1. 설치 프로그램 실행

다운로드한 설치 파일을 실행하고 원하는 RAD Studio 버전과 플랫폼을 선택하세요. 라이브러리를 복사하며, Community와 Basic 패키지에서는 소스 파일을 제외해요.

2. 패키지 교체 맡기기

설치 프로그램이 IDE에 내장된 Indy 디자인 패키지의 등록을 해제하고 그 자리에 자체 패키지를 등록해요. 같은 유닛 이름이 sgcIndy로 연결되는 이유예요.

3. 검색 경로 수정 맡기기

플랫폼별로 IDE 검색 경로의 맨 앞에 sgcIndy 폴더를 넣고, 이전 설치에서 남은 항목을 제거해요.

4. 스플래시 화면에서 확인

IDE를 다시 시작하세요. 스플래시 화면에 sgcIndy가 표시되고 Indy 정보 상자에도 그렇게 나와요. 교체가 적용되었다는 확인이에요.

5. 프로젝트 다시 빌드

기존 Indy 프로젝트를 열어 다시 빌드하세요. uses 절은 건드리지 마세요. 기본 Indy로 컴파일되었다면 이것으로도 컴파일돼요.

다시 빌드하고, TLS 1.3 사용하기

첫 번째 탭은 기존 프로젝트가 이미 보이는 모습이에요. 두 번째 탭은 추가할 만한 새 줄 하나예요. 세 번째 탭은 기본 Indy가 아니라 sgcIndy를 쓰고 있다는 증거예요.

FHttpClient.pas
// This is a shipped sgcIndy demo's uses clause.
// Read it twice: there is not one sgc prefix in it.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
  IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;

기존 프로젝트도 이미 이런 모습이고, 그게 핵심이에요. sgcIdTCPClient나 TsgcIdSSLIOHandlerSocketOpenSSL 같은 것은 없어요. 라이브러리의 어떤 유닛과 클래스에도 sgc 접두사가 없기 때문이에요. 설치하고, 다시 빌드하면 끝이에요.

FHttpClient.pas
procedure TFRMHttpClient.btnGoToClick(Sender: TObject);
var
  oStream: TStringStream;
begin
  // Two separate settings. APIVersion picks which generation of the
  // OpenSSL API to call, Method picks the TLS version. TLS 1.3 needs
  // the 3.0 API, so both lines change together.
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;

  oStream := TStringStream.Create('');
  try
    IdHTTP1.Get(txtURL.Text, oStream);
  finally
    FreeAndNil(oStream);
  end;
end;

TIdSSLAPIVersion의 멤버는 sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1, sslvAPI_3_0이에요. 이 타입도 이 속성도 기본 Indy에는 없으므로, 이 코드는 어떤 라이브러리를 대상으로 빌드하는지 컴파일 시점에 증명해 줘요.

fTcpClient.pas
procedure TfrmTCPClient.btnConnectClick(Sender: TObject);
begin
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;

  IdTCPClient1.Host := txtHost.Text;
  IdTCPClient1.Port := StrToInt(txtPort.Text);
  IdSSLIOHandlerSocketOpenSSL1.PassThrough := False;

  IdTCPClient1.Connect;
end;

procedure TfrmTCPClient.btnDisconnectClick(Sender: TObject);
begin
  IdTCPClient1.Disconnect;
end;

같은 컴포넌트, 같은 속성, 같은 팔레트 페이지예요. 기본 Indy와 똑같이 PassThrough := False가 일반 소켓을 TLS 소켓으로 바꿔 줘요. 읽기는 IdTCPClient1.IOHandler.ReadLn, 쓰기는 IOHandler.Write이며 바뀌지 않았어요.

처음 두 탭은 포함된 데모 Demos\HttpClient\FHttpClient.pas에서 가져온 것이며 콤보 상자는 리터럴로 바꿨어요. 데모는 모두 열여덟 개가 포함되어 있으며, SSH와 SFTP 클라이언트, FTP 클라이언트, 메일 클라이언트, TCP 서버, UDP 한 쌍이 있어요.

sgcIndy를 쓰고 있다는 것을 확인하기

유닛 이름이 똑같기 때문에 소스만 봐서는 알 수 없어요. 분명하게 알 수 있는 확인 방법이 세 가지 있어요.

스플래시 화면

설치 후 IDE를 다시 시작하세요. 스플래시 화면에 sgcIndy가 표시돼요. 패키지 교체가 적용되었다는 확인이며 가장 빠른 방법이에요.

정보 상자

Indy 정보 대화 상자에 기본 문구 대신 eSeGeCe가 표시되고, 무료 패키지에서는 Community Edition이라고 나와요.

기본 Indy에서는 컴파일되지 않는 한 줄

SSLOptions.APIVersion := sslvAPI_3_0;예요. TIdSSLAPIVersion 타입은 기본 Indy에 없으므로 이 줄이 빌드된다면 sgcIndy를 쓰고 있는 거예요.

내 프로젝트

uses 절을 건드리지 않고 다시 빌드하세요. 유닛과 클래스 이름이 똑같으므로 이전과 정확히 같게 컴파일되어야 해요.

처음 실행할 때 흔히 생기는 문제

마이그레이션의 문제는 거의 다 여섯 가지 중 하나가 원인이에요.

sgcId 유닛을 찾고 있어요

없어요. 라이브러리에 sgc 접두사가 붙은 유닛도 클래스도 없어요. uses 절을 sgcIdTCPClient로 바꾸면 그런 유닛이 없으므로 프로젝트가 컴파일되지 않아요.

IDE가 여전히 기본 Indy를 로드해요

패키지 교체는 설치 프로그램이 처리하므로, 대개 설치가 끝나지 않았거나 수동으로 넣은 검색 경로 항목이 우선하고 있다는 뜻이에요. 교체가 적용되면 sgcIndy가 표시되는 스플래시 화면을 확인하세요.

TLS 1.3이 협상되지 않아요

두 속성을 모두 설정하세요. SSLOptions.APIVersion은 어떤 세대의 OpenSSL API를 쓸지 선택하고, SSLOptions.Method는 프로토콜 버전을 선택해요. TLS 1.3에는 3.0 API가 필요하므로 두 줄을 함께 바꿔야 해요.

OpenSSL DLL이 없어요

각 데모 폴더에는 실행 파일 옆에 필요한 세트가 들어 있어요. 3.0 API에는 libcrypto-3.dll과 libssl-3.dll이 필요해요. 이전 API는 이름이 달라서, 엉뚱한 쌍을 복사하는 것이 시작도 못 하고 실패하는 핸드셰이크의 흔한 원인이에요.

Lazarus에서 유닛이 실패해요

컴파일러 define에서 Lazarus 빌드는 Delphi 모드를 의도적으로 끄고, 거기서는 실패한다는 주석이 있어요. Delphi 모드의 의미에 의존하는 코드는 조정해야 해요.

패키지에 소스 파일이 없어요

Community와 Basic 설치 프로그램은 컴파일된 바이너리를 제공하고 .pas와 .inc 파일은 제외해요. 라이브러리 안으로 들어가 디버깅해야 한다면 소스가 포함된 패키지가 필요해요.

sgcIndy가 Indy 위에 더하는 것

다시 빌드한 뒤에 알아 둘 만한 네 가지예요.

최신 OpenSSL과 TLS 1.3

기본 Indy 10.6.2는 OpenSSL 1.1과 3.0의 API 변경보다 이전 버전이에요. SSLOptions.APIVersion이 세대를 선택하고, 3.0 API에서 sslvTLSv1_3을 사용할 수 있게 돼요.

sgcIndy 기능

SSH와 SFTP

TIdSSHClient와 TIdSFTPClient는 기본 Indy에는 아예 없어요. 둘 다 데모가 포함되어 있어요.

SSH 클라이언트와 SFTP 클라이언트

고성능 서버

IOCP와 epoll IO 핸들러가 Windows와 Linux에서 연결당 스레드 모델을 대체하며, 실제 부하에서 서버의 모습을 바꿔 줘요.

비교

메일을 위한 최신 인증

XOAUTH2를 지원하므로 SMTP나 IMAP 클라이언트가 기본 인증을 중단한 공급자에게도 인증할 수 있어요.

sgcIndy의 XOAUTH2

레퍼런스, 데모, 문서

에코 클라이언트부터 SSH와 SFTP까지, 다운로드 안에 데모 프로젝트가 열여덟 개 들어 있어요.

sgcIndy 기능 이 빌드가 Indy 10.6.3 위에서 수정하고 추가한 것.
비교 sgcIndy와 기본 Indy를 기능별로 비교해요.
다운로드 Community 패키지는 무료로 사용할 수 있어요.
구매 전체 소스가 포함된 패키지.
제품 개요 sgcIndy가 무엇이고 누구를 위한 것인지.
모든 제품 eSeGeCe의 모든 라이브러리 가격을 한 표에서 확인하세요.

함께 읽어 보세요. Indy에서 OpenSSL 3.0 사용하기, IOCP 서버, SSH 클라이언트, 최신 릴리스 노트. 모든 제품에는 각자의 빠른 시작이 있으며, 시작하기 페이지에서 모아 볼 수 있어요.

sgcIndy 빠른 시작 FAQ

아니요. 이것이 sgcIndy에서 가장 중요한 점이에요. 모든 유닛이 IdTCPClient, IdHTTP, IdSSLOpenSSL 등 원래 Indy 이름을 유지하고, 모든 클래스도 TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL처럼 원래 이름을 유지해요. 라이브러리 어디에도 sgc 접두사가 붙은 유닛이나 클래스는 없어요. 설치하고 다시 빌드하면 프로젝트가 sgcIndy 위에서 동작해요.
설치 프로그램이 교체해요. IDE에서 내장 Indy 디자인 패키지의 등록을 해제하고, 그 자리에 sgcIndy 패키지를 등록하고, 검색 경로의 맨 앞에 sgcIndy 폴더를 넣어요. 유닛 이름이 같으므로 코드가 아니라 이쪽이 바뀌어야 해요.
세 가지 방법이 있어요. IDE가 시작할 때 스플래시 화면에 sgcIndy가 표시돼요. Indy 정보 상자에도 그렇게 나와요. 그리고 컴파일 시점의 증거가 있어요. SSLOptions.APIVersion은 이 빌드에만 있으므로, 거기에 sslvAPI_3_0을 할당하는 줄은 여기서는 컴파일되고 기본 Indy에서는 실패해요.
두 속성을 함께 설정하세요. SSLOptions.APIVersion := sslvAPI_3_0은 OpenSSL 3.0 API 세대를 선택하고, SSLOptions.Method := sslvTLSv1_3은 프로토콜을 선택해요. TIdSSLAPIVersion 타입의 멤버는 sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1, sslvAPI_3_0이고, TIdSSLVersion에는 sslvTLSv1_3이 추가되었어요. 그다음 데모처럼 실행 파일 옆에 libcrypto-3.dll과 libssl-3.dll을 함께 배포하세요.
라이브러리는 스스로를 Indy 10.6.3.12로 보고해요. sgc의 변경 사항은 원래 파일 안에 주석으로 표시하고 조건부 define으로 가드해서 만들었으며, 그래서 유닛 이름을 그대로 유지할 수 있었어요.
어느 것도 아니에요. 에디션으로 제어되는 기능이 없기 때문이에요. 에디션 플래그는 빌드 시점에 주입되며 라이브러리 전체에서 사용처가 정보 상자 제목과 IDE 스플래시 화면 문구, 단 두 곳뿐이고 둘 다 겉보기용이에요. 등급이 실제로 바꾸는 것은 패키지 구성이에요. Community와 Basic 설치 프로그램은 컴파일된 바이너리를 제공하고 .pas와 .inc 파일을 제외하는 반면, 소스가 포함된 패키지에는 그 파일이 들어 있어요.
네. Lazarus 패키지가 FreePascal 패키지 스텁 및 빌드 파일과 함께 제공되며, 컴파일러 범위는 FPC 2.2.2부터 3.3.1까지예요. 시작하기 전에 알아 둘 주의점이 하나 있어요. 컴파일러 define에서 Lazarus의 Delphi 모드를 의도적으로 비활성화했고 거기서는 실패한다는 주석이 있으므로, Delphi 모드의 의미에 의존하는 유닛은 조정해야 해요.
Windows, Linux, macOS, FreeBSD, iOS, Android 모두 컴파일러 define에 각자의 조건 블록이 있어요. Unix 대상은 OpenSSL과 포함된 zlib 유닛을 사용해요. iOS는 실제 제약이 있는 곳으로, OpenSSL을 런타임에 로드하는 대신 정적으로 링크해야 해요.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

기본 Indy에서 옮겨 갈 준비가 되셨나요?

Community 패키지는 무료예요. 설치하고, 다시 빌드한 뒤 스플래시 화면을 확인해 보세요.