Skip to content

πŸ€ΏκΉ€μ˜κΈ°πŸ‹μ •μ˜μ§„πŸ³κΉ€μ§€λ―ΌπŸ¬μ΄μ€μ„œπŸ³μ΅œλ‘ν˜πŸ‹ν•œλ™μ£ΌπŸ€Ώ

Notifications You must be signed in to change notification settings

beyond-sw-camp/be10-4th-MENDITTZO-DEBOOK

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

책둠을박 πŸ“š

Group 19

1️⃣ ν”„λ‘œμ νŠΈ κ°œμš”

ν•œκ°• μž‘κ°€μ˜ 노벨문학상 μ†Œμ‹κ³Ό ν•¨κ»˜ λ…μ„œμ˜ λ°”λžŒμ΄ λΆˆμ–΄μ˜€κ³  μžˆμŠ΅λ‹ˆλ‹€. 막 책을 읽기 μ‹œμž‘ν•œ ν˜ΈκΈ°μ‹¬ λ§Žμ€ 초보 λ…μ„œκ°€λ“€, 였랜 μ‹œκ°„ μ±… 속에 λΉ μ Έ μ‚΄μ•„μ˜¨ λ…μ„œκ°€λ“€ λͺ¨λ‘λ₯Ό μœ„ν•œ ν”Œλž«νΌ '책둠을박'을 μ†Œκ°œν•©λ‹ˆλ‹€.

책둠을박은 μˆ˜λ§Žμ€ λ„μ„œ λͺ©λ‘μ„ μ œκ³΅ν•˜κ³ , μžμ‹ μ΄ 읽은 책에 λŒ€ν•œ μ†Œμ€‘ν•œ 감상을 κ³΅μœ ν•˜λŠ” κ²ƒμ—μ„œ κ·ΈμΉ˜μ§€ μ•Šκ³ , μ±…μœΌλ‘œλΆ€ν„° 얻은 ν’λΆ€ν•œ μ˜κ°μ„ λ‚˜λˆŒ 수 μžˆλŠ” μž₯μ†Œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

πŸŒμ£Όμš” κΈ°λŠ₯

1️⃣ 카카였 APIλ₯Ό μ΄μš©ν•œ μ†Œμ…œ 둜그인

카카였 μ†Œμ…œ λ‘œκ·ΈμΈμ„ 톡해 보닀 νŽΈν•˜κ²Œ μ„œλΉ„μŠ€μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μ—˜λΌμŠ€ν‹± μ„œμΉ˜λ₯Ό μ΄μš©ν•œ λ„μ„œ 검색

μ—˜λΌμŠ€ν‹± μ„œμΉ˜λ₯Ό μ΄μš©ν•΄ 보닀 μ •ν™•ν•˜κ³  λΉ λ₯Έ λ„μ„œ 검색 κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

elastic

3️⃣ WebSocket, STOMP와 Redisλ₯Ό ν™œμš©ν•œ λ…μ„œ ν† λ‘ λ°©

μ‹€μ‹œκ°„μœΌλ‘œ 생성과 μ°Έμ—¬κ°€ κ°€λŠ₯ν•œ λ…μ„œ 토둠방을 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. websocket

4️⃣ Gemini AIλ₯Ό μ΄μš©ν•œ λ„μ„œ μΆ”μ²œ

책을 κ³ λ₯΄κΈ° μ–΄λ €μšΈ λ•Œ λ‚˜μ˜ μ·¨ν–₯에 λ§žλŠ” 책을 Gemini AIμ™€μ˜ λŒ€ν™”λ₯Ό 톡해 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.


1. 기술 μŠ€νƒ

2. ν”„λ‘œμ νŠΈ μ•„ν‚€ν…μ²˜

ARCHI

2️⃣ 개발 νŒ€ μ†Œκ°œ

ν•œν™”μ‹œμŠ€ν…œ BEYOND SWμΊ ν”„ 10κΈ° ν„°μΉ˜λ‹€μš΄

κΉ€μ˜κΈ° 김지민 μ΄μ€μ„œ μ •μ˜μ§„ μ΅œλ‘ν˜ ν•œλ™μ£Ό

3️⃣ ν˜‘μ—… μ „λž΅

1. 브랜치 μ „λž΅

git-flow

  • main: 배포용 branch
  • develop: μ‹€μ§ˆμ  main branch
  • feature: 각 κΈ°λŠ₯을 κ°œλ°œν•˜λŠ” branch
  • 브랜치λͺ…은 'νƒœκ·Έ/도메인/#이슈번호' 의 ν˜•μ‹μ„ λ”°λ₯Έλ‹€.
    • 예) feat/user/#12
  • κΈ°λŠ₯ λ‹¨μœ„λ‘œ 브랜치λ₯Ό μƒμ„±ν•˜λ©°, 컀밋 λ‹¨μœ„λŠ” κ°€λŠ₯ν•œ μž‘κ²Œ μ‘°μ ˆν•œλ‹€. ν•œ λ²ˆμ— μ—¬λŸ¬ 클래슀λ₯Ό μ»€λ°‹ν•˜μ§€ μ•Šκ³ , Pull Request에 λ„ˆλ¬΄ λ§Žμ€ 컀밋이 ν¬ν•¨λ˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

2. Issue

  • 이슈 ν…œν”Œλ¦Ώμ„ ν™œμš©ν•˜μ—¬ λ‹€λ₯Έ μ‚¬λžŒμ΄ μ•ŒκΈ° μ‰½κ²Œ 이슈λ₯Ό μž‘μ„±ν•œλ‹€.
  • 이슈 μž‘μ„± ν›„ λ°œκΈ‰λœ #이슈번호λ₯Ό μ΄μš©ν•΄ 브랜치λ₯Ό μƒμ„±ν•œλ‹€.

issue_template issue

3. Pull Request

  • Pull Request의 제λͺ©μ€ 'νƒœκ·Έ/도메인 개발 λ‚΄μš©' 의 ν˜•μ‹μ„ λ”°λ₯Έλ‹€.
  • 예) feat/user 개발 λ‚΄μš©

pr_1 pr_2 pr_3

4. 컀밋 λ©”μ‹œμ§€ μ»¨λ²€μ…˜

  • νƒœκ·Έ
    feat: κΈ°λŠ₯ 개발
    fix: 버그 μˆ˜μ •
    docs: λ¬Έμ„œ μž‘μ„± 및 μˆ˜μ •
    style: μ½”λ“œ λ¦¬νŒ©ν† λ§ λ“± λ‚΄μš©μƒ 변경이 μ—†λŠ” 경우
    test: ν…ŒμŠ€νŠΈ μ½”λ“œ
    chore: μžμž˜ν•œ μˆ˜μ •μ‚¬ν•­

  • 컀밋 λ©”μ‹œμ§€λŠ” 'νƒœκ·Έ: #이슈번호 λ‚΄μš©' 의 ν˜•μ‹μ„ λ”°λ₯Έλ‹€.
  • 예) docs: #43 ReadMe μˆ˜μ •

commit

5. 넀이밍 κ·œμΉ™

  • 클래슀λͺ…: PascalCase
  • λ©”μ†Œλ“œλͺ…, ν•„λ“œλͺ…: camelCase
public class User{

    public void fetchUserInfo(){

        private Long userId;
       private String userName;
    }
}
  • DTOλͺ…: ~DTO 예) UserRequestDTO
  • 기타 λͺ¨ν˜Έν•œ λ‹¨μ–΄λŠ” 도메인 μ •μ˜μ„œμ— μž‘μ„±ν•œλ‹€.

6. 기타 κ·œμΉ™

  • 가독성을 μœ„ν•΄ 클래슀 첫 쀄은 띄어쓰고, 의미 μ—†λŠ” 곡백은 쀄인닀.
  • μ΅œλŒ€ tap depth = 2
  • magic number μ‚¬μš© 자제, μƒμˆ˜ν™”
  • 컀밋 μ „ μ •λ ¬(ctrl + alt + L)
  • 컀밋 μ „ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” importλ¬Έ μ‚­μ œ(ctrl + alt + o)

4️⃣ ν”„λ‘œμ νŠΈ 섀계 λ¬Έμ„œ

1. DDD 섀계

DDD 섀계 보기 - Miro

2. μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ

μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ

μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ 이미지

3. ERD

ERD 이미지

5️⃣ κΈ°λŠ₯ μˆ˜ν–‰ ν…ŒμŠ€νŠΈ

메인 νŽ˜μ΄μ§€

λ©”μΈνŽ˜μ΄μ§€

λ©”μΈνŽ˜μ΄μ§€)

  • 메인 νŽ˜μ΄μ§€ ν™”λ©΄μœΌλ‘œ 둜그인과 λ„μ„œ 검색을 ν•  수 있고 리뷰 λ§Žμ€ μ±… μˆœμœ„, λ…μ„œ ν† λ‘ λ°©, λ„μ„œ λͺ©λ‘μ„ κ°„λ‹¨ν•˜κ²Œ λ³Ό 수 있으며 λ„€λΉ„κ²Œμ΄μ…˜μ„ 톡해 λ„μ„œ λͺ©λ‘, λ„μ„œ μΆ”μ²œ, λ…μ„œ ν† λ‘ λ°©μœΌλ‘œ 이동할 수 μžˆλ‹€.
λ„μ„œ μΆ”μ²œ 챗봇

λ„μ„œ μΆ”μ²œ 챗봇 응닡 λ°›μ•„μ˜€κΈ°

챗봇 응닡

  • μ±„νŒ…μ°½μ— μ‚¬μš©μžκ°€ λ©”μ‹œμ§€λ₯Ό μž…λ ₯ν•΄ μ±—λ΄‡μ—κ²Œ 보내면 챗봇이 κ·Έ μ±„νŒ…μ— λŒ€ν•΄ μ•Œλ§žμ€ 닡변을 μ‘λ‹΅ν•˜μ—¬ λ°›μ•„μ˜¨ ν›„ μœ„μ˜ μ±„νŒ…μ°½μ— κ·Έ λ‚΄μš©μ΄ λ‚˜νƒ€λ‚œλ‹€.

λ„μ„œ μΆ”μ²œ 챗봇 μ±„νŒ… 뢈러였기

챗봇 μ±„νŒ… 뢈러였기

  • μ‚¬μš©μžκ°€ μƒˆλ‘­κ²Œ νŽ˜μ΄μ§€μ— λ“€μ–΄μ˜€λ”λΌλ„ 이전에 챗봇과 λ‚˜λˆ„λ˜ μ±„νŒ…μ΄ μ±„νŒ…μ°½μ— λ‚˜νƒ€λ‚œλ‹€.
μ—˜λΌμŠ€ν‹± μ„œμΉ˜λ₯Ό ν™œμš©ν•œ 검색

μ—˜λΌμŠ€ν‹± μ„œμΉ˜λ₯Ό 톡해 미리 보기가 μ§€μ›λ˜λŠ” λ„μ„œ 검색 κΈ°λŠ₯

알레스탁 ᄉα…₯α„Žα…΅α„…α…³α†― 아용ᄒᅑᆫ α„€α…₯ᆷᄉᅒᆨ

  • μ‚¬μš©μžκ°€ λ„μ„œμ˜ 제λͺ©μ„ κΈ°μ€€μœΌλ‘œ 검색이 κ°€λŠ₯ν•˜λ‹€.
μ±„νŒ… κΈ°λŠ₯을 μ΄μš©ν•œ λ…μ„œν† λ‘ λ°©

μ±„νŒ…λ°© 생성

1_μ±„νŒ…λ°© 생성

  • μ±„νŒ…λ°© 제λͺ©κ³Ό λ„μ„œ ID, μ΅œλŒ€ 인원을 μ •ν•΄ μ±„νŒ…λ°©μ„ μƒμ„±ν•œλ‹€.

μ±„νŒ…

2_μ±„νŒ…

  • μ‹€μ‹œκ°„μœΌλ‘œ λ‹€μˆ˜μ˜ μœ μ €κ°€ μ±„νŒ…μ„ μ§„ν–‰ν•œλ‹€.

μ±„νŒ… λ‚΄μš© 및 μ±„νŒ…λ°© λ‚˜κ°€κΈ°

3_μ±„νŒ… λ‚΄μš© 및 μ±„νŒ…λ°© λ‚˜κ°€κΈ°

  • κΈ°μ‘΄ μ±„νŒ… λ‚΄μš©μ΄ μ €μž₯λ˜μ–΄ 있고 μ±„νŒ…λ°©μ„ λ‚˜κ°€λ©΄ ν˜„μž¬ μ±„νŒ…λ°© 인원이 쀄어든닀.
둜그인 & λ‘œκ·Έμ•„μ›ƒ

둜그인 & λ‘œκ·Έμ•„μ›ƒ

둜그인 & λ‘œκ·Έμ•„μ›ƒ

  • μ‚¬μš©μžκ°€ 둜그인 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μ„œλ²„λ‘œ 둜그인 url μš”μ²­μ„ 보낸닀.
  • μ„œλ²„λŠ” 카카였 인증 μ„œλ²„μ—κ²Œ 둜그인 url을 μš”μ²­ν•΄ μ‚¬μš©μžμ—κ²Œ μ „λ‹¬ν•˜κ³ , μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈν•˜λ©΄ 카카였 인증 μ„œλ²„κ°€ 인가 μ½”λ“œλ₯Ό μ„œλ²„μ— μ „λ‹¬ν•œλ‹€.
  • μ„œλ²„λŠ” 인가 μ½”λ“œλ₯Ό μ΄μš©ν•΄ 카카였 인증 μ„œλ²„λ‘œλΆ€ν„° ν•„μš”ν•œ 정보λ₯Ό μ–»κ³ , DB에 μ‚¬μš©μžλ₯Ό νšŒμ›κ°€μž… λ˜λŠ” 둜그인 μ²˜λ¦¬ν•œλ‹€. 그리고 μ„œλ²„μ—μ„œ μƒμ„±ν•œ μ„œλΉ„μŠ€ 자체 토큰을 ν•¨κ»˜ 보낸닀.
  • λ‘œκ·Έμ•„μ›ƒ μ‹œ μ„œλ²„μ—μ„œ 토큰을 μ‚­μ œν•œλ‹€.
λ„μ„œ λͺ©λ‘

λ„μ„œ λͺ©λ‘ 보기

λ„μ„œ λͺ©λ‘ 보기

  • 메인 νŽ˜μ΄μ§€ ν™”λ©΄μ—μ„œ λ„μ„œ λͺ©λ‘μœΌλ‘œ μ΄λ™ν•΄μ„œ 등둝 된 λ„μ„œλ“€μ˜ λͺ©λ‘μ„ λ³Ό 수 μžˆλ‹€.

λ„μ„œ λͺ©λ‘ νŽ˜μ΄μ§€ 이동

λ„μ„œ λͺ©λ‘ νŽ˜μ΄μ§€ 이동

  • λ„μ„œ λͺ©λ‘ λ‚΄μ—μ„œ νŽ˜μ΄μ§•λ°”λ₯Ό μ΄μš©ν•˜μ—¬ νŽ˜μ΄μ§€ 이동을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€

λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€

λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€λ‘œ 이동

  • λ„μ„œ λͺ©λ‘μ—μ„œ νŠΉμ • λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€λ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.
리뷰

리뷰 μž‘μ„±

리뷰 μž‘μ„±

  • λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€μ—μ„œ 리뷰λ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

리뷰 μž‘μ„± μ·¨μ†Œ

리뷰 μž‘μ„± μ·¨μ†Œ

  • 리뷰λ₯Ό μž‘μ„± 쀑에 μ·¨μ†Œν•˜μ—¬ λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€λ‘œ 이동할 수 μžˆλ‹€.

리뷰 μˆ˜μ •

리뷰 μˆ˜μ •

  • 리뷰λ₯Ό μˆ˜μ • ν•  수 μžˆλ‹€.

리뷰 μ •λ ¬

리뷰 μ •λ ¬

  • 리뷰λ₯Ό μ΅œμ‹ μˆœμ΄λ‚˜ λ³„μ μˆœμœΌλ‘œ μ •λ ¬ν•  수 μžˆλ‹€.

리뷰 μ‚­μ œ

리뷰 μ‚­μ œ

  • 리뷰λ₯Ό μ‚­μ œν•  수 μžˆλ‹€.

리뷰 μ‹ κ³ 

리뷰 μ‹ κ³ 

  • 리뷰λ₯Ό μ‹ κ³  ν•  수 있고 μ‹ κ³  λ²„νŠΌμ„ 잘λͺ» 클릭 ν–ˆλ‹€λ©΄ μ·¨μ†Œν•  μˆ˜λ„ μžˆλ‹€.

CI/CD

πŸ”—k8s Menifests Manage Repository

Webhook μ„€μ •

webhook

Jenkins Pipeline
pipeline {
    agent any

    tools {
        gradle 'gradle'   // Jenkinsμ—μ„œ μ„€μ •λœ Gradle 버전
        jdk 'openJDK17'   // Jenkinsμ—μ„œ μ„€μ •λœ JDK 버전
    }

    environment {
        DOCKERHUB_CREDENTIALS = credentials('DOCKERHUB_PASSWORD')
        GITHUB_URL = 'https://github.com/MENDITTZO/MENDITTZO-DEBOOK.git'  // GitHub URL μž…λ ₯
        FRONTEND_IMAGE = 'debook_vue_project'  // ν”„λ‘ νŠΈμ—”λ“œ Docker 이미지 경둜
        BACKEND_IMAGE = 'debook_boot_project'    // λ°±μ—”λ“œ Docker 이미지 경둜
        MANIFESTS_GITHUB_URL = 'https://github.com/MENDITTZO/k8s.git' // k8s github 경둜둜
        GIT_USERNAME = 'junguijin'
        GIT_EMAIL = '[email protected]'
    }

    stages {
        stage('Preparation') {
            steps {
                script {
                    if (isUnix()) {
                        sh 'docker --version'
                    } else {
                        bat 'docker --version'
                    }
                }
            }
        }
        stage('Source Build') {
            steps {
                git branch: 'main', url: "${env.GITHUB_URL}"
                
                script {
                    // ν”„λ‘ νŠΈμ—”λ“œ λΉŒλ“œ
                    dir('MENDITTZO-Frontend') {
                        if (isUnix()) {
                            sh 'npm install'
                            sh 'npm run build'
                        } else {
                            bat 'npm install'
                            bat 'npm run build'
                        }
                    }
                    
                    // λ°±μ—”λ“œ λΉŒλ“œ
                    dir('MENDITTZO-Backend') {
                        if (isUnix()) {
                            sh "chmod +x ./gradlew"
                            sh "./gradlew clean build -x test"
                        } else {
                            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')]) {
                        // ν”„λ‘ νŠΈμ—”λ“œ Docker 이미지 λΉŒλ“œ 및 ν‘Έμ‹œ
                        dir('MENDITTZO-Frontend') {
                            if (isUnix()) {
                                sh "docker build --no-cache -t ${DOCKER_USER}/${FRONTEND_IMAGE}:latest ."
                                sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}"
                                sh "docker push ${DOCKER_USER}/${FRONTEND_IMAGE}:latest"
                            } else {
                                bat "docker build --no-cache -t ${DOCKER_USER}/${FRONTEND_IMAGE}:latest ."
                                bat "docker login -u %DOCKER_USER% -p %DOCKER_PASS%"
                                bat "docker push ${DOCKER_USER}/${FRONTEND_IMAGE}:latest"
                            }
                        }

                        // λ°±μ—”λ“œ Docker 이미지 λΉŒλ“œ 및 ν‘Έμ‹œ
                        dir('MENDITTZO-Backend') {
                            if (isUnix()) {
                                sh "docker build -t ${DOCKER_USER}/${BACKEND_IMAGE}:latest ."
                                sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}"
                                sh "docker push ${DOCKER_USER}/${BACKEND_IMAGE}:latest"
                            } else {
                                bat "docker build -t ${DOCKER_USER}/${BACKEND_IMAGE}:latest ."
                                bat "docker login -u %DOCKER_USER% -p %DOCKER_PASS%"
                                bat "docker push ${DOCKER_USER}/${BACKEND_IMAGE}:latest"
                            }
                        }
                    }
                }
            }
        }
        
    }

    post {
        always {
            script {
                if (isUnix()) {
                    sh 'docker logout'
                } else {
                    bat 'docker logout'
                }
            }
        }
        success {
            echo 'Pipeline succeeded!'
        }
        failure {
            echo 'Pipeline failed!'
        }
    }
}

K8s 배포 μƒνƒœ(Argocd)

argocd

Nginxλ₯Ό ν†΅ν•œ 80port 접속 확인

ingress

6️⃣ 회고

νŒ€μ› 회고 λ‚΄μš©
κΉ€μ˜κΈ° 이번 데브옡슀 ν”„λ‘œμ νŠΈμ—μ„œ μ±„νŒ… κΈ°λŠ₯ κ°œλ°œμ„ 맑게 λ˜μ–΄ WebSocket + STOMP + Redisλ₯Ό λͺ¨λ‘ λ‹€λ£¨μ–΄λ³΄κ²Œ λ˜μ—ˆλ‹€. μ„Έ 가지 λͺ¨λ‘ μ²˜μŒμ΄μ—ˆκ³  ν”„λ‘œμ νŠΈ 기간이 μ§§μ•˜κΈ° λ•Œλ¬Έμ— μ±„νŒ… κΈ°λŠ₯ κ°œλ°œμ—μ„œ μ±„νŒ…λ°© κ΄€λ¦¬λ‚˜ κ°„κ²°ν•œ μ½”λ“œ μž‘μ„±κ³Ό 같은 λ””ν…ŒμΌμ„ 챙기지 λͺ»ν•΄μ„œ 아쉬웠닀. λ¬Όλ‘  μ’‹μ•˜λ˜ 점도 μžˆμ—ˆλ‹€. λ¨Όμ €, 기쑴에 κ²½ν—˜ν–ˆλ˜ HTTP ν†΅μ‹ μ—μ„œ 더 λ‚˜μ•„κ°€ μ‹€μ‹œκ°„ 톡신이 μ–΄λ–»κ²Œ μ§„ν–‰λ˜λŠ”μ§€ κ·Έ 과정을 κ²½ν—˜ν•΄λ³Ό 수 μžˆμ—ˆλ‹€. λ„€νŠΈμ›Œν¬μͺ½ 지식이 λΆ€μ‘±ν–ˆλ˜ λ‚˜μ—κ²ŒλŠ” 쑰금 더 μ˜λ―ΈμžˆλŠ” μ‹œκ°„μ΄μ—ˆλ‹€. λ˜ν•œ STOMPλ₯Ό μ΄μš©ν•΄ μ‹€μ‹œκ°„ 톡신을 더 μ‰½κ²Œ λ§Œλ“€μ–΄μ£Όκ³  Redisλ₯Ό μ΄μš©ν•΄ λΉ λ₯Έ 데이터 처리λ₯Ό ν•˜μ—¬ λ‹€μˆ˜μ˜ μ‚¬μš©μžκ°€ μ±„νŒ…μ„ ν•  수 μžˆλŠ” κΈ°λŠ₯을 κ°œλ°œν•˜λ©΄μ„œ μ±„νŒ…κ³Ό μ‹€μ‹œκ°„ ν†΅μ‹ μ˜ μ „λ°˜μ μ΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό 이해할 수 μžˆμ—ˆλ‹€. 더 λ‚˜μ•„κ°€ SockJSλ₯Ό μ΄μš©ν•œ λΈŒλΌμš°μ €μ— 상관없이 톡신이 κ°€λŠ₯ν•˜κ²Œ ν™•μž₯을 해보고 μ‹Άκ³  μ±„νŒ… κΈ°λŠ₯의 λ””ν…ŒμΌμ„ 더 μ‚΄λ € 기쑴의 κΈ°λŠ₯을 더 디벨둭해봐야겠닀. 이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” CI/CD λ˜ν•œ κ²½ν—˜ν•΄λ³Ό 수 μžˆμ—ˆλŠ”λ° Docker, Kubernetes, Jenkinsλ₯Ό μ΄μš©ν•˜μ—¬ ν˜‘μ—… 툴인 github의 ν”„λ‘œμ νŠΈλ₯Ό μžλ™ λΉŒλ“œ 및 λ°°ν¬ν•˜λŠ” 과정을 κ²½ν—˜ν•΄λ³Ό 수 μžˆμ—ˆλ‹€. CI/CD의 μ „λ°˜μ μΈ 과정을 잘 μ΄ν•΄ν•˜μ§€ λͺ»ν•˜κ³  μ§„ν–‰ν•œ κ±° κ°™μ•„μ„œ μ΅œμ’… ν”„λ‘œμ νŠΈμ—λŠ” 직접 ν•΄λ³΄λ©΄μ„œ 과정듀을 λͺΈμœΌλ‘œ μŠ΅λ“ν•΄λ³΄μ•„μ•Όκ² λ‹€. μƒˆλ‘œμš΄ νŒ€μ›λ“€κ³Ό μ§„ν–‰ν–ˆλ˜ ν”„λ‘œμ νŠΈμΈλ° 기간도 μ§§μ•„μ„œ λ„ˆλ¬΄ μ–΄μˆ˜μ„ ν•œ ν”„λ‘œμ νŠΈκ°€ λ˜μ—ˆλ˜ κ±° 같은데 μ΅œμ’… ν”„λ‘œμ νŠΈμ—μ„œλŠ” ν˜‘μ—…μ„ λ”μš± 견고히 ν•˜μ—¬ 더 μ§œμž„μƒˆ μžˆλŠ” ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•΄λ³΄μ•„μ•Όκ² λ‹€.
김지민 이번 ν”„λ‘œμ νŠΈλŠ” 짧은 μ‹œκ°„λ™μ•ˆ ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œλ₯Ό 같이 λ§Œλ“€μ–΄μ•Όν•˜κ³  κ±°κΈ°λ‹€κ°€ λ„μ»€κΉŒμ§€ μ—°κ²°ν•˜μ—¬ CI/CDκΉŒμ§€ ν•΄μ•Όν•΄μ„œ 처음 μ‹œμž‘ν•  λ•ŒλŠ” λ§‰λ§‰ν•˜κ²Œ μƒκ°ν–ˆλ‹€. 그리고 μ €λ²ˆ ν”„λ‘œμ νŠΈμ—μ„œ ν•΄μ•Όν•˜λŠ” κΈ°λŠ₯듀을 μ œλŒ€λ‘œ λ‹€ ν•˜μ§€ λͺ»ν•˜κ³  ν•  수 μžˆλŠ” λΆ€λΆ„κΉŒμ§€λ§Œ ν–ˆκΈ° λ•Œλ¬Έμ— μ΄λ²ˆμ—λŠ” 잘 ν•˜κ³  싢은 생각을 κ°–κ³  μžˆμ—ˆκΈ°μ— 더 뢀담이 μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ μ €λ²ˆμ— ν–ˆλ˜ ν”„λ‘œμ νŠΈκ°€ κ²½ν—˜μ΄ λ˜μ—ˆλ˜μ§€ 처음 ν”„λ‘œμ νŠΈ ν–ˆμ„ λ•Œλ³΄λ‹€λŠ” μˆ˜μ›”ν•˜κ²Œ 진행할 수 μžˆμ–΄μ„œ λ‹€ν–‰μ΄μ—ˆλ‹€. μ΄λ²ˆμ— 맑은 뢀뢄은 λ„μ„œ λͺ©λ‘μ„ λ§Œλ“€κ³  λ„μ„œ λͺ©λ‘μ—μ„œ 책을 μ„ νƒν•˜λ©΄ λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜κ²Œ λ§Œλ“€κ³  λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€ μ•ˆμ—μ„œ μ±… 정보λ₯Ό axiosλ₯Ό 톡해 λ°±μ—”λ“œμ—μ„œ λ°›μ•„μ˜€κ³  λ„μ„œ μƒμ„ΈνŽ˜μ΄μ§€ μ•ˆμ˜ λ“±λ‘λœ 리뷰 정보λ₯Ό axios둜 λ°›μ•„μ˜€κ³ , 리뷰 생성, μˆ˜μ •, μ‚­μ œλ₯Ό ν•˜λŠ” 뢀뢄을 λ§‘μ•˜λ‹€. νŠΉλ³„νžˆ λ‹€λ₯Έ 뢀뢄에 λΉ„ν•΄ μ–΄λ €μš΄ 뢀뢄은 μ—†μ–΄μ„œ μ €λ²ˆλ³΄λ‹€λŠ” 처음 κ΅¬μ„±ν–ˆλ˜ ν”Όκ·Έλ§ˆμ™€ μ–ΌμΆ” λΉ„μŠ·ν•˜κ²Œ λ§Œλ“€ 수 μžˆμ–΄μ„œ λ‹€ν–‰μ΄μ—ˆλ‹€. 그리고 κ΅¬μƒν–ˆλ˜ κΈ°λŠ₯듀도 λ‹€ 포함할 수 μžˆμ–΄μ„œ μ΄λ²ˆμ—λŠ” μ €λ²ˆλ³΄λ‹€ μ’€ 더 λ°œμ „λœ λͺ¨μŠ΅μ„ 보인 κ±° κ°™μ•„ μ•ˆμ‹¬ν–ˆλ‹€. λͺ¨λ₯΄λŠ” 뢀뢄은 인터넷도 찾아보고 νŒ€μ›λΆ„λ“€κ³Ό 같이 μ˜λ…Όν•˜κ³  λ¬Όμ–΄λ³΄λ©΄μ„œ ν•΄κ²° ν•  수 μžˆμ—ˆκ³  νŒ€μ›λΆ„λ“€μ˜ 도움이 μ—†μ—ˆλ‹€λ©΄ μ΄λ ‡κ²ŒκΉŒμ§€ ν•  μˆ˜λŠ” μ—†μ—ˆμ„ κ±° κ°™λ‹€. 도컀 μͺ½μ€ μˆ˜μ—…μ„ λ“€μ—ˆμ§€λ§Œ 아직도 이해가 잘 μ•ˆλ˜μ–΄μ„œ 도움은 λͺ» λ“œλ Έμ§€λ§Œ λ‹€λ₯Έ λΆ€λΆ„μ—μ„œ μ΅œμ„ μ„ λ‹€ν•˜κ³ μž ν–ˆκ³  ν”Όκ·Έλ§ˆμ—μ„œ κ΅¬μƒν–ˆλ˜ μ‚¬μ†Œν•œ μ»΄ν¬λ„ŒνŠΈλ‚˜ CSS도 μΆ”κ°€ν•˜λŠ” λ“± μ—΄μ‹¬νžˆ ν–ˆμ§€λ§Œ λ©”μΈνŽ˜μ΄μ§€μ—μ„œ λ¦¬λ·°λ§Žμ€ 순으둜 λ„μ„œλ₯Ό μ •λ ¬ν•˜κ³ μž ν•˜μ˜€μ§€λ§Œ 뭐가 λ¬Έμ œμΈμ§€ 리뷰의 총 수λ₯Ό λͺ» λ°›μ•„μ™€μ„œ 정렬을 λͺ» ν–ˆλ˜ 것이 아쉽닀. λ­”κ°€ μ’€ 더 해보면 될 κ²ƒκ°™μ•˜μ§€λ§Œ μ‹œκ°„μ΄ λΆ€μ‘±ν•œ κ΄€κ³„λ‘œ 포기할 μˆ˜λ°–μ— μ—†μ–΄μ„œ λ§ˆμŒμ— λ‚¨μ§€λ§Œ λ‹€μŒμ— λ‹€μ‹œ 이와 λΉ„μŠ·ν•œ λ‚΄μš©μ„ ν•΄λ³Ό 수 있으면 λκΉŒμ§€ ν•΄μ„œ 완성해보고 μ‹Άλ‹€. κ·Έλž˜λ„ ν•„μš”ν•œ κΈ°λŠ₯듀도 λ‹€ λ§Œλ“€κ³  비둝 리뷰 μ‚­μ œλ₯Ό ν•˜λ©΄ λ°”λ‘œ λ¦¬μŠ€νŠΈμ—μ„œ 없어지지 μ•Šμ§€λ§Œ μ–΄λŠ 정도 완성을 ν–ˆκΈ° λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈν•˜λ©΄μ„œ 재밌게 ν•  수 μžˆμ–΄μ„œ μ’‹μ•˜λ‹€. λ‹€μŒμ—λŠ” μ΄λ²ˆλ³΄λ‹€ 더 잘 ν•  수 μžˆλ„λ‘ μ‹€λ ₯도 ν‚€μš°κ³  μ—΄μ‹¬νžˆ 더 λ…Έλ ₯ν•΄μ„œ 완성도λ₯Ό λ†’μ—¬μ•Όκ² λ‹€.
μ΄μ€μ„œ 이전 ν”„λ‘œμ νŠΈμ—μ„œ μ„œλΉ„μŠ€ 자체 νšŒμ›κ°€μž…, λ‘œκ·ΈμΈμ„ ν¬ν•¨ν•œ μ—¬λŸ¬ κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆλ‹€. νšŒμ›κ°€μž…/λ‘œκ·ΈμΈμ€ λ‹€λ₯Έ νŒ€μ›λ“€μ—κ²Œλ„ λ°˜λ“œμ‹œ ν•„μš”ν•œ κΈ°λŠ₯이기 λ•Œλ¬Έμ— μ€‘μš”λ„κ°€ 높은데, λ‹¨μˆœνžˆ 이메일, μ•”ν˜Έν™” 된 λΉ„λ°€λ²ˆν˜Έλ₯Ό DB에 μ €μž₯ν•˜κ³  둜그인 μ‹œ λ§žλŠ”μ§€ λ§€μΉ­ν•˜λŠ” μˆ˜μ€€μ΄λΌ 아쉬움이 λ‚¨μ•˜λ‹€. κ·Έλž˜μ„œ λ‹€μŒ κΈ°νšŒκ°€ 생기면 μ’€ 더 λ°œμ „μ‹œν‚€κ² λ‹€κ³  λ‹€μ§ν–ˆλ‹€. μƒˆλ‘œ λ§Œλ‚œ νŒ€μ›λ“€κ³Ό μƒˆ ν”„λ‘œμ νŠΈλ₯Ό ν•˜κ²Œ λ˜μ—ˆκ³ , λ‚˜λŠ” λ‚΄κ°€ νšŒμ›κ°€μž… κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ² λ‹€κ³  λ§ν–ˆλ‹€. 일주일이 μ•ˆλ˜λŠ” 짧은 κΈ°κ°„ μ•ˆμ— λ°±μ—”λ“œ, ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ„ λ§ˆμ³μ•Ό ν–ˆκΈ° λ•Œλ¬Έμ—, ν•œ 번 ν•΄ λ³Έ μ„œλΉ„μŠ€ 자체 νšŒμ›κ°€μž…μ„ 또 ν•˜κΈ°λ³΄λ‹€λŠ” 카카였 μ†Œμ…œ λ‘œκ·ΈμΈμ„ λ„μž…ν•˜κ³ , redis와 토큰을 μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€. μ„œλΉ„μŠ€ 자체 νšŒμ›κ°€μž…λ³΄λ‹€ 쑰금 μ–΄λ €μšΈ 거라고 μ˜ˆμƒμ€ ν–ˆμ§€λ§Œ 생각보닀 더 κΉŒλ‹€λ‘œμ› λ‹€. μΉ΄μΉ΄μ˜€μ—μ„œ μ œκ³΅ν•˜λŠ” λ¬Έμ„œλ₯Ό μ—΄μ‹¬νžˆ 읽으며 μ—”λ“œν¬μΈνŠΈλ§ˆλ‹€ postman으둜 ν…ŒμŠ€νŠΈν•˜λ©΄μ„œ 카카였 둜그인의 흐름을 μ΄ν•΄ν–ˆλ‹€. 그리고 ν•„μš”ν•œ κΈ°λŠ₯끼리 λ¬ΆμœΌλ©΄μ„œ ν”„λ‘ νŠΈμ—”λ“œμ™€ μ—°κ²°ν–ˆλ‹€. 이 κ³Όμ •μ—μ„œ μ„œλΉ„μŠ€μ²΄ 토큰을 μƒμ„±ν•˜κ³ , redis에 μ €μž₯ν•˜κ³ , api μš”μ²­λ§ˆλ‹€ 토큰을 ν•¨κ»˜ 보내야 ν–ˆλŠ”λ°, λ³΅μž‘ν•΄μ„œ μ‹œκ°„μ„ 많이 썼닀. ν•˜μ§€λ§Œ 덕뢄에 OAuth2와 토큰에 λŒ€ν•΄ 배울 수 μžˆμ—ˆλ‹€. 그리고 카카였 인증 μ„œλ²„μ—μ„œ λ³΄λ‚΄μ£ΌλŠ” 인가 μ½”λ“œλ₯Ό λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œ μ–΄λŠ μͺ½μ—μ„œ μ²˜λ¦¬ν•΄μ•Όν•  지와 같은 문제λ₯Ό κ³ λ―Όν•˜λŠ” μ‹œκ°„μ„ κ°€μ§ˆ 수 μžμžˆμ—ˆλ‹€. 그리고 이 ν”„λ‘œμ νŠΈμ—μ„œ λ‹€λ₯Έ νŒ€μ›μ˜ μ œμ•ˆμœΌλ‘œ git을 더 많이 ν™œμš©ν–ˆλ‹€. 원격 λ ˆν¬μ§€ν† λ¦¬μ˜ main 브랜치 μ•„λž˜μ— develop μ΄λΌλŠ” 브랜치λ₯Ό λ§Œλ“€μ—ˆκ³ , λ°˜λ“œμ‹œ 2λͺ… μ΄μƒμ˜ Pull Request μŠΉμΈμ„ λ°›μ•„μ•Ό develop에 병합할 수 μžˆλ„λ‘ μ„€μ •ν–ˆλ‹€. 이둜 인해 λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό μ‘°κΈˆμ΄λΌλ„ 더 보게 λ˜μ—ˆκ³ , 컀밋과 병합 μ‹œ 경각심을 κ°€μ§ˆ 수 μžˆμ—ˆλ‹€. ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ•„μ‰¬μš΄ 점이 μžˆλ‹€λ©΄ λ¦¬ν”„λ ˆμ‹œ 토큰을 μ μ ˆν•˜κ²Œ μ‚¬μš©ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” 점과, λ‹Ήμž₯ μ„œλΉ„μŠ€κ°€ μž‘λ™ν•˜κ²Œ ν•˜λŠ” 데에 κΈ‰κΈ‰ν•΄ 쿼리 νŒŒλΌλ―Έν„°μ— 토큰을 λ„£λŠ” λ“± λ³΄μ•ˆμ— 신경을 쓰지 λͺ»ν–ˆλ‹€λŠ” 것이닀. λ˜ν•œ, νŒ€μ›λ“€μ΄ 각자의 κΈ°λŠ₯을 κ°œλ°œν•œ ν›„ μ„œλ‘œ 맞좰보고 μ™œ λ¬Έμ œκ°€ μƒκΈ°λŠ”μ§€ ν† μ˜ν•˜λŠ” μ‹œκ°„μ΄ λ„ˆλ¬΄ μ§§μ•˜λ‹€. 또 쒋은 κΈ°νšŒκ°€ 생긴닀면 λ‚˜μ˜ νŒ€μ›μ΄ μ–΄λ–€ apiλ₯Ό κ°œλ°œν•˜λ‹€κ°€ μ–΄λ–€ λ¬Έμ œκ°€ μžˆμ—ˆκ³ , μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ μ‹œκ°„μ„ λ‚΄μ–΄ 이야기 ν•˜κ³  μ‹Άλ‹€.
μ •μ˜μ§„ 이번 DevOps ν”„λ‘œμ νŠΈλ₯Ό 톡해 μ§€κΈˆκΉŒμ§€ ν•™μŠ΅ν–ˆλ˜ λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ—μ„œ μ‹œμž‘ν•˜μ—¬, ν”„λ‘œμ νŠΈλ₯Ό μ‹€μ œλ‘œ λ°°ν¬ν•˜λŠ” κ³Όμ •κΉŒμ§€ μ „λ°˜μ μœΌλ‘œ κ²½ν—˜ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 직접 κ°œλ°œν•œ ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œ ν”„λ‘œμ νŠΈλ₯Ό Docker μ΄λ―Έμ§€λ‘œ λ³€ν™˜ν•˜κ³ , ν˜‘μ—… κ³Όμ •μ—μ„œ μ‚¬μš©ν•œ GitRepository와 Jenkinsλ₯Ό Webhook으둜 μ—°λ™ν•˜μ—¬ 개발 μ‹œ μžλ™μœΌλ‘œ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, Docker Hub에 λ“±λ‘κΉŒμ§€ μ΄λ£¨μ–΄μ§€λŠ” CI/CD ν™˜κ²½μ„ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ˜ν•œ, Docker 이미지λ₯Ό 기반으둜 μž‘μ„±λœ Kubernetes νŒŒμΌλ“€μ„ GitHub λ ˆν¬μ§€ν† λ¦¬λ‘œ κ΄€λ¦¬ν•˜λ©°, ArgoCD와 μ—°κ³„ν•˜μ—¬ 배포 과정을 μžλ™ν™”ν•˜λŠ” μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ CI/CD ν™˜κ²½μ„ κ΅¬ν˜„ν•˜λ©° ν”„λ‘œμ νŠΈμ˜ 전체적인 흐름과 DevOps의 핡심 κ°œλ…μ„ 직접 μ²΄ν—˜ν•  수 μžˆμ–΄ 도움이 많이 λ˜μ—ˆλ˜ ν”„λ‘œμ νŠΈμ˜€μŠ΅λ‹ˆλ‹€. 이번 κ²½ν—˜μ„ λ°”νƒ•μœΌλ‘œ 얻은 κ²½ν—˜μ„ μ΅œμ’…ν”„λ‘œμ νŠΈμ— μ ‘λͺ©μ‹œμΌœ λ”μš± λ°œμ „λœ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
μ΅œλ‘ν˜ 이번 ν”„λ‘œμ νŠΈλŠ” μ§€κΈˆκΉŒμ§€ μ§„ν–‰ν–ˆλ˜ ν”„λ‘œμ νŠΈμ™€ λ‹€λ₯΄κ²Œ 주어진 μ‹œκ°„μ΄ κ°€μž₯ μ§§μ•˜λ‹€. 짧은 μ‹œκ°„λ™μ•ˆ 섀계뢀터 λ°°ν¬κΉŒμ§€ 완성을 ν•˜λŠ” λ‚΄μ‹€ μžˆλŠ” ꡬ성을 μš”κ΅¬ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜€λ‹€. λ‚΄μ‹€μžˆλŠ” ꡬ성을 ν•˜λŠ” 쀑 μ–΄ν•„ 포인트둜 μ—¬λŸ¬κ°€μ§€λ₯Ό 작게 λ˜μ—ˆλŠ”λ° λ‚΄κ°€ ν•˜κ²Œ 된 역할이 μ—˜λΌμŠ€ν‹± μ„œμΉ˜λΌλŠ” μ™ΈλΆ€ 라이브러리λ₯Ό μ΄μš©ν•˜λŠ” μž‘μ—…μ΄μ—ˆλ‹€. κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•˜λ©΄ μ—˜λΌμŠ€ν‹± μ„œμΉ˜λŠ” κΈ°μ‘΄ RDB의 μ‘°νšŒλ³΄λ‹€ 훨씬 λΉ λ₯΄κ²Œ 검색을 ν•  수 μžˆλŠ” μž₯점이 μžˆλ‹€. κ·Έ 뢀뢄을 ν™œμš©ν•΄ λ§Žμ€ μ–‘μ˜ 정보λ₯Ό λΉ λ₯΄κ²Œ μ‘°νšŒν•  수 μžˆλŠ” κΈ°λŠ₯κ³Ό λ”λΆˆμ–΄ μ‹€μ œ κ²€μƒ‰μ—”μ§„μ—μ„œ ν™œμš©ν•˜λ“― 검색어λ₯Ό 완성해감에 따라 λ°μ΄ν„°μ˜ 쑰회λ₯Ό λΉ λ₯΄κ²Œ ν•΄μ™€μ„œ μžλ™μ™„μ„± κΈ°λŠ₯κΉŒμ§€ μΆ”κ°€ν•˜κ²Œ λ˜μ—ˆλ‹€. 처음 κΈ°μ‘΄ μ„€κ³„λŠ” μ—˜λΌμŠ€ν‹± μ„œμΉ˜ν•˜λ©΄ 항상 λ”°λΌμ˜€λŠ” ELK(μ—˜λΌμŠ€ν‹±μ„œμΉ˜, 둜그 μŠ€νƒœμ‹œ, ν‚€λ°”λ‚˜μ˜ μ€„μž„λ§)의 κΈ°λŠ₯쀑 μ—˜λΌμŠ€ν‹± μ„œμΉ˜μ™€ 둜그 μŠ€νƒœμ‹œλ₯Ό μ—°λ™ν•΄μ„œ μž‘μ—…μ„ ν•˜κ³ μž ν–ˆλ‹€. μŠ€ν”„λ§μ—μ„œ μ—˜λΌμŠ€ν‹± μ„œμΉ˜μ— μš”μ²­μ„ ν•˜λ©΄ ν•„μš”ν•œ 값을 μ°Ύμ•„ λ¦¬ν„΄ν•΄μ£ΌλŠ” 기본적인 κ΅¬μ‘°μ—μ„œ 데이터λ₯Ό μΈλ±μ‹±ν•΄μ£ΌλŠ” 역할을 ν•˜λŠ” 것이 λ‘œκ·ΈμŠ€νƒœμ‹œμ˜€λ‹€. ν•˜μ§€λ§Œ λ””λΉ„ 연동에 ν•„μš”ν•œ jar파일 인식이 λ‘œκ·ΈμŠ€νƒœμ‹œμ—μ„œ μ•ˆλ˜μ–΄ μŠ€ν”„λ§μ—μ„œ 인덱싱 ν›„ μž‘μ—…μ„ μ§„ν–‰ν•˜λŠ” μ‹μœΌλ‘œ λ°”κΎΈμ—ˆλ‹€. 데이터 양도 λ§Žμ•„ λΉ„λ™κΈ°μ²˜λ¦¬λ₯Ό ν•˜κ³ , 거기에 λ‚˜μ€‘μ— νŒ€μ›λ“€κ³Ό μ½”λ“œλ₯Ό ν•©μΉ˜λ©΄μ„œ 생각지도 λͺ»ν–ˆλ˜ CORS μ„€μ •κΉŒμ§€ ν•˜κ²Œ λ˜μ—ˆλ‹€. μ§€κΈˆκΉŒμ§€ λ‚˜μ˜ κ°œλ°œμ€ λ¬΄μ—μ„œ 유λ₯Ό λ§Œλ“€μ–΄ λ‚˜κ°€λŠ” κ²ƒμ΄μ—ˆμ§€λ§Œ 이번 ν”„λ‘œμ νŠΈλ•ŒλŠ” μƒˆλ‘­κ²Œ λ§Œλ“€μ–΄μ§„ κΈ°μˆ μ„ ν”„λ‘œμ νŠΈμ— μ μš©μ„ ν•˜λŠ” 과정이 ꡉμž₯히 색닀λ₯Έ κ²½ν—˜μ΄μ—ˆκ³  즐거웠닀. 좔후에 νŒ€μ›λ“€κ³Ό μ™ΈλΆ€ 라이브러리 μ‚¬μš©κ°„ λΆ€λ”ͺ힌 λ¬Έμ œλ“€μ„ κ³΅μœ ν•˜κ³  같이 μ„±μž₯ν•˜κ³  μ‹Άλ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.
ν•œλ™μ£Ό Β Β Β Β Β Β Β Β Β Β Β Β  이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ„μ„œλ₯Ό μΆ”μ²œν•΄μ£ΌλŠ” 챗봇을 κ΅¬κΈ€μ˜ Gemini APIλ₯Ό μ΄μš©ν•΄ λ‹€λ€„λ³΄κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. μ™„μ „ 처음 λ‹€λ€„λ³΄λŠ” κΈ°λŠ₯이라 μ•Œμ•„λ³΄λ©° 곡뢀도 해보고 μ²˜μŒμ—λŠ” μ±—GPT APIλ₯Ό μ΄μš©ν•˜λ €κ³  ν–ˆλ‹€κ°€ 응닡 토큰 μˆ˜κ°€ λ„ˆλ¬΄ 적어 정상적인 이용이 μ–΄λ €μšΈκ²ƒ κ°™μ•„ 토큰을 μƒλŒ€μ μœΌλ‘œ μ—¬μœ μžˆκ²Œ μ œκ³΅ν•΄μ£ΌλŠ” κ΅¬κΈ€μ˜ Gemini API둜 AIλ₯Ό λ°”κΎΈλŠ” κ³Όμ •μ—μ„œ μ‹œκ°„μ΄ μ†Œλͺ¨λ˜κΈ°λ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‹€λ£¨λŠ” κ³Όμ •μ—μ„œ API ν˜ΈμΆœμ— λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ²Œλ˜μ—ˆκ³ , AIμ—κ²ŒλŠ” 섀정을 λΆ€μ—¬ν•˜μ—¬ λ‚΄κ°€ μ›ν•˜λŠ” λŒ€λ‹΅μ„ μ΄λŒμ–΄ λ‚Ό 수 μžˆλŠ”λ°, 이 섀정을 λΆ€μ—¬ν•˜λŠ” instructorλ₯Ό λ‹€λ£¨λŠ” 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œκ²Œλœ 것 κ°™μŠ΅λ‹ˆλ‹€. μ•„μ‰¬μš΄μ μ€ ν”„λŸ°νŠΈ λΆ€λΆ„μ—μ„œ 챗봇이 μ œκ³΅ν•œ μ±… 제λͺ©μ— ν•˜μ΄νΌ 링크λ₯Ό κ±Έμ–΄ κ·Έ μ±…μ˜ 상세 μ •λ³΄λ‘œ 이동할 수 μžˆλ„λ‘ ν•˜κ³ μ‹Άμ—ˆλŠ”λ° κ·ΈλŸ¬μ§€ λͺ»ν•œμ μ΄ 많이 μ•„μ‰¬μ› μŠ΅λ‹ˆλ‹€. 그리고 μ œκ°€ κΉƒν—ˆλΈŒλ“±μ„ λ‹€λ£¨λŠ” ν˜‘μ—…μ— 아직 μ μ‘ν•˜μ§€ λͺ»ν•΄ λ―Έμˆ™ν–ˆμ—ˆλŠ”λ° 이번 νŒ€κ³Ό ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ ν˜‘μ—… μ „λž΅μ„ 쒀더 λ””ν…ŒμΌν•˜κ²Œ μ„Έμš°λ©° 이λ₯Ό μ μš©ν•˜λŠ” κ³Όμ •μ—μ„œ 많이 배우고 μ μ‘ν•˜κ²Œ λ˜μ–΄ 잘 λ‹€λ£° 수 있게 된 것 κ°™μŠ΅λ‹ˆλ‹€.

About

πŸ€ΏκΉ€μ˜κΈ°πŸ‹μ •μ˜μ§„πŸ³κΉ€μ§€λ―ΌπŸ¬μ΄μ€μ„œπŸ³μ΅œλ‘ν˜πŸ‹ν•œλ™μ£ΌπŸ€Ώ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published