13. 헥사고날 아키텍쳐로 잘 구현된 서버 코드를 보며 드는 생각들
요즘 서버 개발을 배우고있다.
코틀린의 코자도 모르고, 스프링의 스자도 몰랐던 내가 당장 하겠다고해서 배워야하는 상황인 것이다.
그러다보니까 뭐부터 공부해야할지 좀 막막했다.
- 코틀린을 배워야겠지?
- 스프링도 배워야겠지?
- DB 도 배워야겠지?
- 근데 또 JPA 도 배워야겠지?
하지만 나에게 주어진 시간은 매우 타이트한데 어떻게 해야할까 고민이 들었다.
프론트엔드 개발 처음배웠을 때 처럼 스텝바이 스텝으로 하기에는 시간이 너무 부족했다.
그래서 일단은, 언어는 둘째치고 무작정 스프링을 배우려고했었다. 프레임워크를 이해하면 어쨌거나 코드 작성은 할 수 있을거라 생각해서였다.
그런데, 스프링을 배우는 것은 마치 어떤 문법을 배우는 것과도 같다는 느낌을 받았다. 너무 당연히 알아야하는 건데, 이거 안다고 당장 생판 처음보는 코드를 치는건 어려울 것 같다고 생각이 들었다. (흑흑..)
그래서 일단 서버 개발의 멘탈모델을 공부했다. 코틀린이나 스프링의 멘탈모델이 아니라 서버 그 자체에 대해서 고민해봤다. 그랬더니 어떤 구조로 돌아가는지, 그 과정에서 내가해야 할 것은 무엇인지가 조금 보였다.
그러면 내가 봐야할것을 이제 볼 차례였다. 그래서 내가 봐야할 서버 코드를 클로드에게 분석시켰더니, 헥사고날 아키텍쳐로 되어있다.
그래서 헥사고날 아키텍쳐에 대해서 더 공부하고 이해했더니, 스프링을 배웠을 때 보다 더 '어떤 코드를 써야할지'가 명확하게 보였다. 코드의 구조가보였고, 흐름이 보였고, 그래서 거기에서 스프링이라는 프레임워크가 뭘 해주고있는지가 보였다.
이렇게 공부를 하다보니까 든 생각이..결국에는 개발에서 가장 중요한건 멘탈모델 이라는 것 이었다. 정말 뻔하지만 기술 그 자체는 중요하지 않다. 그 기술을 왜 쓰느냐가 중요한 것 이었다. 특히나 외부 의존성들은 중요하지 않다.
물론 스프링 프레임워크를 쓰면서 스프링에 강결합된 아키텍쳐를 만들수도 있겠다. 그것도 어쩌면 이점이 있을 수 있다.
어쨌거나, 코드의 전체적인 멘탈모델을 잘 잡아놓는 것, 그리고 그걸 좋은 아키텍쳐로 푸는게 어떤 외부의존성을 쓸지보다 더 중요하다는 것을 알게되었다.
만약 내가 처음부터 코틀린부터 스프링, JPA까지 정석으로 배운다고해서 이해도가 높아질까? (물론 아는건 많아지겠지만)
하지만 그래서 왜 스프링쓰는데? 그래서 서버 개발에서 뭐가 제일 중요한데? 이걸 먼저 고민하고 배우는 것과 많이 다를 것 같다.
암튼..화이팅.. 무사히 개발하길