Spring을 사용하는 이유?

Spring을 사용하는 이유?

개발일기


나는 왜 자바와 스프링을 사용하고 있는가 ?


오늘 문득 이런 생각이 들었습니다.

결론은 간단하게 나왔습니다.

1분도 채 안걸린 것 같네요.

제가 백엔드 개발자로서의 커리어를 시작 할 당시, 시장조사 결과 자바와 스프링으로 시작하는게 진입장벽이 낮을것이다. 라는 결론이 나왔기 때문입니다.

따라서 시작을 자바와 스프링으로 했고, 그게 이어지고 있는 것이 전부입니다.


이쯤에서 이런 생각이 듭니다.


“그럼 스프링이 대체 뭘까?”

“나는 자바와 스프링없이는 아무것도 아닌 개발자인걸까?”


이러한 자문에 결론을 내기 위해 스프링이 뭔지에 대해 대충이나마 정리해봤습니다.


스프링이 뭘까 ?


스프링(Spring)의 의미는 자바 개발자들에게 겨울이 끝나고 봄이 왔다는 의미이며, 스프링 부트(Spring Boot)의 경우는 봄에서 조금 더 봄이 왔다라는 의미라고 합니다.

스프링이 나오기 전 Java EE가 사용되고 있었는데, Java EE의 자질구레한 문제를 대체하기 위해 여러가지 프레임워크가 난립하는 전국시대와 같은 상황이 있었습니다.

스프링은 이 때 로드 존슨 이라는 분의 제안으로 시작됐고, 결국 스프링이 자바 진영의 전국시대를 종결내버리게 됩니다.


스프링이라는 것은 스프링 트라이앵글이라고 불리우는 IoC, AOP, PSA 세 가지의 기술을 기반으로 하며 이 세 가지의 기술을 통해 모든 문제를 해결하고자 하고 있습니다.

그리고 스프링으로 해결하고자 하는 문제의 종류에 따라 여러가지 스프링 프레임워크가 존재합니다. (Spring Batch, Spring Data, Spring Cloud…)


스프링의 장단점 ?


스프링의 장점과 단점을 나열하자면 한도끝도 없겠죠.

잠깐만 생각해봐도 엔터프라이즈 환경에서 필요한 도구를 거의 전부 지원한다 라거나, 정적타입과 빡센 제약으로 인해 협업에 용이하고 안정성이 높다 라거나, 운영체제와 같은 플랫폼에 독립적이다 라거나 등의 이유가 떠오르지만, 그 어떤 이유도 반드시 스프링을 사용해야만 한다 라거나 스프링이 아니면 안된다라는 주장에 합당한 근거가 될 수 없다고 생각합니다.

왜냐하면 Google, Amazon, Apple, Facebook 등의 세계구급 대기업들이 모두 다 스프링만을 사용하고 있지 않으며, Ruby On Rails, Flask, Django등의 여러가지 프레임워크를 사용하고 있기 때문입니다.

한국에서 자바와 스프링이 대세가 된 이유에 대한 제 생각을 먼저 요약하자면 기업 입장에서 봤을 때, 한국 시장에서 실력있는 개발자를 구인하기가 가장 용이하다.는 이유가 전부가 아닐까 싶습니다.


아마 대부분의 기업에서 자바와 스프링을 다루는 개발자를 구인하는 이유도 위와 크게 다르지 않을 것이라고 사료되며, 실제로 여러가지 채용 공고들을 보면 다음과 같은 구문이 자주 보입니다.


  • Java 언어 사용이 능숙한 분
  • Spring Framework 개발 경험이 있으신 분


우리 나라의 개발 업계는 매출 규모로 따졌을 때 SI업계가 전체 시장의 대부분을 점유(약 70%)하고 있으며, SI업계는 스프링 기반의 전자정부프레임워크(a.k.a egov)라고 불리우는 것을 업계 표준으로 사용합니다.

따라서 국내 개발 시장에서 절대다수의 개발자가 자바 스프링을 사용하고 있기 때문에, 실력있는 개발자를 구인하기 용이하다는 측면에서 자바 스프링을 사용하는 개발자를 많이 채용한다가 제 결론입니다.

참고로 위 채용공고처럼 시장에서 말하는 스프링이라는 것은 일반적으로 Spring MVC를 의미하며, 이것은 웹(Web)에 관련된 문제를 해결하기 위한 프레임워크를 말합니다.


스프링이 없어진다면 ?


제 고민의 핵심이라고 볼 수 있을 것 같습니다.

그리고 어느정도 답이 나온 고민이기도 합니다.


백엔드 개발자로 업무를 진행하면서 깨달은 것은, 결국 언어와 프레임워크는 도구일 뿐이며 핵심은 얼마나 문제의 밑바탕을 잘 이해하고 있느냐였습니다.

좀더 풀어서 설명하자면, 예를 들어 Spring MVC를 이용해 웹 기능을 구현한다고 한들, 결국 조금 더 좋은 구조로 만들거나, 발생한 에러를 디버깅하기 위해서는 WebHTTP에 대한 이해가 필수적이었습니다.

역시 Spring Data를 이용해 데이터베이스와 관련된 기능을 개발한다고 해도 결국 문제 해결을 위해서는 SQL네트워크 IO에 대한 이해가 필수적이었습니다.


이렇게 근본적인 문제 해결을 위해서는 항상 해당 문제에 대한 지식, 흔히 CS지식이라고 불리우는 기본기가 더 중요했었습니다.

각 스프링 프레임워크는 항상 특정 문제를 더 쉽게 해결하기 위한 여러가지 방법을 제공해주는 도구에 가까웠으며, 이러한 기본기를 토대로 스프링 프레임워크가 제공하는 방법을 취사선택하기만 하면 됐습니다.

아마 사용하는 언어와 프레임워크를 JavascriptNode.js로 바꾼다 한들 이러한 것들은 절대 바뀌지 않을거라고 생각됩니다.

물론 제가 현재 자바와 스프링을 이용해 업무를 진행하는 만큼, 디테일을 위해 자바와 스프링을 계속해서 학습해야 함은 분명합니다. 이 부분은 제가 다른 언어와 프레임워크로 업무를 진행하게 되는것이 아니고서야 절대 변할일이 없을것입니다.

아무리 언어와 프레임워크가 도구라고 생각한다고 한들, 각 언어와 프레임워크에는 자신들만의 철학과 사상이 담겨 있고, 디테일한 동작구조는 분명히 다르기 때문입니다.


저는 자바와 스프링이 천년만년 사용될거라고 생각하지 않습니다.

실제로 최근에도 Kotlin으로의 전환이 많이 이루어지고 있는 추세이고요.

극단적인 생각으로는 10년안에 자바와 스프링이 대체될수도 있다는 생각마저도 하고 있습니다.


하지만 기본기만큼은 제가 소프트웨어 엔지니어로 일하는 한 항상 필요한 절대적인 가치일거라는 확신은 듭니다.

따라서 “내가 어떤것에 계속 시간을 투자해야 좋은 개발자가 될 수 있을까?” 라는 고민에 대한 답은 명약관화한 것 같습니다.



© 2022. All rights reserved.