본문 바로가기

Spring29

[Spring] MapStruct 적용 MapStruct란 Java 애플리케이션에서 객체 간 매핑을 편리하게 해주는 코드 생성 라이브러리로 DTO(Data Transfer Object)와 엔티티 간 변환 작업을 간편하게 하기 위해 사용한다. 1. MapStruct는 불필요한 리플렉션을 사용하지 않고 컴파일 타임에 매핑 코드를 생성하여 성능이 뛰어나다.2. 매핑을 위한 반복적인 코드를 줄이고, 간결하게 작성이 가능하다.이 때 Annotation processor를 이용해 자동화 된 매핑을 제공한다. (컴파일 타임에 Impl 클래스를 생성)Lombok을 사용하는 경우 Lombok의 getter/setter/builder를 이용하여 매핑을 하기 때문에 이 때는 Lombok 라이브러리 의존성이 먼저 추가되어 있어야 한다.Annotation proce.. 2025. 2. 28.
[Spring] WebSocket & STOMP 채팅 기능 구현하기 (2) [Spring] WebSocket & STOMP 채팅 기능 구현하기 (1)WebSocket & STOMP의 개념Polling, Long Polling, SSE(Server Sent Event)HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송할 수 있다.HThbb-devlog.tistory.com 저번에는 간단하게 웹소켓 통신을 할 수 있도록 구현해보았는데 이번 시간에는 스프링 시큐리티를 통해 인증된 사용자만 메시지를 전송할 수 있도록 설정해보도록 하겠다.현재 프로젝트는 세션-쿠키 방식으로 로그인한 사용자를 확인한다. 1. STOMP와 같은 메시징 시스템에서 메시지의 인증 및 권한 확인을 할 수 있도록 하는 의존성 추가imple.. 2025. 2. 25.
[Spring] WebSocket & STOMP 채팅 기능 구현하기 (1) WebSocket & STOMP의 개념Polling, Long Polling, SSE(Server Sent Event)HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송할 수 있다.HTML, TEXT이미지, 음성,hbb-devlog.tistory.com 저번 글에서 WebSocket, STOMP의 개념에 대해서 간략히 살펴보았다.이번 글에서는 해당 개념을 토대로 채팅 기능을 간단하게 구현해보려고 한다. 1. 스프링 부트는 공식적으로 WebSocket, STOMP를 지원하는데 이를 사용하기 위해 의존성을 추가한다.implementation 'org.springframework.boot:spring-boot-starter-webso.. 2025. 2. 25.
[Spring] 스프링에서 직렬화, 역직렬화 테스트를 작성하는데 HTTP Body 정보가 DTO에 매핑이 되지 않는 문제가 발생하였다.찾아보니 JSON이 DTO로 매핑되는 과정에서 기본 생성자가 없기 때문에 발생하는 문제였다.따라서 스프링이 직렬화, 역직렬화를 어떻게 하는지 자세히 알아보려고 한다. - 문제의 코드@Getter@Builder@AllArgsConstructorpublic static class InviteMemberDTO { @NotBlank String email;}직렬화, 역직렬화직렬화객체를 외부 저장이나 전송 가능한 형태(Byte)로 변환JSON, XML 등으로 변환자바에선 ObjectMapper.writeValueAsString() 사용하여 변환 가능하다.역직렬화외부 데이터(Byte)를 프로그램 내에서 사용 가능한 객체로 변환.. 2025. 1. 25.
[Spring] SSE 구현 Polling, Long Polling, SSE(Server Sent Event)HTTP/1.1 200Content-Type: text/event-stream;charset=UTF-8Transfer-Encoding: chunked​ HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송hbb-devlog.tistory.com 저번에는 SSE가 무엇인지 간단히 살펴보았는데, 이번에는 SSE를 간단히 구현해보도록 하겠다. 1. 클라이언트는 구독을 위한 요청 전송클라이언트는 EventSource를 통해 SSE 연결 요청const eventSource = new EventSource(''); 2. 서버는 구독 요청에 대해 응답을 전송스프링.. 2025. 1. 15.
[Spring] API 및 예외 응답 통일 REST API 개발에서 클라이언트가 데이터를 처리하려면 가장 먼저 서버의 응답 형식을 파악해야 한다.그런데 API마다 응답 형식이 다르다면 오류 발생 시 응답에 포함되는 정보가 달라 혼란이 생기고, 유지보수가 어려워진다.따라서 이번에는 API를 일관되게 응답할 수 있도록 구현할 것이다.API 응답 형태는 다음과 같다.{ isSuccess : Boolean code : String message : String data : { // 응답하려는 실제 데이터 }} 위와 같은 형태로 응답할 수 있도록 ApiResponse 클래스를 구현한다.여기서 실제 응답인 data의 경우 null 일 시 클라이언트에게 응답하지 않도록 @JsonInclude(JsonInclude.Include.NON_NULL)을 붙여주었.. 2025. 1. 11.
[Spring] OAuth2.0을 이용한 네이버, 구글 소셜 로그인 구현 OAuth2.0이란? OAuth2.0 개념기존에 로그인 방식은 사이트마다 별도로 가입을 해 사용자가 많은 비밀번호를 사용해야 하며, 서비스 제공자 입장에서는 개인 정보를 직접 관리해야하므로 부담이 있었다.OAuth(Open Authorization)hbb-devlog.tistory.com 클라이언트 입장에서 소셜로그인 기능 구현 시 필요한 oauth2-client 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' 위 의존성을 추가 후 네이버 로그인 시 스프링 시큐리티 필터 흐름을 간략하게 살펴보겠다.사용자가 서비스에서 oauth2 로그인 요청 (/oauth2/authorization/naver)Oauth2Au.. 2025. 1. 2.
[Spring] 외부 설정, @Profile 외부 설정하나의 애플리케이션에서 여러 다른 환경을 사용해야 할 때가 있다. (개발용 DB, 운영용 DB…)즉 환경에 따라 설정값이 달라지게 되는데, 각 환경에 맞게 설정값을 포함하고 jar로 빌드하여 배포하게 되면 빌드를 여러 번 진행해야 하고, 환경마다 빌드의 결과물이 달라 유연성이 떨어진다는 문제가 있다.따라서 빌드를 한 번만 하고 실행 시점에 각 환경에 맞는 외부 설정 값을 주입한다.이러한 외부 설정 방법은 4가지 종류가 존재한다.OS 환경 변수 주입OS에서 지원하는 외부 설정 방법으로, OS 환경 변수란 해당 OS를 사용하는 모든 프로세스에서 읽을 수 있는 설정 값으로 사용 범위가 가장 넓다.터미널에서 맥의 경우 printenv 명령어를 사용하여 확인할 수 있다.애플리케이션에서는 아래와 같은 방법.. 2024. 12. 28.
[Spring] Auto Configuration 스프링 부트를 사용하면 DataSource, DriverManager 등 빈 등록을 하지 않아도 사용이 가능하다.이는 스프링 부트가 자동 구성 (Auto Configuration)이라는 기능을 지원하기 때문인데, 이는 자주 사용하는 빈들을 자동으로 등록해준다.따라서 반복적이고 복잡한 빈 등록, 설정을 최소화시켜 준다.그렇다면 Auto Configuration이 어떻게 동작하는지 알아보도록 하겠다.Auto Configuration 동작 방식@SpringBootApplicationpublic class BootApplication { public static void main(String[] args) { SpringApplication.run(BootApplication.class, args); }}먼저.. 2024. 12. 28.