BackEnd 105

Spring Data JPA Projection

Projection이란?Projection은 DB에서 엔티티 전체를 조회하는 대신 필요한 필드만 선택해서 조회하는 방식을 말한다. 스프링 공식 문서를 확인해보면 이런 예시가 나온다. Projections :: Spring Data JPASpring Data query methods usually return one or multiple instances of the aggregate root managed by the repository. However, it might sometimes be desirable to create projections based on certain attributes of those types. Spring Data allows modeling dedicdocs.sprin..

XSS 방어

XSS란?악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법으로, 이를 통해 쿠키나 세션 등 민감한 정보를 탈취할 수 있다.공격 과정악의적인 사용자가 사이트에 악성 스크립트를 저장일반 사용자가 웹 사이트에 접속스크립트 코드가 실행되고, 사용자의 정보가 악의적인 사용자에게 전달됨 1. Reflected XSS(반사형 XSS)Reflected XSS는 악의적인 사용자가 악성 스크립트가 담긴 URL을 만들어 일반 사용자에게 전달하는 경우 발생하고, URL 주소 뒤에 붙은 쿼리에 악성 스크립트를 작성하여 전달한다. 공격 시나리오 악성 스크립트가 담신 URL을 일반 사용자에게 전달일반 사용자가 URL을 클릭, 일반 사용자 브라우저에서 보안이 취약한 사이트로 요청을 전달서버에서 요청에 담긴 파라미터 값을 검..

BackEnd 2025.10.01

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

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

[Redis] 캐싱을 이용한 간단한 성능 개선 테스트(Apache JMeter)

Redis 캐싱을 이용해 조회성능 테스트를 진행했다. 캐싱이란? 캐싱은 자주 사용하는 데이터를 임시 저장소(캐시)에 보관하여, 데이터 조회 속도를 높이고 시스템 부하를 줄이는 기술이다. 캐싱을 사용하게 되면 메모리에 저장된 데이터를 반환 함으로써 디스크 기반의 데이터베이스보다 빠르게 데이터를 불러올 수 있다는 장점이 있다. 이러한 캐싱 기술은 웹 서비스의 성능을 높일 수 있다는 장점이 있지만 무작정 사용한다면 오히려 성능 저하나 오류가 발생할 수 있다. 캐싱 전략 선택시 고려사항데이터의 변경 빈도 : 캐싱에 대상이 되는 데이터가 가변성이 높다면 캐시 데이터가 최신 데이터를 반영하고 있지 않을 수 있다. 또한 잦은 캐시 무효화와 재생성으로 인해 부하가 증가할 수 있다.데이터를 한번 쓰고 여러번 읽는 경우..

BackEnd/Redis 2025.08.25

Spring Boot + Redis를 활용한 Refresh Token 기능 구현

Access Token만 사용할때의 문제점 Access Token은 사용자 인증과 인가에 직접 사용되므로 상대적으로 짧은 만료 기간(30분 ~ 1시간)을 갖는다.이렇게 짧은 유효기간을 유지하는 이유는 토큰을 탈취당했을 경우 피해를 최소화 할 수 있기 때문이다.만약 Access Token의 유효 기간을 길게 설정하게 되면 탈취된 토큰을 활용할 수 있는 시간도 늘어나게 된다. 이렇게 Access Token의 짧은 유효기간은 보안상 좋은점도 있지만, 사용자가 자주 로그인을 해야 하는 불편이 있다.만약 짧은 유효기간의 Access Token만을 사용하게 되면 사용자가 서비스를 사용중에 갑자기 로그아웃 되거나 오류 메시지를 보게 되어 곤란한 상황이 생길 수 있다. Refresh Token의 활용 이러한 문제를 ..

BackEnd/Redis 2025.08.24

CORS란? Spring Boot에서 CORS 정책 설정

Origin이란?Origin은 출처를 의미한다. URL에서 Protocol, Host, Port가 같으면 동일한 Origin임을 의미한다. SOP(Same Origin Policy)만약 Origin이 다른 두 애플리케이션이 자유롭게 소통할 수 있게되면 보안상 치명적인 문제가 생길 수 있다.XSS(크로스 사이트 스크립팅), CSRF(사이트 요청 위조) 공격에 취약해질 수 있다. 따라서 같은 Origin만 끼리만 리소스를 공유할 수 있는 정책이 필요하다. 이 정책을 SOP(Same Origin Policy)라고 부른다. 하지만 다른 Origin에서의 요청을 허용해줘야 하는 경우도 존재한다.예를 들면 프론트엔드 서버에서 백엔드 서버로 요청을 보낼 경우 이 요청을 막아버린다면, 프론트엔드와 백엔드간 통신이 불가..

BackEnd/Spring Boot 2025.08.22

Redis DB서버 구성

Replication(복제) Master 노드는 쓰기(Write)작업을 처리하고, 여러 Slave노드가 Master 노드의 데이터를 복제하여 읽기 작업을 처리한다.읽기 요청을 여러 Slave 노드에 분산하여 트래픽 분산을 통해 처리 성능 향상Master 노드에 장애가 발생해도 Slave 노드들이 데이터를 가지고 있으므로 장애 복구에 좋다.Master는 쓰기, Slave는 읽기 작업을 담당하여 Master 노드의 부하 감소수평적 확장 가능 Redis 클러스터 구성최소 3개의 노드를 가지고 각 노드는 Master와 Slave 로 구성되어있다.데이터를 여러 노드에 분산하여 저장함으로써 고가용성과 확장성을 제공여러 노드에 데이터를 무작위로 분산 저장하면, 클라이언트가 어떤 노드에 특정 키가 저장되어 있는지 ..

BackEnd/Redis 2025.08.22