Spring - 프로젝트 구조 뜯어보기

build.gradle에 대해 알기

Posted by Yan on November 16, 2023

SPRING의 구조

src/main/resources 디렉터리

src/main/resources 디렉터리는 자바 파일을 제외한 HTML, CSS, Javascript, 환경파일 등을 작성하는 공간이다.

templates 디렉터리

src/main/resources 디렉터리의 하위 디렉터리인 templates 디렉터리에는 템플릿 파일을 저장한다. 템플릿 파일은 HTML 파일 형태로 자바 객체와 연동되는 파일이다. templates 디렉터리에는 SBB의 질문 목록, 질문 상세 등의 HTML 파일을 저장한다.

static 디렉터리

static 디렉터리는 프로젝트의 스타일시트(.css), 자바스크립트(.js) 그리고 이미지 파일(.jpg, .png) 등을 저장하는 공간이다.

application.properties 파일

application.properties 파일은 프로젝트의 환경을 설정한다. SBB 프로젝트의 환경, 데이터베이스 등의 설정을 이 파일에 저장한다.

application.properties 설정

h2 데이터베이스 설정
1
2
3
4
5
6
7
# DATABASE
spring.h2.console.enabled=true # H2 콘솔의 접속을 허용할지의 여부 
spring.h2.console.path=/h2-console # 콘솔 접속을 위한 URL 경로  
spring.datasource.url=jdbc:h2:~/local # 데이터베이스 접속을 위한 경로. 이 경로에 해당하는 데이터베이스 파일을 만들어야 한다.
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa # 데이터베이스의 사용자명. 사용자명은 기본 값인 sa로 설정
spring.datasource.password=
JPA 설정
1
2
3
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect # 데이터베이스 엔진 종류를 설정
spring.jpa.hibernate.ddl-auto=update # 엔티티를 기준으로 테이블을 생성하는 규칙을 정의
spring.jpa.hibernate.ddl-auto
  • none - 엔티티가 변경되더라도 데이터베이스를 변경하지 않는다.
  • update - 엔티티의 변경된 부분만 적용한다.
  • validate - 변경사항이 있는지 검사만 한다.
  • create - 스프링부트 서버가 시작될때 모두 drop하고 다시 생성한다.
  • create-drop - create와 동일하다. 하지만 종료시에도 모두 drop 한다.

개발 환경에서는 보통 update 모드를 사용하고 운영환경에서는 none 또는 validate 모드를 사용한다.

src/test/java 디렉터리

src/test/java 디렉터리는 프로젝트에서 작성한 파일을 테스트하기 위한 테스트 코드를 작성하는 공간이다. JUnit과 스프링부트의 테스팅 도구를 사용하여 서버를 실행하지 않은 상태에서 src/main/java 디렉터리에 작성한 코드를 테스트할 수 있다.

build.gradle 파일

Gradle이 사용하는 환경 파일이다. 그레이들은 Groovy를 기반으로 한 빌드 도구로 Ant, Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 빌드 도구이다. build.gradle 파일에는 프로젝트를 위해 필요한 플러그인과 라이브러리 등을 기술한다.

build.gradle 설정

1
2
3
4
5
6
7
8
9
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
runtimeOnly
  • build.gradle 파일의 runtimeOnly는 해당 라이브러리가 Runtime시에만 필요한 경우에 사용한다.
  • Compile시에만 필요한 경우에는 runtimeOnly 대신 compileOnly를 사용한다.
implementation
  • build.gradle 파일의 implementation은 해당 라이브러리 설치를 위해 일반적으로 사용하는 설정이다.
  • implementation은 해당 라이브러리가 변경되더라도 이 라이브러리와 연관된 모든 모듈들을 컴파일하지 않고 직접 관련이 있는 모듈들만 컴파일하기 때문에 rebuild 속도가 빠르다.
reference

점프 투 스프링 부트