목록Java/Spring (32)
오답노트

H2 자바 기반의 RDB이다. 프로젝트 초반에 테스트용 DB로 많이 활용되고 있다. 환경 설정 build.gradle 파일에서 다음과 같은 의존성이 추가되어 있는지 확인하자 (h2database:h2) 그리고 application.yaml에서 다음과 같이 설정하자. (application.properties로 되어있으면 yaml로 변경) 그리고 프로젝트를 Run 시키면 콘솔에 h2에 대한 정보가 나온다. 포커스된 주소를 복사한다. 그리고 아래 두 가지 방법으로 접속이 가능하다. Web Page http://localhost:8080/h2-console/ 에 접속하여 JDBC URL에 입력한다. Connect를 누르면 접속 할 수 있다. InteliJ 인텔리제이에서도 접속 할 수 있다. 우측 탭에서 Dat..
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; ..