[Spring Framework] 왜 Spring을 써야하는가?
서론
최근에 자바를 통해 웹 개발을 하면서, Spring이라는 프레임워크가 굉장히 널리 쓰이고 있다는 것을 깨달을 수 있었습니다.
아래는 프로그래머스에서 한 2019 개발자 설문지인데, 굉장히 높은 비율로 Spring Framework를 사용하고 있다는걸 알 수 있습니다.
(추가로 게임 개발자의 경우에는 '.NETCore', 'ASP'를, 네트워크 개발자는 'Cocoa'를 많이 사용하고 있다고 합니다.)
저도 학교 과제 프로젝트를 위해서 웹 개발을 Spring Framework로 입문한 이후로, 쭉 스프링을 사용해서 개발을 진행하고있습니다.
그러던 도중, 왜 Spring Framework를 왜 사용하는지에 대한 의문이 생기기 시작했습니다.
생각해보니 Java를 처음 배울 때는 이클립스를 사용해서 배웠었는데, 웹 개발은 왜 하필 Spring을 이용하는지에 대한(물론 이클립스 EE로 할 수도 있긴 하지만) 궁금증이 생기게 되었습니다.
그래서 유튜브를 찾다가 정말 좋은 강의를 무료로 제공해주시는 채널을 만나게 되었습니다.
그것이 바로 아래의 '뉴렉처' 님의 채널(www.youtube.com/user/newlec1)입니다.
정말 감사하게도 Spring Framework에 대한 다양한 강의들을 제공해주시고 계셨습니다.
이번 카테고리에서는 '뉴렉처'님의 강의를 토대로 듣고 배운것, 그리고 궁금해서 더 찾아본 내용들을 정리하여 올려보려 합니다.
왜 Spring을 쓸까?
위에서 봤듯이, 웹개발에 Spring이 정말 많이 쓰이고 있습니다.
스프링에서 프레임워크의 핵심 기능은 Dependency Injection, transaction management입니다.
이 두가지가 굉장히 중요한 기능으로,
일반적인 응용프로그램을 만들 때에는 중요하지 않을 수 있지만 Enterprise Application을 만들 때에는 이 두 녀석이 굉장히 중요해지게 됩니다.
Enterprise Application이란?
회사에서 사용하는 재무, 회계, 생산, 판매 등의 시스템에서 추출된 정보를 통합하여 일을 처리하기 위해 개발된 전사적 시스템 도구입니다. 대표적으로 ERP, SCM, CRM, KMS가 있는데, 이러한 시스템들은 회사의 비즈니스 프로세스를 더욱 조밀하게 해주어서 비즈니스를 더 유연하고 생산적으로 만들어줍니다.
기존에 관리하기 어려웠던 Dependency Injection과 transaction management를 Spring이 관리해주게 됩니다.
그러나 이러한 기능을 Spring만이 관리해 주는 건 아닙니다.
Java는 크게 3가지 edition이 있는데, 그게 바로 ME(mobile edition), SE(standard edition), EE(enterprise edition)입니다.
이 셋 중에 EE가 바로 Spring처럼 위의 두 기능을 제공하는 edition입니다.
하지만 EE로 transaction을 관리하는 것이 복잡했기 때문에
라이브러리만 이용하면 트랜잭션 문제를 깔끔하게 처리해주는 Spring을 주로 사용하게 되었습니다.
아래는 기존의 JavaEE 를 사용했을 때의 모습입니다.
그러나 위에서 말했듯이, JavaEE의 기능을 Spring이 대체하고 더 편리하게 제공하기 시작하면서 JavaEE 대신에 Spring을 올리게 됩니다.
요즘에는 JavaEE도 Spring의 강점들을 반영했기 때문에 웹 개발이나 데이터베이스를 이용하기에 이전과 같은 불편함은 없지만, 이미 유료화가 진행되었기도 하고 우리가 Spring을 사용해왔기 때문에 EE보다는 Spring을 사용하는 비율이 압도적으로 높다고 볼 수 있습니다.