본문 바로가기

전체 글121

커넥션풀과 데이터소스 이해하기 with HikariCP 커넥션 풀 커넥션 풀은 데이터베이스 연결을 관리하는 데 사용되는 메커니즘이다. 데이터베이스 연결을 생성하고 닫는 과정은 비용이 많이 들기 때문에 애플리케이션에서 데이터베이스와의 연결을 효율적으로 관리하기 위해 연결 풀을 사용한다. 커넥션 풀 등장배경 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.. 2023. 10. 3.
JDBC의 Connection, PreparedStatement(vs Statement) JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. JDBC가 나오게 된 배경 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 하지마 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달.. 2023. 10. 3.
Reverse Proxy & Load Balancing Reverse Proxy Nginx의 Reverse Proxy는 클라이언트 요청을 다른 서버로 전달하고 해당 서버로부터 받은 응답을 클라이언트에게 반환하는 역할을 하는 중간 서버이다. 이를 통해 Nginx는 여러 가용성 및 보안 기능을 제공하고, 웹 서버나 애플리케이션 서버의 부하 분산을 수행할 수 있다. Reverse Rroxy 서버의 장점은 다음과 같다. 단일 진입점: Reverse Proxy는 여러 도메인 및 경로에 대한 단일 진입점을 제공하여 여러 애플리케이션 서버로 들어오는 클라이언트 요청을 분산하는 로드 밸런싱 기능을 수행할 수 있다. 이를 통해 트래픽을 고르게 분산하고 서버 부하를 분산시키고, 무중단 배포도 지원할 수 있다. 보안 강화: 애플리케이션 서버를 직접 노출하지 않고 Reverse .. 2023. 10. 1.
Nginx Performance Headers & Expires HTTP 헤더는 클라이언트와 서버 간에 전송되는 메타 정보를 포함하는 텍스트 데이터이다. Nginx를 사용하면 헤더를 수정하고 조작하여 웹 페이지의 동작을 제어할 수 있다. add_header 지시문을 통해 HTTP 헤더에 보안 헤더를 추가하거나 커스텀 헤더를 생성해서 추가할 수 있다. 위를 보면 /style.css 경로로 요청하면 커스텀 헤더를 생성해 추가한 것을 확인할 수 있다. 정적 파일 요청 add_header Cache-Control public: Cache-Control HTTP 헤더를 설정하여 므라우저 및 캐시 서버에 리소스를 공개 캐시로 저장할 것을 지시한다. 이렇게 설정하면 클라이언트 및 중간 프록시 서버에서 캐시로 저장하고 재사용할 수 있다. add_he.. 2023. 9. 30.
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.