목록Java (53)
오답노트
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..
DI (Dependenct Injection) 장점 의존성으로 부터 격리시켜 코드 테스트에 용이하다. DI를 통하여, 불가능한 상황을 Mock와 같은 기술을 통해, 안정적으로 테스트가 가능하다. 코드를 확장하거나 변경할 떄 영향을 최소화한다. (추상화) 순환참조를 막을 수 있다. public class Main { public static void main(String[] args) { String url = "www.naver.com/books/it?page=10&size=20&name=spring-boot"; Encoder encoder = new Encoder(new Base64Encoder()); String result = encoder.Encoder(url); System.out.println..
Object Mapper Object Mapper는 이전 Request에서 Object에서 text로 바꿀때 혹은 그 반대일 때 Object Mapper가 내부적으로 변환해주었다. 이를 실제로 활용해보자. Object to Text Object에서 Text로 변환할 때, Object Mapper는 get~ 메소드를 활용한다. 이때 get이라는 단어가 들어간 모든 메소드를 참조하기 때문에, 클래스 내부에서 get이 들어가는 메소드를 만들지 않도록 주의하자. var objectMapper = new ObjectMapper(); // object -> text 일 때, get method를 활용한다. //Object -> Text Json User user = new User("steve",10,"010-99..
Request 요청에 대한 응답으로 응답 코드와 함께 body에 데이터를 보낼 수 있다. Text, Object, JSON 응답 import com.example.response.dto.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api") public class ApiController { // text @GetMapping("/text") public String text(@RequestParam String account)..
PUT 데이터를 입력할 때 사용한다. 멱등성은 유지 되지만 안정성은 보장 되지 않는다. import com.example.put.dto.PostRequestDto; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class PutApiCo..
JSON Post 방식은 Body를 통해 데이터를 주고 받는다. 이때 가장 잘 사용하는 포맷이 JSON이다. JSON은 대괄호로 depth를 나누고 key 와 value로 이루어져 있다. string : value number : value boolean : value {} object : value array : value { "phon_number : "010-0000-0000", "age" : 10, "isAgree" : false, "account" : { "email" : "asd@gmail.com", "password":1234 } "array" [ { "account" : "asdf", "password" : 1234 }, { "account" : "asdf", "password" : 123..
Controller 생성 @RestController @RequestMapping("/api/get") public class GetApiController {} RestController와 RequestMapping Annotation을 사용하여 컨트롤러 클래스를 생성한다. GetMapping 과 RequestMapping GetMapping path 를 지정하여 해당 주소를 GET방식으로 요청할 때 실행할 API를 구현 할 수 있다. @GetMapping(path="/hello") public String getHello(){ return "get Hello"; } RequestMapping GetMapping 보다는 전통적인 방식으로 path와 method를 지정하여 API를 구현 할 수 있다. @..
Spring Boot 스프링부트는 단순히 실행되며, 프로덕션 제품 수준의 스프링 기반 어플리케이션을 쉽게 만들 수 있다. 스프링부트 어플리케이션에는 스프링 구성이 거의 필요하지 않다. 스프링부트 java -jar로 실행하는 Java 어플리케이션을 만들 수 있다. 그리고 스프링보다 개발이 빠르고, 광법위하게 적용할 수 있는 환경이다. 기본값 설정이 있지만 설정을 바꿀 수 있다. 대규모 프로젝트에 공통적인 비 기능 제공이 있다. XML 구성 요구사항이 전혀 없다. Spring Boot 사용하기 intelij에서 Spring initioalizer를 통해 프로젝트를 만들고 간단한 문자열 출력 API를 만들어 보자 import org.springframework.web.bind.annotation.GetMapp..