BackEnd/Spring Boot 27

Spring Boot 예외 처리 전략 [Custom Exception, ExecptionHandler]

Custom Exception커스텀 예외란 자바의 기본 예외(RuntimeException, IllegalArgumentException 등)를 상속받아 비즈니스 로직에 맞는 의미 있는 예외 클래스를 직접 정의하는 것을 말한다. 자바에서 제공하는 기본 예외를 이용하여 try-catch문을 통해 예외 처리를 해줘도 오류 상황을 면할수는 있지만, 어떤 비즈니스 로직에서 어떤 원인으로 예외가 발생했는지 명확하게 표현하기 힘들다. 기본 예외를 서비스 계층에서 던지게 구현을 했다면 컨트롤러에서 try-catch문을 통해 모두 예외 상황에 맞는 HTTP 상태코드를 지정해줘야 한다.@RestController@RequiredArgsConstructor@RequestMapping("/api/users")public c..

BackEnd/Spring Boot 2025.10.22

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..

BackEnd/Spring Boot 2025.10.19

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

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

WebSocket + STOMP로 채팅 구현하기

STOMP란?Simple Text Oriented Messaging Protocol의 약자로 메시지를 전송하기 위한 프로토콜이다.메시지 브로커와 publisher - subscriber 방식을 사용하고, 메시지 브로커는 발행자가 전송하는 메시지를 구독자들에게 전송한다. 왜 STOMP를 사용 했는가?Spring WebSocket은 단순히 양방향 연결 채널일 뿐, 메시지를 어디로, 누가, 무엇을 보내는지 구조적으로 정의되어있지 않다. 하지만 STOMP를 WebSocket위에서 동작시키면 채널 구독, 메시지 목적지(채팅방) 구분, 구독 관리 등 실시간 채팅에 맞는 다양한 기능을 사용 가능하다. 따라서 이번에 구현한 채팅은 WebSocket 위에서 STOMP를 사용하여 채팅방 생성, 채팅방 구독, 전송, 읽..

BackEnd/Spring Boot 2025.05.30

Spring Webocket을 이용한 실시간 채팅 구현(+ JWT 인증)

GitHub - yangwoohyeon/OAuth2_9oormthonUNIVContribute to yangwoohyeon/OAuth2_9oormthonUNIV development by creating an account on GitHub.github.com WebSocket이란?서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술로써, sns, 화상 채팅, 증권 거래 등에서 널리 사용되고 있다. 왜 WebSocket을 사용하는가? HTTP를 사용하여 실시간 양방향 통신을 구현하기 위해서는 다음과 같은 방법을 사용할 수 있다. 백엔드에서 변경 사항이 생길 때마다 프론트엔드에게 응답을 보내주는 방식 : Server-Sent-Eve..

BackEnd/Spring Boot 2025.05.14

@Controller와 @RestController의 차이점

스프링 MVC에서 빠질 수 없는 애노테이션이 바로 @Controller이다. @Controller는 주로 HTML과 같은 뷰를 렌더링 할때 사용된다. @Controllerpublic class MyController { @RequestMapping("/greeting") public String greeting(Model model) { model.addAttribute("message", "Hello, World!"); return "greeting"; // greeting.jsp 또는 greeting.html과 같이 뷰를 찾아 렌더링 } }  하지만 뷰를 렌더링하는것 이 아닌 Data(또는 객체)를 반환해야 하는 경우도 존재한다. 이럴때는 @Respons..

BackEnd/Spring Boot 2025.02.23

Spring 트랜잭션[@Transactional]

스프링에서 트랜잭션을 관리할 때 @Transactional이 거의 필수적으로 사용된다. 따라서 @Transactional에 대해 정확히 알고 사용하는 것이 매우 중요하다! @Transaction은 사용하면 핵심 비즈니스 로직과 공통기능 (로깅, 트랜잭션, 보안 등)을 분리하여 코드 재사용성과 유지보수성을 높이는 AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)를 활용하여 트랜잭션을 자동으로 관리해주는 선언적 트랜잭션 관리 방법이다. @Servicepublic class OrderService { private final EntityManager entityManager; public OrderService(EntityManager entityManager) {..

BackEnd/Spring Boot 2025.02.12