강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Dompoo님의 프로필 이미지
Dompoo

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

회원 애플리케이션 서비스 테스트 (1)

Member#register() 메서드명이 모호하게 느껴집니다.

작성

·

184

0

Member#create() 메서드를 register로 공통언어를 바꾸셨는데, 뜻이 모호해진 것 같아서 질문드립니다!

 

제가 생각하기에 register(등록)이라는 단어는 생성과 영속화라는 두가지의 행위를 함축한 단어로 느껴집니다. 따라서 MemberService#register()는 너무 자연스럽습니다. 실제로 Member를 생성한 후에 MemberRepository를 통하여 영속화까지 하는 내용으로 구현되어있습니다.

하지만 Member#register()는 이와 다르게 Java 객체를 생성하기만 하는 것이라, 메서드명과 실제 동작이 불일치한다고 느껴집니다.

 

하지만 또 동시에 도메인 모델을 글로 작성하는 과정에서 '멤버를 등록한다.' 라는 말을 쓰는 것은 자연스럽습니다. 그 구현이 코드적으로 Member에 있는 것만이 부자연스럽습니다.

이런 경우에는 Member라는 객체만으로 도메인 모델을 온전히 표현해내기가 어려운 것일까요? 해당 모델을 표현하기 위해서는 MemberService 같은 코드가 꼭 필요한 걸까요?

답변 1

2

토비님의 프로필 이미지
토비
지식공유자

가장 어려운 게 이름을 정하는 것인데요. register라는 말의 일반적인 의미로 생각하면 뭔가 더 많은 단계를 거쳐야 할 것처럼 느껴지기도 하죠. 그런데 굳이 create를 쓰지 않고 register라는 말을 선택한 이유는 이 개발팀의 도메인의 보편 언어에서 그런 선택을 하기로 결정했기 때문입니다. 물론 제가 일방적으로 한 것이긴하지만요. ㅎㅎ

어쨌든 엔티티가 생명주기로 볼 때 그 온전한 기능을 사용할 수 있게 되는 활성 상태가 되는게, 이를 최초로 만드는 작업에 의해서 결정되는 경우(아직 구현은 안 했지만 강사가 강의를 만드는 것)와 생성 이후 어떤 조건을 충족해야 비로소 그 엔티티의 기능을 수행할 수 있게 되는 것으로 구분하기로 한 것입니다. 그때 선택한 우리 개발팀의 보편 언어로 "등록"과 "생성"을 구분한 것입니다.

뭔가 누구나 딱 들으면 완벽하게 이해가 되는 단어를 선택할 수 있으면 좋겠다 싶지만, 많은 경우 그러기는 힘들죠. 그래서 우리가 말하는 등록/register라는 것은 이런 의미이고 이런 규칙을 가지고 사용하자라는 스프런 도메인 모델을 이해하는 것이 먼저 선행되어야 할 필요가 있습니다.

아마도 그런 논의를 하는 과정을 제가 강의에서 충분히 느끼시도록 시연 같은 것을 하지 못해서 단어의 의미를 평소 알고 계신 그 이해로 생각하고 보시면 뭔가 어색할 수도 있을 겁니다. 그래도 강의에서도 말씀드렸고, 위에 적은 것처럼 등록/register라는 스프런의 보편 언어는 이렇게 쓰인다고 이해해주시면 좋겠습니다.

등록/reigster는 생성후 일정 조건이 충족되는 것을 대기하는 상태로 만들어지는 것을 부르는 우리 도메인의 언어이다라고요.

Dompoo님의 프로필 이미지
Dompoo
질문자

팀에서의 보편 언어를 그렇게 정한거군요!

 

만약 제가 토비님과 같은 팀이었다면 보편 언어를 정하는 시점에서 위와 같은 논의를 같이 하고 도메인에 잘 부합하는 언어를 찾기 위한 노력을 같이 했겠네요. 😀

 

이 부분에서도 보편언어의 중요성이 잘 드러나는 것 같습니다. 토비님과 제가 생각하는 언어의 뜻이 달라서 이해의 어려움이 발생하네요. 좋은 경험 한 것 같습니다! 답변 감사드립니다!!

Dompoo님의 프로필 이미지
Dompoo

작성한 질문수

질문하기