아하 REST API 서버 개발 (12)
안녕하세요 다들 새해 나이 많이 받으셨나요? 못 받으셨다고요?
그래서 준비했습니다.
다들 새해 복 많이 받으셨길 바라고 올 한해 바라시는 일 모두 이루시길 진심으로 기원합니다^^
자 그러면 저번 강좌에 이어서 썰을 좀 더 풀어보겠습니다.
User Repository 의 문제점
현 소스코드는 정말 잘 동작하고 있습니다. 하지만 동작 내부를 좀 살펴보시면 논리적으로 문제가 있음을 알 수가 있습니다.
23라인
과 26라인
은 각각 사용자 객체를 반환하는 지점입니다.
하지만 23라인
은 단순 Object
를 반환하고 있고 26라인
은 sequelize
객체를 반환하고 있습니다.
사실 이것이 뭐 그리 큰 문제이냐? 그냥 쓰면 되지 않냐? 라고 말씀하신다면
예 그렇습니다. 그냥 쓰셔도 아무런 문제가 없습니다.
라고 대답할 수 밖에 없는게 사실입니다.
하지만 이렇게 한 함수가 여러가지의 반환값을 가지게 되고 이 함수들이 서로를 복잡하게 참조하다보면 그때부터 아주 큰 문제가 생기기 시작하고, 이를 해결하기 위해 누더기 코드를 작성 해야만 합니다.
그리고 문제점은 이뿐만이 아닙니다.
src/models/user.model.js
를 잘 보시게되면 모델 정의 클래스에서 Cache
도 직접 만질 뿐만 아니라 presentation layer
에서 할 일도 같이하고 있습니다.
이 소스코드를 위의 부분과 결합시켜보면 user.toWeb()
이란 함수는 Cache
가 있을 경우엔 동작하지 않게 된다는걸 바로 아실 수 있을겁니다.
자 그럼 이 문제점들을 하나하나 수정해보도록 하겠습니다.
Presentation Layer
일단 사용자 정의 모델에서 presentation Layer
를 분리하도록 하겠습니다.
src/wrappers/index.js
src/wrappers/user.wrapper.js
User Repository
그리고 기존에 user.model.js
에 있던 Cache
부분을 모두 repository
로 옮겨오고, 반환값을 통일시켜 주는 작업을 하겠습니다.
src/caches/user.cache.js
src/repositories/user.repository.js
그리고 지금까지 어물쩡 넘어갔었던 users.test.js
도 살짝쿵 바꿔주도록 합시다.
src/tests/integrations/v1/users.test.js
자 그럼 마지막은 항상 npm test
죠!
테스트가 성공하였습니다.
이제 정말 한 서비스에서 나름 잘 동작할 수 있는 모델 구조의 설계를 끝냈습니다.
많은 사람들이 굳이 왜 이렇게까지 잘게 쪼개서 코딩을 하느냐라고 물어볼 수 있습니다.
강좌 내내 말씀드린 바 있지만 코드 품질의 완성도는 사실 본인 취향입니다.
어지럽더라도 한 파일에 몰아 넣는 분이 계시고, 정말 가독성은 좀 떨어지더라도 최대한 잘게 쪼개서 모듈화를 해서 단일 책임 원칙을 철저히 하시는 분들까지…
어떠한 것이 정답이다 라고 말씀드릴 수 있는 레벨은 아니라고 생각합니다.
다만, 경험상 코드를 어떻게 하면 잘게 쪼개고 단일 책임 원칙을 구현할 수 있을까를 많이 고민하면 할수록 나중에 더 편해집니다.
하지만 그와중에 이정도가 적당하다… 라는 것은 오로지 개발자의 경험에서 나오는 것 같습니다.
사실 이번 강좌에서 Logger
까지 커버를 하려고 했었지만, 이 또한 상당히 다룰 내용이 많다보니 아무래도 다음편으로 미뤄야 할 것 같습니다.
그럼 다음 강좌로 찾아 뵙겠습니다.