## 프로젝트 생성 ![[Pasted image 20231212002041.png]] - [여기](https://start.spring.io/)에서 스프링 부트 프로젝트를 생성한다. 리눅스나 맥의 경우, 패키지 관리 프로그램을 통해 CLI로 프로젝트를 생성할 수 있지만, 우리의 윈도우는 SDKMAN을 깔아야 가능하다. 그러니 그냥 웹 사이트에서 생성하는 걸 추천한다. - **프로젝트 빌드 도구**와 **언어**, **스프링 부트 버전**은 필요에 따라 설정하면 된다. 나는 평소에 자주 쓰는 데로 설정했다. - **프로젝트 메타 데이터**는 작성 요령에 따라 작성한다. - **그룹**은 프로젝트를 진행하는 팀의 이름을 뜻한다. 작성 요령은 팀 대표 웹 페이지의 도메인을 최상위부터 최하위까지 순서대로 적는 것이다. 예를 들어 그룹의 대표 웹 페이지가 깃허브 페이지 `github.ABC.io`라면 그룹은 `io.github.ABC`로 작성한다. 예시 프로젝트인 ChatGPT 프록시 서버는 gitlab의 red 프로젝트에 포함되기에 나는 `io.gitlab.red`으로 적었다. - **아티팩트**는 해당 프로젝트의 이름이라고 생각하면 된다. 작성 요령은 이름만 봐도 무슨 내용인지 알 수 있도록 명확하게 적는 것이다. 예시 프로젝트는 ChatGPT 프록시 서버이니 나는 `chatgpt-proxy-server`라고 작성했다. - 나는 `build.gradle`에 직접 의존성 설정을 추가하는 것을 선호하므로 의존성 설정은 따로 추가하지 않았다. gradle이 익숙하지 않다면 오른쪽에 있는 dependencies를 클릭하여 의존성 설정을 해도 상관없다. - 설정이 끝났다면, **GENERATE** 버튼을 클릭한다. ## Gradle 설정 🐘 ### 플러그인 ```groovy plugins { id 'java' id 'org.springframework.boot' version '3.1.7-SNAPSHOT' id 'io.spring.dependency-management' version '1.1.4' id 'org.hibernate.orm' version '6.2.13.Final' id 'org.graalvm.buildtools.native' version '0.9.28' } ``` - `org.hibernate.orm` 는 JPA 구현체인 hibernate를 사용하기 위한 플러그인이다. ### 의존성 ```groovy dependencies { // 스프링 부트 스타터 implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-webflux' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-hateoas' implementation 'org.springframework.boot:spring-boot-starter-actuator' testImplementation 'org.springframework.boot:spring-boot-starter-test' // 스프링(or 스프링 부트) 라이브러리 developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' // 기타 라이브러리 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' implementation 'org.freemarker:freemarker:2.3.32' } ``` - 의존성 설정은 **스프링 부트 스타터**와 **스프링(부트) 라이브러리**, 그리고 **기타 라이브러리**로 분류했다. - 스프링 부트를 쓰는 만큼 스프링 부트 스타터를 중심으로 의존성 설정을 한다. - `spring-boot-starter-webflux`은 서버에 클라이언트 추가할 때 쓰는 스타터다. - `spring-boot-starter-hateoas`는 REST API에서 HATEOAS 맞출 때 쓰는 스타터다. - `spring-boot-starter`는 `spring-boot-starter-web`에 포함되어 있어 삭제했다. - `spring-boot-starter-actuator`는 애플리케이션 모니터링을 할 때 쓰는 스타터다. - 위 스타터에 포함된 라이브러리는 [[B. Spring Boot 스타터와 의존성 지옥#주요 스타터와 포함된 라이브러리|여기]]에서 볼 수 있다. - 스타터에 포함되지 않은 기타 스프링(부트) 라이브러리를 추가한다. - 기타 라이브러리도 추가한다. - `freemarker`는 Apache에서 만든 자바 기반 템플릿 엔진이다. 프롬프트 템플릿으로 프롬프트를 생성하는데 쓸 예정이다. - `lombok`의 경우 IDE에 따라 플러그인을 따로 설치해야 할 수도 있다. ### 빌드 ```groovy // ... 생략 tasks.named('bootBuildImage') { builder = 'paketobuildpacks/builder-jammy-base:latest' } bootBuildImage { imageName = project.name } ``` - `bootBuildImage`는 애플리케이션을 도커 이미지로 빌드해주는 명령어이다. ([참고](https://emgc.tistory.com/149))