Property based creator 가 생성되는 이유 저번 포스팅까지 @NoArgsConstructor 가 Request body 의 DTO 에 포함되지도 않았는데 JSON 데이터가 Java 객체로 올바르게 변환될 수 있는 이유가 Property based creator 덕분이라는 사실을 발견했다. 오늘 포스팅에서는 Property based creator 가 언제 생성되고 언제 생성되지 않는지에 대해 알아본다. 먼저, Jackson 에서 PropertyBasedCreator 를 생성하는 부분이 어디인지를 확인하기 위해서 디버깅을 계속 step into 를 통해 들어가보았다. 너무 길어서 캡처는 중간부분을 생략하고 처음 진입과 마지막 부분만 남기겠다. 결국 BeanDesereializerBase 라..
기수 정렬을 구현하던 중, Queue 로 이루어진 배열을 생성하는 과정에서 NullPointerException 이 발생해서 왜 그런지 찾아보다가 이 포스트를 작성하게 되었다. Java 의 데이터 타입 원시 타입 (Primitive type) 과 참조형 타입 (Reference type) Java의 변수들은 두 가지 타입 중 하나를 갖는다. 1. 원시 타입: 아래 표는 원시 타입의 종류들을 설명한다. 아래로 갈수록 더 많은 데이터를 담을 수 있는 타입이다. 이름 비트 수 초기화 syntax 선언만 했을 시 초기 값 byte 8 byte b = 100; 0 short 16 short s = 30,000; 0 int 32 int i = 100,000,000; 0 long 64 long l = 100,000,..
무언가 다른 방식 자, 이전 포스트에서 디폴트 생성자가 없는 경우 deserializeFromObjectUsingNonDefault() 를 호출한다는 사실까지 알아보았다. 이번 포스트에서는 이 메서드가 어떻게 동작하는지, 어떤 메서드들을 호출하는지를 알아본다. 우선 JsonDeserializer 라는 역직렬화를 담당하는 클래스 (이름 상으로는) 객체의 이름을 delegateDeser 로 하고 _delegateDeserializer() 를 할당해주는 것을 볼 수 있다. 그리고 바로 밑에서 이것이 null 인지를 확인한다. _delegateDeserializer() 는 무엇이고, null 인 경우와 아닌 경우의 차이는 무엇일까? 우선 Javadoc 에 쓰여 있는 _delegateDeserializer() 의..
직렬화 & 역직렬화 Serialization and Deserialization 아래는 스프링 부트 컨트롤러에서 API 를 정의할 때 흔히 볼 수 있는 모습이다: 이 API 를 Swagger 를 사용해서 테스트할 때, 다음과 같이 Request body 부분에 JSON 형태의 정보를 넣어준다. 이렇게 클라이언트로부터 받은 Request body, JSON 정보를 자바 객체 (여기서는 UserLoginRequest) 로 변환하는 과정을 역직렬화 (Deserialization) 라고 부른다. 직렬화 (Serialization) 는 그 반대인 자바 객체를 JSON 형태로 변환하는 과정을 말한다. 역직렬화 시 목적지인 DTO 객체를 생성하여 클라이언트로부터 JSON 형태로 넘어온 데이터를 넣어주는데, 원칙 상으..
들어가기 전에 ResponseEntity 는 HttpEntity 를 상속받는 클래스로, 멤버변수로 HttpStatus 객체를 포함한다. 즉, API 로 클라이언트에게 응답할 때 HTTP 상태 코드와 HTTP 헤더를 함께 원하는 데이터를 전송할 수 있게 돕는 클래스이다. HttpStatus 클래스 HttpStatus 클래스에 대해 알아보기 전에, HTTP 에서 전달되는 정보에는 무엇이 있는지 살펴보겠다. HTTP 상태 코드 목록 간단하게 5개의 범위에서 상태 코드는 반환된다. 응답의 상태에 대한 정보를 전달 (예: 응답이 아직 진행중 - 102 Processing) (100 – 199) 성공적인 응답 (200 – 299) 리디렉션을 요청하는 응답 (300 – 399) 클라이언트의 오류 (요청할 때 잘못되었..
JOIN 의 역할 JPQL 에서 JOIN은 SQL 에서의 JOIN 과 차이가 없다. JOIN 은 항상 FROM 절 뒤에 붙는다. FROM 이 자바의 향상된 반복문에서 콜론 (:) 같은 역할이라고 생각하면 된다. 이 때 JOIN 은 반복하는 구간을 특정하는 역할을 한다. 예를 들어, 다음 두 개는 같은 역할을 하는 쿼리문들이다. SELECT c1, c2 FROM Country c1 INNER JOIN c1.neighbors c2 SELECT c1, c2 FROM Country c1, Country c2 WHERE c2 MEMBER OF c1.neighbors 즉, INNER JOIN 은 두 항목을 조회하되, 하나는 연관관계에서 주인인 테이블의 항목이고, 다른 하나는 주인에 의해 매핑된 테이블의 항목으로 제..
Session 은 데이터베이스와 물리적인 연결을 하기 위해 사용된다. Session 객체는 가벼우며, 데이터베이스와 상호작용이 필요할 때마다 시작되도록 디자인되어 있다. 영속성을 가진 객체들은 세션 객체를 통해서 저장되고 조회된다. 세션 객체들은 너무 오래동안 열려 있으면 안된다. 그 이유는 보통 얘네는 스레드 안전 이 아니기 때문이다. 즉, 한 번 열리면 한 군데에서만 사용할 수 있다. 빠르게 쓰고 놓아주어야 다른 애들도 쓸 수 있다. 스레드 안전이란 ? https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_%EC%95%88%EC%A0%84 세션의 주요 기능은 매핑된 엔티티 클래스들의 객체들에 대한 동작들을 제공하고, 생성하고, 읽고, 삭제하는 기능이다..
이 글 중 Hibernate 에 관한 글은 창작 글이 아니라, 맨 아래에 출처를 밝힌 사이트의 글 일부를 번역한 것입니다. create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) ); 위 테이블은 아래 테이블과 one to many 연관관계가 있다. certificate 테이블에 idx 컬럼이 있는 것을 볼 수 있는데, certificate 자체가 list collection 테이블이기 때문이다. create table CERTIFICATE ( id INT ..
- Total
- Today
- Yesterday
- JOIN FETCH
- 코테
- DeSerialization
- 기지국 설치
- N+1
- 프로그래머스
- Java Data Types
- spring
- JPQL
- Firebase
- gitlab
- 깃랩
- Spring Boot
- json web token
- docker
- 가상 서버
- @RequestBody
- 역직렬화
- 실시간데이터
- 도커
- 지연 로딩
- 알고리즘
- DTO
- ci/cd
- Jackson
- 인증/인가
- LazyInitializationException
- FCM
- JPA
- google cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |