목록Java/Spring (31)
오답노트
JUnit JUnit은 Java 소스를 모듈 단위로 테스트할 수 있는 도구다. 이는 스프링 환경에 이미 Import 되어 있으며 API도 테스트 할 수 있다. 실습 import com.example.springcalculator.component.Calculator; import com.example.springcalculator.component.DollarCalc; import com.example.springcalculator.component.MarketApi; import com.example.springcalculator.dto.Req; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson...
import com.example.server.dto.Req; import com.example.server.dto.User; import lombok.extern.slf4j.Slf4j; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; import java.nio.c..
Server to Server 지금까지는 서버를 개발하여 클라이언트의 요청을 처리하기만 했다. 하지만 우리도 누군가의 클라이언트가 되어 요청을 보내고 응답을 받아와야 할 경우가 있다. GET import com.example.client.dto.UserResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import j..
Async 비동기 처리는 thread를 통해 다른 작업을 처리하게 만들고 기존 로직은 그대로 실행시키게 하는 것이다. @SpringBootApplication @EnableAsync public class AsyncApplication { public static void main(String[] args) { SpringApplication.run(AsyncApplication.class, args); } } 메인 클래스에서 EnableAsync Annotation을 사용하요 비동기를 사용하는 것을 명시한다. import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springfr..
Interceptor Intercepter는 FIlter와 매우 유사한 형태로 존재하지만, 차이점은 Spring Context에 등록된다는 점이다. AOP와 유사한 기능을 제공 할 수 있고, 주로 인증 단계를 처리하거나, Logging을 하는데 사용한다. 이를 전/후처리 함으로써 Service business logic과 분리 시킨다. import com.example.interceptor.annotation.Auth; import com.example.interceptor.exception.AuthException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import l..
Filter 웹 어플리케이션에서 관리되는 영역으로써 Spring Boot Framework에서 Client로 부터 오는 요청/응답에 대해서 최초/최종 단계의 위치에 존재하며, 이를 통해서 요청/응답의 정보를 변경하거나, Spring에 의해서 데이터가 변환되기 전의 순수한 Client의 요청/응답 값을 확인 할 수 있다. 유일하게 ServletRequest, ServletResponse의 객체를 변환 할 수 있다. 주로 스프링에서는 요청과.응답의 logging 으로 활용하거나, 인증과 관련된 logic들을 해당 filter에서 처리한다. 이를 선/후 처리 함으로써, Service business logic과 분리 시킨다. @SpringBootApplication @ServletComponentScan pu..
Spring은 엔터프라이즈급 프레임워크이기 때문에 수많은 API가 있을 수 있다. 이에 따른 예외처리를 하기 위해 Spring에서는 전역으로 Exception을 발생시킬 수 있는데, 이를 이용하여 사용자 친화적인 Validation을 만들어 보자 @ExceptionHandler(value = MethodArgumentNotValidException.class) public ResponseEntity methodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest httpServletRequest){ List errorList = new ArrayList(); BindingResult bindingResult = e...
Exception 웹에서 예외처리를 낼 수 있는 경우가 적다. 결국에는 상태 코드로 내려줘야하기 때문이다. Spring에서는 ControllerAdvice 와 ExceptionHandler를 통해 예외처리를 진행한다. Global Exception import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bi..
Validation 1. 검증해야 할 값이 많은 경우 코드 길이가 길어진다. 2. 구현에 따라서 달라 질 수 있지만 Service Logic과 분리가 필요하다. 3. 흩어져 있는 경우 어디에서 검증을 하는지 알기 어려우며, 재사용의 한계가 있다. 4. 구현에 따라 달라 질 수 있지만, 검증 Logic이 변경되는 경우 테스트 코드 등 참조하는 클래스에서 Logic이 변경되어야 하는 부분이 발생 할 수 있다. 사용법 import com.example.validation.dto.User; import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; ..
AOP (Aspect Oriented Programming) 관점지향 프로그램으로 스프링 어플리케이션은 대부분 특별한 경우를 제외하고는 MVC 웹 어플리케이션에서는 Web Layer, Business Layer, Data Layer로 정의한다. Web Layer는 REST API를 제공하며, Client 중심의 로직을 적용한다. Business Layer는 내부 정책에 따른 logic을 개발하며, 주로 해당 부분을 개발한다. Data Layer는 데이터 베이스 및 외부와의 연동 처리를 담당한다. 주요 Annotation 사용법 1. 인터페이스 생성 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import j..