[Spring 공부] 이제서야 Spring을 공부하게 된 이유
2022. 02. 15.
Spring Study
왜 이제야?
대한민국이라는 환경에서 Java와 Spring은 굉장히 막강한 시장 점유율을 보여주고 있다. 사실상 대부분의 백엔드 개발자 구인도 Spring을 기반으로 이루어지고 있을 만큼, 취업을 준비하는 입장에서 Spring을 능숙하게 사용하는 것은 필수 역량에 가까운 무언가가 되어가고 있다.
나도 백엔드 개발자를 지망하고 있다 보니, 이러한 생태계와 국내 환경에 대해 익히 들어 알고 있었다. 그럼에도 지금에 와서야 Spring을 공부하기 시작한 것은 사실 Java를 멀리 했기 때문인데, 그 이유가 참 가소롭다.
나는 2017년에 대학에 입학해서 C 언어를 배우며 프로그래밍에 입문했고, 2018년에 학교에서 처음으로 Java를 배웠다. 그 당시에는 알고 있던 언어가 C 밖에 없었으니 Java는 너무 멋진 언어라고 생각했다. 그렇지만 2019년이 되어 Python과 Javascript를 알게 되면서 여러모로 생각이 복잡해졌다. 그 때 문득 하게 된 생각은 “아… 뭘까 이 언어, C++보다는 느리면서 Python이나 Javascript에 비해서는 코드가 못생긴… 뭔가 멋지지 않은걸?” 이었다. 두 번째로 배운 언어이다 보니 고리타분하다고도 생각했던 것 같다. 이런 말도 안되는 이유로 그냥 Java 쪽으로는 절대 눈길을 주지 않았다.
지금 와서 생각해보면 강력한 GC와 OOP 패러다임, 그리고 유구한 역사와 전통을 가지고 숙성된 마치 술로 따지자면 로얄 살루트 32년산과 같은 거대한 프레임워크인 Spring을 가지고 있는 굉장히 대단한 언어를 그냥 길바닥에 굴러다니는 돌맹이 정도로 취급한 것이지만, 그 땐 그런 사실을 알기에 너무나도 내 식견이 얕았다. (지금이라고 깊은 것 같지도 않지만)
Java를 멀리 하다 보니, Spring을 공부한다는 것은 말도 안되는 일이었다. 그래서 지금껏 항상 Spring을 공부하는 것은 군대를 전역하고 백엔드 개발자로 취업을 준비하는 친구들에게 추천할지언정, 스스로 공부해야겠다는 생각은 하지 않았다.
이제 와서는 왜?
그 이후로 서버를 작성해야 할 일이 생길 때마다 대부분 node.js 를 통해서 서버를 개발했다. Javascript의 간결한 문법도 마음에 들었고, 조금 다른 이야기이긴 하지만 애플의 철학처럼, “그냥 됨” 이라는 느낌을 받는 것도 너무 좋았다. 그리고 타입 추론에 있어서 약간의 문제가 생기는 부분을 Typescript라는 멋진 Superset을 통해서 해결할 수 있으니 사실상 이걸로 다 해먹을 수 있겠다라는 생각까지 가지고 있었다. (사실 다 해먹을 수 있겠다는 이 생각은 지금까지도 유효하다.)
그렇지만 항상 프로젝트를 만들고 보일러 플레이트를 따라서 작성하고 프로젝트의 디렉토리 구조를 정하는 등의 작업을 할 때마다 뭔가 마음 한켠이 불편했다.
“이게 진짜 제일 나은 패턴일까?”
“이 패턴을 내가 제대로 지켜가면서 작성하고 있을까?”
어째저째 에러가 터지면 때우고 기우고 덮어가며 기능을 구현할 수는 있었지만 내가 올바른 패턴을 사용하고있단 생각과, 이 사용하는 패턴의 규칙을 충실히 따르고 있다는 생각이 들지 않았다. 그리고 2020년이 되어, 한 멋진 node.js 프레임워크를 만나고 그 해답을 찾은 것만 같았다. 그것은 바로 NestJS 였다. Module, Controller, Service로 레이어를 나누어서 그 구조에 맞추어서 코드를 작성할 수 있다는 점과, 적정선에서 Decorator Function을 사용했을 때 얻을 수 있는 코드의 가독성 등 정말 마음에 드는 점이 많았다. 그런데, 어떤 커뮤니티(정확히 어디였는지 기억이 잘 나지 않는다.)에서 “솔직히 Nest 할 바에 Spring 하고 말지 ㄹㅇㅋㅋ” 라는 말을 하는 것을 봤고, Spring의 기본 컨셉을 찾아보고 나서 IoC와 DI 등이 Nest와 굉장히 유사하다는 것을 알게 되었다. 저 말은 Opnionated Framework (느낌을 번역해보자면, 완전 관리형 프레임워크 정도)를 사용할 것이라면 왜 굳이 node.js를 사용하냐라고 비꼬는 어조였다.
정보를 조금 더 찾아본 후 나는 Opinionated Framework들의 구조의 특징과 장단점을 정확히 이해하고 있어야만 node.js의 Express나 Python의 Flask, Go의 echo 같은 Micro Framework를 사용할 때에도 구조적으로 더 안정적인 코드를 작성하고 프로젝트를 구성할 수 있을 것이라 생각했다. 그리고 원조 맛집인 Spring을 공부해야겠다고 마음 먹었는데, Spring은 워낙 개발된지 오래되었고, 우리나라에서 많이 사용하기 때문에 내부적이고 구체적인 원리까지 여러가지 서적이나 강의들을 통해서 배울 수 있다고 생각했기 때문이다.
이렇게 뒤늦게나마 나는 Spring을 공부하게 되었다. 사실 이런 점 이외에도 현재 node.js를 사용하는 개발자의 입장에서 Spring을 한번쯤 공부해야 한다고 생각하는 이유, 그리고 그 반대로 Spring을 사용하는 개발자들이 node.js에 대해서 한번쯤 공부해야 한다고 생각하는 이유가 더 있긴 한데 그것들은 주 골자가 아니고 스스로도 제대로 정리하지 못했으니 이번엔 넘어가도록 하고, 다음에 글로 풀어보는 기회를 가지는 것도 좋을 것 같다.
어쨌거나 저쨌거나
앞으로 8주 동안은 Spring Boot 스터디를 하나 꾸리게 되어, 스터디원분들과 함께 Spring에 대해서 공부할 것 같다. 다양한 시각을 가질 수 있는 기회가 될 것 같아 여러모로 기대가 된다.
끝.