2025/09 6

Thread Pool과 DB Connection Pool의 상관 관계

Thread PoolThread Pool이란 미리 일정 개수의 Thread를 생성해서 작업이 발생하게 되면 Thread Pool에서 미리 생성된 Thread를 이용하여 작업을 처리하는 전략을 말한다. DB Connection Pool여러 사용자가 WAS로 요청을 보내어 DB에 그때마다 연결을 하고 응답을 주게 되면 DB 연결을 생성하는 것 자체에도 시간이 오래 걸리기 때문에 응답 속도가 느려질 수 있다. 따라서 여러개의 DB 연결을 미리 해놔서 DB Connection Pool에 저장을 해두고 요청이 오면 Connection Pool에 있는 DB 연결을 사용하도록 하기 위해 필요하다.Thread Pool과 DB Connection Pool의 상관 관계Thread Pool의 사이즈를 무작정 크게 늘려서 많..

BackEnd 2025.09.30

JPA 성능 최적화[Page와 Slice]

🚨 문제점코드 내에 88000개의 데이터에서 특정 키워드(시작일, 종료일, 지역코드...)의 정보를 이용해 검색을 하는 로직이 있다.이 코드는 테스트 환경에서 단일요청에 대해 검색결과를 문제없이 반환 하였다. 하지만, 500개의 요청을 한번에 주는 부하 테스트 할 경우 오류율이 40% 가까이 치솟는 것을 확인하였다. 따라서 이러한 문제의 원인이 무엇이고, 이를 해결하기 위한 방법에 대해서 알아보고자 한다.🤔 문제 원인기존 코드기존 코드는 findAll에 검색 조건과 함께 넘겨주는 값으로 Pageable 객체를 함께 넘겨줬다.var pageable = org.springframework.data.domain.PageRequest.of( Math.max(page - 1, 0), ..

에러 일기 2025.09.29

Cloudflare를 사용하여 EC2 웹서버에 HTTPS 적용하기(3)

개요 Cloudflare를 사용하여 EC2 웹서버에 HTTPS 적용하기(2)1. 도메인 구매 가비아에서 테스트용으로 'woohyeon.store'를 구입했다. 2. Cloudflare에 도메인 등록 도메인을 등록하고, 도메인에 대한 DNS관리에서 DNS 레코드를 수정해줘야 한다. 도메인과 EC2 서버를developerwoohyeon.tistory.com 앞서 HTTPS를 적용할때는 '가변'(Flexible)' 모드를 사용했기 때문에 클라이언트 -> Cloudflare 구간은 암호화가 되었지만,Cloudflare -> 원본 서버 로 요청은 암호화가 되지 않아 보안상 안전하지 않았다.이번에는 암호화 모드를 '전체'(Full)'로 변경하여 Cloudflre -> 원본 서버 구간까지 암호화를 적용해보고자 한다...

Spring Boot + Prometheus + Grafana 모니터링 시스템 구축

Prometheus와 Grafana를 사용하여 Spring Boot와 연동하는 방법으로 모니터링 시스템을 구축하고자 한다. 모니터링 시스템이 필요한 이유CPU, 메모리, GC, 스레드, DB 커넥션 같은 주요 지표에 대한 적절한 알림 경고를 통해 버그, 장애가 발생한 상황을 인지할 수 있다.이를 통해 장애에 대한 빠른 대처가 가능하고, 안정적인 운영을 통해 비즈니스 신뢰성을 확보할 수 있다. 사용된 기술1. Spring Boot ActuatorSpring Boot Actuator는 Spring Boot 애플리케이션의 모니터링 및 관리를 용이하게 해주는 여러 기능을 제공하는 라이브러리이다. Actuator는 다음과 같은 기능을 제공한다.애플리케이션 건강 상태 확인메트릭 수집 및 시각화애플레케이션 환경 ..

BackEnd/Spring Boot 2025.09.24

Jsoup을 활용한 웹 크롤링

크롤링이란크롤링(crawling)이란 웹 페이지의 소스를 그대로 가져와서 그 안에서 원하는 데이터를 추출해 내는 행위이고, 이러한 과정을 수행하는 소프트웨어를 크롤러(Crawler)라고 한다. 인터넷 상의 방대한 양의 데이터를 빠르고 효율적으로 수집할 수 있기 때문에 크롤링은 매우 유용하게 활용된다. 크롤링을 통해 정적 데이터를 수집할 경우 데이터를 한번만 수집해와도 되지만 동적 데이터(ex 뉴스,주식 시세, 날씨...)를 수집해야하는 경우에는 주기적으로 크롤러를 실행하여 데이터베이스를 업데이트 해줘야 한다. 관련 라이브러리Python에서는 Beautiful Soup, Selenium등의 라이브러리가 사용되고, Java에서는 Jsoup을 통해 크롤링을 구현할 수 있다. Jsoup을 활용한 웹 크롤..

BackEnd/Spring Boot 2025.09.19

대용량 데이터 수집을 병렬 처리로 최적화하기

프로젝트를 진행하면서 고용24에서 제공하는 "내일배움카드 교육" 정보를 OPEN API로 호출하는 방법 대신 DB에 저장하여 조회하는 방식으로 변경하기 위해 모든 데이터를 저장을 해봤다. 국민내일배움카드 훈련과정 API는 총 3가지로 분류된다.훈련과정 목록훈련과정,기관 정보훈련일정훈련과정의 총 개수는 88366개이다. 모든 훈련과정을 저장하기 위해 훈련과정 목록을 저장했고 모든 지역의 훈련과정을 순차적으로 검색했을때 총 1시간 37분이 걸렸다. 이렇게 저장된 훈련과정 ID를 사용하여 훈련과정,기관정보, 훈련일정을 검색하기 위해서는 하나의 훈련 ID당 두번의 API호출이 필요했다.즉, 상세정보를 저장하기 위한 총 조회 횟수는 16만번 이상이 된다. 88366개의 데이터를 순차적으로 돌면서 상세정보를 수집하..

BackEnd/Spring Boot 2025.09.15