티스토리 뷰

728x90

우리 팀 대부분의 nest.js 프로젝트에서 entity 파일을 type으로 사용하고 있었다.
나도 대수롭지 않게 생각했고 entity 파일을 사용했을 때 db 변경이 있따면 오히려 변경할 부분이 적어서 괜찮지 않을까? 생각했다.

배경

db 부하가 심해져서 유저 재화를 저장하고 있는 부분을 rdb -> redis로 변경 작업이 필요했다.
그래서 유저 재화를 조회 및 업데이트 하는 부분을 전부 수정해야 했다.

문제

jwt-strategy 파일에서 유저를 한번 조회 한 후 모든 controller 단에 유저 정보를 받을 수 있도록 구성되어 있었다. 유저의 타입은 entity로 되어있었다.

jwt에서 user 정보 조회 -> controller에서 조회한 유저 받기 -> 각 서비스단에 사용
async signIn(user: UserEntity) {}

하지만 외주를 맡겼던 프로젝트라 어떤 곳은 repository 패턴으로 되어있고
어떤 곳은 entity 객체를 그대로 저장하는 곳도 있어서 계속 db에 업데이트 되는 곳이 있었다.
그래서 발견하기에 더욱 어려웠다.

해결

사실 이걸 뒤늦게 발견하여 드라마틱하게 해결할 수는 없었다. 이미 qa가 시작되었다.
그저 jwt에서 유저 조회하는 부분을 다시 제거하고
유저 재화를 사용하는 모든 곳에 조회를 다시 하였다.
그치만 이번 기회에 느꼈다. entity를 타입으로 쓸거면 entity 객체를 그대로 저장하지 말고
repository 파일을 만들어 사용하는게 맞다.

사실 후자로 많이 하고 있겠지만 많은 사람들이 유지 보수 하는 프로젝트라면 애초에 가능성 조차 두지 않는게 맞는 것같다...