우선 Client(보내는 입장)와 받는 입장인 Server 를 이용할 것이기 때문에 IntelliJ를 두 개를 킨 후 각각의 프로젝트를 만든다. Client port는 8080, Server port는 9090으로 진행한다. get API를 사용할 때 어떤 서버가 어떠한 데이터를 제공함. JSON의 표준 규격을 보고 클래스를 생성한다. 클래스를 작성 후 RestTemplate의 통해서 get, post 등으로 데이터를 주고받음. get같은 경우 이 예시는 주소를 호출하기만 하면 되기때문에 문제가 되지 않음. post로 보낼 경우 RequestBody를 붙여서 보내야 하기 때문에 이후에 알아보기로 하자. Client -> Server로 요청해서 응답을 받는 형태 Client - ApiController.j..
개발공부
비동기처리 특정 로직을 실행할 때 기다리지 않고 나머지 코드를 먼저 실행하는 것을 비동기처리라고 함. 아래에서 @EnableAsync 어노테이션과 @Async 어노테이션을 이용하여 비동기처리를 해보려 한다. - AsyncApplication.java package com.example.async; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication @EnableAsync public class ..

Interceptor Interceptor란 Filter와 매우 유사한 형태로 존재하지만, 차이점은 Spring Cotext에 등록된다. AOP와 유사한 기능을 제공할 수 있으며, 주로 인증 단계를 처리하거나 Logging를 하는 데에 사용한다. 이를 선/후처리 함으로써, Service business logic과 분리시킨다. - Auth.java package com.example.interceptor.annotation; import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Auth { } - Mv..

Filter Filter란 Web Applicaiton 에서 관리되는 영역으로써 Spring Boot Framework에서 Client로 부터 오는 요청/응답에 대해서 최초/최종 단계의 위치에 존재하며, 이를 통해서 요청/응답의 정보를 변경하거나, Spring에 의해서 데이터가 변환되기 전의 순수한 Client의 요청/응답 값을 확인할 수 있따. 유일하게 ServletRequest, ServletResponse의 객체를 변환할 수 있따. 주로 Spring Framework에서는 request / response의 Logging 용도로 활용하거나 인증과 관련된 Logic들을 해당 Filter에서 처리한다. life cycle에 돌 떄 Filter를 먼저 거치게 된다. - ApiController.java ..
Exception 처리에 대해서 Web Application의 입장에서 바라보았을 때, 에러가 났을 때 내려줄 수 있는 방법은 많지 않음. 1. 에러 페이지 2. 4XX Error or 5XX Error 3. Client가 200외에 처리를 하지 못 할 때는 200을 내려주고 별도의 Error message 전달 @ControllerAdvice - Global 예외처리 및 특정 package / Contorller 예외처리 @ExceptionHandler - 특정 Controller의 예외처리 - GlobalControllAdvice.java package com.example.advice; import org.springframework.http.HttpStatus; import org.springfr..
Custom Validation 1. AssertTure / False와 같은 method 지정을 통해서 Custom Logic 적용 가능 2. ConstraintValidator를 적용하여 재사용이 가능한 Custom Logic 적용 가능 @AssertTrue 를 통한 날짜 Validation - User.java @AssertTrue public boolean reqYearMonthValidation(){ try{ LocalDate localDate = LocalDate.parse(getReqYearMonth()+"01", DateTimeFormatter.ofPattern("yyyyMMdd")); }catch (Exception e){ return false; } return true; } Talen..

Validation? Validation 이란 프로그래밍에 있어서 가장 필요한 부분. 특히 Java에서는 null 값에 대해 접근하려고 할 때 null pointer exeception이 발샘함으로 이러한 부분을 방지하기 위해서 미리 검증을 하는 과정을 Validation이라고 함. 단순하게는 아래와 같은 코드들이다. Validation 검증해야 할 값이 많은 경우 코드의 길이가 길어진다. 구현에 따라서 달라질 수 있지만 Service Logic과의 분리가 필요하다. 흩어져있는 경우 어디에서 검증을 하는지 알기 어려우며, 재사용의 한계가 있다. 구현에 따라 달라질 수 있지만 검증 Logic이 변경되는 경우 테스트 코드 등 참조하는 클래스에서 Logic이 변경되어야 하는 부분이 발생할 수 있다. - Api..