Spring 프로젝트 생성

spring boot 프로젝트는 보통 다음 사이트에서 생성하는게 일반적이다.  https://start.spring.io/

다음과 같은 값으로 지정하여 프로젝트를 생성하였다. 의존성들은 필요하다고 생각되는 것들은 모두 추가해놓았는데 추후 더 필요하게 되면 추가 가능하니 많이 신경쓰지 않아도 될 듯 하다.

 


주요 라이브러리

스프링 부트 라이브러리

spring-boot-starter-web :  웹 애플리케이션 개발을 위한 필수 라이브러리 모음으로 내장 톰캣 서버와 스프링 mvc 설정이 포함됨

spring-boot-starter-tomcat : 스프링 부트 내장 웹 서버

spring-webmvc : 스프링 웹 MVC를 구성하는 라이브러리

spring-boot-thymeleaf : 타임리프 템플릿 엔진. 서버 사이드 렌더링 기능을 지원

spring-boot-starter-logging : 스프링 부트의 기본 로깅 설정을 위한 라이브러리. logback, slf4j를 사용

테스트 라이브러리

junit :  테스트 프레임워크

mockito : 목 라이브러리

assertj :  테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리

spring-test :  스프링 통합 테스트 지원


생성한 스프링 프로젝트를 인텔리제이에서 열면 위와 같은 구조로 존재함을 확인할 수 있다. 제대로 된 것인지 확인할 겸 간단한 웰컴 페이지를 하나 생성해서 화면을 띄워보았다. 



이 상태에서 바로 실행을 하게 되면 아래와 같은 에러가 발생한다. 이 에러는 Database에 연결하기 위해서 필요한 정보가 존재하지 않기 때문에 발생하는 에러다. application.properties에 연결하고자 하는 디비 정보를 입력하면 된다.

 

프로젝트에 사용할 디비는 팀원이 생성해 둔 MySQL을 사용할 예정이다. 서비스가 사용되면서 발생하는 데이터(회원, 장바구니 등등)은 MySQL에 적재되어 사용될 예정이고, 검색과 조회를 위한 데이터(상품, 로또)는 검색 성능을 위해서 엘라스틱 서치를 사용하기로 하였다. 

spring:
  application:
    name: lotto
  elastic:
    url: ${ELASTIC_URL}
  datasource:
    url: ${DATASOURCE_URL}
    username: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate.format_sql: true
      dialect: org.hibernate.dialect.MySQL8InnoDBDialect
    defer-datasource-initialization: false

테이블 스키마 설정에 대한 옵션은 다음값들 중에서 골라서 사용하면 된다. 일반적으로 개발환경에서는 update를, 운영환경에서는 validate를 사용한다기에 update로 설정하였다.

  • none : 엔티티가 변경되더라도 데이터베이스를 변경하지 않음
  • update : 엔티티의 변경사항을 데이터베이스에 반영
  • validate : 변경사항이 있는지 검사만 진행. 다른 부분이 있을 경우 애플리케이션을 실행하지 않음
  • create : 서버가 시작될 때 모두 drop하고 새로 생성
  • create-drop : create와 동일하게 진행되며 종료시에 다시 모두 drop함

기본 설정을 마치고 간단한 html을 작성해 spring이 잘 구동하는지 확인해보았다.