웹 개발을 하려면 톰캣, 제티, 언더토우 같은 서블릿 컨테이너를 설치하고, 프로젝트 내에 필요한 환경을 구성해야 한다. 대표적인 자바 애플리케이션 프레임워크인 스프링 역시 개발 환경 설정이 만만치 않다. 그럼에도 불구하고 스프링은 자바 대표 프레임워크로 자리 잡았다. 안정성, 성능, DI(의존성 주입) 등 매우 강력한 장점을 지니고 있기 때문이다.
스프링 부트는 필요한 환경 설정을 최소화하고 개발자가 비즈니스 로직에 집중할 수 있도록 도와줘 생산성을 크게 향상시킨다.
스프링 부트 프로젝트 메인 사이트로 들어가면 'Just Run' 이라는 문장을 만나게 된다. '스프링 부트는 간단한 설정만으로도 빠르게 실행할 수 있다' 는 것을 강조하고 있다. 스프링 부트의 주요 특징은 다음과 같다.
간혹 스프링 부트를 스프링 프레임워크와 전혀 다른 것으로 오해한다. 그래서 스프링에 대해 잘 몰라도 스프링 부트를 할 수 있다고 생각한다.
결론적으로 말하면 스프링 부트는 스프링 프레임워크라는 큰 틀에 속하는 도구일 뿐이다. 단지 'JUST RUN' 에 가까워지도록 많은 설정을 간소화하기 위해 노력한 도구이다. 따라서 스프링 부트를 자유자제로 사용할 수 있다면 오히려 스프링 프레임워크의 장점까지 더해 더 빠르게 서비스를 개발할 수 있다.
실무에서 사용하는 스프링 부트 프로젝트는 어떻게 구성될까? 네이버 카페와 비슷한 커뮤니티 서비스를 만든다고 하면 어떠한 프로젝트들이 필요할까? 또 어떻게 설계할 수 있을까?
보이는 뷰 페이지와 이를 보여줄 웹 서비스가 필요할 것이다. 게시판이니 회원 기능도 있어야 할 것이다. 패스워드와 아이디를 사용한 로그인 인증 혹은 OAuth2 를 사용하여 소셜 인증을 통해 회원 관리를 하는 기능도 필요할 것이다. 이런 모든 동작에는 DB를 사용하여 데이터를 저장하는 REST API 서버도 필요하다.
그뿐만 아니라 백엔드(back-end) 에서 주기적으로 어떤 동작의 로직을 구현할 수도 있다. 예를 들어 활동을 멈춘 지 1년이 지난 회원은 휴면회원으로 전환시킬 수 있다.
__
앞으로 만들 스프링 부트 커뮤니티 시스템 설계도이다.
현업에서는 이보다 훨씬 더 복잡할 것이다. 설계도에서 각각의 프로젝트 역할은 다음과 같다.
스프링에서는 의존 관계를 개발자가 일일이 설정해 번거로웠지만 스프링 부트에서는 스타터를 이용해 간편하게 설정할 수 있다. 스프링 부트 스타터가 빌드에 필요한 의존성을 자동으로 관리해주기 때문이다. 스타터를 '특정 목적을 달성하기 위한 의존성 그룹' 이라고 생각하면 이해하기 쉽다.
스프링 부트 스타터는 개발자에게 엄청난 편리함을 제공해준다. 예를 들어 DB 연동에 스프링과 JPA 가 필요하다면 pom.xml(메이븐) 이나 build,gradle(그레이들) 에 spring-boot-starter-data-jpa 만 추가해주면 된다. 일일이 어떤 라이브러리가 필요한지 찾아볼 필요가 없다.
스프링 부트에서 제공하는 스타터의 명명규칙을 살펴보겠다. 스타터의 기본 형식은 다음과 같다.
spring - boot - stater - *
*에 해당 스타터명을 명시하면 된다.
예를 들어 스프링에서 웹 관련 프로젝트를 진행한다고 했을 때 사용하는 스타터명은 다음과 같다.
spring - boot - starter - web
명명규칙을 알면 원하는 스타터를 쉽게 찾을 수 있다.
스타터 내부의 의존성을 확인하는 이뉴는 다음과 같다.
spring-boot-starter 는 다음 여섯 가지 의존성을 제공한다.
스프링 부트 프러젝트의 의존성을 다룬 문서는 모두 깃허브에 공개되어 있다. 따라서 아래 깃허브에서 스타터에 명시된 버전을 확인할 수 있다.
위 URL로 접속한 후 spring-boot-project -> spring-boot-dependencies 로 이동하면 pom.xml 파일이 있다. pom.xml 파일을 클릭하면 의존성 설정의 기본 버전을 확인할 수 있다.
이 책에서는 기본적인 Web, Security, OAuth2, JPA, REST, Batch 스타터를 다룬다. 이 정도만 해도 서비스 하나를 구축할 수 있는 핵심 스타터라 할 수 있다. 스터디를 하면서 각 스타터가 무엇인지 간단히 살펴본다.
앞으로 사용할 애플리케이션 스타터를 표로 정리해보았다.
스터디명 | 설명 |
---|---|
spring-boot-starter | 스프링 부트의 코어, auto-configuration, logging, yaml 제공 |
spring-boot-starter-aop | 관점 지향 프로그래밍을 위한 스타터 |
spring-boot-starter-batch | 스프링 배치를 사용하는 데 필요한 스타터 |
spring-boot-starter-data-jpa | 스프링 데이터 JPA와 하이버네이트를 사용하는 데 필요한 스타터 |
spring-boot-starter-data-redis | 메모리 저장 방식의 저장소인 레디스(Redis)와 자바에서 쉽게 레디스를 사용하게끔 돠와주는 제디스(Jedis) 설정 자동화 스타터 |
spring-boot-starter-data-rest | 스프링 데이터 저장소 방식에 맞춘 REST API를 제공하는 데 사용하는 스타터 |
spring-boot-starter-thymeleaf | 타임리프 템플릿 엔진을 사용하는 데 필요한 스타터 |
spring-boot-starter-jdbc | 톰켓 JDBC 커네셕 풀에 사용하는 스타터 |
spring-boot-starter-security | 각종 보안에 사용하는 스프링 시큐리티 스타터 |
spring-boot-starter-oauth2 | OAuth2 인증에 사용하는 스타터 |
spring-boot-starter-validation | 자바 빈 검증에 사용하는 스타터 |
spring-boot-starter-web | 웹을 만드는 데 사용하는 스타터(스프링 MVC, REST형, 임베디드 톰캣, 기타 라이브러리 포함 |
스프링 부트와 스프링 부트 스타터에 대해 간단히 살펴보았다. 그리고 스프링 부트의 특징을 활요하여 커뮤니티 게시판을 설계해보았다. 이후 과정에서 프로젝트를 진행하고 지속적으로 업그레이드하며 활요할 것이다. 다음엔 개발 환경을 세팅하고 본격적으로 프로그래밍에 들어가겠다.