Skip to content

DevOops-be19/be19-4th-DevOops-Oops_Log

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

257 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Oops_Log - ์‹ค์ˆ˜์™€ ์„ฑ์ทจ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์„ฑ์žฅ ๋‹ค์ด์–ด๋ฆฌ

Image



๐Ÿ–ผ๏ธ DevOops ํŒ€์› ์†Œ๊ฐœ



๐Ÿ—‚๏ธ ํ”„๋กœ์ ํŠธ ๊ธฐํš์„œ: Oops_Log


1-1. ๊ฐœ์š” (Overview)

"์‹ค์ˆ˜์™€ ์„ฑ์ทจ๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ ์ž๊ธฐ์ˆ˜์šฉ๊ณผ ํšŒ๋ณต๋ ฅ์„ ํ‚ค์šฐ๋Š” ์กฐ์šฉํ•œ ์„œ์žฌ"

์™„๋ฒฝํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์™„์„ฑ๋˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.


Oops_Log๋Š” ์‹ค์ˆ˜(Oops)์™€ ์„ฑ์ทจ(Ooh)๋ฅผ ํ•จ๊ป˜ ๊ธฐ๋กํ•˜๋ฉฐ ์„ฑ์žฅํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

ํ”๋“ค๋ ธ๋‹ค๋ฉด ์‚ด์•„์žˆ๋‹ค๋Š” ์ฆ๊ฑฐ์ด๊ณ , ๋น›๋‚ฌ๋‹ค๋ฉด ์„ฑ์žฅํ–ˆ๋‹ค๋Š” ์ฆํ‘œ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ํ•˜๋ฃจ๋Š” ๊ธฐ๋ก๋  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.



1-2. ํ”„๋กœ์ ํŠธ ๋ฐฐ๊ฒฝ (Background)

๐Ÿค” ๊ธฐ์กด์˜ ๋ฌธ์ œ์ 

์šฐ๋ฆฌ๋Š” ์™„๋ฒฝ์„ ๊ฐ•์š”๋ฐ›๋Š” ์‹œ๋Œ€์— ์‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

SNS์—๋Š” ์„ฑ๊ณต๊ณผ ํ–‰๋ณต๋งŒ์ด ๊ฐ€๋“ํ•˜๊ณ , ์‹ค์ˆ˜์™€ ์ขŒ์ ˆ์€ ์ˆจ๊ฒจ์•ผ ํ•  ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค.


๐Ÿ’ก ์ƒˆ๋กœ์šด ๊ธฐ๋ก ๊ณต๊ฐ„์˜ ํ•„์š”์„ฑ

ํ•˜์ง€๋งŒ ์ง„์งœ ์„ฑ์žฅ์€ ์‹ค์ˆ˜๋ฅผ ์ธ์ •ํ•˜๊ณ , ์ž‘์€ ์„ฑ์ทจ๋ฅผ ์ถ•ํ•˜ํ•˜๊ณ , ํ”๋“ค๋ฆฌ๋Š” ๋‚˜ ์ž์‹ ์„ ๋ฐ›์•„๋“ค์ผ ๋•Œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

Oops_Log๋Š” ๋‹น์‹ ์ด ์™„๋ฒฝํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋„˜์–ด์กŒ๋‹ค๋ฉด, ๋‹ค์‹œ ์ผ์–ด๋‚ฌ๋‹ค๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ณณ์€ ๋‹น์‹ ์„ ์œ„ํ•œ ์กฐ์šฉํ•œ ์„œ์žฌ์ž…๋‹ˆ๋‹ค. ์ฒœ์ฒœํžˆ, ์†”์งํ•˜๊ฒŒ, ๋‹น์‹ ๋งŒ์˜ ์ด์•ผ๊ธฐ๋ฅผ ๊ธฐ๋กํ•ด๋ณด์„ธ์š”.


โœจ ๊ธฐ๋Œ€ ํšจ๊ณผ ๋ฐ ํ•ต์‹ฌ ๋ชฉํ‘œ โœจ


  • โœ… ์‹ค์ˆ˜์˜ ์ž์‚ฐํ™”: ์‹ค์ˆ˜๋ฅผ ๊ฐ์ถ”์ง€ ์•Š๊ณ  ๊ธฐ๋กํ•จ์œผ๋กœ์จ ์„ฑ์žฅ์˜ ํŒจ์น˜๋…ธํŠธ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ๐Ÿค ์„ฑ์ทจ์˜ ์ถ•ํ•˜: ์ž‘์€ ์„ฑ์ทจ(Ooh)๋„ ๊ธฐ๋กํ•˜๋ฉฐ ์Šค์Šค๋กœ๋ฅผ ์ธ์ •ํ•˜๊ณ  ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ“ˆ ์„ฑ์žฅ ๊ณผ์ • ์ถ”์ : ๊ฐ์ • ๊ฐ•๋„์™€ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ๋‚˜์˜ ๊ฐ์ • ํŒจํ„ด์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ”’ ์•ˆ์ „ํ•œ ๊ณต๊ฐ„: ๋น„๊ณต๊ฐœ/์ต๋ช… ๊ณต๊ฐœ ์˜ต์…˜์„ ํ†ตํ•ด ์†”์งํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.


โœจ Oops_Log: ์ฃผ์š” ๊ธฐ๋Šฅ โœจ

๊ฐ ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ•จ๊ป˜ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿ˜ญ Oops - ์‹ค์ˆ˜์˜ ๊ธฐ๋ก

  • ๋ถˆ์•ˆ, ํ›„ํšŒ, ํ”ผ๋กœ์˜ ์ˆœ๊ฐ„์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ค์ˆ˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ฑ์žฅ์˜ ํŒจ์น˜๋…ธํŠธ๋ผ๋Š” ๊ด€์ ์œผ๋กœ ์Šค์Šค๋กœ๋ฅผ ์šฉ์„œํ•˜๊ณ  ๋‹ค์‹œ ์ผ์–ด์„œ๋Š” ์—ฐ์Šต์„ ํ•ฉ๋‹ˆ๋‹ค.

  • AI๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๊ธ€์„ ๋ถ„์„ํ•˜์—ฌ ๊ฐ์ •์„ ๊ณต๊ฐํ•˜๊ณ  ๋”ฐ๋œปํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’พ ๊ด€๋ จ ๊ธฐ๋Šฅ: OopsCommandController, OopsQueryController, AiController


๐Ÿฅฐ Ooh - ์„ฑ์ทจ์˜ ๊ธฐ๋ก

  • ๊ฐ์‚ฌ, ๋งŒ์กฑ, ํฌ๋ง์˜ ์ˆœ๊ฐ„์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  • ์ž‘์€ ์„ฑ์ทจ๋„ ํฐ ์˜๋ฏธ๊ฐ€ ์žˆ์Œ์„ ๋˜์ƒˆ๊ธฐ๋ฉฐ ์˜ค๋Š˜์˜ ๋น›๋‚˜๋Š” ์ˆœ๊ฐ„์„ ๋†“์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ Ooh ๊ธฐ๋ก์— '์ข‹์•„์š”'๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋Œ“๊ธ€๋กœ ์‘์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐Ÿ’พ ๊ด€๋ จ ๊ธฐ๋Šฅ: OohCommandController, OohQueryController, LikesCommandController, CommentsCommandController


๐Ÿท๏ธ ๊ฐ์ • ๊ฐ•๋„์™€ ํƒœ๊ทธ

  • ์˜ค๋Š˜์˜ ๊ฐ์ • ๊ฐ•๋„์™€ ์œ ํ˜•์„ ํ‘œ์‹œํ•˜๊ณ  ํƒœ๊ทธ๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉฐ ๋‚˜์˜ ๊ฐ์ • ํŒจํ„ด์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐Ÿ’พ ๊ด€๋ จ ๊ธฐ๋Šฅ: TagCommandController, TagQueryController, AdminReadController


๐Ÿ”’ ์•ˆ์ „ํ•œ ๊ธฐ๋ก ๊ณต๊ฐ„

  • ๋ชจ๋“  ๊ธฐ๋ก์€ ๋น„๊ณต๊ฐœ(๊ธฐ๋ณธ) ๋˜๋Š” ์ต๋ช… ๊ณต๊ฐœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ณต์œ  ์‹œ์—๋Š” ์ต๋ช…์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์•ˆ์ „ํ•˜๊ฒŒ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐Ÿ’พ ๊ด€๋ จ ๊ธฐ๋Šฅ: OohCommandEntity (isPrivate), OopsCommandEntity (oopsIsPrivate)


๐Ÿ›ก๏ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ˆ์ „์žฅ์น˜

  • ๋ถˆ์พŒํ•œ ๊ฒŒ์‹œ๊ธ€์ด๋‚˜ ๋Œ“๊ธ€์€ ์‹ ๊ณ  ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ด€๋ฆฌ์ž์—๊ฒŒ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌ์ž๋Š” ์‹ ๊ณ  ๋‚ด์—ญ์„ ์ƒ์„ธ ์กฐํšŒํ•˜๊ณ  '์Šน์ธ' ๋˜๋Š” '๋ฐ˜๋ ค' ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‹ ๊ณ  ์Šน์ธ ์‹œ ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ๋Œ“๊ธ€์€ ์ˆจ๊น€(์†Œํ”„ํŠธ ์‚ญ์ œ) ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

    ๐Ÿ’พ ๊ด€๋ จ ๊ธฐ๋Šฅ: ReportController, ReportReadController, ReportSerivceImpl


๐Ÿ“ˆ ์„ฑ์žฅ ๊ทธ๋ž˜ํ”„ ๋ฐ ํ™œ๋™

  • ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ๋‚ด๊ฐ€ ๊ธฐ๋กํ•œ Oops/Ooh ๊ธฐ๋ก์„ ์ž”๋”” ๊ทธ๋ž˜ํ”„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŒ”๋กœ์šฐ/ํŒ”๋กœ์›Œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•˜๊ณ , ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ์œผ๋กœ ์˜๋ฏธ ์žˆ๋Š” ๊ธฐ๋ก์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐Ÿ’พ ๊ด€๋ จ ๊ธฐ๋Šฅ: RecordHistoryQueryController, FollowQueryController, BookmarkQueryController



๐Ÿ“‹ 2. ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ

2-1. WBS


2-2. ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ



๐Ÿ“ 3. DDD ์„ค๊ณ„

์ด๋ฒคํŠธ ๋„๋ฉ”์ธ
Policy-Context


๐Ÿ’พ 4. DB ์„ค๊ณ„

๋…ผ๋ฆฌ ๋ชจ๋ธ๋ง
๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง


๐ŸŽจ 5. Figma

Figma ๋””์ž์ธ


๐Ÿ”„ 6. CI/CD ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ

CI/CD


๐Ÿงช 7. CI/CD ํ…Œ์ŠคํŠธ

CI/CD ํ…Œ์ŠคํŠธ
  • jenkins stage view

  • argoCD pipeline
์Šคํฌ๋ฆฐ์ƒท 2025-11-14 120616


๐Ÿงช 8. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ
์„ธ๋ถ€ ๋‚ด์šฉ


๐Ÿค– 9. ์  ํ‚จ์Šค ํŒŒ์ดํ”„๋ผ์ธ ํŒŒ์ผ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ

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!'
        }
    }
}


๐Ÿ’ป 10. ๊ธฐ์ˆ  ์Šคํƒ

BACKEND

Spring Spring Boot Spring Security Gradle JWT

FRONTEND

HTML5 CSS3 JavaScript Vue.js Vue Router Axios

DB

MariaDB MyBatis

DEVOPS

TOOL

Git GitHub VS Code IntelliJ IDEA Notion Figma Discord Postman




โœ๏ธ 11. ๊ฐœ์ธ ํšŒ๊ณ ๋ก

๊ฐ•์ง€ํ˜„

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋งก์€ ์—ญํ• 

  • ๋ฐฑ์—”๋“œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐํ™”
  • ํšŒ์›๊ฐ€์ž…
  • ํšŒ์› ๋กœ๊ทธ์ธ
  • 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์—์„œ ๋ณ€๊ฒฝ๋จ)
  • ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ํƒœ๊ทธ 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 ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•˜์—ฌ ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์ง„ํ–‰์ƒํ™ฉ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์Œ

About

๐Ÿฆ๊ฐ•์ง€ํ˜„ | ๐Ÿฌ์ •๊ฑด์ผ| ๐Ÿญ์†กํ˜•์„| ๐Ÿฆ–์ด์ˆœ์šฐ | ๐Ÿง์œค์„œ์ง„

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors