✏️ 2022-12-21 Today I Learn

@mitoconcrete · December 21, 2022 · 5 min read

[TodayKeywords] 오늘 공부한 키워드

  • @NoArgsConstructor : 매개변수가 없는 생성자를 자동으로 생성해주는 어노테이션.
  • @RequiredArgsConstructor : final@Notnull 이 붙은 멤버변수를 초기화해주는 생성자를 자동으로 생성해주는 어노테이션.
  • @AllArgsConstructor : 모든 멤버변수를 초기화해주는 생성자를 자동으로 생성해주는 어노테이션.
  • final이 있을때 생성자의 초기화 : 상수로 선언된 멤버변수는 생성자/초기화블록/직접선언 등으로 인스턴스 선언 시 반드시 초기화를 해주어야한다.

[NextKeyworks] Study Queue

  • HTTPS
  • SOLID
  • loop label
  • CSV
  • 파일입출력
  • UML
  • UTC
  • epoch time / Instant time
  • MVC
  • URL ClassLoader
  • Secure ClassLoader
  • JNI
  • GC
  • HOF
  • 자바 해시코드(hashCode)
  • OSI 7 계층
  • PCB
  • 스프링 설계철학
  • RESTful
  • 준 영속성
  • 지연로딩
  • 프록시객체
  • jpa - mybatis 의 차이
  • orm - mapper 의 차이
  • 쿠키/세션/로컬 스토리지
  • HttpMessageConverter

[회고] 221221 : 리팩토링4

어제 DTO가 다른 곳에서의 의존도를 낮추기 위해서, 서비스의 매개변수 수는 DTO의 멤버변수보다 같거나 작아야하고, 서비스는 그런 DTO안에 뭐가 들어있는지 신경쓰지 않고 꺼내기만 하면 되기에 의존도가 낮다고 표현했었다. 하지만, 오늘 우아한 형제들에서 아티클을 읽고 생각이 바뀌었고, 확고해졌다.

서비스 DTO는 그것을 넘겨받는 서비스에서 필요한 만큼의 매개변수 만을 보내야하고, 컨트롤러는 서비스에 맞게 DTO를 구성해서 서비스에게 전달해야한다. 스프링에서 쓰는 방식이 IoC(Inversion Of Control) 즉 제어의 역전 방식이고, 이것은 잘만든 서비스를 컨트롤러에서 가져다 쓰는 것이기 때문에, 서비스는 컨트롤러가 어떤건지 신경쓰지 않아도 된다. 그렇기 위해선, 해당 서비스에서 사용하는 DTO를 미리정의해두고, 컨트롤러에서 정의된 DTO에 데이터들을 모두 넣어서 보내주면, 서비스는 컨트롤러가 어떻게 바뀌던 신경쓰지 않아도된다.

따라서, 서비스 DTO는 필요인자만으로 구성되어야 외부의존도가 낮아진다 라는 결론이 섰다.

또한, 튜터님의 라이브코드리뷰를 보면서, 서비스가 자신의 역할만 할 수 있게 하는 방법에 대한 팁을 얻었다. 인증/인가에 대한것은 앞단 레이어에서 마치고, 서비스는 인증인가가 되었다는 가정하에, CRUD에 대한 비즈니스 로직만을 신경써야한다. 또한 엔티티간에 관계를 맺을 때, 굳이 양방향관계를 맺지않아도 되고, 무조건 관계를 맺지 않아도 됨을 상기시킬 수 있었다.

스프링에 대해서 알면 알 수록 그 철학들이 너무 신비롭고 흥미롭다. 철학들을 적용했을 때, 깔끔해지고 명확해지는 코드를 보면서 쾌감을 느끼는 것이 너무 재미있게 느껴졌다. 내일부터는 숙련단계를 거쳐 시큐리티와 AOP같은 고급개념들이 등장하는 심화단계가 진행되는데, 얼마나 더 스프링과 친해 질 수 있을지 기대된다.

@mitoconcrete
어제보다 조금 더 성장하기 위해 기록합니다.