#SPRING

스프링 프레임워크와 관련된 글.

@Configuration은 어떻게 빈을 등록하고, 싱글톤으로 관리할까? cover image
#spring

@Configuration은 어떻게 빈을 등록하고, 싱글톤으로 관리할까?

어노테이션을 사용해서 빈을 생성하는 방법은 크게 두 가지가 있다. 과 을 사용해 빈 설정 정보 클래스 생성 와 이를 상속한 , 어노테이션등을 사용해 자바 컴포넌트 생성 은 어떻게 빈을 등록하고, 싱글톤으로 관리하는지 알아보자! @Configurat…

ExceptionHandler와 ControllerAdvice를 알아보자 cover image
#spring

ExceptionHandler와 ControllerAdvice를 알아보자

콘솔 애플리케이션을 구현할 때, 우리는 예외를 핸들링하기 위해 try / catch문을 사용했습니다. 그러나 웹 애플리케이션에서는 예외 처리 방법이 조금 다릅니다. 이번 글에서는 스프링을 사용한 웹 애플리케이션 적용할 수 있는 예외 처리 방법인 와 …

스프링 이벤트 적용기 cover image
#spring

스프링 이벤트 적용기

상황 스모디 프로젝트를 하면서 랭킹 기능을 도입하기로 했습니다. 랭킹 기능은 유저가 활동을 했을 때, 활동에 따라 랭킹 점수를 부여해야 합니다. 저희 서비스는 챌린지에 도전하고 매일 챌린지에 해당하는 활동을 인증하여 총 3회 인증 시 성공하는 사이클…

Spring에서 Server-Sent-Events 구현하기 cover image
#sse

Spring에서 Server-Sent-Events 구현하기

웹 애플리케이션을 개발하다보면 클라이언트의 요청이 없어도 서버에서 데이터를 전달해줘야 하는 경우가 있습니다. 대표적으로 뉴스피드나 댓글 알림처럼 실시간으로 서버의 변경사항을 웹 브라우저에 갱신해줘야 하는 경우를 예로 들 수 있을 것 같습니다. 제가 …

웹 소켓에 대해 알아보자! - 테스트 편 cover image
#websocket

웹 소켓에 대해 알아보자! - 테스트 편

이 글은 웹 소켓으로 만든 채팅방을 어떻게 테스트할지 고민하는 독자를 위해 작성되었다. 웹 소켓은 어떻게 테스트하면 좋을까? Babble 팀의 데모데이 날 부스에서 질문을 받았다. “웹 소켓은 테스트를 어떻게 해야 할 지 감이 안 잡히는데 어떻게 구…

Spring Data Elasticsearch 설정 및 검색 기능 구현 cover image
#database

Spring Data Elasticsearch 설정 및 검색 기능 구현

실습 Repository에서 코드를 확인할 수 있습니다. 1. Elasticsearch Elasticsearch는 Apache Lucene 기반의 Java 오픈소스 분산형 RESTful 검색 및 분석 엔진입니다. 방대한 양의 데이터에 대해 실시간으로…

Pageable을 이용한 Pagination을 처리하는 다양한 방법 cover image
#spring

Pageable을 이용한 Pagination을 처리하는 다양한 방법

Spring Data JPA에서 Pageable 를 활용한 Pagination 의 개념과 방법을 알아본다. Pageable을 활용한 Pagination이 무엇인가? 많은 게시판은 모든 글을 한 번에 보여주지 않고 페이지를 나눠 쪽수별로 제공한다. 정…

JPA와 연관관계 cover image
#spring

JPA와 연관관계

JPA란? RDBMS를 사용하던 우리는 java를 이용한 객체지향 프로그래밍을 통해 객체 간 관계가 더욱 복잡해질수록 패러다임 불일치의 문제를 마주하게 된다. 상속과 참조가 쉬워 객체 간 관계를 쉽게 지정할 수 있는 것과 다르게 RDBMS의 테이블에…

JPA Pagination, 그리고 N + 1 문제 cover image
#spring

JPA Pagination, 그리고 N + 1 문제

1. Pagination 게시판 기능을 제공하는 웹 어플리케이션에 접속하여 게시물 목록을 요청하는 경우를 상상해봅시다. DB에 저장되어 있는 게시물은 수백 만개에 육박할 수도 있습니다. 모든 게시물 목록을 조회해 화면에 렌더링하는 경우, 클라이언트가…

RestTemplate과 WebClient cover image
#spring

RestTemplate과 WebClient

이 글은 자바에서 HTTP 요청을 써봤거나 써보려고 하는 독자를 대상을 작성하였습니다. 스프링 어플리케이션에서 HTTP 요청할 때 사용하는 방법으로 RestTemplate과 WebClient가 있다. 스프링 5.0 이전까지는 클라이언트에서 HTTP …

DispatcherServlet - Part 2 cover image
#spring

DispatcherServlet - Part 2

지난 1편에서는 DispatcherServlet 정의, 설정 방법, 동작 흐름에 대해 알아봤다. 이번 2편에서는 DispatcherServlet의 동작 원리를 코드와 함께 살펴보자. 아직 1편을 읽지 않았다면, 아래 글을 먼저 읽고 오자. Dispa…

AOP 입문자를 위한 개념 이해하기 cover image
#spring

AOP 입문자를 위한 개념 이해하기

이 글은 AOP 개념이 생소한 입문자들을 위한 포스팅입니다. 1. OOP의 한계 image 객체지향 프로그래밍은 어플리케이션을 설계할 때 책임과 관심사에 따라 클래스를 분리합니다. 클래스가 단일 책임을 가지도록 분리함으로써 각 모듈의 응집도는 높아지…

bean wiring cover image
#spring

bean wiring

스프링을 처음 공부하는 사람을 대상으로 작성한 글입니다. 빈 와이어링(wiring) 이란? 스프링을 사용하는 애플리케이션에서 각 객체가 필요한 다른 객체를 직접 찾거나 생성할 필요가 없다. 컨테이너가 협업할 객체에 대한 정보를 주기 때문이다. 애플리…

DispatcherServlet - Part 1 cover image
#spring

DispatcherServlet - Part 1

DispatcherServlet에 대해 1, 2편으로 나누어 설명한다. 1편에서는 DispatcherServlet이 무엇인지 알아보고, 이것을 설정하는 방법과 동작 흐름을 살펴본다. DispatcherServlet? DispatcherServlet은…

@RequestMapping cover image
#spring

@RequestMapping

우리는 client에서 오는 요청을 처리하기 위한 api url을 매핑할 때 Spring의 이라는 어노테이션을 사용한다. Spring은 사용자의 편리를 위해 RequestMapping을 http에서 지원하는 4가지 method인 , , , 과 추가적…

Spring ArgumentResolver와 Interceptor cover image
#spring

Spring ArgumentResolver와 Interceptor

이번 글에서는 ArgumentResolver와 Interceptor를 사용할 때 spring이 요청을 처리하는 순서를 알아보고자 한다. 그 전에 ArgumentResolver는 무엇인지, Interceptor는 무엇인지 알아보도록 하자. Spring…

DTO vs VO vs Entity cover image
#spring

DTO vs VO vs Entity

DTO와 VO는 분명히 다른 개념이다. 그런데, 같은 개념으로 생각해서 사용하는 경우가 많다. 왜일까? ⌜Core J2EE Patterns: Best Practices and Design Strategies⌟ 책의 초판에서는 데이터 전송용 객체를 로…

@RequestBody vs @ModelAttribute cover image
#spring

@RequestBody vs @ModelAttribute

1. @RequestBody와 @ModelAttribute Controller.java @RequestBody와 @ModelAttribute는 클라이언트 측에서 보낸 데이터를 Java 코드에서 사용할 수 있는 오브젝트로 만들어주는 공통점이 있습니다.…

ExceptionHandler 와 ControllerAdvice cover image
#java

ExceptionHandler 와 ControllerAdvice

@ExceptionHandler @ExceptionHandler 는 @Controller , @RestController 가 적용된 Bean 에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능이다. @ExceptionHandler 에 설정…

Transactional 어노테이션 cover image
#spring

Transactional 어노테이션

@Transactional 스프링은 어노테이션을 이용한 선언적 트랜잭션 처리를 지원한다. 이번 글에서는 아래 내용에 대해 알아볼 것이다. 트랜잭션이 무엇인지 스프링에서 을 이용하여 트랜잭션 처리를 하는 방법 테스트 환경에서의 동작 트랜잭션(Tr…

DTO의 사용 범위에 대하여 cover image
#java

DTO의 사용 범위에 대하여

1. DTO란? DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체(Java Beans)입니다. 간략하게 DTO의 구체적인 용례 및 필요성을 MVC 패턴을 통해 알아볼까요? 🚀 1.1. MVC 패턴 MVC 패턴…

JPA에서 Fetch Join과 Pagination을 함께 사용할때 주의하자 cover image
#spring

JPA에서 Fetch Join과 Pagination을 함께 사용할때 주의하자

결론부터 말하면, One에서 Many를 fetch join 해야하는 경우 limit과 같은 절(Pagination을 위한)을 포함할 시 원하는 대로 결과나 나오지 않는다. 예제코드(+ 테스트코드)는 Github에서 확인할 수 있다. LIMIT 그리고…

ETag with Spring cover image
#spring

ETag with Spring

ETag란 무엇일까? ETag 또는 Entity Tag는 월드 와이드 웹 프로토콜인 HTTP의 일부다. 그것은 HTTP가 웹 캐시 유효성 검사를 위해 제공하는 몇 가지 메커니즘 중 하나로, 클라이언트가 조건부 요청을 할 수 있게 한다. … ETag는…

Mockito와 BDDMockito는 뭐가 다를까? cover image
#spring

Mockito와 BDDMockito는 뭐가 다를까?

해당 게시글은 JUnit5.x를 기준으로 작성되었습니다. 우아한테크코스 레벨2 미션 중에 의문이 생긴 적이 있었다. 테스트 코드를 작성하려는데 어떤 부분에서는 mock 객체를 을 통해 사용하고, 어떤 부분에서는 을 통해 사용하는 것이었다. impor…

Spring Boot에서 properties 값 주입받기 cover image
#spring

Spring Boot에서 properties 값 주입받기

개요 Spring Boot를 이용해서 어플리케이션을 만들다 보면 외부에서 특정 값들을 주입받아야 하는 경우가 있다. 예를 들면 AWS의 특정 컴포넌트를 사용하기 위한 secret key가 될 수도 있고 외부 API를 사용하기 위한 API key가 될…

Spring Boot에서 DTO 검증하기 cover image
#spring

Spring Boot에서 DTO 검증하기

검증이 왜 필요할까? 나이를 입력해야 하는 데 이름을 입력한다면? 전화번호를 입력해야 하는 데 이메일을 입력한다면? 데이터를 저장할 때 당신은 아무 값이나 저장할 것인가? 아니다. 입력 값이 유효한 값인지 확인을 하고 저장할 것이다. 그래서 제목에서…

Spring Boot에서 Spring Bean 초기화 과정에 대해 알아보자. cover image
#spring

Spring Boot에서 Spring Bean 초기화 과정에 대해 알아보자.

Spring Boot를 사용하면 자연스럽게 Spring Bean을 직접 생성하고 사용할 일이 많아진다. 따라서 우리는 Spring Bean을 생성하는 방법은 당연히 알고 있어야 하고 더 나아가 어떠한 방식으로 등록되는지 알고 있어야 한다. 이 글에서…

API 문서 자동화 - Swagger 팔아보겠습니다 cover image
#spring

API 문서 자동화 - Swagger 팔아보겠습니다

Spring REST Docs 같이 테스트 코드 작성하면서 문서화하는게 지겹다고요? 문서 화면을 알록달록 이쁘게 만들고 싶다고요? 간단한 코드로 컬러풀한 문서를 만든다!! Swagger가 있습니다. Swagger은 작성하기 어렵고 심지어 테스트까지 …

MockMvc VS RestAssured cover image
#spring

MockMvc VS RestAssured

MockMvc와 RestAssured는 우리가 애플리케이션을 개발할 때 테스트를 편리하게 할 수 있게 해주는 유용한 테스트 도구이다. 이 두 가지 도구는 비슷하면서도 다르다. 상황에 맞게 적절한 테스트 도구를 활용할 수 있도록 눈에 띄는 몇 가지 차…

API 문서 자동화 - Spring REST Docs 팔아보겠습니다 cover image
#spring

API 문서 자동화 - Spring REST Docs 팔아보겠습니다

프로덕션 코드와 분리하여 문서 자동화를 하고 싶다고요? 신뢰도 높은 API 문서를 만들고 싶다고요? 테스트가 성공해야 문서를 만들 수 있다!! Spring REST Docs가 있습니다. API 문서를 자동화 도구로는 대표적으로 Spring REST …

로그 전략을 통해 메시지를 남기자 cover image
#spring

로그 전략을 통해 메시지를 남기자

웹이나 앱 어플리케이션을 개발하다 보면 어플리케이션의 상태를 확인하기 위해 로그를 남긴다. 그럼 로그는 왜 남길까? 보통 로그는 개발의 원활함을 위해, 에러 등을 확인하고 해결하기 위해, 보안의 의미로, 또는 마케팅 전략을 위해 남기기도 한다. 이런…

왜 Constructor Injection을 사용해야 하는가? cover image
#spring

왜 Constructor Injection을 사용해야 하는가?

Spring의 DI, 그리고 IoC 글의 본문을 들어가기 이전에 글에서 주로 언급하게 될 DI의 개념에 대해 짚어보고 가겠다. DI는 Dependency Injection, 말 그대로 의존성 주입을 말한다. 이는 객체 간의 의존성을 외부에서 주입하여…