아하 REST API 서버 개발 (12)

finallee
aha.official
Published in
4 min readFeb 7, 2019

안녕하세요 다들 새해 나이 많이 받으셨나요? 못 받으셨다고요?

그래서 준비했습니다.

반품 안돼요

다들 새해 복 많이 받으셨길 바라고 올 한해 바라시는 일 모두 이루시길 진심으로 기원합니다^^

자 그러면 저번 강좌에 이어서 썰을 좀 더 풀어보겠습니다.

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 까지 커버를 하려고 했었지만, 이 또한 상당히 다룰 내용이 많다보니 아무래도 다음편으로 미뤄야 할 것 같습니다.

그럼 다음 강좌로 찾아 뵙겠습니다.

--

--