월간 지앤선


글 이정현


2018년 8월 27일(월) 오후 7시 30분. 

역삼동 마루 180에서 오랜만에 지앤선 북콘서트(https://jiandson.co.kr/event/bookconcert/boot-spring-boot)가 열렸다. 월요병을 이겨내고 사람들이 하나 둘씩 강연장을 찾았다이번 북콘서트는 2018년 7월 30일에 출간한 <Boot Spring Boot! 스프링 부트 시작하기> 책의 저자 김지헌님의 강연으로 채워졌다.



김지헌님은 허니몬(honeymon, http://honeymon.io) 이라는 이름으로 온라인에서 활동을 하고 있는 개발자다. 2013년부터 지금까지 KSUG(Korea Spring User Group)에서 활동하면서 스프링 캠프(Spring Camp)와 크고 작은 세미나들을 준비하고 운영해왔다고 한다. 이제 우아한 형제들에 이직한지 3개월이 지나 막 수습 딱지를 떼 본색을 들어낼 예정이라며 의미심장한 웃음을 지었다.

스프링 부트가 세상에 알려진지 벌써 5년이 넘었다. 2018년 3월 1일에 스프링부트 2.0이 릴리즈 되었는데 지헌님 생일도 3월 1일이라 스프링 부트와 운명으로 이어진 것 같다고 했다. 보통의 개발서적은 프로젝트 생성, DB 연동, View 구현 등 일관적인 내용이 많은데에 반해 좀 더 실용적이고 노하우가 담긴 책을 내고 싶다는 바람을 갖고 있었다고 한다. 특히 스프링 부트의 다양한 장점을 표현하려고 보니 스프링 부트 참고 문서가 잘 되어 있어서 그 흐름을 따라서 쓰면 좋겠다고 생각해 책을 진행했다고. 



스프링 부트를 왜 써야 하는가? 

새로운 기술을 도입할 때에는 함께 하는 개발자들을 설득하는 과정이 필요하기도 하다. 
김지헌 님은 이런 경우에 스프링 부트를 일단 사용해 보라며 6하원칙에 따라 스프링 부트를 정의했다. 


누가?
- 자바, 코틀린, 그루비 언어를 사용하는 개발자가

언제?         
- 서비스 개발을 빠르게 해야 할 때

어디서?      
- JVM을 가지고 있는 운영체제에서

무엇을?     
- 서비스 애플리케이션을

어떻게? 
- 스프링 부트가 제공하는 다양한 기능을 조합해서

왜? 
- 쉽고 빠르게 개발할 수 있기 때문에



쓸만 한가? 

스프링 부트 가이드 문서(http://spring.io/guides/gs/rest-service/) 상단에 대략 15분이면 스프링부트 기능을 살펴볼 수 있다고 적혀있다. 진짜 15분이면 될지는 각자의 몫으로.. 여하튼 그렇게 간단히(?) 기본 기능들을 살펴보고 나면 이런 녀석들도 알아야 한다고.

1. 빌드 도구 - Gradle vs Maven

2. 스프링 프레임워크

3. 스프링 부트

4. 3rd party 라이브러리


하면 할수록 더 많은 것을 끊임없이 공부해야 하는 것은 개발자의 숙명과 같은 것이지만, 어쨌든 홈페이지에 있는 spring-boot-starter- 를 시작으로 하는 많은 모듈을 활용해 간단히 뚝딱뚝딱 프로젝트를 구성하고 바로 서비스를 구현할 수 있다는 점에서 진입장벽이 꽤 낮다고 볼 수 있다. 지헌님은 우리나라 개발자들은 MyBatis 를 가장 먼저 찾지 않을까 싶다는 코멘트를 남겼다.



인생은 B(Birth) - C(Choice) - D(Death) 다.   - 장 폴 사르트르
개발자 인생도 B - C - D다.   - 허니몬

 Build - Code - Deploy



Build

Java vs Kotlin
지헌님은 현재 Java를 주력으로 사용하고 계시다고

 Gradle vs Maven
Gradle은  Java 외에 Groovy에 대한 이해가 필요해서 학습 노드가 좀 걸림. Maven central repository를 사용할 수 있기 때문에 편함.
이번 책은 Maven 보다 Gradle을 기반으로 설명하고 있음
그래들이라고 하는 사람들이 많은데, 호주 분이 그래이들로 발음하는게 맞다고 했다고.

 jar vs war
실행가능한 jar와 war 둘다 생성 가능 
자기 자신으로 실행 가능하도록 jar로. 실행가능한 jar 로 배포하는 것을 권장하고 있음

 버전 1.5.x (spring 4 기반) vs 버전 2.x (spring 5기반)
자바8을 완벽히 지원 하느냐 여부의 차이
2019년 8월부터는 1.x 버전 지원을 안하기로 했으니 새로 시작하는 프로젝트는 2.x 버전으로



Code

코드 챕터에 접어 들어서는 Spring 홈페이지 웹상에서 프로젝트를 생성하는 방법, IDE 에서 설정하는 법, 구성된 프로젝트의 설정 값을 확인하고 활용하는 법 등 다양한 내용을 후다닥 훑었는데 Spring Boot 구조를 조금 구경할 수 있었다. 강의 중간 중간 지나치듯 던진 사용 TIP 이나 조언들이 있어 정리해 본다.

▶ Lombok 이전 버전에 일부 버그가 있으니 1.18.2 버전 쓰길 권장
 Spring Boot 가이드에서는 뷰 템플릿 엔진 중, 오래전부터 Freemarker보다는 Thymeleaf 를 밀고 있는 듯
 로컬에서 개발 할 때도 Dev, Test, Production 과 동일한 조건(Docker 이용해서 Mysql 컨테이너 띄우는 등)에서 테스트 할 수 있도록 개발 하기를 권장
 Gradle 설정
- bootJar 셋팅을 비활성화 하면 Jar 작동 비활성됨. bootWar 비활성화 해도 마찬가지
- dependency 설정할 때 starter-web 선언하면, starter-tomcat 안해도 실행 가능함
 auto-configuration 은 기술 흐름에 따라 관례적으로 적용해 놓음
 application.yml 
- debug true 로 설정하면 서비스 실행 후 AutoConfiguration 상태 확인 가능
속성 변경 할 때 민감한 것들이 있으니 조심해야 함 (flyway clean-on-validation-error:true 같은 거 잘못 쓰면 데이터 다 날리는 낭패가 생길수도)
local, dev, alpha, real 같이 프로파일(=실행환경)을 정의할 수 있음
multi module 을 포함하는 프로젝트 경우, 각 module 마다 다른 application.yml 설정을 참조하게 할 수 있음. include 를 활용해서 상속할 수도 있음
 MainApplication class 를 root pacakge에 꼭 놓아야 함
 3rd-party 라이브러리 사용이 필수. 라이브러리 공부 많이 해야
 document reference 문서 정독하고 개발하라

그리고 스프링 환경에 대한 이해가 필요한데, 토비 님 Spring 책, 최범균 님 Spring 책, 백기선 님 강의 등 자료가 많고 기헌님도 도움을 많이 받았다고 한다.  그 외 Cloud Native Java 책 이야기도 잠깐 했었는데, 지헌님도 스터디 하고 있다고.


Deploy

1.5 버전에서 2.0 버전으로 업그레이드를 할 때, Properties Migration 할 수 있는 모듈을 지원하고 있다고 했는데, 조만간 1.5에서 2.x 버전으로 업그레이드 하면서 생긴 에피소드를 블로그나 위키에 공유할 것이라고 했다.


지긋이 눈을 감으면서 차분히 강연 내용을 더듬어 가는 모습이 인상적이었다. 가늘게 떨리는 목소리에서 긴장감이 느껴져 듣는 내내 나도 긴장이 되었다. 
강의가 끝나고 퀴즈를 통해 지앤선 도서를 상품으로 나눠줬다. Q&A나 강연자, 참석자 간의 네트워킹 시간이 없어서 조금 아쉬웠다. 
다음 북콘서트에서는 조금 더 서로 소통할 수 있는 시간이 있기를 바란다.

아참, 10월 중에 스프링부트 실습 세미나를 주말동안 진행할 예정이라고 하니 지앤선 페이스북 페이지를 팔로우 해두자!

지헌 님이 강연 마지막에 강조하신 한 말씀을 끝으로 북콘서트 참석기를 마무리한다.
공부하는 것을 멈추지 말라. Never Ending Study