230113~230114 TIL
오늘 배운 것 & 한 일
신입 백엔드 개발자로서의 방향성
이번 프로젝트에서 웹 소켓을 도전해보고 싶었지만 현재 기획된 서비스에서 웹 소켓을 자연스럽게 넣을 만한 기능이 없어서 결국 넣지 않기로 결정하였다. 그러다보니 왠지 실전 프로젝트에서 도전해보는 기술이 너무 적어보였고, 이게 문제가 되진 않을까 하는 막연한 불안감이 있었다.
그래서 오늘 멘토님과의 대면 피드백 시간에 신입 백엔드 개발자로서 새로운 기술을 여러 가지 도전해 보는 것이 더 좋을지, 아니면 기본기를 튼튼하게 하는 것이 더 좋을지 여쭤보았다. 결론은 '기본이 중요하다' 였다.
항해를 진행하면서 짧은 기간 동안 정말 많은 프레임워크와 라이브러리를 사용할 수 있게 되었다. 그런데 그 중 과연 내가 제대로 알고 사용하는 것이 얼마나 될까??
어떤 기술을 사용할 줄 아는 것과, 그 기술을 제대로 알고 있는 것은 다르다. 내가 그 기술에 대해 잘 모르더라도, 구글링을 통해 얼마든지 사용할 수는 있다. 하지만 내가 사용하는 기술들을 제대로 알고 있지 못하다면 그 기술을 응용할 수도 없고, 문제가 생겼을 때 대처할 수도 없다.
그리고 막연하게 아는 것과 제대로 아는 것 또한 다르다. 그 기술을 모르는 사람에게 A 부터 Z까지 설명할 수 있어야 비로소 안다고 할 수 있다. 멘토님께서 나에게 Spring Security의 filter와 Intercepter의 차이를 아냐고 여쭤보셨다. 부끄럽지만 전혀 대답할 수가 없었다. Spring Security를 계속 사용했어서 막연하게 알고 있다고 착각했지만, 사실 나는 Security에 대해 전혀 모르고 있던 거다.
다른 개념들도 마찬가지이다. 기술 스택에 여러 프레임워크와 라이브러리를 적어 두었지만, 그 중에 지금 내가 제대로 설명할 수 있는 것은 많지 않다.
새로운 기술들은 천천히 배우면 된다. 하지만 기본기가 없다면 그 새로운 기술들을 제대로 배울 수가 없다. 적어도 내가 내 프로젝트에서 사용했던 기술들에 대해서는 온전하게 이해하고 있어야 한다.
그러니 어설프게 기술을 추가하는 것에 얽매이지 말자. 이번 실전 프로젝트 때 사용하기로 한 기술 스택들을 온전하게 내 것으로 만드는 것이 더 중요하다. 모래성이 되지 않도록 기반을 잘 다듬으면서 나아가자.
Facade 패턴
예전에 멘토님께서 서비스 로직에서는 Entity를 직접 사용하는 대신 DTO에 담아서 사용하는 것이 좋다고 하셨다. Entity는 DB와 직접 맞닿아 있는 클래스인데, 서비스 로직에서 Entity를 쓰다 보면 치명적인 휴먼 에러가 터질 수 있기 때문이다.
그 이유에 대해 공감했고, 그래서 우리 팀도 서비스 로직에선 Entity를 대체하는 DTO를 사용하기로 하였다. 그런데 생각보다 DTO로 대체하는 것이 쉽지가 않았다.
서비스 로직에서 DB에 값을 조회하거나 저장하는 등 DB와 접하는 일을 할 때는 당연히 Entity를 사용할 수 밖에 없었다. 그러다보니 어떤 타이밍에 DTO로 교체를 해줘야 하는지 명확하지가 않았다. 애초에 Entity를 대체하는 DTO를 사용하는 이유가 Entity의 직접 사용으로 인한 문제를 방지하기 위한 건데, 어설프게 사용하다 보니 문제를 해결하긴 커녕 코드의 일관성이 떨어진다는 새로운 문제만 생겨버렸다.
그러다 문득 이런 생각이 들었다. 아예 Repository와 접하는 서비스 계층과 Controller와 접하는 서비스 계층을 분리하는 게 어떨까? 그러면 전자에서만 Entity를 다루고 후자에서는 Entity를 직접 다루지 않고 DTO만 다룰 수 있지 않을까..?
멘토님께 피드백을 받고 싶어서 이 생각을 구체화하여 질문을 드렸다. 그리고 이 방법이 멘토님께서 예전에 말씀해주셨던 Facade 패턴이라고 하셨다. 약간 오래된 방법이지만, 아직 현업에서는 많이들 쓰고 있는 방법이라고 한다.
내가 어떤 문제를 해결하기 위해 생각한 방법이 이미 있는 패턴과 유사하다는 걸 아니까 굉장히 뿌듯했다. 애초에 패턴이 그런 반복적인 문제를 해결하기 위해 만들어지긴 했지만, 그래도 직접 겪어보니 느낌이 달랐다.
Facade 패턴이 무엇이고, 장단점은 무엇인지, 그리고 어떻게 사용하는지는 나중에 따로 글로 정리하려고 한다. 찾아보면서 내가 생각했던 것과 어떤 점이 같고 어떤 점이 다른지 천천히 살펴봐야겠다.