전체 글 25

Nginx와 Node.js의 리버스 프록시 구성

포워드 프록시 (Forward Proxy) 사용자가 웹 사이트에 연결하는 시나리오에서, 사용자로부터 프록시 서버가 요청을 받아 웹 사이트에 연결한 후, 그 결과를 전달해주는 구조를 '포워드 프록시'라 합니다. 포워드 프록시는 대개 캐시 기능이 있으므로, 자주 사용되는 컨텐츠라면 월등한 성능 향상을 기대할 수 있습니다. 또한, 기업 환경에서는 사용자들에게 지정된 사이트만 연결할 수 있도록 사용을 제한하는 방향으로 사용하기도 합니다. 리버스 프록시 (Reverse Proxy) 클라이언트가 웹 서비스에 데이터를 요청하면, 리버스 프록시 서버는 별도의 어플리케이션 서버를 통해 데이터를 받아 클라이언트에 전달합니다. 일반적으로 어플리케이션 서버는 DB와 연결되는데, 어플리케이션 서버가 외부에 직접 노출되는 것을 ..

오픈 소스 라이선스

오픈 소스란? 오픈 소스, 또는 공개 소프트웨어는 저작권자가 소스 코드를 공개하여 누구나 특별한 제한 없이 자유롭게 사용/복제/배포/수정이 가능한 소프트웨어를 의미합니다. 오픈 소스는 소스 코드를 공개한다는 점에서 프리웨어나 쉐어웨어와 구분되며, 오픈소스 이니셔티브(OSI)라는 단체에서 오픈 소스에 대한 라이선스와 가이드를 제시하고 있습니다. 오픈소스 라이선스의 종류 Apache License 아파치 라이선스는 '아파치소프트웨어재단'이 자사의 SW에 적용하기 위해 자체적으로 만든 라이선스입니다. 소스코드 공개와 같은 의무사항은 없지만, 아파치 라이선스 버전 2.0을 사용한다는 내용을 명시해야 합니다. GNU General Public License (GPL) GNU 프로젝트로 배포하는 소프트웨어인 Ema..

CRT (C Run-time Libraries)

C Run-time Libraries 란? 프로그래밍 언어는 구문이나 예약어 같은 원론적인 것만 정의하는 것이 아닌, 그 문법을 토대로 프로그램의 작성에 필요한 각종 기본적인 자료구조와 알고리즘, 입출력 기능들도 구현되어야 합니다. C 언어의 경우 printf, fopen 등과 같이 주로 사용되는 함수들은 라이브러리 형태로 제공되고 있으며, 이들의 집합을 [C Run-time Libraries]라 합니다. 애초에 main 함수나 WinMain 함수가 호출되고 각종 인자를 전해주는 것부터 C/C++ 언어가 제공하는 런타임 라이브러리의 역할이며, 이는 결국 어떠한 프로그램이든 반드시 하나 이상의 런타임 라이브러리를 사용하게 된다는 의미가 됩니다. CRT 링크 옵션의 비교 Visual Studio 에서 설정 ..

DLL Main 구현 시 주의점

DLL Main 함수의 역할 DLL은 실행 파일처럼 WinMain이 꼭 있어야 한다는 강제가 없으며, 메시지도 처리하지 않기 때문에 WndProc도 불필요합니다. 함수들의 집합이기 때문에 함수에 대한 정의만 있으면 되지만, 원칙적으로 DLL도 반드시 엔트리 포인트를 가져야 합니다. 다만 C 런타임 라이브러리와 링크할 때는 C 런타임이 엔트리 포인트를 대신 제공해 주는데, 대부분의 경우 VC++를 사용하기 때문에 특별한 경우를 제외하고는 엔트리 포인트를 만들지 않아도 무방합니다. 그러나 DLL 내에 복잡한 전역변수가 있거나, 동적으로 메모리를 할당해서 사용해야 하는 경우 DLL Main 내에서 초기화와 종료 처리를 해주어야 합니다. BOOL WINAPI DllMain(HINSTANCE hInst, DWOR..

함수 호출 규약

함수 호출 규약 함수를 호출하면 파라미터/복귀 주소/지역 변수 등을 위한 공간이 Stack 영역에 할당되며, 함수 호출이 끝나면 할당된 Stack 영역이 해제됩니다. 이 때 파라미터의 경우 함수 호출자 측에서 정리할지 / 피호출자 측에서 정리할지 결정이 필요한데, 여기에 사용되는 규칙이 함수 호출 규약입니다. 함수 호출 규약의 종류 ※ Visual C/C++ 컴파일러가 지원하는 함수 호출 규약의 종류 Keyword Stack 정리 위치 인자 전달 순서 인자 전달 매체 __cdecl Caller ← Stack __clrcall N/A → Stack __stdcall Callee ← Stack __fastcall Callee ← 레지스터 + Stack __thiscall Callee ← Stack _vect..