
자바와 스프링부트 프레임워크는 우리나라에서 가장 많은 서버 개발 환경입니다. 정부주도의 관공서 프로젝트에는 반드시 서버 환경을 스프링 프레임워크를 사용하도록 하고 있으며, 대기업 및 중소중견 기업에서도 선호하는 프레임워크입니다. 필자는 스프링부트를 강의해오면서 다양한 개발환경으로 인하여 헷갈려하고 입문자들을 많이 보았습니다. 이유는 구글링을 해보아도 한 눈에 내용을 파악하고 이해하기 쉬운 정리된 자료를 얻기 힘들었기 때문입니다. 그도 그런것이 스프링부트 개발환경이 너무 세분화되어 있습니다.
프레임워크(Framework)란? 애플리케이션 프레임워크(Application Framework)의 약자로서 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임입니다-위키백과. 쉽게 말하면 레고블럭처럼 미리 짜여진 소프트웨어 틀을 통해 빠르고 쉽게 애플리케이션을 제작하기 위한 소프트웨어 모임으로 보면 되겠습니다.
파편화된 스프링 프레임워크 환경을 보면 아래와 같습니다.
각각의 경우를 조합해 보면 2x2x2x3x2x3x2x2 = 576정도 경우의 수가 되니, 내게 딱 맞는 자료찾기가 어려운 상황입니다.
모든 경우의 예를 백과사전식으로 설명하기에는 지면이 부족할 뿐더러 효율적이지도 않습니다. 그래서 필자는 몇가지 원칙을 세워 책을 쓰기로 했습니다.
- 향후 5년~10년 후에도 사용할 수 있는 최신 트랜드를 반영하자
- 실무에서 현재 사용하고 있는 개발환경 고려하자
- 바로 개발현장에 투여할 수 있는 개발자가 되도록 돕자
- 이론보다는 웹앱을 만들면서 이해하는 실무적인 책을 쓰자
- 짦은 예제 프로젝트를 통해 단위 요소기술에 대한 이해를 돕자
- 강사(교수)를 위한 프리젠테이션 자료를 만들자
그래서 아래와 같이 개발 지침을 정했고, 필요에 따라서는 기능은 비슷하나 다른 기술요소에 대해서도 설명하기로 했습니다. 예를 들어 뷰 템플릿 엔진은 타임리프와 머스테치를 모두 설명할 수도 있습니다. 왜냐면 타임리프나 머스테치 모두 현재 주로 사용하는 기술이며 향후 유망한 기술 요소이기 때문입니다.
- 스프링 프레임워크 : 스프링부트(Spring Boot)
- 빌드 구성 : 그레이들(Gradle)
- 코드편집툴 : 인텔리제이 아이디어(IntelliJ IDEA)
- 데이타 접근 프레임워크 : JPA
- 데이타베이스 : MySQL
- 뷰 템플릿 엔진 : 타임리프 vs 머스테치
- 배포 파일 - BootJar
- 배포 서버 - AWS 라이트세일
각각의 기술 요소에 대한 설명과 이 책에서 선택한 이유에 대해서 알려드리겠습니다.
스프링부트 프레임워크 개발환경에서 필자가 다루기로 한 기술요소에 대한 설명과 선택한 이유입니다.

빌드 구성 : 메이븐(Maven) vs 그레이들(Gradle)
빌드구성 프로그램은 Maven과 Gradle이 있습니다. Maven은 pom.xml, web.xml 등 빌드 환경구성을 XML 형식으로 하고 있습니다. 초창기 스프링 레거시 환경에서 주로 사용하던 방식으로 단점으로는 많은 양의 XML 환경설정으로 인해 코드의 복잡성입니다. 반면 그레이들 방식은 그루비(Groovy) 언어를 기반으로 단순하고 간결한 문법이 특징입니다. 또한 라이브러리간의 의존성 체크를 자동으로 해서 특정버전의 파일들을 자동으로 매칭해 줍니다. 이미 그레이들은 안드로이드 앱 프로젝트를 구성할 때 기본으로 들어가는 빌드구성으로, 성능과 안정성, 효율 면에서 인정받았습니다. 이 책에서는 당연히 최신 트렌드인 그레이드 방식을 사용하겠습니다.
코드편집툴 : 에스티에스(STS 4.x) vs 인텔리제이 아이디어(IntelliJ IDEA)
STS4.x는 이클립스 기반으로 무료라는 장점이 있는 반면, 상대적으로 속도가 느리고, 단축키 및 부가기능면에서 아쉬운 점이 있습니다. 반면 인텔리제이는 실무에서 많이 사용하는 코드편집툴입니다. 장점으로는 빠른 빌드 속도와 단축키 및 부가기능이 우수합니다. 개발자의 코드 작성 및 빌드 등을 지원하는 기능이 많으므로 실무에서 선호하는 툴입니다. 다만 단점이라면 젯브레인이라는 회사의 제품으로서 괜찮은 기능을 사용하려면 유료 버전을 사용해야 됩니다. 하지만 학습 목적이라면 충분히 스프링부트 프로젝트를 생성하고 배포까지 할 수 있습니다.
인텔리제이 아이디어는 얼티밋 버전(유료) 및 커뮤니티 버전(무료)로 나뉩니다. 얼티밋 버젼은 아카데미(학생) 인증은 무료이고, 일반 개발자는 년간 15만원 정도 합니다. 일반 개발자라면 얼티밋 버전을 사용하겠지만, 학생들에게 유료버전을 사용하게 할 수는 없습니다. 커뮤니티 버전은 일부 기능의 제약사항이 있습니다. 가장 큰 차이점은 프레임워크 지원 여부입니다. 스프링 MVC 프로젝트 및 Thymeleaf 등의 지원여부인데, 필자가 직접 커뮤니티 버젼에서 io.start.spring로 스프링 MVC 프로젝트를 생성하고 빌드할 수 있고, Thymeleaf도 커뮤니티 버전에서도 사용 가능했습니다. 이 책에서는 인텔리제이 아이디어 커뮤니티 버젼을 사용했습니다.
자세한 사양 비교는 다음의 링크를 이용하여 홈페이지를 방문하면 됩니다.
홈페이지 URL : https://www.jetbrains.com/ko-kr/products/compare/?product=idea&product=idea-ce
단축 URL : https://bit.ly/3MJksCj

데이타 접근 프레임워크 : 마이바티스(MyBatis) vs JPA
마이바티스는 SQL을 XML에 직접 기술하고 이 XML을 Mapper 클래스(인터페이스)에 맵핑하는 방법입니다. 장점으로는 SQL문을 직접 다루므로 SQL 학습 및 조작이 용이합니다. 단점은 SQL문을 직접 다루므로, SQL 문장에 문제가 있으면 당연히 동작에 이상이 발생합니다. 마이바티스의 SQL문 직접 호출은 객체지향프로그래밍(OOP)와는 거리가 있는 방식입니다.
반면 JPA는 객제지향프로그래밍 문법을 따르면서, 직접 SQL을 다루지 않고 함수를 호출하는 방법입니다. 스프링 시큐리티(로그인/회원가입/보안 지원)와의 연동에서도 JPA를 기본으로 제공하는등 향후 스프링 프레임워크 지원은 JPA로 바뀌는 상황이므로 최신 트렌드에 맞게 JPA를 선택하도록 하겠습니다.
데이타베이스 : H2DB vs 오라클 vs 마이에스큐엘(MySQL)
H2DB는 스프링부트 Data 프레임워크에서 기본적으로 지원하는 소형 데이타베이스(DB)입니다. JPA를 시작하면서 간단하게 DB 및 코드 테스트 용으로 사용할 수 있습니다.
하지만 실무로 넘어가면 오라클이나 MySQL를 사용해야 합니다. 오라클은 MySQL과 더불어 기업에서 가장 많이 사용하는 DBMS입니다. 국비 과정평가과정 자격증 시험이나 정보처리기사(산업기사) 자격증 시험에도 기본으로 출제되는 국가공인용 DB입니다. 따라서 자격증 시험을 본다면 오라클을 선택해야 합니다. 오라클에는 오리지널과 익스프레스(Express 또는 XE) 버전이 있습니다. 오리저널 버젼을 설치 및 제거가 쉽지 않으므로, 학습목적이라면 익스프레스 버전을 사용하는 것이 좋습니다. 오라클을 상용으로 출시하고자 한다면 일부 유료 기능을 사용해야 할 수 있기 때문에 원만큼 규모있는 회사가 아니라면 무료 데이타베이스를 우선적으로 고려하게 됩니다.
상용 서버 및 무료 호스팅 서비스에서는 단연 무료 데이타베이스(DB)를 사용을 추천합니다. 원래 MySQL이 무료 데이타베이스의 대표 제품이었는데, MySQL이 오라클에 인수합병되면서 일부 기능에 대해서는 유료 기능으로 지원되고 있습니다. MySQL 커뮤니티(Community) 버전은 GPL 라이선스로 개인이나 기업이 학습 및 영리목적으로 사용해도 아무런 문제가 없습니다. 다만 소스코드를 수정후 배포시에는 수정된 소스도 함께 제공해야 됩니다. MySQL의 유료버전인 스탠다드(Standard), 엔터프라이즈(Enterprise), 클러스터(Cluster) 버전의 경우 백업, 모니터링, 고가용성(HA)등의 고급기능을 지원합니다.
MySQL의 대안으로는 마리아DB(MariaDB)와 포스트그리 스큐엘(PostgreSQL)이 있겠습니다. 마리아DB는 MySQL 개발진들이 이동하여 만든 DB로서 MySQL과 호환성이 높습니다. MySQL을 다뤄본 사용자라면 쉽게 이동하여 DB를 바꿀 수 있습니다. 포스트그리스큐엘은 요즘 들어 사용율을 올라가면 주목받는 DB입니다. 20년동안 무료정책으로 여러 개발자 사이에서 꾸준히 성장해 온 DB이고, ANSI SQL 표준 규약도 잘 준수하고 있고 있습니다. 향후 서버 호스팅(임대)나 배포시에 사용해 볼 만한 DB입니다.
이 책에서는 MySQL을 기본으로 설명하겠습니다.
뷰 템플릿 엔진 : JSP vs 타임리프(Thymeleaf) vs 머스테치(Mustache)*
JSP는 국가공인 정보처리기사 시험이나 관공서/기관/대기업 등에서는 아직 많이 사용중이나, 스프링 부트에서는 JSP를 공식 지원하지도 않습니다. 이유는 제티나 톰캣을 포함한 단독실행 가능한 jar 파일을 사용할 수 없기 때문입니다. 또한 JSP가 무거워 많은 메모리를 차지해서 라고도 합니다.
타임리프는 스프링부트 프레임워크에서 밀고있는 공식지원 뷰 템플릿 엔진입니다. 하지만 논리 + 값 표현을 함께 html파일 안에서 하고 있기 때문에, JSP만큼이나 코드가 복잡해 지는 경향이 있습니다. 타임리프는 인텔리제이 얼티밋(IntelliJ Ultimate) 버전에서만 공식지원하나, 그레이들 추가시에는 커뮤니티 버젼에서도 직접 설정을 통해 사용이 가능함을 필자가 직접 확인했습니다.
머스테치는 값 표현(논리 기능 없음)만 가능해서 심플한 표현이 좋습니다. 그외의 숫자,날짜 값의 형식화된 문자열 처리는 자바스크립트 플러그인을 통해 간결하게 사용가능했습니다.
따라서 이 책에서는 타임리프와 머스테치를 함께 설명하도록 하겠습니다.
배포 파일 - Jar( BootJar ) vs War ( BootWar )
Jar와 War는 자바 실행파일 배포를 위한 압축파일 포맷입니다. Jar는 일반 자바프로그램 배포를 포괄하는 개념이고, War는 웹 자바프로그램에 특화된 압축 파일입니다. War에는 웹 서버 및 WAS에 실행환경도 함께 포함됩니다. Jar와 War는 큰 차이점이 없다고 봐도 무방합니다. BootJar와 BootWar는 톰캣 내장 서버까지 함께 배포하여, 실행파일 BootJar나 BootWar 만으로 단독실행이 가능한 실행파일입니다.
이 책에서는 BootJar를 이용한 배포 환경을 구성하겠습니다.
배포 서버 - AWS EC2 vs ASW 라이트세일 vs 가상서버 호스팅
배포 서버를 운용하려면, 클라우드 방식과 가상서버 방식이 있습니다. 클라우드 방식은 사용자 계정만 있으면, 상대적으로 서버 설정을 자동화해 주므로, 편하게 웹 프로그램 배포가 가능합니다. 반면 가상서버 방식은 물리 서버 PC에 가상의 공간을 내 컴퓨터 공간처럼 사용하게 해주는 서비스로, 서버 설정을 본인이 다 해야 합니다. 자유도가 높은 만큼 환경설정을 잘 해야 운용이 가능합니다. 가상서버 방식이 클라우드 방식보다 가격이 저렴한 편입니다.
AWS EC2 클라우드 서비스는 AWS의 보편적인 서버 호스팅방식이고, 사용자계정 생성후 1년간 무료이고 이후에 사용량만큼 과금이 되는 종량제 서비스입니다. 개인사용자에게는 상대적으로 비용이 비싼 편입니다. AWS 라이트세일은 EC2 서비스에서 저렴한 월정액 서비스입니다. AWS의 가상서버 서비스버전이라고 할 수 있겠습니다. 3달무료 후 한달에 5천원 발생(데이타베이스는 1만5천원정도)합니다.
개인 학습자라 할지라도 기업에서 주된 배포 플랫폼으로 사용하는 AWS 사용경험은 중요합니다. 이 책에서는 AWS 라이트세일을 사용하겠습니다.
추가적으로 자바 JDK(Java Development Kit)은 오라클 JDK 17버전을 사용할 것입니다. JDK 8(또는 1.8)버전은 최신 이클립스에서 더이상 지원하지 않습니다. JDK 19버전도 있으나 최신 JDK라서 인텔리제이 아이디어 같은 툴에서 아직 최신지원을 하고 있지 않습니다. 17버전을 사용해도 충분하리라 생각됩니다.
이 책의 모든 예제 소스는 깃허브에 있습니다.
깃허브 URL : https://github.com/nissi153/hongong-springboot
단축 URL : https://bit.ly/3VtkdiA