github : https://github.com/orgs/benggri-public-organization/repositories
먼저, 개발환경 설정을 보고 오세요!
사용한 기술들...
Backend:
jdk 17:
Spring boot 3.2.0:
security(JWT)
jpa
querydsl
Frontend:
javascript
nodejs 20
Nextjs 14
Tool:
VS Code
Plugins: Dev Containers(Micorosoft)
Git repository
- https://github.com/benggri-public-organization/community-backend
- https://github.com/benggri-public-organization/community-frontend
git repository 는 두개를 준비하였습니다.
이름에서 알 수 있듯이 frontend 와 backend 를 분리하였습니다.
- frontend : Nextjs 로 만들었습니다
- backend: Spring boot 로 만들었습니다
계속 진행 중이라 읽으시는 시점에 따라 소스가 바뀌어있을 것 같습니다.(?)
소스를 수정하며 게시글을 업데이트 할 수 없겠다는 생각이 들어 큼지막한 내용만 설명드리겠습니다.
늘 그렇듯 샘플 프로젝트는 기본적으로 간단한 게시판입니다.
Spring boot
Git Repository backend 를 사용 할 때...
앞서 설명한 것과 같이 VS Code 의 Dev Containers 를 사용하여 별도로 jdk 를 설치할 필요는 없습니다.
jdk 17:
Spring boot 3.2.0:
security(JWT)
jpa
querydsl
Git Clone 을 하여 프로젝트를 import 합니다.
(VS Code 에서 Git clone 을 하셔도 되고 명령어로 Git clone 을 하셔도 됩니다.)
(잘 모르실 경우 https://learn.microsoft.com/ko-kr/azure/developer/javascript/how-to/with-visual-studio-code/clone-github-repository?tabs=activity-bar 링크를 참조하세요.)
Spring boot 실행하기
Querydsl Compile (QClass 만들기)
Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
http://localhost:8090/swagger-ui/index.html
완전히 새로 만들고 싶을 때...
Dev Container 만들기
- VS Code 를 여세요.
- 프로젝트를 위한 폴더를 만들고 File - Open folder...(Ctrl + K, Ctrl + O) 여세요.
(저의 경우 workspace/spring-boot-sample 입니다.) - 키보드의 Ctrl + Shift + P 를 누르세요.
- Dev Containers: Add Dev Container Configuration Files... 를 검색하고 클릭하세요.
- Java & PostgreSQL 을 검색하고 클릭하세요.
- 21-bullseye 를 선택하세요.
- Select the options for the ' Java & PostgreSQL ' dev container 와 Select additional featuers to install 에서는 아무것도 선택하지 않고 OK 버튼을 클릭하세요.
- .devcontainer 폴더와 하위 3개 파일이 생성됩니다.
Devcontainer 설정하기
위 과정을 실행하셨다면 아래 파일들이 보이실 겁니다.
- devcontainer.json
- docker-compose.yml
- Dockerfile
각 파일에 대한 설명은 다른 글에서 작성하도록 하겠습니다.
각 파일에 대한 설정을 복사 붙여넣기 하고 수정하실 부분을 수정하세요.
devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/java-postgres
{
"name": "여기는 Dev Container 의 이름을 적어주세요",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspaces/여기는 폴더 이름을 적어주세요",
"features": {
"ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {
"plugins": "",
"omzPlugins": "https://github.com/zsh-users/zsh-autosuggestions",
"username": "vscode"
},
"github-cli": "latest"
},
"forwardPorts": [8090],
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"eamodio.gitlens",
"esbenp.prettier-vscode",
"octref.vetur",
"Orta.vscode-jest",
"ritwickdey.LiveServer",
"bradlc.vscode-tailwindcss",
"mechatroner.rainbow-csv",
"vmware.vscode-boot-dev-pack",
"vscjava.vscode-java-pack",
"vscjava.vscode-lombok",
"vscjava.vscode-gradle",
"bierner.markdown-mermaid"
],
"settings": {
"files.eol": "\n",
"editor.tabSize": 4,
"editor.renderWhitespace": "all",
"typescript.validate.enable": false,
"eslint.alwaysShowStatus": true,
"editor.formatOnSave": true,
"eslint.workingDirectories": [{ "mode": "auto" }],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"remote.localPortHost": "allInterfaces",
"java.format.settings.profile": "GoogleStyle"
}
}
},
"remoteUser": "vscode"
}
docker-compose.yml
version: "3.8"
volumes:
postgres-data:
services:
app:
container_name: 여기는 Container 이름을 적어주세요
build:
context: .
dockerfile: Dockerfile
environment:
POSTGRES_PASSWORD: 여기는 PostgreSQL DB 비밀번호가 될 거예요
POSTGRES_USER: 여기는 PostgreSQL DB 계정 이름이 될 거예요
POSTGRES_DB: 여기는 PostgreSQL DB Database 이름이 될 거예요
POSTGRES_HOSTNAME: postgresdb # 여긴 변경하지마세요
volumes:
- ../..:/workspaces:cached
command: sleep infinity
network_mode: service:postgresdb
postgresdb:
container_name: postgresdb
image: postgres:16.1-bullseye
restart: always
volumes:
- postgres-data:/benggri/postgresql
ports:
- 5432
environment:
- POSTGRES_PASSWORD=여기는 PostgreSQL DB 비밀번호가 될 거예요
- POSTGRES_USER=여기는 PostgreSQL DB 계정 이름이 될 거예요
- POSTGRES_DB=여기는 PostgreSQL DB Database 이름이 될 거예요
Dockerfile
FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye
# 시간 및 날짜 설정
ENV TZ Asia/Seoul
RUN apt-get update && \
apt-get -y install wget curl && \
echo "DONE"
- 각 파일을 복사 붙여넣기 수정까지했으면 Ctrl + Shift + P 누르시고 Dev Containers: Rebuild Without Cache and Reopen in Container 검색하시고 선택해주세요.
- 성공적으로 실행이 되면 devcontainer.json 파일 내용 중 customizations > vscode > extensions 에 적혀있는 모든 extensions 를 설치할 거예요.
(시간이 필요하다는 말입니다.) - extensions 까지 설치가 다 되면(왼쪽에 아이콘들이 막 생겨나요) 아래 단계로 진행하세요.
Spring Boot Project 만들기
- VS Code 에서 열려 있는 폴더는 workspace/spring-boot-sample 입니다.
- Ctrl + Shift + P 를 누르시고 Spring Initializr: Create a Gradle Project... 를 검색하고 선택하세요.
- 작성일(2023년12월) 기준 최신 버전인 3.2.0 을 선택하겠습니다.
- Java 선택합니다.
- Group Id 를 작성하세요.
(저의 경우는 com.benggri 입니다.)
- Artifact Id 를 작성하세요.
주의할 점은 프로젝트의 folder 명과 일치하도록 해주셔야합니다.
(저의 경우 spring-boot-sample 입니다.)
- Jar 선택하세요.
(Jar War 차이는 다른 글에서 설명하겠습니다. 일단 Jar 로 하시죠.)
- Dependencies 는 원래 선택해야하지만 따라하는 과정이라 선택하지 않고 진행하겠습니다.
(Selected 0 dependencies 를 선택해주세요.)
- 폴더는 한단계 위를 선택해주세요.
( 저의 경우는 /workspaces/ 입니다.)
- 그러면 VS Code 오른쪽 아래 메시지가 나옵니다. Continue 눌러주세요.
- 스프링 프로젝트가 생성되었습니다.
Spring Boot Project 설정하기
- postgresql
- security (JWT)
- JPA
- Querydsl
- Swagger
build.gradle 설정은 아래와 같습니다.
- build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.benggri' // 여기는 개인에 따라 다를 거예요
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
// ADD Line 1 ::: START
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
// ADD Line 1 ::: END
repositories {
mavenCentral()
}
// 여기가 중요합니다
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security' // security
compileOnly 'org.projectlombok:lombok' // lombok
runtimeOnly 'org.postgresql:postgresql' // postgresql
annotationProcessor 'org.projectlombok:lombok' // lombok
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
// JWT
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
// JWT
// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
implementation 'com.querydsl:querydsl-apt:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
// QueryDSL
// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
// Swagger
}
// ADD Line 2 ::: START
def querydslSrcDir = 'src/main/generated'
sourceSets {
main {
java {
srcDirs += [ querydslSrcDir ]
}
}
}
compileJava {
options.compilerArgs << '-Aquerydsl.generatedAnnotationClass=javax.annotation.Generated'
}
tasks.withType(JavaCompile) {
options.generatedSourceOutputDirectory = file(querydslSrcDir)
}
clean {
delete file(querydslSrcDir)
}
// ADD Line 2 ::: END
tasks.named('test') {
useJUnitPlatform()
}
src/main/resources/application.properties 파일이 있을텐데 application.yml 로 바꿔주세요.
(이유는, 기술적인 이유보다 제가 보기 편하고 작성하기 편해서 입니다.)
src/main/resources/application.yml 설정은 아래와 같습니다.
주의하실 점은 spring > database 항목의 url, username, password 는 .devcontainer/docker-compose.yml 에서 설정한 값을 입력하셔야합니다.
- src/main/resources/application.yml
spring:
profiles:
default: local
mvc:
pathmatch:
matching-strategy: ant-path-matcher
jpa:
properties:
hibernate:
show_sql: true
format_sql: true
use_sql_comments: true
hibernate:
ddl-auto: create-drop # create-drop: drop & create, create: create, update: update
defer-datasource-initialization: true
sql:
init:
mode: always
platform: h2
# .devcontainer/docker-compose.yml 파일에서 postgresdb 에서 설정한 값을 입력하세요
# 저의 경우 benggri 입니다
datasource:
url: jdbc:postgresql://postgresdb:5432/benggri?useSSL=false
username: benggri
password: benggri
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace
server:
port: 8090
여기까지 진행하셨다면 프로젝트 폴더는 이렇게 생겼을 거예요.
지금 상태에서 Spring Boot 를 실행하면 정상적으로 실행이 됩니다.
'Spring' 카테고리의 다른 글
[Querydsl] 샘플 (0) | 2024.04.03 |
---|---|
Spring Boot sample project - 1. 환경설정 (1) | 2023.12.18 |
[Spring-Boot] 기초 - 프로젝트 생성 (0) | 2022.07.28 |
[Spring] Spring Framework MVC 커뮤니티 사이트Tutorial - 4 (0) | 2021.02.02 |
[Spring] Spring AOP (0) | 2021.02.01 |
댓글