제가 다니던 회사에서는 Spring Framework + MyBatis 기반의 프로젝트를 운용하고 있었습니다.
회사에 처음들어와서는 적응하느라 정신이 없었지만 어느정도 적응하고 보니 불편한 점이 꽤 많았습니다.
라이브러리 관련 설정하는데 너무 많은 시간이 소요된다...
한창 바쁠 때 라이브러리 버전이 안맞아서 시간을 많이 소비한 경험들이 있으실 겁니다.
제가 회사 업무에 적응할 때 쯤 신입(사실 동기와 다름없는)이 2명 들어왔는데 이에 대해 의견을 물어보니 다들 불편한 점을 느끼고 있었습니다.
이 때 당시 저는 스프링 부트에 관련 강의를 듣고 있었고 이 강의에서 스프링 부트의 장점을 듣는데 설정과 관련된 고질적인 문제를 해결해줄 수 있을 것 같았습니다.
그래서 회사에 스프링부트를 사용하자고 건의하였고 다음은 스프링부트를 사용하자고 설득하기 위한 근거에 대한 정리입니다.
회사에서 사용했던 스프링 프레임워크에서는 버전을 직접 입력해야 했지만, 스프링 부트에서는 스프링 부트 버전을 입력해 놓으면 스프링 라이브러리 뿐만 아니라 third party 라이브러리들도 호환되는 버전으로 알아서 다운로드 및 관리를 해줍니다.
이 부분이 가장 핵심적인 설득 근거였습니다. 버전관리를 알아서 해주니 그동안 시간을 많이 낭비하게 했던 것을 해결하는 부분이었기 때문입니다.
스프링 부트는 @EnableAutoConfiguration 어노테이션을 선언해서 스프링에서 자주 사용했던 설정들을 알아서 등록해줍니다. 특히 root-context.xml, servlet_context.xml에서 했던 많은 설정들을 알아서 자동 등록해줍니다.
스프링 부트는 WAS인 Tomcat을 내장하고 있습니다. @SpringBootApplication 어노테이션이 선언되어있는 클래스의 main 메소드를 실행하는 것만으로도 서버를 구동시킬 수 있습니다.
이는 큰 장점인데 스프링 프레임워크에서는 톰캣을 따로 설치해야했습니다. 그래서 회사 동료들이 같은 환경의 Tomcat을 설치하기 위해 버전에 대한 자료를 공유하곤 했습니다. 그런데 이럴 필요가 없어진 것입니다.
웹 프로젝트라면 war 파일로 패키징을 해야하는데 스프링 부트는 내장 톰캣을 지원하기 때문에 jar 파일로 패키징해서 웹 어플리케이션을 실행시킬 수 있습니다.
이부분에 대한 어필도 많이 한 것 같습니다. 스프링 프레임워크의 경우 서버에 배포하려면 톰캣 또한 설치해야했고 이 과정이 복잡했습니다. 그런데 스프링 부트의 경우 내장 톰캣이 있으므로 단순히 jar 파일을 실행시키기만 하면 되었습니다. 따라서 서버에 배포하는 과정 또한 많이 간편화 되었습니다.
개발자들마다 공부방법은 다르지만 처음에 기술을 배울 때 시간을 많이 절약하면서 공부할 수 있는 방법은 강의를 듣는 것이라고 생각합니다. 인프런이나 패스트 캠퍼스등 유명한 강의 사이트에는 스프링 부트 강의가 대부분입니다. 따라서 신입이 들어와 기술을 익힐 때 강의 자료가 많은 스프링 부트를 사용한다면 도움이 될 것입니다.
반복적인 CRUD를 안할 수 없을까?
사실 스프링 부트 강의를 들으면서 JPA라는 것에 대해 처음 알게 되었습니다.
스프링 부트 강의이기에 아주 기본적인 JPA에 대해 설명하였지만 마이바티스에 익숙한 저에게는 신세계였습니다. 특히 기본적인 CRUD에 대해 sql을 직접 작성안해도 된다는 것이 정말 좋아보였습니다.
다음은 JPA를 사용하자고 설득하기 위한 근거에 대한 정리입니다.
마이바티스를 이용하다 보면 70% 정도는 기본적인 CRUD에 관한 쿼리입니다. 그런데 JPA를 사용하면 이 70%에 대한 쿼리를 작성하지 않아도 됩니다. 이는 생산성 향상에 큰 도움이 됩니다.
또한 마이바티스의 경우 컬럼이 추가되는 경우 insert,select,update 쿼리를 직접 일일이 수정해줘야 했지만 JPA를 사용할 경우 엔티티만 수정하면 되어서 이 또한 생산성 향상에 도움이 됩니다.
JPA를 사용하면 변경감지를 통해 엔티티의 정보가 바뀌게 되면 자동으로 update 쿼리가 나가게 됩니다. 즉 update 쿼리를 날리는 메소드가 필요가 없습니다. 이로 인해 엔티티(도메인)에 비즈니스 로직을 담당하는 메소드를 작성하기가 용이해집니다.
JPA는 각 RDBMS에 대해 추상화가 되어있기 때문에 어떤 RDBMS를 사용해도 그의 문법에 맞춰서 자동으로 쿼리를 날려줍니다. 이로 인해 나중에 RDBMS를 바꾸더라도 SQL 쿼리를 고칠일이 없어집니다.