본문 바로가기

프레임워크/Spring boot

(28)
Hazelcast - 오픈소스 인메모리 데이터 그리드 솔루션
Stereo Type Annotation Stereotype Annotation이란? Annotations denoting the roles of types or methods in the overall architecture (at a conceptual, rather than implementation, level). : 전체 아키텍처(구현 수준이 아닌 개념적 수준)에서 타입 또는 메서드의 역할을 나타내는 어노테이션 스프링은 자동으로 Sterotype의 클래스들을 탐지하고 Bean으로 등록한다. 디폴트로 적용되는 어노테이션 즉, Stereotype Annotation을 이용하면 자동으로 빈을 등록할 수 있다! Stereotype Annotation 종류 @Component 이 어노테이션이 붙은 클래스가 "스프링 컴포넌트"임을 나타낸다. @C..
Object Mapper 구현하기 ObjectMapper란? JSON 형식을 사용할 때, 응답들을 직렬화하고 요청들을 역직렬화 할 때 사용하는 기술이다. (*여기서 다소 생소한 JSON 형식, 직렬화, 역직렬화를 잠깐 살펴본다.) JSON(Javascript Object Notation) "키 :값" 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 포맷이다. 본래는 자바스크립트 언어로부터 파생되어 자바스크립트 구문 형식을 따르지만 플랫폼과 언어 독립형 데이터 형식이다. 따라서 프로그래밍언어나 플랫폼에 독립적이므로 C, 자바, 파이썬 등에서 JSON 데이터 생성을 위한 코드를 각자 가지고 있다. JS를 제외한 언어는 라이브러리를 사용해야하는 경우가 많다 직렬화 (Serialize) 데이터를 전송하거나 저..
Spring> Spring REST> JSON Data Binding Intro JSON data 를 Java POJO 로 변환하는 과정을 Data binding이라고 한다 Jackson Project를 이용하여 data binding을 다룬다. Jackson은 Maven project로 가져온다. 파일로부터 데이터를 읽고 클래스의 인스턴스를 생성한다. JSON 데이터를 클래스에 넣고 사용한다. 클래스를 JSON으로 바꾼다. 이걸 Jackson이 처리한다. Spring이 자동적으로 Jackson Intergration을 다룬다. REST controller를 통해서 JSON에서 POJO로 바꾸고 객체에서 JSON으로도 바뀐다.
Resolver 란? HandlerMethodArgumentResolver HandlerMethodArgumentResolver는 Interface로써, Controller의 Argument(Parameter)에 지정된 변수들을,Annotation이나 객체의 Type에 따라서 Resolver를 먼저 거쳐, 실제 Data를 Controller에 넘겨주는 역할을 수행한다 Controller에 들어오는 Argument(Parameter)를 가공(암호화 > 복호화) 하거나,Argument(Parameter)를 추가하거나 수정해야 하는 경우에 사용한다. 사용이유 HandlerMethodArgumentResolver를 사용하는 이유는, 매개변수로 사용되는 인자에 대해 공통적으로 처리해야할 로직등이 있을 경우, 중복 코드를 줄이고 공통 ..
@Transactional을 선언했을때의 코드 흐름(내부 구조까지) Transcational은 더 이상 쪼갤수 없는 실행 흐름을 만들기 위한 키워드이다. 예를 들어, 계좌에서 100원을 주고 누군가에게 주는 작업은 100원을 빼고 100원을 주는 두 개의 서비스가 항상 같이 성공하거나 같이 실패하는 경우여야 가능하다. 이럴때, Transcational 키워드를 붙여 사용한다. Transaction의 내부 흐름 Spring은 우선 해당 Annotation이 붙은 Method들을 찾아 Proxy 객체로 생성합니다. Proxy객체로 생성 한 후, 보통 Proxy객체의 Method.invoke()라는 함수를 실행시킵니다. 그 함수를 실행시키기 전과 실행 시킨 후, DatasourceTransactionManager객체로부터 Connection객체를 얻습니다. 그렇다면, JDBC..
왜 ReponseEntity를 사용할까? Why ResponseEntity ? 보통 Backend에서 Request에 대한 요청을 할때, 응답값으로 ResponseEntity를 사용하는 경우가 있다. 실제로 응답값을 왜 ResponseEntity를 사용하는지에 대해 물으면 대답을 못하는 사람들이 많다. 그렇다면, 왜 ResponseEntity를 사용하는지 알아보자. ResponseEntity library ResponseEntity는 org.springframework.boot:spring-boot-starter-web dependency를 추가하면 추가된다. ResponseEntity Class Diagram 자체적으로 상태값을 가지며 HttpEntity를 상속하여 구현한다. 그렇다면 HttpEntity는 어떤값을 가질까 HttpEntity ..
Spring Boot는 Run시에 무엇을 할까 - Spring AOP Spring boot는 Run시에 BeanFacotory에 Bean Scope가 SingleTon인 객체들에 대해 SingleTon 패턴으로 객체들을 생성한다. 그렇다면 그 이후는 어떻게 될까? Proxy? 우리는 Spring Framework를 사용하며 아무 생각없이 코드 중간에 Throws 라는 키워드를 사용하여 Exception을 발생시키고는 한다. 그렇다면, 그 키워드가 발생할때 Exception을 어떻게 처리하는지에 대해 생각해봐야 한다. ProxyFactory 위에서 볼수 있듯이, ProxyFactory는 JDK 동적 프록시인지, CGLIB인지 선택해서 Proxy객체를 생성하는 역할을 담당한다. JDK동적 프록시 vs CGLIB는 다음 글을 참고하자. https://ptrsr.tistory.c..