스프링 부트 시작(개발부터 배포까지) - 1

PM/iOS Developer KimKU·2022년 8월 11일
0

1. 스프링 부트 소개

웹 개발을 하려면 톰캣, 제티, 언더토우 같은 서블릿 컨테이너를 설치하고, 프로젝트 내에 필요한 환경을 구성해야 한다. 대표적인 자바 애플리케이션 프레임워크인 스프링 역시 개발 환경 설정이 만만치 않다. 그럼에도 불구하고 스프링은 자바 대표 프레임워크로 자리 잡았다. 안정성, 성능, DI(의존성 주입) 등 매우 강력한 장점을 지니고 있기 때문이다.
ㄹㅎ

스프링 부트는 필요한 환경 설정을 최소화하고 개발자가 비즈니스 로직에 집중할 수 있도록 도와줘 생산성을 크게 향상시킨다.

1.1.1 스프링 부트 특징

스프링 부트 프로젝트 메인 사이트로 들어가면 'Just Run' 이라는 문장을 만나게 된다. '스프링 부트는 간단한 설정만으로도 빠르게 실행할 수 있다' 는 것을 강조하고 있다. 스프링 부트의 주요 특징은 다음과 같다.

  • 임베디드 톰캣, 제티, 언더토우를 사용하여 독립 실행이 가능한 스프링 애플리케이션 개발
  • 통합 스타터를 제공하여 메이븐.그레이들 구성 간소화
  • 스타터를 통한 자동화된 스프링 설정 제공
  • 번거로운 SML 설정을 요구하지 않음
  • JAR을 사용하여 자바 옵션만으로도 배포 가능
  • **애플리케이션의 모니터링과 관리를 위한 스프링 액츄에이터(Spring Actuator) 제공

1.1.2 스프링 부트와 스프링

간혹 스프링 부트를 스프링 프레임워크와 전혀 다른 것으로 오해한다. 그래서 스프링에 대해 잘 몰라도 스프링 부트를 할 수 있다고 생각한다.

결론적으로 말하면 스프링 부트는 스프링 프레임워크라는 큰 틀에 속하는 도구일 뿐이다. 단지 'JUST RUN' 에 가까워지도록 많은 설정을 간소화하기 위해 노력한 도구이다. 따라서 스프링 부트를 자유자제로 사용할 수 있다면 오히려 스프링 프레임워크의 장점까지 더해 더 빠르게 서비스를 개발할 수 있다.
ㄹ


1.2 커뮤니티 게시판 기능 고안하기

실무에서 사용하는 스프링 부트 프로젝트는 어떻게 구성될까? 네이버 카페와 비슷한 커뮤니티 서비스를 만든다고 하면 어떠한 프로젝트들이 필요할까? 또 어떻게 설계할 수 있을까?

보이는 뷰 페이지와 이를 보여줄 웹 서비스가 필요할 것이다. 게시판이니 회원 기능도 있어야 할 것이다. 패스워드와 아이디를 사용한 로그인 인증 혹은 OAuth2 를 사용하여 소셜 인증을 통해 회원 관리를 하는 기능도 필요할 것이다. 이런 모든 동작에는 DB를 사용하여 데이터를 저장하는 REST API 서버도 필요하다.

그뿐만 아니라 백엔드(back-end) 에서 주기적으로 어떤 동작의 로직을 구현할 수도 있다. 예를 들어 활동을 멈춘 지 1년이 지난 회원은 휴면회원으로 전환시킬 수 있다.

__

1.3 스프링 부트로 커뮤니티 게시판 설계하기

앞으로 만들 스프링 부트 커뮤니티 시스템 설계도이다.
ㅇ
현업에서는 이보다 훨씬 더 복잡할 것이다. 설계도에서 각각의 프로젝트 역할은 다음과 같다.

  • 1. 세션 레디스(Session Redis), H2(또는 MySQL): 세션을 관리하는 NoSQL(레디스)과 기본 데이터 저장을 위한 RDB(H2, MySQL) 사용
  • 2. 스프링 부트 웹 MVC(Spring Boot Web MVC): 기본적인 커뮤니티 페이지
  • 3. 스프링 부트 세션 레디스(Spring Voot Session Redis): 레디스를 사용한 세션 관리
  • 4. 스프링 부트 시큐리티(Spring Boot Security) / 스프링 부트 OAuth2(Spring Boot OAuth2): 커뮤니티의 회원 인증 및 권한 처리
  • 5. 스프링 부트 데이터 레스트(Spring Boot Data REST): REST API 만들기
  • 6. 스프링 부트 배치(Spring Boot Batch): 주기적으로 백엔드 작업 처리. 예를 들어 페이스북 API 를 사용하여 게시판의 공유 개수를 DB에 저장

1.4 스프링 부트 스타터 들여다보기

스프링에서는 의존 관계를 개발자가 일일이 설정해 번거로웠지만 스프링 부트에서는 스타터를 이용해 간편하게 설정할 수 있다. 스프링 부트 스타터가 빌드에 필요한 의존성을 자동으로 관리해주기 때문이다. 스타터를 '특정 목적을 달성하기 위한 의존성 그룹' 이라고 생각하면 이해하기 쉽다.

스프링 부트 스타터는 개발자에게 엄청난 편리함을 제공해준다. 예를 들어 DB 연동에 스프링과 JPA 가 필요하다면 pom.xml(메이븐) 이나 build,gradle(그레이들)spring-boot-starter-data-jpa 만 추가해주면 된다. 일일이 어떤 라이브러리가 필요한지 찾아볼 필요가 없다.

1.4.1 스타터의 명명규칙 알아보기

스프링 부트에서 제공하는 스타터의 명명규칙을 살펴보겠다. 스타터의 기본 형식은 다음과 같다.

spring - boot - stater - *

*에 해당 스타터명을 명시하면 된다.
예를 들어 스프링에서 웹 관련 프로젝트를 진행한다고 했을 때 사용하는 스타터명은 다음과 같다.

spring - boot - starter - web

명명규칙을 알면 원하는 스타터를 쉽게 찾을 수 있다.

1.4.2 스타터 내부의 의존성 확인 방법

스타터 내부의 의존성을 확인하는 이뉴는 다음과 같다.

    1. 특정 스타터를 사용하려 하는데 의존 관계가 궁금할 때
    1. 의존 관계를 확인하지 않고 spring - boot - starter 를 푸가했는데 의존 관계 설정이 궁금할 때

spring-boot-starter 는 다음 여섯 가지 의존성을 제공한다.

  • spring-boot: 스프링 부트에서 기본 제공하는 의존성
  • spring-boot-autoconfigure: 스프링 부트의 자동 환경 구성에 필요한 의존성
  • spring-boot-starter-logging: 각종 로그를 사용하는 데 필요한 의존성
  • javas.annotation-api: 소프트웨어의 결함을 탐지하는 어노테이션을 지원하는 의존성
  • spring-core: 스프링 코어를 사용하는 데 필요한 의존성
  • snakeyaml: yaml을 사용하는 데 필요한 의존성

1.4.3 스타터에 명시된 버전 확인

스프링 부트 프러젝트의 의존성을 다룬 문서는 모두 깃허브에 공개되어 있다. 따라서 아래 깃허브에서 스타터에 명시된 버전을 확인할 수 있다.

https://github.com/spring-projects/spring-boot/

위 URL로 접속한 후 spring-boot-project -> spring-boot-dependencies 로 이동하면 pom.xml 파일이 있다. pom.xml 파일을 클릭하면 의존성 설정의 기본 버전을 확인할 수 있다.

1.4.4 이번 스터디에서 다룰 스타터

이 책에서는 기본적인 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-oauth2OAuth2 인증에 사용하는 스타터
spring-boot-starter-validation자바 빈 검증에 사용하는 스타터
spring-boot-starter-web웹을 만드는 데 사용하는 스타터(스프링 MVC, REST형, 임베디드 톰캣, 기타 라이브러리 포함

1.5 마무리

스프링 부트와 스프링 부트 스타터에 대해 간단히 살펴보았다. 그리고 스프링 부트의 특징을 활요하여 커뮤니티 게시판을 설계해보았다. 이후 과정에서 프로젝트를 진행하고 지속적으로 업그레이드하며 활요할 것이다. 다음엔 개발 환경을 세팅하고 본격적으로 프로그래밍에 들어가겠다.

profile
With passion and honesty

0개의 댓글