2022년 4월 24일 TIL

yshjft·2022년 4월 24일
0

데브코스 TIL

목록 보기
26/45

Form 태그

Form 태그를 get과 post만 지원한다.

Logger

데브코스를 들으며 logback.xml을 작성하여 커스텀 로거를 만들 수 있다는 것을 알게 되었다. 하지만 다음과 같은 문제 상황을 만났다.

문제상황1) 커스텀 로거가 있으면 root 로거가 씹히는가?

당연한 상황이다. 커스텀 로거를 설정했다면 분명히 패키지 범위(name)와 로깅 레벨(level)을 설정 하엿을 것이다. 해당 패키지 범위에 따라 로깅 레벨이 오버라이드 되므로 root 로거에서 설정한 내용은 커스텀 로거 범위에서는 무시된다.

문제상황2) 로거 name은 중복되게 사용하지 말자. 대신 하나의 로거에서 appender ref를 여러개 사용할 수 있다.

참고 자료

object to json(직렬화), json to object(역직렬화)

👍 내가 알고 있었던 내용

  • @RequestBody와 @ResponseBody에서 json to object(역직렬화) object to json(직렬화)을 하기 위해 Jackson 라이브러리를 사용한다.
  • Jackson 내부에서 ObjectMapper를 사용한다.
  • JSON을 DTO로 DTO를 JSON으로 매핑할 때 ObjectMapper가 사용된다. 이러한 과정에서 ObjectMapper는 기본 생성자와 Setter 또는 Getter(Getter 추천)가 필요하기에 DTO는 기본 생성자와 Getter 또는 Setter가 있어야한다.

⚠️ 문제상황

  • 기본 생성자가 없는데도 json to object가 이루어졌다.🤔

✏️ 공부하면서 알게된 것

  • Jackson 직렬화(object to json)할 때 getter 사용

  • Jackson 역질렬화(json to object)할 때 기본 생성자와 setter 사용

  • Object Mapper

    • Json to object
      Object Mapper는 아래 방법들을 통해 property 명을 찾아 값을 주입시킨다.

      • 기본 생성자 & public getter
        값 주입은 java.lang.reflect 패키지를 사용해 직접 주입시킨다. 그래서 굳이 setter가 없더라도 값이 주입할 수 있다.
      • setter
      • public field
    • 기본 생성자 없이 역질력화(json to object)

      • ObjectMapper 내부에는 속성과 생성자가 어노테이션을 사용해 객체를 변환할 때 쓰일 정보를 직접 지정한 경우 그 정보를 이용해서 직렬화/역직렬화에 사용하는 로직이 있다. @JsonProperty, @JsonAutoDetect@JsonCreator 어노테이션이 작성되면 생성자와 property값이 위임돼 getter, setter, 기본생성자 없이도 jackson이 정상적으로 작동한다.

      • jackson-datatype-jdk8이 자동으로 기본생성자가 없으면 다른 생성자를 이용하도록하는 모듈을 ObjectMapper에 등록시켜준다.

      • 단, 생성자 인자가 하나일 경우 @JsonCreater 선언해줘야 한다. 

      class ReqDto {
          private int a;
      
          @JsonCreator
          public ReqDto(@JsonProperty("a") int a) {…}
      }

참고 자료

profile
꾸준히 나아가자 🐢

0개의 댓글