2021-04-20(Tue)

항목

내용

학습 날짜

2021-04-20(화)

학습 시간

09:00~23:00

학습 범위 및 주제

Active model serializer, params.fetch, DTO

학습 목표

어제 발견한 키워드들을 파보자.

동료 학습 방법

-

상세 학습 내용

Active model serializer

https://api.rubyonrails.org/classes/ActiveModel/Serialization.html

애초에 레일즈에서는 ActiveModel 객체의 직렬화를 지원하는 메서드를 지원한다.

map 등으로 값을 정의할 필요없이, attribute 키를 심볼로 넘겨주면 JSON 형식으로 자연스레 직렬화할 수 있다.

params.fetch 메서드

https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-fetch

paramater의 디폴트 값을 설정해주는 메서드.

DTO 논쟁

https://blog.daum.net/question0921/829

DTO 패턴이 뭘까?

DTO 패턴은 속성과 getter/setter 메서드로 구성된 자바 클래스 패턴을 말한다. 객체는 상태(state)와 행위(behavior)로 구성됨이 기본 원칙이지만 데이터만을 가지는 데이터 홀더의 개념과 단순 오브젝트로 구성된 도메인 모델 객체이다.

각 계층간의 데이터 전달을 위한 최선의 선택으로 추천되고 있다.

DTO 패턴의 문제점

데이터를 전달할 때 데이터가 유실되고, 이 때 발생하는 에러를 디버깅하는데 상당히 많은 시간이 소요될 수 있다. 또한 도메인 모델을 DTO 모델로, DTO 모델을 도메인 모델로 전달하는 추가적인 작업 비용이 발생한다.

굳이 사용할 필요가 없는데 남용되는 경향이 있다.

DTO의 빈약한 도메인 모델(Anemic Domain Model)에 대한 논쟁

객체에 상태와 행위가 들어가는 것이 아닌, 오로지 상태만 들어가므로 구조적으로 불합리한 형태의 코드를 생산하게 한다고 한다. 모든 도메인은 행위에 해당하는 로직을 가지고 있고, 그 로직을 어떠한 형태로든 나타내야 하는데 그것이 도메인의 상태 정보만 가지고 있는 빈약한 도메인 모델에서 모두 빠져나오와 다른 형태로 구성되기 때문.

때문에 도메인 객체의 데이터홀더(Data holder)화와 서비스 레이어의 비대를 초래할 수 있다.

학습 내용에 대한 개인적인 총평

어제 늦게 자는 바람에 3시간 수면한 상태에서 라이브 코딩 회고를 진행하고, 멘토님 2분 만나고 인터뷰를 따로 진행하는 등 바쁘게 돌아다녔더니 너무 피곤하다.

재밌게도 멘토님들 모두 의견이 다르다. 지금 오퍼가 온 곳에 취업할 것인가 아니면 자바 스프링을 파서 더 좋은 기회를 노려보는가. 후회 없는 선택에 집착할 것이 아니라, 내 선택을 후회없도록 만들어버리자.

다음 학습 계획

  • Spring

Last updated