본문 바로가기

spring

[Spring] Spring Data JPA OSIV와 지연 로딩 개요 Todo 어플리케이션에서 마감 시간 1시간 전인 Todo에 대해 사용자에게 알림을 발송하는 기능을 구현 했습니다. 매 분 0초 마다 스케줄러가 데이터베이스에서 1시간 뒤 종료되는 Todo를 조회하도록 했고, 반환된 Todo의 사용자에게 SSE 알림을 발송하도록 했습니다.   그런데 Controller에서 응답을 위해 Todo 엔티티를 DTO로 변환하는 과정에서 문제가 발생했습니다. 문제 발생 원인은 다음과 같습니다. OSIV 설정을 false로 지정했다.Todo에서 User 매핑을 설정할 때 fetchType.LAZY를 적용했다.@Transactional 범위를 넘어가는 Controller에서 Todo가 참조하는 User Proxy 객체에 접근 하니 LazyInitializationException.. 더보기
스프링 싱글톤 컨테이너의 의존관계 주입과 빈 생명주기 🚩목차 스프링 컨테이너와 스프링 빈스프링 컨테이너란 스프링 컨테이너란 스프링 빈(객체)을 싱글톤 패턴으로 생성하고 관리하는 저장 공간입니다. 객체를 싱글톤 패턴으로 관리한다는 말은 스프링 애플리케이션 내에서 해당 클래스 인스턴스를 단 하나만 생성해서 여러 컴포넌트에서 재활용 한다는 의미입니다. 스프링 컨테이너는 BeanFactory 인터페이스를 의미합니다. getBean()으로 저장소에 등록된 빈을 가져오거나, getType()으로 빈 타입을 확인하는 등 다양한 메소드를 제공합니다. 현대에는 BeanFactory를 구현해 다양한 기능을 추가 탑재한 ApplicationContext 인터페이스를 스프링 컨테이너로 주로 사용합니다. 빈 수동 등록 ApplicationContext는 저장소에 등록할 스프링 빈.. 더보기
Springboot로 Web Socket 상에서 STOMP 메시지 브로커 적용하기 개요 지난 포스팅에서는 특정 URL로 전달되는 웹소켓 요청을 처리하는 웹소켓 핸들러를 구현했습니다. 웹소켓 핸들러 내부에 컨커런트 해시맵 자료구조를 두고, 웹소켓 연결이 체결된 클라이언트의 세션을 관리했습니다. 하지만 이 방식은 다음의 단점이 존재했습니다. URL(채팅방) 마다 웹소켓 요청을 처리할 웹소켓 핸들러를 구현해 매핑해야 한다.메시지 인식에 문제가 없도록 클라이언트와 서버 간 전달할 데이터 형식을 정해야 한다.메시지를 전달하기 위한 웹소켓 세션 관리 로직(메시지 채널링)을 개발자가 직접 작성해야 한다.  이번 포스팅에서는 스프링이 제공하는 내장 심플 메시지 브로커를 사용해 1,2,3번 모두 해결해 보겠습니다. 그전에 Simple Message Broker는 STOMP 메시징 프로토콜을 사용하므로.. 더보기
Springboot 프로젝트에서 Jasypt 암호화로 yml 설정 파일 프로퍼티 관리하기 🚩목차개요 스프링부트 프로젝트 내 application.yml application.properties 등 프로젝트 설정 파일을 관리하다 보면, 외부에 노출되어서는 안되는 값들이 생기기 마련입니다. 설정 파일 프로퍼티를 노출하지 않는 방법은 다양하지만 이번 포스팅에서는 Jasypt 암호화를 다루고자 합니다. Jasypt 라이브러리Jasypt 란? Jasypt는 Java Simplified Encryption의 약자로, 암호화 지식 없이도 자바 애플리케이션에 암호화 기능을 쉽게 추가할 수 있도록 도와주는 라이브러리입니다. dependency를 추가하고 Configuration 클래스만 작성하면 간단히 사용할 수 있습니다. Jasypt 적용하기1. dependencyhttps://mvnrepository... 더보기
서블릿과 서블릿 컨테이너란 무엇이고 어떻게 동작할까? - 전통적인 웹 앱 부터 Spring MVC까지 (1) 개요 자바 스프링 웹 백엔드 개발자를 희망하는 사람이라면, 스프링 웹 프레임워크(Spring MVC)가 서블릿 기반으로 동작한다고 한 번쯤은 들어봤을 것이다. 그런데 서블릿이 뭘까? 스프링 MVC가 내장하고 있다는 톰캣 웹 서버는 또 무엇일까? 이번 시리즈에서는 다음과 같은 궁금증을 풀어보려 한다. 서블릿과 서블릿 컨테이너는 무엇일까? 왜 사용될까? (📍현재 포스팅) Spring MVC에서 서블릿 컨테이너의 동작 방식은 어떠할까? (🔗보러가기) 서블릿 컨테이너와 스프링 컨테이너의 차이점은 무엇일까? (🔗보러가기) 서블릿과 서블릿 컨테이너 우선, 전통적인 웹 애플리케이션에서의 서블릿과 서블릿 컨테이너에 대해 알아보도록 하자. (스프링 MVC 스펙 말고!) What Servlet은 자바 웹 애플리케이션에서 .. 더보기