본문 바로가기

전체 글24

Spring Boot Warm Up Warm Up Spring Boot 어플리케이션을 배포하게 되면 첫 요청에 대한 응답은 상대적으로 느리고 이후 요청부터 점점 테스트 했던 지연시간 만큼 줄어드는 걸 확인 할 수 있다. 원인은 JVM의 클래스 로딩 방식이 Lazy 한 것과 Spring Boot 내부에서 사용하는 Bean들 중 지연 로딩을 적용 한 것들이 실제 요청을 받을 때 생성하기 때문에 그만큼 응답 시간에 영향을 미치기 때문이다. 그렇다면 원인을 파악했으니 지연 로딩되는 클래스들과 Bean들을 첫 요청 전에 로딩 시켜 놓으면 첫 요청이 느린 문제를 해결 할 수 있다. 이렇게 사전에 준비를 해놓는 것을 'Warm Up'이라고 부른다. (물론 JVM JIT Compiler cache - Tiered Compilation 을 통한 최적화 하.. 2024. 4. 17.
Feign Client Connection Pool Feign Client를 무작정 사용하면 알아서 커넥션 풀을 사용할까? 알아서 사용 했으면 이렇게 글로 정리 하지도 않았을 것이다. 우선 커넥션 풀을 사용 할 필요가 있는 서비스와 사용 할 필요가 없는 서비스를 두 가지 유형으로 분리해보면 기준은 '자원' 이 될 것이다. (이 안에는 시간과 물리적인 자원이 포함된다.) 즉 자원이 여유로운 상황에서는 굳이 커넥션 풀 관리를 할 필요는 없을 것이니까 Client 구현체 설정을 안 해주면 Default를 사용하게 된다. 근데 Default 생성 부분에서는 커넥션 풀에 관한 설정이 없다. 즉 요청마다 3way-handshake 과정을 거치고 이후에 요청을 받는 것이다. 커넥션 풀을 사용는 것이 중요한 케이스 MSA 환경에서 다른 서버의 API 값을 불러오는 상황.. 2024. 3. 25.
Spring 환경에서 외부 요청시 받아오는 데이터의 종류는 어떻게 확인 될 까? Spring 환경으로 개발하다보면 추상화가 너무 잘 되어 있어서 쉽게 개발을 하다가 이슈가 있으면 곤란한 경우가 있다. 이전에 공부를 했었을 때 '음.. 요청이 오면 컨버터가 알아서 MIME 타입 확인해서 알맞게 변환해서 처리를 해주네..!' 라고 생각하고 오래 지나서 이 부분까지 신경 쓸 필요가 없었기 때문에 알아서 처리해주는 것이 너무 당연시 되어버렸다. 그러다 보니 난감하지만..?? 재미있는 문제를 만났고 해결 과정에서 Spring이 HTTP 요청의 응답을 어떻게 처리하는지 확인을 해봤다. 문제상황 Python으로 돌아가는 API 서버에 요청을 하고 응답 값을 받아와서 처리하는 서버를 개발하고 있었다. 받아오는 부분은 OpenFeign을 사용해서 간단하게 받아 오려고 했다. 해당 서버는 JSON 데.. 2024. 3. 10.
Server Side Rendering 요즘 웹 서비스 구성들은 프론트엔드, 백엔드 둘로 나뉘어 있고 앞단과 뒷단이 나뉘어져 있는 게 당연하게 여겨지는 것 같다. 요즘 서비스 구성은 간략하게 그림과 같이 구성되어 있다. 사용자가 도메인에 접속하게 되면 웹 서버는 정적 페이지 (HTML, CSS, JavaScript)를 제공하고 해당 페이지에서 백엔드 서버와 통신을 하면서 비지니스 로직이 처리된다. 왜 이런 구조가 거의 표준화 된 듯 사용되는 것일까?? 그냥 하나의 서버로 모든 요청을 처리하면 효율적이지 않을까?? SSR(Server Side Rendering) 하나의 서버로 모든 요청을 처리하는 구조를 서버사이드 렌더링(SSR) 이라고 한다. 말 그대로 서버에서 우리가 보는 페이지를 렌더링 하는 구조이다. 위의 구조에서 보면 SSR은 정적 페.. 2024. 3. 3.