지난 2020-05-15 스프링 부트 2.3.0 이 출시(https://spring.io/blog/2020/05/15/spring-boot-2-3-0-available-now)됐다.
예전에는 스프링 부트이 출시하면 출시노트(Release note) 및 소스코드 등을 살펴보면서 뭐가 달라졌는지 정리해서 공유했던 때가 있었는데, 이제 잘 하지 않게 된다. 이제는 출시노트를 살펴보고 내가 사용하고 있는 기능의 변경사항이 있는지 확인하고 넘어가는 수준에서 머물고 있다.
스프링 부트는 스프링 프레임워크와 업그레이드를 함께하면서 스프링 안에서 일어나는 변화를 적극적으로 수용한다. 그 변화는 스프링 프레임워크 5.0 출시에 맞춰 스프링 부트 2.0 을 출시하면서 명확하게 그 의도를 드러냈다. 예를 들어, 스프링 프레임워크 5가 되면서 웹(Web) 이라는 개념이 동기방식(Synchronous && Blocking) 과 비동기방식(Asynchronious && Nonblocking) 으로 구분짓는 서블릿사양(Servlet spec) 과 리액티브(Reactive spec) 으로 나뉘며 각각의 지향성을 명확히 했다. 스프링 부트 내부에서 웹서버(WebServer) 라는 용어는 서블릿컨테이너(ServletContainer) 로 변경하는 작업과 함께 리액터(Reactor)라는 개념과 분리되어 사용되기 시작했다.
스프링 부트는 2.0 부터 스프링 프레임워크와 변화를 함께하고 있으며, 아래 스프링 부트 출시버전별 스프링 프레임워크 버전을 살펴보면 유추가능하다. 스프링 부트의 버전을 알면 사용하고 있는 스프링 프레임워크의 버전을 확인할 수 있고, 이를 기반으로 해서 스프링 프레임워크 문서 등을 찾아보면 된다.
스프링 부트는 내가(그리고 여러분이) 따라가기 벅찰정도로 빠르게 변화 한다. 개발자가 관심을 가지는 기술(유행기술)을 빠르게 도입하고 유용하다면 빠르게 적용했던 코드를 수정하고 애플리케이션 속성키를 정돈하면서 발전시키고, 사람들의 관심이 사그라들거나 지원이 사라진 기술에 대해서는 과감하게 제거(Deprecated)한다. 그래서 스프링 부트는 새로운 버전이 출시되면 어떤 점이 달라졌고 무엇이 새롭게 추가되었는지를 파악하는 것이 꽤 중요하다. 나처럼 무턱대로 버전업 했다가 작동하지 않는 애플리케이션을 다시 재작동시키기 위한 삽질을 피하려면 ‘설명서를 잘 읽어야 한다’. 지금부터,
스프링 부트 설명서를 읽는 어느 #월급쟁이개발자 의 방법을 소개한다.
스프링 부트는 변화과정을 다양한 정보매체를 통해 비교적 상세하게 공개하고 있다. 이는 오픈소스(Open source) 라는 특성과 많은 사람이 협업하기 때문에 가능한 일이다. 자신에게 맞는 정보매체를 선택하여 스프링 부트와 관련소식을 접할 수 있는데, 내가 스프링 부트 관련소식을 접하는 경로는 다음과 같다.
트위터를 비롯해서 페이스북 등 SNS 안에 있는 개발자 커뮤니티를 기웃거리면 스프링 부트 업데이트를 비롯한 다양한 소식을 빠르게 접할 수 있다(… 나는 SNS 중독자 일지도…).
https://twitter.com/springboot
스프링 부트 출시를 비롯한 스프링 부트 관련 소식을 가장 빠르게 접할 수 있다.
한국스프링유저그룹(KSUG, https://www.facebook.com/groups/springkorea)
스프링과 관련된 다양한 활동이 이뤄지고 있는 대표적인 커뮤니티로 부지런한 누군가가 공유해주는 이런 뉴스를 빠르게 접할 수 있다. 더불어서 궁금한 점을 물으면 누군가가 답해준다.
@Outsideris(https://twitter.com/): 다양한 개발소식을 공유하는 인싸 풀스택 개발자 아웃사이더님
개발 및 일상의 다양한 소식을 엿볼 수 있다.
@ihoneymon(https://twitter.com/ihoneymon): #월급쟁이개발자
개발관련 소식은 #월급쟁이개발자 라는 태그와 함께 제공하고 있다.
스프링 부트의 변경사항을 간략하게 확인할 수 있다. 변경사항을 살펴볼 수 있는 링크를 제공는데 이 링크를 통해 보다 자세한 내용을 확인할 수 있다.
spring.io 에서 제공하는 출시노트(release note) 보다 좀 더 상세한 정보를 얻을 수 있다. 위키(wiki)라는 시스템의 특성을 살려 정식버전이 출시하기 전 마일스톤과 GA 상태일 때 관련사항을 확인할 수 있다.
스프링 부트에 대한 가장 상세한 정보를 얻을 수 있는 곳이다. 스프링 부트에 익숙하건 그렇지 않건 가장 자주 봐야한다. 스프링 부트 문서는 내용이 정말 방대하다. 거기서 더 나아가 서드파티 라이브러리를 사용하게 되는 경우 봐야하는 문서양은 정말 어마어마해진다.
스프링 부트 사용에 앞서서 가볍게 레퍼런스 문서를 가볍게 읽어준 후, 스프링 부트 입문서를 읽으면 좀 더 빠르게 이해할 수 있다. 영어라서 어렵게 느껴진다면 크롬에서 해당페이지를 ‘한국어’로 번역해서 읽어봐도 좋다. 대략적인 내용을 파악할 수 있다.
…
스프링 부트에 관한 새로운 소식을 접했으면 그 안에서 자신이 사용하는 것에 대한 변경사항을 확인해야 한다. 그 과정에서 살펴볼 수 있는 내용들을 기술한다.
예: spring-boot-starter-validation
추가: spring-boot-starter-web
모듈에 포함되어 있던 validation-api
제외되어 spring-boot-starter-validation
별도모듈로 분리되었다.
@ConfigurationProperties
클래스를 확인하여 기본속성이나 어떤 유형의 값이 적용가능한지 확인해야 한다.태그가 잘 정리되어 있어 출시버전 별 코드를 확인할 수 있다.
master
브랜치는 현재 배포되고 있는 코드와 일치한다.
current
와 일치한다.원하는 버전을 current
와 바꿔 입력하면 해당 레퍼런스 문서를 볼 수 있다.
스프링 부트의 변경사항과 권장구성은 아래 spring-boot-autoconfigure
모듈에 모여있다고 봐도 된다.
내가 사용하는 기능들을 학습하기 위해 구현한 프로젝트를 이용해서 스프링 부트를 업그레이드 하고 빌드테스트를 돌리면서 확인하는 방법이 있다. 가장 빠르고 직접적으로 자신의 프로젝트에 끼치는 영향을 확인할 수 있다.
스프링 부트가 출시되면 습관적(??)으로 업그레이드를 하는 나에게는 가장 안전하고 좋은 방법이다. 위에서 새로운 소식과 변경사항을 확인하는 방법을 거론했지만, 나는 이렇게 새로운 버전으로 업그레이드 후 뭔가가 안되면 “뭐지? 왜 안되는거야?” 라며 뒤늦게 출시노트와 참고문서를 살펴보며 변경사항을 확인한다.
그 삽질을 통해 스프링 부트의 변화를 체감하는 나는 변태인가…?
예제: https://github.com/ihoneymon/boot-spring-boot
스프링 부트는 내가 적응하는 속도보다 빠르게 변화한다. 그 변화에 적응하기 위한 나름의 요령을 정리해봤다.
사용기술 참고문서(Reference documentation)를 살피고 출시버전에 대한 출시노트(Release note)를 확인하여 자신이 알고 있던 지식과 차이점을 확인하는 방식으로 접근하길 바란다.
스프링 부트에 익숙해지려면, 지속가능한 학습 및 사용방법을 스스로 익혀야 한다. 이것을 습득하고 나면 스프링 부트가 새로운 버전을 출시해도 허둥지둥하지 않고 능숙하게 대응할 수 있을 것이다.
꾸준함을 이기는 것은 없다.
…라고 누군가 그랬지만 노는 게 좋다.