* 이 포스트는 전 배달의민족, 현재 인프런에 계시고 유튜브 개발바닥의 크리에이터이신 개발자 이동욱님의 '스프링부트와 AWS로 혼자 구현하는 웹 서비스'를 기반으로 작성되었음을 알립니다. 포스트 맨 아래에 관련 링크가 있습니다. 책의 내용을 기반으로 작성되기에 실습 중이라면 책을 main 해당 포스트를 sub로 참고해주세요. 책의 설명이 부족한 부분 위주로 포스트가 구성됩니다.
현재 공부를 진행하며 스프링 부트에 대한 전반적인 지식 등을 익혔지만 실제로 서비스의 빌드부터 배포까지 해볼 필요성을 강하게 느꼈고, 마침 개발 공부를 다시 시작하게 된 계기인 EO 유튜브 영상부터 공부 중 많은 insight를 주셨던 이동욱님의 책 한 권을 통해 해당 과정을 학습해보기로 결정했습니다.
이 포스트는 이 책의 실습 과정 중 발생한 issue 위주로 작성될 것 같고, 관련 메모등은 부족하겠지만 필자의 github(https://github.com/kth1017/S1)에 올려두었습니다. 아무래도 내용이 학습이 많이 진행된 주니어 개발자를 맞춤으로 작성하셨다고 느끼기에 이 블로그를 참고하시는 분들을 위해 코드 커스텀은 극히 일부를 제외하고 진행하지 않았습니다. 모든 책 내용을 다룬 뒤 코드를 커스텀하는 포스트도 추가로 다루도록 하겠습니다.
이동욱님의 블로그에 포스트 내용을 보면 최대한 환경의 업데이트를 고려하여 정리하셨다고 되어있지만 아무래도 2022년에 진행하는 만큼 스스로 진행 중 만나는 exception을 처리해야했고 그 과정을 포스트로 적었다고 생각하면 될 것 같습니다.
우선 책의 출판 시기와 달라진 점을 크게 언급해보자면
1 스프링 이니셜라이저에서 제공하는 스프링 부트의 최신 버전이 2.6.4인데 책은 2.1에 머무르고 있다. 해당 사항은 이동욱님(이후 저자)이 정리하신 대로 스프링 부트 2.4.1로 프로젝트를 진행
2 gradle의 최신 버전이 7.4가 되었다. 이 포스트에선 gradle 7.1로 진행
3 책에서는 Junit4를 사용하지만 거의 표준이 된 Junit5로 진행
4 application.properties 대신에 application.yml 사용, 실습환경은 os : windows10, IDE : intelliJ Edu, terminal : git bash 사용
이 밖의 사항은 저자의 포스트를 참고하면 해결되는 것이 대부분이고 그 외의 사항에 대해선 포스트를 진행하며 언급하겠습니다. 또한 이 포스트는 처음부터 진행하는 것을 가정하고 진행하므로 코드가 다를 수 있다는 점을 말해두겠습니다.
우선적으로 gradle을 사용하기에 build.gradle을 봅시다. 중요 내용은 아래 블로그에 있으니 핵심만 언급합니다.
// 1 플러그인 간소화
plugins {
id 'org.springframework.boot' version '2.4.1'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group 'pracs1'
version '1.0.4-SNAPSHOT-'+new Date().format("yyyyMMddHHmmss")
sourceCompatibility = 1.8
repositories {
mavenCentral()
// 2 jcenter() 삭제
}
// 3 for Junit 5
test {
useJUnitPlatform()
}
// 4 compile > implementation
dependencies {
// web
implementation('org.springframework.boot:spring-boot-starter-web')
// lombok
implementation('org.projectlombok:lombok')
annotationProcessor('org.projectlombok:lombok')
testImplementation('org.projectlombok:lombok')
testAnnotationProcessor('org.projectlombok:lombok')
// jpa
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation("org.mariadb.jdbc:mariadb-java-client")
// test
testImplementation('org.springframework.boot:spring-boot-starter-test')
// 5 h2관련
runtimeOnly 'com.h2database:h2'
}
1. plugins 코드 간소화
- legacy 코드를 해당 코드로 간소화
2. jcenter() 삭제
- jcenter의 경우 gradle 최신 버전에선 지원이 중단되었으므로 삭제
3. test 코드 추가
- junit5 사용을 위해 test 관련 코드 추가
4. compile 코드 변경
- gradle 버전업 이후 compile, testCompile은 Soft Deprecate, implementation으로 변경
5. h2 관련 코드 추가
- h2 db는 책의 내용대로 진행하면 설정이 너무 어렵기때문에 임의로 커스텀
# h2 db 간단한 사용법
1 build.gradle에 위와 같은 코드 추가
runtimeOnly 'com.h2database:h2'
2 설정 정보를 application.properties 대신 application.yml을 사용할 것이기 때문에(가독성 등 .yml 사용을 권장하기 때문) 프로젝트명/src/main/resources/application.yml 생성
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/pracs1
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
- datasource는 h2 로그인 정보, jpa에서 ddl-auto는 db 테이블 생성시 초기화를 해줌
3 h2 처음 사용시 팁
- h2 db를 홈페이지에서 다운로드 받아 설치 후(필자는 D:/h2에 위치하도록 설치)
- 사용 중인 터미널에서 cd D:/h2/bin로 라인 이동 > (windows)./h2.bat (mac)./h2.sh 명령어로 h2 db 실행
- 맨 처음 h2 db를 실행할 경우 1 아래와 같은 콘솔창에서 줄 쳐진 jdbc url 항목을 찾고 사용자명에 해당하는 네모 부분을 변경하여 jdbc:h2:~/[사용자명]으로 하고 접속하면 h2 db에 사용자명 등록 완료되고 내부로 접속됨 > 2 사용자 이름이 pracs1라면 C:\Users\pracs1에서 test.mv.db가 생성되었는지 확인 > 3 이후 콘솔창 접속시 jdbc url에 (.yml에 등록한 url)를 입력하여 접속 가능.
처음 h2 db를 생성할땐 jdbc:h2:~/[사용자명]를 입력하면 되고 잘 모르겠다면 아래 그림의 네모를 자신의 사용자명으로 변경하고 이후 접속할땐 jdbc:h2:tcp://localhost/~/[사용자명]을 입력하면 됨. 후자는 tcp 연결이기에 맨처음처럼 입력해서 [사용자명].mv.db로 db를 생성해야 연결이 가능하다는 것만 기억하자,
4 반드시 서버 시작 전 터미널에서 h2 db를 실행해줄 것
- 앞으로 application 실행 전 h2 db 구동이 안되면 tomcat 자체가 켜지지 않음
이렇게 진행하면 서버 구동 전 h2 db를 켜야한다는 번거로움은 있지만 설정이 간편해지므로 이를 추천합니다.
이후 등록되는 dependencies는 필요시마다 언급할 것입니다.
+ 아주 기본적인 것들이지만 몇 개 언급하자면
- 롬복은 최신 intellJ에서 기본 installed되어 dependencies 추가와 setting > annotation processor만 켜주면됨
- setting > gradle 빌드 툴을 intelliJ로 바꾸어주면 서버 실행 속도가 빨라짐
- 오류 발생시 아무리해도 안되면 intelliJ 캐시삭제, build/out 폴더 삭제 후 다시 빌드, yml 공백을 다시 확인
refer
이동욱님 블로그의 관련 포스트 : https://jojoldu.tistory.com/539?category=717427
개발바닥 유튜브 : https://www.youtube.com/channel/UCSEOUzkGNCT_29EU_vnBYjg
개발바닥
본격 세계최초 DEV 엔터테인먼트 토크쇼 두 스타트업 개발자의 요절복통 이야기 구독 안하면 장애남!!
www.youtube.com
이동욱님 github의 해당 repository : https://github.com/jojoldu/freelec-springboot2-webservice
'Project' 카테고리의 다른 글
P1_클론 프로젝트(feat. 스프링부트와 AWS로 혼자 구현하는 웹 서비스)_4 (0) | 2022.03.28 |
---|---|
P1_클론 프로젝트(feat. 스프링부트와 AWS로 혼자 구현하는 웹 서비스)_3-2 (0) | 2022.03.26 |
P1_클론 프로젝트(feat. 스프링부트와 AWS로 혼자 구현하는 웹 서비스)_3-1 (0) | 2022.03.25 |
P1_클론 프로젝트(feat. 스프링부트와 AWS로 혼자 구현하는 웹 서비스)_2 (0) | 2022.03.25 |
P1_클론 프로젝트(feat. 스프링부트와 AWS로 혼자 구현하는 웹 서비스)_Ready (0) | 2022.03.20 |