์๋ฒฝํ์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค.
์์ฑ๋์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค.
Oops_Log๋ ์ค์(Oops)์ ์ฑ์ทจ(Ooh)๋ฅผ ํจ๊ป ๊ธฐ๋กํ๋ฉฐ ์ฑ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค.
ํ๋ค๋ ธ๋ค๋ฉด ์ด์์๋ค๋ ์ฆ๊ฑฐ์ด๊ณ , ๋น๋ฌ๋ค๋ฉด ์ฑ์ฅํ๋ค๋ ์ฆํ์ ๋๋ค.
๋น์ ์ ํ๋ฃจ๋ ๊ธฐ๋ก๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์๋ฒฝ์ ๊ฐ์๋ฐ๋ ์๋์ ์ด๊ณ ์์ต๋๋ค.
SNS์๋ ์ฑ๊ณต๊ณผ ํ๋ณต๋ง์ด ๊ฐ๋ํ๊ณ , ์ค์์ ์ข์ ์ ์จ๊ฒจ์ผ ํ ๊ฒ์ฒ๋ผ ์ฌ๊ฒจ์ง๋๋ค.
ํ์ง๋ง ์ง์ง ์ฑ์ฅ์ ์ค์๋ฅผ ์ธ์ ํ๊ณ , ์์ ์ฑ์ทจ๋ฅผ ์ถํํ๊ณ , ํ๋ค๋ฆฌ๋ ๋ ์์ ์ ๋ฐ์๋ค์ผ ๋ ์์๋ฉ๋๋ค.
Oops_Log๋ ๋น์ ์ด ์๋ฒฝํ์ง ์์๋ ๊ด์ฐฎ๋ค๊ณ ๋งํฉ๋๋ค. ์ค๋ ๋์ด์ก๋ค๋ฉด, ๋ค์ ์ผ์ด๋ฌ๋ค๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค.
์ด๊ณณ์ ๋น์ ์ ์ํ ์กฐ์ฉํ ์์ฌ์ ๋๋ค. ์ฒ์ฒํ, ์์งํ๊ฒ, ๋น์ ๋ง์ ์ด์ผ๊ธฐ๋ฅผ ๊ธฐ๋กํด๋ณด์ธ์.
โ ์ค์์ ์์ฐํ: ์ค์๋ฅผ ๊ฐ์ถ์ง ์๊ณ ๊ธฐ๋กํจ์ผ๋ก์จ ์ฑ์ฅ์ ํจ์น๋ ธํธ๋ก ๋ง๋ญ๋๋ค.
๐ค ์ฑ์ทจ์ ์ถํ: ์์ ์ฑ์ทจ(Ooh)๋ ๊ธฐ๋กํ๋ฉฐ ์ค์ค๋ก๋ฅผ ์ธ์ ํ๊ณ ๋๊ธฐ๋ฅผ ๋ถ์ฌํฉ๋๋ค.
๐ ์ฑ์ฅ ๊ณผ์ ์ถ์ : ๊ฐ์ ๊ฐ๋์ ํ๊ทธ๋ฅผ ํตํด ๋์ ๊ฐ์ ํจํด์ ํ์ ํฉ๋๋ค.
๐ ์์ ํ ๊ณต๊ฐ: ๋น๊ณต๊ฐ/์ต๋ช ๊ณต๊ฐ ์ต์ ์ ํตํด ์์งํ ์ด์ผ๊ธฐ๋ฅผ ์์ ํ๊ฒ ๊ธฐ๋กํฉ๋๋ค.
๊ฐ ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์ค์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ๋๋์ง ํจ๊ป ํ์ธํด ๋ณด์ธ์.
-
๋ถ์, ํํ, ํผ๋ก์ ์๊ฐ์ ๊ธฐ๋กํฉ๋๋ค.
-
์ค์๋ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ฑ์ฅ์ ํจ์น๋ ธํธ๋ผ๋ ๊ด์ ์ผ๋ก ์ค์ค๋ก๋ฅผ ์ฉ์ํ๊ณ ๋ค์ ์ผ์ด์๋ ์ฐ์ต์ ํฉ๋๋ค.
-
AI๊ฐ ์ฌ์ฉ์์ ๊ธ์ ๋ถ์ํ์ฌ ๊ฐ์ ์ ๊ณต๊ฐํ๊ณ ๋ฐ๋ปํ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
๐พ ๊ด๋ จ ๊ธฐ๋ฅ: OopsCommandController, OopsQueryController, AiController
-
๊ฐ์ฌ, ๋ง์กฑ, ํฌ๋ง์ ์๊ฐ์ ๊ธฐ๋กํฉ๋๋ค.
-
์์ ์ฑ์ทจ๋ ํฐ ์๋ฏธ๊ฐ ์์์ ๋์๊ธฐ๋ฉฐ ์ค๋์ ๋น๋๋ ์๊ฐ์ ๋์น์ง ์์ต๋๋ค.
-
๋ค๋ฅธ ์ฌ์ฉ์์ Ooh ๊ธฐ๋ก์ '์ข์์'๋ฅผ ๋๋ฅด๊ณ ๋๊ธ๋ก ์์ํ ์ ์์ต๋๋ค.
๐พ ๊ด๋ จ ๊ธฐ๋ฅ: OohCommandController, OohQueryController, LikesCommandController, CommentsCommandController
-
์ค๋์ ๊ฐ์ ๊ฐ๋์ ์ ํ์ ํ์ํ๊ณ ํ๊ทธ๋ฅผ ๋จ๊น๋๋ค.
-
์๊ฐ์ด ์ง๋๋ฉฐ ๋์ ๊ฐ์ ํจํด์ ํ์ ํ ์ ์์ต๋๋ค.
๐พ ๊ด๋ จ ๊ธฐ๋ฅ: TagCommandController, TagQueryController, AdminReadController
-
๋ชจ๋ ๊ธฐ๋ก์ ๋น๊ณต๊ฐ(๊ธฐ๋ณธ) ๋๋ ์ต๋ช ๊ณต๊ฐ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
-
๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ์์๋ ์ต๋ช ์ผ๋ก ํ์๋์ด ์์ ํ๊ฒ ์ํตํ ์ ์์ต๋๋ค.
๐พ ๊ด๋ จ ๊ธฐ๋ฅ: OohCommandEntity (isPrivate), OopsCommandEntity (oopsIsPrivate)
-
๋ถ์พํ ๊ฒ์๊ธ์ด๋ ๋๊ธ์ ์ ๊ณ ๊ธฐ๋ฅ์ ํตํด ๊ด๋ฆฌ์์๊ฒ ์๋ฆด ์ ์์ต๋๋ค.
-
๊ด๋ฆฌ์๋ ์ ๊ณ ๋ด์ญ์ ์์ธ ์กฐํํ๊ณ '์น์ธ' ๋๋ '๋ฐ๋ ค' ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
-
์ ๊ณ ์น์ธ ์ ํด๋น ๊ฒ์๋ฌผ์ด๋ ๋๊ธ์ ์จ๊น(์ํํธ ์ญ์ ) ์ฒ๋ฆฌ๋ฉ๋๋ค.
๐พ ๊ด๋ จ ๊ธฐ๋ฅ: ReportController, ReportReadController, ReportSerivceImpl
-
๋ง์ดํ์ด์ง์์ ๋ด๊ฐ ๊ธฐ๋กํ Oops/Ooh ๊ธฐ๋ก์ ์๋ ๊ทธ๋ํ๋ก ํ์ธํ ์ ์์ต๋๋ค.
-
ํ๋ก์ฐ/ํ๋ก์ ๊ธฐ๋ฅ์ ํตํด ๋ค๋ฅธ ์ฌ์ฉ์์ ์ํตํ๊ณ , ๋ถ๋งํฌ ๊ธฐ๋ฅ์ผ๋ก ์๋ฏธ ์๋ ๊ธฐ๋ก์ ์ ์ฅํ ์ ์์ต๋๋ค.
๐พ ๊ด๋ จ ๊ธฐ๋ฅ: RecordHistoryQueryController, FollowQueryController, BookmarkQueryController
pipeline {
agent any
tools {
gradle 'gradle'
jdk 'openJDK17'
}
environment {
SOURCE_GITHUB_URL = 'https://github.com/DevOops-be19/Oops_log-backend.git'
MANIFESTS_GITHUB_URL = 'https://github.com/DevOops-be19/oops_log_manifest.git'
GIT_USERNAME = 'kjandgo'
GIT_EMAIL = 'rptmffld0204@gmail.com'
}
stages {
stage('Preparation') {
steps {
script {
if (isUnix()) {
sh 'docker --version'
} else {
bat 'docker --version'
}
}
}
}
stage('Source Build') {
steps {
git branch: 'main', url: "${env.SOURCE_GITHUB_URL}"
script {
withCredentials([file(credentialsId: 'oops_yml', variable: 'secretFile')]){
if (isUnix()) {
sh 'cp $secretFile ./src/main/resources/application.yml'
sh "chmod +x ./gradlew"
sh "./gradlew clean build -x test"
} else {
bat "copy %secretFile% .\\src\\main\\resources\\application.yml"
bat "gradlew.bat clean build -x test"
}
}
}
}
}
stage('Container Build and Push') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'DOCKERHUB_PASSWORD', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
if (isUnix()) {
sh "docker build -t ${DOCKER_USER}/oops_log_back:${currentBuild.number} ."
sh "docker build -t ${DOCKER_USER}/oops_log_back:latest ."
sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}"
sh "docker push ${DOCKER_USER}/oops_log_back:${currentBuild.number}"
sh "docker push ${DOCKER_USER}/oops_log_back:latest"
} else {
bat "docker build -t ${DOCKER_USER}/oops_log_back:${currentBuild.number} ."
bat "docker build -t ${DOCKER_USER}/oops_log_back:latest ."
bat "docker login -u %DOCKER_USER% -p %DOCKER_PASS%"
bat "docker push ${DOCKER_USER}/oops_log_back:${currentBuild.number}"
bat "docker push ${DOCKER_USER}/oops_log_back:latest"
}
}
}
}
}
stage('K8S Manifest Update') {
steps {
// k8s-manifests ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ main ๋ธ๋์น์์ ํด๋ก ํ๋ค. ์ด๋ ์๊ฒฉ ์ฆ๋ช
github๊ฐ ์ฌ์ฉ๋๋ค.
git credentialsId: 'github',
url: "${env.MANIFESTS_GITHUB_URL}",
branch: 'main'
script {
withCredentials([usernamePassword(credentialsId: 'github', usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) {
def githubUrl = env.MANIFESTS_GITHUB_URL.replace('https://', '')
if (isUnix()) {
// Unix ์์คํ
์์ boot-deployment.yml ํ์ผ ์์ ํ commit ํ push
sh "sed -i '' 's/argo_boot:.*\$/oops_log_back:${currentBuild.number}/g' kubernetes_manifest/oops-backend-deploy.yml"
sh "git add kubernetes_manifest/oops-backend-deploy.yml"
sh "git config --global user.name '${env.GIT_USERNAME}'"
sh "git config --global user.email '${env.GIT_EMAIL}'"
sh "git commit -m '[UPDATE] ${currentBuild.number} image versioning'"
// ์ธ์ฆ ์ ๋ณด ํฌํจํ์ฌ push
sh "git push https://${GIT_USER}:${GIT_PASS}@${githubUrl} main"
} else {
// Windows ์์คํ
์์ boot-deployment.yml ํ์ผ ์์ ํ commit ํ push
bat "powershell -Command \"(Get-Content kubernetes_manifest/oops-backend-deploy.yml) -replace 'oops_log_back:.*', 'oops_log_back:${currentBuild.number}' | Set-Content kubernetes_manifest/oops-backend-deploy.yml\""
bat "git add kubernetes_manifest/oops-backend-deploy.yml"
bat "git config --global user.name '${env.GIT_USERNAME}'"
bat "git config --global user.email '${env.GIT_EMAIL}'"
bat "git commit -m \"[UPDATE] ${currentBuild.number} image versioning\""
// Windows์์ ๋ณ์ ์ฐธ์กฐ ๋ฐฉ์ ์ฌ์ฉ
bat "git push https://%GIT_USER%:%GIT_PASS%@${githubUrl} main"
}
}
}
}
}
}
post {
always {
script {
if (isUnix()) {
sh 'docker logout'
} else {
bat 'docker logout'
}
}
}
success {
echo 'Pipeline succeeded!'
}
failure {
echo 'Pipeline failed!'
}
}
}์ด๋ฒ ํ๋ก์ ํธ์์ ๋งก์ ์ญํ
- ๋ฐฑ์๋ ํจํค์ง ๊ตฌ์กฐํ
- ํ์๊ฐ์
- ํ์ ๋ก๊ทธ์ธ
- java mail, redis๋ฅผ ์ด์ฉํ ์์ด๋,๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ
- security ์ ์ฉ
- JWT ํ ํฐ ํํฐ ์ ์ฉ
- ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ตฌ์ถ
- jenkins,argocd๋ฑ์ ์ด์ฉํ ๋น๋/๋ฐฐํฌ ์๋ํ ํ๊ฒฝ ๊ตฌ์ถ
์ํ ์
- ๋ค๋ฅธ ํ์ ๋นํด ์ธ์์๊ฐ ์ ์์ง๋ง ๊ทธ๋๋ ํ์๋ค ๊ฐ์ ์ํต์ด ์ํํ๊ฒ ์งํ๋๊ณ ์๋ก ๋ถ์กฑํ ๋ถ๋ถ์ ๋ณด์ํด ๊ฐ๋ฉด์ ํ์ ๋ ์๊ฐ๊ณผ ์์ ์์์ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ค์ ๊ฑฐ์ ๋ค ํด๊ฒฐํ๋ค๋ ๊ฒ์ ๋ง์กฑํ๋ค.
์์ฌ์ด ์
- ์ถ๊ฐ๋ก sse๋ Oauth2.0 ๋ฑ์ ๋์ ์ ์๊ฐํ์ง๋ง ์ฐ์ ์ ์ธ ๊ฐ๋ฐ ์์์ ๋ฐ๋ ค ๊ตฌํํ ์๊ฐ์ด ๋ถ์กฑํ๋ค๋ ์ ์ด ์์ฌ์์ ๋จ๋๋ค. ์ถํ์ ํ๋ก์ ํธ๋ฅผ forkํด์ ์ถ๊ฐ๋ก ๊ตฌํํ๋ ๋ฑ์ ๊ณํ์ ๊ฐ์ง ์๊ฐ์ด๋ค.
๋ฐฐ์ด ์
- ๋ชจ๋๋ฆฌ์ ๊ฐ๋ฐ์ด๋ผ์ ๊ณ ๋ คํ์ง๋ ์์์ง๋ง msa,์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ผ๋ก scale outํ๋ค๋ฉด ๊ณ ๋ คํด์ผํ๋ ๋ฌธ์ ๋ค์ ๋ํด์ ๋ง์ ์๊ฐ์ ๊ฐ์ง ์ ์๋ ์๊ฐ์ด์๋ค๊ณ ์๊ฐํ๋ค.(์๋ฅผ ๋ค์ด sse๋ฅผ ํตํ ์ค์๊ฐ ์๋ฆผ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋๋ ๋ชจ๋๋ฆฌ์์์๋ ๋จ์ํ ๋ฉ์ธ์ง send๋ง ํ๋ฉด ๋์ง๋ง ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ replicaSet์ ๊ตฌ์ถํ๊ฑฐ๋ msa์ฒ๋ผ ์ฌ๋ฌ ์๋ฒ๋ฅผ ๋๋๊ฒ ๋๋ฉด ๋์์ฑ ๋ฌธ์ ๋ฑ์ ๊ณ ๋ คํด์ผ ํจ)
๋ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ณ ์ถ์ ๊ฒ
- sse๋ฅผ ์ด์ฉํ ์ค์๊ฐ ์๋ฆผ
- ์ฌ๋ฌ replicaSet ์๋ฒ ํ๊ฒฝ์์ sse๋ฑ ๋น๋๊ธฐ ์๋น์ค๊ฐ ์์ ์ ์ผ๋ก ์๋ํ๊ฒ ํ๊ธฐ ์ํ ๋ธ๋ก์ปค ๋ฉ์ธ์ง ์๋ฒ ๊ตฌ์ถ(rabbitMQ)
์ด๋ฒ ํ๋ก์ ํธ์์ ๋งก์ ์ญํ
- ๊ด๋ฆฌ์ ํ์ด์ง์์ ํ์๊ฐ์ ๋ ํ์ ์กฐํ
- ์ ๊ณ ๊ธฐ๋ฅ ๊ตฌํ
- ์ฌ์ฉ์ ์ ๊ณ ๊ธฐ๋ฅ์ JPA๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ์ผ๋ฉฐ ์ ๊ณ ์ฌ์ ๋ชฉ๋ก์ ์๋ฒ์์ ๋์ ์ผ๋ก ์กฐํํ์ฌ ์ ๊ณ ๋์ ID์ ํจ๊ป ์ ๊ณ ์ ID์ ํจ๊ป Axios POST ์์ฒญํ์ฌ ๋ฐฑ์๋ ์ ์ ๊ณ ์์ฑ
- ๋ฐฑ์๋๋ DTO๋ฅผ ํตํด ์์ฒญ์ ๋ฐ๊ณ ReportService์์ ReportRepository๊ณ์ธต์ ๊ฑฐ์ณ DB์ ์ ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๊ด๋ฆฌ์ ํ์ด์ง์์๋ ์ ๊ณ ๋ฆฌ์คํธ๋ฅผ ์กฐํํ๊ณ ํด๋น ์ ๊ณ ์ ๋ํ ์ํ๋ฅผ ๋ณ๊ฒฝ
- ์ ๊ณ ์ํ ๋ณ๊ฒฝ์ผ๋ก ํด๋น ์ ๊ณ ์ ์น์ธ ์ฌ๋ถ๋ฅผ ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌํ๊ฒ๋ ์ค์ ํ๊ณ ํด๋น ๊ธ์ด ์น์ธ๋๋ฉด hardDelete(softDelete์์ ๋ณ๊ฒฝ๋จ)
- ์ฌ์ฉ์ ์ ๊ณ ๊ธฐ๋ฅ์ JPA๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ์ผ๋ฉฐ ์ ๊ณ ์ฌ์ ๋ชฉ๋ก์ ์๋ฒ์์ ๋์ ์ผ๋ก ์กฐํํ์ฌ ์ ๊ณ ๋์ ID์ ํจ๊ป ์ ๊ณ ์ ID์ ํจ๊ป Axios POST ์์ฒญํ์ฌ ๋ฐฑ์๋ ์ ์ ๊ณ ์์ฑ
- ๊ด๋ฆฌ์ ํ์ด์ง์์ ํ๊ทธ CRD ๊ธฐ๋ฅ ๊ตฌํ
- ApexChart.js๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ฅ ํ์ด์ง ์ฐจํธ ์์ฑ ๋ฐ ํด๋น ๋ฐฑ์๋ ๊ธฐ๋ฅ ๊ตฌํ
์ํ ์
- ๋งก์ ์ญํ ์ ์ผ์ฐ ๋๋ด๊ณ ํ์๋ค์ ๊ธฐ๋ฅ ๊ตฌํ๊ณผ ํจ๊ป ํ๋ก ํธ์ ํด๋น ๊ธฐ๋ฅ๋ค์ด ์ ๋๋ก ๋์ํ๋์ง ํ ์คํธํ์๊ณ ์์ ํด์ผํ ์ ๋ค์ ๋ชจ์ํ์์ต๋๋ค.
์์ฌ์ด ์
- ์ ์ผ ์์ฌ์ ๋๊ฑด ํ์ ๊ถํ์ ๋ํ ์ธ์ฆ, ์ธ๊ฐ์ ๋ํ ๋ถ๋ถ์ ํํ๋ก์ ํธ์์ ๋ง๋ค์ด๋ณด์ง ๋ชปํ๊ฒ๊ณผ ํ๋ก์ ํธ์ ๋ฐฐํฌ๋ฅผ ์ง์ ํด๋ณด์ง ๋ชปํ ๋ถ๋ถ์ด ์์ฝ์ต๋๋ค.
๋ฐฐ์ด ์
- ํผ์ ๋ง๋ค๋ฉด ํด๋น ์๋น์ค๋ฅผ ์ ์ํ ๋ ๋ฌด์ฌ์ฝ ์ง๋๊ฐ ์ ์๋ ํ์ต๊ณผ์ ๋ค์ ๋ํด์ ๋ค์ ํ๋ฒ ์๊ฐํ๊ณ ์ด์ผ๊ธฐ ํ ์ ์์ด์ ํ์ ์ด ํ์ต์ ๋ผ์น๋ ์ํฅ์ ๋ํด์ ๋ค์ ํ๋ฒ ์๊ฐํด๋ณผ ์ ์์์ต๋๋ค.
๋ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ณ ์ถ์ ๊ฒ
-
์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ ๊ฐ๊ฐ ๋์ปค ์ด๋ฏธ์ง๋ก ๊ตฌ์ฑํ๊ณ , Jenkins๋ฅผ ํ์ฉํด ์์ ๋๊ฐ ๋์ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ถํ์ต๋๋ค. ์ด๋ฅผ ํตํด CI/CD ํ์ดํ๋ผ์ธ์ ์ค๊ณํ๊ณ ์๋ํํ๋ฉฐ, ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์์ ์ ์ผ๋ก ์ด์ํ ์ ์์์ต๋๋ค.
-
๋ค์ ํ๋ก์ ํธ์์๋ ํ๋์ ์ฌ์ดํธ์ ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ ๋์ MSA ์ํคํ ์ฒ๋ฅผ ์ ์ฉํด ๊ฐ ์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌยทํ์ฅ๋ ์ ์๋๋ก ์ค๊ณํ ๊ณํ์ ๋๋ค. ์ด๋ฅผ ์ํด ์๋น์ค๋ณ๋ก ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ , Kubernetes ๊ธฐ๋ฐ์ ์ค์ผ์คํธ๋ ์ด์ ํ๊ฒฝ์ ๊ตฌ์ฑํ์ฌ AWS์ ๋ฐฐํฌํ ์์ ์ ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ์ ์ฐํ๊ฒ ํ๋์ ์๋น์ค ๋ชจ๋๋ก ๋์ํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
-
๋ํ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๊ฐ๋จํ AI ๊ธฐ๋ฅ์ ๊ตฌํํ์ง๋ง, ๋ค์ ํ๋ก์ ํธ์์๋ Python ๊ธฐ๋ฐ AI ์๋ฒ๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ๊ณ LangChain์ ํ์ฉํ ๋ณด๋ค ํ์ฅ๋ AI ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๊ณํ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ด์ ๋ณด๋ค ๋ค์ํ AI ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ๊ธฐ๋ฅ์ ์ฐจ๋ณ์ฑ์ ํ๋ณดํ ์ ์์ ๊ฒ์ด๋ผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ๋งก์ ์ญํ
- Oops ๊ธฐ๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ ๋ฐ ํ๋ก ํธ ๊ฐ๋ฐ
- Ooh ๊ธฐ๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ ๋ฐ ํ๋ก ํธ ๊ฐ๋ฐ
- Notice(๊ณต์ง์ฌํญ) ๋ฐฑ์๋ ๊ฐ๋ฐ ๋ฐ ํ๋ก ํธ ๊ฐ๋ฐ
- MyBatis + JPA ํผํฉ ๊ตฌ์กฐ๋ก R/ CUD ๋ฅผ ์ ์ฉ
์ํ ์
- DDD ์ค๊ณ๋ฐ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง ์์ ๋ถํฐ ์ค๊ฒ, ๊ตฌํ ๊น์ง ํ๋ฆ์ ์ผ๊ด์ฑ ์๊ฒ ์์ฑํ๋ ค ํจ.
- ์๊ฐ ๋ฐ ๊ธฐ๊ฐ ๋ด์ ์ผ์ ๊ด๋ฆฌ ๋ฐ ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํจ
์์ฌ์ด ์
- ํ๋กํธ ๋ฐ ๋ฐฑ์๋๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉด ์์ ํ๋ ๊ฒ์ด ๋น์ฐํ์ง๋ง ๋น๋์๊ฐ ์ฆ์ ์์ฌ์ ์.
- DevOps ๋ถ๋ถ(Docker/K8s)์์ ๋ ๊น๊ฒ ๊ด์ฌํ๊ณ ์ถ์์ง๋ง ๊ตฌํ ์ฐ์ ์์ ๋๋ฌธ์ ์ถฉ๋ถํ ์ฐธ์ฌํ์ง ๋ชปํ ์ ์ด ์์ฌ์.
- ํ ์คํธ ์ฝ๋ ์์ฑ ๋น์ค์ด ๋ฎ์.
๋ฐฐ์ด ์
- ๋๋ฉ์ธ ๊ธฐ๋ฐ ์ค๊ณ์ ์ค์์ฑ
- ํ ์ด๋ธ ์ค๊ณ โ API ์ค๊ณ โ ํ๋ก ํธ๊น์ง ์ด์ด์ง๋ ์ ์ฒด ํ๋ฆ์ ๊ฒฝํํ๋ฉด์ ์ด๋ฐ ์ค๊ณ์ ๋ช ํ์ฑ์ด ์ผ๋ง๋ ์ค์ํ์ง ์ฒด๊ฐํจ.
- ํ์
์ ์ค์์ฑ
- ํ๋ก ํธ ์๊ตฌ์ฌํญ ๋ฐ์, ์๋ต ํ๋ ์์ ๋ฑ ์์ ๋ณํ๋ผ๋ ๋น ๋ฅด๊ณ ๋ช ํํ ์ํต์ด ๋งค์ฐ ์ค์ํจ์ ๋๊ผ์.
์ด๋ฒ ํ๋ก์ ํธ์์ ๋งก์ ์ญํ
- ๋ถ๋งํฌ (Bookmark) ๊ธฐ๋ฅ ๋ฐฑ์๋ API ๊ฐ๋ฐ ๋ฐ ํ๋ก ํธ์๋ ์ฐ๋
- ํ๋ก์ฐ (Follow) ๊ธฐ๋ฅ ๋ฐฑ์๋ API ๊ฐ๋ฐ ๋ฐ ํ๋ก ํธ์๋ ์ฐ๋
- JPA๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์(Member), ๊ฒ์๊ธ(Oops/Ooh), ํ๋ก์ฐ(Follow) ๊ฐ์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ๋งคํํ๊ณ CUD ๋ก์ง์ ๊ตฌํ
- MyBatis๋ฅผ ํ์ฉํ์ฌ ๋ถ๋งํฌ ๋ชฉ๋ก, ํ๋ก์ ํผ๋ ๋ฑ ๋ณตํฉ์ ์ธ ์กฐํ(R) ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํ
์ํ ์
- ์ฌ์ฉ์(Member)์ ๊ฒ์๊ธ(Oops/Ooh) ๊ฐ์ ๋ถ๋งํฌ, ์ฌ์ฉ์(Member)์ ์ฌ์ฉ์(Member) ๊ฐ์ ํ๋ก์ฐ ๊ด๊ณ๋ฅผ ์ฒ์๋ถํฐ ๋ช ํํ๊ฒ ๋๋ฉ์ธ ๋ชจ๋ธ๋งํ์ฌ ์ค๊ณ์ ๋ฐ์ํ๋ ค ๋ ธ๋ ฅํจ.
- JPA๋ฅผ ํ์ฉํด CUD(๋ถ๋งํฌ ์ถ๊ฐ/์ญ์ , ํ๋ก์ฐ/์ธํ๋ก์ฐ) ๋ก์ง์ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , MyBatis๋ฅผ ์ฌ์ฉํด ๋ถ๋งํฌ ๋ชฉ๋ก ์กฐํ๋ ํ๋ก์ ํผ๋ ์กฐํ ๊ฐ์ ๋ณตํฉ ์กฐํ(R) ์ฑ๋ฅ์ ํ๋ณดํ๋ ํ์ด๋ธ๋ฆฌ๋ ๋ฐฉ์์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉํจ.
์์ฌ์ด ์
- DevOps ๋ถ๋ถ(Docker/Kubernetes)์์ ๋ ๊น๊ฒ ๊ด์ฌํ๊ณ ์ถ์์ง๋ง, ๋งก์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ฐ์ ์์ ๋๋ฌธ์ ์ถฉ๋ถํ ์ฐธ์ฌํ์ง ๋ชปํ ์ ์ด ์์ฌ์.
- ๊ธฐ๋ฅ ๊ตฌํ ๋๋น ํ ์คํธ ์ฝ๋ ์์ฑ ๋น์ค์ด ๋ฎ์์. ํนํ ๋์์ฑ ๋ฌธ์ ์ ๋ํ ํ ์คํธ๊ฐ ๋ถ์กฑํ์.
๋ฐฐ์ด ์
- AuthenticationPrincipal์ ํตํด ํ ํฐ์์ ์ฌ์ฉ์ ID๋ฅผ ๊ฐ์ ธ์ ๋ก์ง์ ์ ์ฉํ๋ ์ธ์ฆ ๊ธฐ๋ฐ ์๋น์ค์ ์ ์ฒด ํ๋ฆ์ ๊ฒฝํํจ.
- ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ธฐ๋ฅ ๋ณ๋ก ํ์ผ ๊ตฌ์กฐ์ ๋ธ๋์น ๊ตฌ์กฐ๋ฅผ ์ ํ๋ ๊ฒ์ด ๋งค์ฐ ํธ๋ฆฌํ๋ค๋ ๊ฒ์ ๋ฐฐ์.
- ํ์๋ค์ ์๊ฒฌ์ ์ฌ์ํ ๊ฒ ํ๋๋ผ๋ ๋ค ๊ฐ์ด ๋ชจ์ฌ์ ๊ณต์ ํ๋ฉด์ ์๋ ผํ๋ ๋ถ์๊ธฐ ํ์ฑ์ด ํ๋ก์ ํธ ์์ฑ๋์ ์ข์ ๊ธฐ์ฌ๋ฅผ ํ๋ค๋ ๊ฒ์ ๊ฒฝํํจ.
๋ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ณ ์ถ์ ๊ฒ
- CSS๋ฅผ ์ข ๋ ๋ค์ด์ด๋ฆฌ ์ฒ๋ผ ๊นจ๋ํ๊ฒ ์ ์ฉํจ์ผ๋ก์จ ์ฌ์ฉ์๋ค์ด ํธ์ํจ์ ๋๋ผ๊ฒ๋ ํ๊ณ ์ถ์
- ๋ค์ ํ๋ก์ ํธ์์๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ๊ณผ ๋๋ถ์ด Docker/K8s ๋ฐฐํฌ ์๋ํ ๋ถ๋ถ์๋ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ์ฌ DevOps ๊ฒฝํ์ ์๊ณ ์ถ์.
- ์ง๋ api๋ฅผ ์ฌ์ฉํด์ ์ผ๊ธฐ์ ์ ์ ์ฅ์๋ฅผ ๋ํ๋ผ ์ ์๋ ๊ธฐ๋ฅ ๊ฐ์ด, ๋ค์ํ api๋ฅผ ํ์ฉํด์ ํ์ฌ ๊ธฐ๋ฅ๋ณด๋ค ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ถ์
์ด๋ฒ ํ๋ก์ ํธ์์ ๋งก์ ์ญํ
- ๋ฐฑ์๋ ๊ตฌํ
- ์ข์์ ๋๋ฉ์ธ CRUD ๊ธฐ๋ฅ ๊ตฌํ
- ๋๊ธ ๋๋ฉ์ธ CRUD ๊ธฐ๋ฅ ๊ตฌํ
- ํ๊ทธ ๋๋ฉ์ธ CRUD ๊ธฐ๋ฅ ๊ตฌํ
- ๊ธฐ๋ก ์์ฑ ์ ์๋ ์นด์ดํธ๋๋ ๊ธฐ๋ก ์ง๊ณ ๊ธฐ๋ฅ JPA๋ก ๊ตฌํ
- ์ข์์, ๋๊ธ CRD ํ ์คํธ์ฝ๋ ์์ฑ
- ํ๋ก ํธ์๋ ๊ตฌํ
- ๋ฐฑ์๋์์ ๋งก์ ๋๋ฉ์ธ ํ๋ฉด ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ
- ๊ธฐ๋ก ์ง๊ณ๋ฅผ ํ ๋๋ก ๊นํ๋ธ์ ์๋ ๊ธฐ๋ฅ ๊ตฌํ
์ํ ์
- ๋งก์ ๋๋ฉ์ธ์ด ๋ค๋ฅธ ์ฌ๋ฌ ๋๋ฉ์ธ๊ณผ ์ฎ์ฌ์์ด ์ ๋ฐ์ ์ธ ํ๋ฆ์ ํ์ ํ ์ ์์์
- ๊ฑฐ์ ๋งค์ผ ํ์๋ฅผ ํ๋ฉฐ ์งํ ์ํฉ์ ๊ณต์ ํด์ ์ํํ ํ์ ๊ณผ ์ญํ ๋ถ๋ด์ด ๊ฐ๋ฅํ์
- ์ถฉ๋์ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๋๋ก git์ ๋ธ๋์น๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋๋์ด ๊ด๋ฆฌํจ
์์ฌ์ด ์
- contribution ์บ๋ฆฐ๋๋ฅผ ๊ตฌํํ ๋ ์ฐ๋ ์ ํ ๊ธฐ๋ฅ์ ๋ฃ์ง ์์ 1๋ ๊ฐ์ ๊ธฐ๋ก๋ง ํ์ธ ๊ฐ๋ฅํ์
- ํ๋ก ํธ์์ ์ค๊ณ ์ค๋ฅ๋ก ๋๊ธ ์ญ์ ๋ฅผ soft์์ hard delete๋ก ๋ฐ๊ฟ
- ๋ชจ๋ ๋๋ฉ์ธ์์ ์ ์ด๋ ์กฐํ ๋จ์ ํ ์คํธ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ์๋๋ฐ ์๊ฐ์ด ๋ถ์กฑํด ์ผ๋ถ๋ง ์์ฑํจ
๋ฐฐ์ด ์
- pinia๋ฅผ ์ฌ์ฉํด ๊ถํ ์ค์ ์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ๋ชจ๋์์ ๊ถํ์ ๊ด๋ฆฌํด์ผ ํจ์ ์ดํดํ ์ ์์์
- github์์ ํ์๋ค๊ณผ ํ์ ํ๋ฉฐ ์ฌ๋ฌ ๋ธ๋์น๋ก ๋๋์ด ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ์ต์ํด ์ง ์ ์์์
- ํ ์คํธ ์ฝ๋๋ฅผ ์ฌ๋ฌ๋ฒ ์์ฑํด๋ณด๋ฉฐ service ๊ณ์ธต์์์ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์์
๋ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ณ ์ถ์ ๊ฒ
- github์์ issue์ pr ํ ํ๋ฆฟ์ ํ์ฉํ์ฌ ๋ ์ฒด๊ณ์ ์ผ๋ก ์งํ์ํฉ์ ๊ด๋ฆฌํ๊ณ ์ถ์



















