본문 바로가기

분류 전체보기117

Nginx Configuration (2/2) Nginx Configuration Try Files & Named Locations try_files try_files file ... uri; try_files 지시문은 정적 파일을 제공하는 웹 서버에서 파일을 찾는 방법을 지정하는 데 사용된다. 파일 검색의 순서를 정의하고, 해당 파일이나 경로를 찾지 못한 경우 어떤 동작을 수행할지 지정할 수 있다. try_files 지시문의 구문은 위와 같다. file ...: 파일 검색의 순서를 정의한다. 여기에 나열된 파일이나 경로들은 차례대로 검색된다. 파일 경로는 절대 경로나 상대 경로 모두 가능하다. 파일이나 경로를 찾을 수 없다면 다음으로 넘어간다. uri: 파일이나 경로를 찾지 못한 경우 어떤 URI로 요청을 전달할지 지정한다. Named Locati.. 2023. 9. 30.
Nginx Configuration (1/2) Nginx Configuration 이해하기 Nginx는 웹 서버 및 리버스 프록시로 사용되는 오픈소스 소프트웨어로, 그 구성 파일은 웹 서버 및 프록시 서버의 동작을 제어하는 중요한 부분이다. Nginx의 Configuration 파일은 일반적으로 nginx.cof라는 이름으로 저장되며, 여러 가지 구성 요소와 용어가 포함되어 있다. Nginx의 Configuration 파일에서 Directive와 Context는 중요한 개념이다. 이 두 가지에 대해서 자세히 알아보자. Directive listen 80; server_name mydomain.com; root /var/www/html; location /images/ { alias /var/www/images/; } Directive는 Nginx C.. 2023. 9. 29.
소스코드로 Nginx 시작하기 Nginx 시작하기 Nginx란? Nginx는 고성능이면서 경량의 오픈소스 웹 서버 및 리버스 프록시 서버 소프트웨어이다. Nginx는 많은 웹 사이트 및 웹 애플리케이션에서 사용되며, 그 기능과 특징 때문에 매우 인기가 있다. Nginx는 C10K 문제와 같은 대규모 연결을 처리하는데 탁월한 성능을 제공하고자 개발되었다. Nginx가 C10K 문제를 해결하는데 효과적인 이유는 다음과 같다. 이벤트 기반 아키텍처: Nginx는 단일 스레드 또는 워커 프로세스를 사용하여 이벤트 기반 아키텍처를 채택하고 있다. 이러한 아키텍처는 많은 연결을 동시에 처리할 수 있는 확장성을 제공하며, 블로킹 I/O 대신 비동기 I/O를 사용하여 더 효율적으로 작동한다. 비동기 처리: Nginx는 클라이언트 요청을 비동기적으로.. 2023. 9. 28.
스프링의 내부구조 파헤치기 스프링 내부구조 Web Server Client는 HTTP 프로토콜을 이용하여 요청을 보내게 된다. 웹 서버는 이를 해석해 요청에 맞는 데이터를 보내주어야 한다. 그에 맞는 데이터 형식으로 보내주는 것이 Web Server가 할 일이다. 웹 서버는 단순히 요청에 대한 데이터를 수정없이(static, 정적) 클라이언트에게 보내주기만 하면 된다. 초창기 인터넷에서는 정적 데이터에 대한 수요가 높았기 때문에 기능적으로 WAS를 따로 나누지 않고 웹 서버라는 개념을 통칭해서 사용했다. WAS(Web Application Server) WAS는 J2EE 스펙을 구현하여, 서블릿이나 JSP로 작성된 애플리케이션을 실행하는 소프트웨어이다. 참고: J2EE(Java 2 Platform, Enterprise Editio.. 2023. 9. 25.
HTTP Request 파싱하기 HTTP Request 파싱하기 이전 게시글에서 HTTP Request가 출력되는 것을 확인했다! 그러면 이제 HTTP Request를 파싱해보자. 이렇게 HTTP Request를 파싱하는데에는 이유가 있다. 우리가 사용하는 스프링 프레임워크는 모두가 알다시피 서블릿 스펙을 지킨 서블릿 컨테이너를 구현하고 있다. 다시 말하자면 서블릿 컨테이너의 주요 목표는 서블릿을 동작시키는데 있다고 볼 수 있다. 따라서 서블릿이 어떤 방식으로 동작하는지를 이해하면 서블릿 컨테이너가 제공해야 하는 기능을 역으로 유추할 수 있다. 그리고 이런 서블릿의 목적은 HTTP 프로토콜을 사용해 웹 서비스를 제공하는 것이다. 그럼 이 서블릿 스펙을 구현한 서블릿 컨테이너는 네트워크 통신, 생명주기 관리, 스레드 기반의 병렬처리를 대.. 2023. 9. 21.
Socket을 이용해 HTTP Server 만들기 with 병렬 처리 Socket을 이용한 HTTP Server HTTP 통신은 당연히 Socket을 이용하는건데 어떻게 제목이 Socket을 이용한 HTTP Server이다. 이전 게시글 소켓을 활용한 Echo Server 만들기 소켓(Socket) 소켓은 네트워크에서 실행되는 두 프로그램 간의 양방향 통신 링크의 양 끝점을 말한다. 즉, 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써 oneny.tistory.com 소켓에 대한 개념과 소켓을 통해 에코 콘솔 서버 만든 게시글이다. HTTP Server 개요 1. Configuration 파일 읽기 프로그램의 설정 정보를 저장하는 파일을 읽어와서 프로그램이 동작할 환경설정을 구성한다. 이 설정은 포트번호, 파일 경로, 데이터베이스 연결 .. 2023. 9. 20.
전자서명 전자서명 송신자는 네트워크에서 송신자의 신원을 증명하는 방법으로, 자신의 유일한 신분(identity)을 증명할 수 있는 서명을 메시지와 함께 보낸다. 서명(signature)를 계산할 때, 메시지의 내용을 자신의 비밀키로 암화하면 수신자는 송신자의 공개키로 암호문을 해독한다. 사이버 공간에서는 정보들을 쉽게 위변조 할 수 있다. 따라서 전자 서명은 쉽게 사이버 공간에서의 인감으로 프로그램의 제작자를 확인하고, 거래를 한 사람이 자신이 맞다는 것을 증명하기 위해 나오게 되었다. 송신자의 서명은 다음과 같은 특징을 가진다. 변경 불가(Unalterable): 메시지가 변조되지 않았음을 증명할 수 있다. 서명자 인증(User Authentication): 메시지를 보낸 송신자의 신분을 증명할 수 있다. 부인.. 2023. 9. 11.
HMAC(Hash-based message authentication code) HMAC HMAC(Hash-based message authentication code)는 해시 함수와 비밀키를 사용하는 암호화 인증 기술이다. 서명 및 비대칭 암호화와는 다르게 HMAC은 공유 암호를 사용하여 인증하고 데이터가 올바르고 신뢰할 수 있는지를 확인한다. 송신자와 수신자는 통신 시 서로 주고 받는 내용이 비공개이길 원한다. 또한 인터넷은 신뢰할 수 없는 매체이기 떄문에 수신된 패킷이 변조되었는지를 확인할 방법이 필요하다. 이러한 경우 HMAC은 효과적인 해결방법이 될 수 있다. HMAC 이전에 MAC에 대해서 먼저 알아보자. MAC 메시지에서부터 해시함수를 이용해 계산된 해시값을 Message Digest라고 부른는데 이 Message Digest에 인증 정차를 추가한 것을 메시지 인증 코드.. 2023. 9. 9.
HTTPS(with 공개키 암호화 방식) HTTPS HTTPS는 웹 브라우저와 서버 간에 데이터를 전송하는데 사용되는 기본 프로토콜인 HTTP의 보안버전이다. HTTPS는 데이터 전송의 보안을 강화하기 위해 암호화된다. 이는 사용자가 은행 계좌, 이메일 서비스, 의료 보험 공급자에 로그인하는 등 중요한 데이터를 전송할 때 특히 중요하다. 그러면 HTTPS가 어떻게 작동하는지에 대해서 알아보기 위해 먼저 공개키 암호화 방식에 대해서 알아보자. 공개키 암호화 방식 최근 사용되는 대부분의 암호화 방식은 공개키 암호화 방식이다. 공개키 암호화 방식의 효시가 되는 DH 비밀키 교환 방식과 공개키 암호화 방식의 대표적인 예인 RSA 방식에 대해서 알아보자. 비밀키 암호화 방식의 문제 비밀키 암호화 방식은 암호화키를 여러 사람이 공유하기 때문에 암호화키가 .. 2023. 9. 9.