Easy Understanding

Spring Initializr를 통해 보는 스프링 각종 모듈 알아보기(1) - Developer tools, Web, Template Engine, Security, Sql, Nosql 본문

Spring

Spring Initializr를 통해 보는 스프링 각종 모듈 알아보기(1) - Developer tools, Web, Template Engine, Security, Sql, Nosql

appleg1226 2020. 11. 9. 21:22

이번 글은 Spring Initialzr(start.spring.io/)에서 추가할 수 있는 스프링의 모듈은 어떤 것이 있는가를

전체적으로 쭉 훑어보고자 합니다. 

간단한 설명과 함께 참조할만한 링크들을 함께 작성할 예정입니다.

SpringBoot 2.3.5 버전을 기준으로 설명합니다.

 


 

스프링은 기본적으로는 웹 서비스를 만들 수 있는 자바의 대표적인 웹 프레임워크입니다.

앞으로도 설명하겠지만 지원할 수 있는 건 다 지원한다 싶을 정도로 엄청난 생태계를 갖추고 있습니다.

 

많은 모듈들이 있으나 실제로 적용해야할 모듈은 몇 개 되지 않을 수도 있습니다.

그럼에도 어떤 도구가 있는지 미리 알아두는 것은 스프링을 사용하는 데에 있어서 도움이 됩니다.

 

출처: start.spring.io

 

 

스프링 initializr에서는 원하는 모듈을 Dependencies에서 추가할 수 있습니다.

스프링부트 환경에서 서로 다른 모듈들 간에 충돌 없이 간단하게 추가할 수 있어서 매우 유용합니다.

웹 페이지 이외에도 IntelliJ Ultimate Edition 등 IDE에서도 동일하게 Spring Initializr를 이용할 수 있습니다.

 

 

Developer Tools과 Web 같이 중간 분류만 20개가 넘게 있습니다.

 


1. DEVELOPER TOOLS

스프링 개발에 보조적으로 도움이 될만한 모듈들이 포함되어 있습니다.

실제 서비스 기능에는 영향을 미치지는 않습니다.

- Spring Boot DevTools(취향에 따라 사용)

Devtools는 보통 스프링 어플리케이션을 띄웠을 때, 재시작하지 않고 코드의 변화를 반영시킬 때 사용합니다.

HTML 파일의 경우 LiveReload 기능을 제공해, 저장하면 그 변화가 페이지에 바로 나타나게 할 수도 있습니다.

참고) velog.io/@bread_dd/Spring-Boot-Devtools

- Lombok(추천, 거의 필수)

저는 Lombok은 거의 필수적으로 넣고 들어갑니다. class에 getter, setter, toString, equals, hashcode, constructor, builder 패턴 메소드까지 어노테이션으로 간단하게 지정해줄 수 있어, 자바 특유의 장황한 클래스를 줄여주는 좋은 툴입니다.

- Spring Configuration Processor(도입할만 함)

스프링 개발을 하면서 application.yaml 또는 application.properties를 작성할 때 추천을 받고 싶다면 이 기능을 쓰면 됩니다. 

다만 intelliJ의 경우 Annotation Processor를 켜고 Spring assistant를 켜야 정상적으로 이용할 수 있습니다.

이외에도 내 클래스에 application 파일에 있는 설정값을 주입하고 싶다면 @ConfigurationProperties 를 사용해주면 됩니다.

참고) www.baeldung.com/spring-boot-configuration-metadata


2. WEB

웹서비스를 만들 때 필수/도움이 되는 모듈들이 모여 있습니다.

- Spring Web(중요)

말해 뭐하나 싶을 정도로 웹 서비스를 만드는 데에 가장 중요한 모듈입니다.

내장 톰캣뿐 아니라, Spring MVC 패턴을 구현하는 데에 필요한 대부분의 기능들이 여기에 들어 있습니다.

REST API 서버를 만든다면 필수적인 모듈입니다.

- Spring Reactive Web(추천! 물론 학습 후)

최근 웹 개발의 가장 큰 트렌드는 Reactive한 서비스입니다.

Reactive Web에는 Reactive Stream의 구현체인 Reactor가 기반인 Webflux가 포함되어 있으며,

Servlet Container도 Netty로 바뀌며 전체적인 구성 자체가 많이 달라 졌습니다.

기존과 굉장히 다른 개발 방식을 따르기 때문에 기술을 제대로 이해하는 것도 중요합니다.

참고) dreamchaser3.tistory.com/6

- Rest Repositories / Rest Repositories HAL Explorer(필요시 도입해 볼 만 함)

이건 Spring Data Repository들을 Rest API를 통해 접근할 수 있게 해주는 모듈입니다.

기존에 하나하나 컨트롤러를 통해서 만들어주던 것을 이 의존성을 추가하면 어느정도 자동화할 수 있습니다.

일정한 규칙에 맞게URL을 작성하여 요청을 보내면 CRUD를 모두 처리할 수 있습니다.

특별히 가공된 데이터를 다룰 일이 없다면 이 모듈을 추가하는 것도 고려해볼만 한 것 같습니다.

추가로 HAL Explorer는 browser를 통해서 GUI로 Rest Repositories를 관리/테스트 할 수 있습니다.

- Spring Session(필요시 사용)

유저 세션을 다루는 API와 메서드들을 모아놓은 모듈입니다.

Redis와 같은 DB와 함께 관리합니다.

- Spring HATEOS(필요시 사용)

우리가 사용하고 있는 Rest API는 사실 대부분 Rest API의 요건을 충족시키지 않고 있습니다.

진정한 Rest API는 HATEOAS(Hypermedia As The Engine Of Application State) 방식을 따르고 있습니다.

그래서 그런 API의 작성을 도와주는 모듈입니다.

HATEOS 관련 유명한 발표자료가 있어 링크로 남깁니다.

참고) velog.io/@max9106/Spring-Boot-HATEOASslides.com/eungjun/rest#/13

- Spring Web Services(사용 빈도 낮음)

이름은 누가봐도 가장 중요해보이지만 요새 잘 사용하지 않는 SOAP API 구현을 위한 모듈입니다.

- Jersey(쓰던 사람만, 중요도 낮음)

Jersey는 자바 진영에서 공식으로 제공하는 Rest API 서비스 프레임워크입니다.

즉 스프링 Controller를 대신하는 다른 개발 방식과 관련된 모듈입니다.

이미 스프링을 쓰는 사람은 굳이 사용할 필요는 없어 보입니다.

- Vaadin(신기하다) 

이건 저도 좀 신기합니다. Vaadin은 JAVA 기반 웹 UI 프레임워크라고 합니다.

즉 자바 코드로 웹 뷰를 그릴 수 있게 해주는 프레임워크입니다.

간단한 대시보드 같은 것을 만들 때 유용하게 사용할 수 있을 것 같습니다.

참고) jsonobject.tistory.com/411


3. TEMPLATE ENGINES

Thymeleaf / Apache Freemarker / Mustache / Groovy Templates

Spring은 자체적으로 HTML 뷰를 내장하고 있고 거기에 적용할 수 있는 템플릿 엔진이 위처럼 네 가지가 있습니다.

서버 개발 말고 실제로 페이지를 만들어야 한다면, 본인의 취향에 맞는 문법을 가진 템플릿을 사용하면 됩니다.

요새는 프런트엔드가 따로 나뉘어져 있어서 테스트용이 아니라면 굳이 사용할 빈도가 크지는 않을 것 같습니다.

 


4. SECURITY

보안과 관련된 모듈들이 모여 있습니다. 

- Spring Security(중요)

회원관리에 필요한 것들이 대부분 들어가 있는 중요한 모듈입니다.

굉장히 다양한 방식으로 커스터마이징을 할 수 있습니다.

내용이 많아 하나의 프레임워크 수준입니다. 너무 유명해 이 정도만 하고 넘어 가겠습니다.

- OAuth2 Client / OAuth2 Resource Server(중요)

OAuth2는 요새 Security 관련해서는 거의 필수적인 기능으로 꼽히고 있습니다.

그런 서비스를 더욱 편리하게 해주는 모듈입니다.

- Spring LDAP(필요시 사용, 중요도 낮음)

LDAP 보안 방식을 쉽게 이용할 수 있도록 해주는 모듈입니다.

좀 알아보려고 했는데 복잡해서... 나중에 공부하겠습니다.

- Okta(필요시 사용, 중요도 낮음)

알아보니 Okta 라는 보안 솔루션과 연동하기 위한 모듈입니다.

해외 문서는 많은데 국내에서는 많이 사용하지 않는 듯 합니다.


5. SQL

Database, RDBMS와 관련된 모듈들이 모여있습니다.

- JDBC API(필요시 사용)

Java JDBC를 스프링 환경에서 사용할 수 있게 해주는 기본 모듈입니다.

데이터베이스를 이용할 수 있는 가장 기초적인 방법을 제공합니다.

- Spring Data JPA(필수)

JPA는 Java Persistence API라고 하여 자바 ORM 기술의 토대를 이루는 기술 명세입니다.

Spring JPA는 Hibernate를 사용하고 있으며, Spring에서는 DB를 다루는 거의 표준 기술인 상황입니다.

Class Entity를 마치 DB처럼 사용할 수 있는 매우 유용한 도구이지만, 학습량이 만만한 도구는 아닙니다.

- Spring Data JDBC(추천)

이름만 봐서는 옛날 기술인줄 알았는데, 의외로 얼마 안 된 기술입니다.

JPA의 복잡함에 대응하여 간단하고 빠른 것을 특징으로 합니다.

아직 기술의 동향을 지켜본 다음 사용할 만 할 것 같습니다.

- Spring Data R2DBC(추천)

Reactive한 웹 서비스에 걸맞는 기능을 제공하는 모듈입니다.

Spring Reactive Web에서 RDBMS를 사용하기 위해서는 거의 필수입니다.

현재 지원하는 DB는 H2, MSSQL, Mysql, MariaDB, Postgres가 있습니다.

- Mybatis Framework(예전엔 중요했으나 지금은 보통) 

Mybatis는 XML 파일을 사용하여 Query문을 직접 작성하여 DB를 관리하는 프레임워크입니다.

스프링 환경에서 직접 지원하고 있는 Mybatis 모듈입니다.

- Liquibase Migration / Flyway Migration(도입할 만 함)

DB를 형상관리할 수 있다는 것을 이 둘을 보고 처음 알았습니다.

DB도 문제가 생기는 것을 방지하기 위한 방법이 필요한데 그것을 지원해주는 Migration 툴들입니다.

자세한 것은 링크를 참고바랍니다.

 

참고) www.popit.kr/%EB%82%98%EB%A7%8C-%EB%AA%A8%EB%A5%B4%EA%B3%A0-%EC%9E%88%EB%8D%98-flyway-db-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-tool/

- JOOQ Access Layer(쓸만한 도구)

QueryDSL이라고 들어보셨나요. QueryDSL은 sql 쿼리문을 자바 코드로 동적으로 날릴 수 있도록 해주는 라이브러리입니다.

그리고 이 JOOQ도 마찬가지 기능을 제공합니다.

그러나 스프링에서 정식으로 지원은 JOOQ만 하고 있네요.

- H2 Database(추천, 자주 사용)

개발용 서버에서 따로 DB를 붙일 필요가 없다면 이걸 추가해주면 됩니다.

H2는 메모리를 데이베이스로 사용하는 즉각 설치되는 데이터베이스입니다.

의존성에 추가하는 것만으로도 데이터베이스 설정을 전혀 할 필요가 없이 바로 사용할 수 있습니다.

 

그러나 개발 전용이기 때문에 어플리케이션이 종료될 때 내부 데이터가 모두 사라집니다.

 

추가로 GUI 콘솔로 진입할 수 있는 url도 자동으로 제공됩니다.

- Apache Derby Database(잘 안 씀)

java로 구현된 가벼운 데이터베이스라고 합니다.

들어보는 것으로 만족하겠습니다.

- HyperSQL Database(잘 안 씀)

H2와 같은 인메모리 DB인데 이것도 요새는 별로 안 쓰는 것 같습니다.

- IBM DB2 / MS SQL Server / MySQL / Oracle / PostgreSQL Driver(중요)

각종 데이터베이스들의 연결 드라이버를 지원합니다.

여기에 필요한 것만 체크만 해주면 DB 연결 준비가 끝납니다.

이후에는 위의 JDBC나 JPA를 함께 추가하여 application.yaml에 세부 설정만 입력해주면 됩니다.


6. NOSQL

NoSQL에 있는 모듈들은 모두 특정 DB를 연결하고 사용하는 것과 관련되어 있습니다.

지원되는 NoSQL을 정리해보면

Redis, MongoDB, ElasticSearch, Apache Solr, Apache Cassandra, Apache Geode, Couchbase, Neo4j 

를 스프링 Support로 이용하실 수 있습니다.

 

또한

Redis, MongoDB, Apache Cassandra, Couchbase

의 경우 Reactive Web과 함께 이용할 수 있는 모듈이 따로 준비되어 있습니다.