ํ ์คํธ ๊ธฐ๋ฐ ๊ฐ์ ๊ธฐ๋ก์ ์๊ฐ์ ์ผ๋ก ํํํ, ๊ฐ์ธํ๋ ๊ฐ์ฑ ๋ค์ด์ด๋ฆฌ ์๋น์ค ๊ทธ๋ฃจ (Groo)
๋ค๋ฅธ ํ๋ฉด ๊ตฌ๊ฒฝํ๊ธฐ
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|---|---|
| ํฉ์๋ฏผ | ์ ๋ฏผ๊ฒฝ | ์ด์์ | ์กฐ์คํ | ์ด์ค๊ท | ๋ฐ์ง์ |
์ฐ๋ฆฌ๋ ํ๋ฃจ์๋ ์ฌ๋ฌ ๊ฐ์ ์ ๊ฒช์ง๋ง, ๊ทธ ๊ฐ์ ๋ค์ด ์ง๋๊ฐ ์๋ฆฌ์๋ ์ข ์ข ์๋ฌด๊ฒ๋ ๋จ์ง ์์ต๋๋ค. Groo๋ ๋ฐ๋ก ์ด ์๊ฐ๋ค์ ๋์น์ง ์๊ณ , ๊ฐ์ ์ ๊ธฐ๋กํ๊ณ ํํํ ์ ์๋ ํน๋ณํ ๊ณต๊ฐ์ ๋ง๋ค๊ณ ์ ์์๋์์ต๋๋ค.
๋จ์ํ ํ ์คํธ ์ผ๊ธฐ์ฅ์ ๋์ด, Groo๋ ๊ฐ์ ์ ์๊ฐ์ ์ผ๋ก ํํํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ผ๊ธฐ๋ฅผ ์์ฑํ๋ฉด, AI๊ฐ ๊ฐ์ ์ ๋ถ์ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์์ ๊พธ๋ฐ ์ ์๋ ์์ฐ ์์(๊ฝ, ๋๋ฌด, ๋ ์จ ๋ฑ)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฒ ํํ๋ ๊ฐ์ ์ โํ๋ฃจ์น ๋ง์โ์ ๋ด์ ์์ ์ ์์ด ๋๊ณ , ์๊ฐ์ด ์ง๋ ์๋ก ํ๋์ ๊ฐ์ธ์ ์ธ ๊ฐ์ ์ ์ฒ์ผ๋ก ํ์ฅ๋์ด ๊ฐ๋๋ค.
Groo๋ ์๋ก๋ฅผ ์ฃผ๊ธฐ ์ํ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋, ์ค์ค๋ก์ ๊ฐ์ ๊ณผ ๋ง์ ์ํ๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ํํํ๋ ์ผ์์ ๋ฃจํด์ด ๋๊ธฐ๋ฅผ ์งํฅํฉ๋๋ค. ๊ฐ์ ์ ์ข๊ณ ๋์จ์ ๋ฌธ์ ๊ฐ ์๋๋ผ, ์กด์ฌ ์์ฒด๋ก ์๋ฏธ๊ฐ ์๋ค๋ ๋ฏฟ์ ์๋ ์ฌํ, ๊ธฐ์จ, ๋ถ์, ์ค๋ ๋ฑ ๋ค์ํ ๊ฐ์ ์ ์๋ ๊ทธ๋๋ก ๊ธฐ๋กํ๊ณ ๋จ๊ธธ ์ ์๋๋ก ๋์์ค๋๋ค.
๋ํ ์ฌ์ฉ์๋ ํผ์๋ง์ ์ ์์ ๊ฐ๊ฟ ์๋ ์๊ณ , ์น๊ตฌ๋ค๊ณผ ํจ๊ป ์ฒ์ ๋ง๋ค์ด ์๋ก์ ๊ฐ์ ์ ๊ณต์ ํ ์๋ ์์ต๋๋ค. ์ด์ฒ๋ผ Groo๋ โ๊ฐ์ ์ ํํโ๊ณผ โ์ ์์ ์ฐ๊ฒฐโ, ๋ ๊ฐ์ง๋ฅผ ์ค์ฌ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์๋ก์ด ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
๋จ ํ ์ค์ ์ผ๊ธฐ๋ผ๋ ๊ด์ฐฎ์์. ๊ทธ๋ ์ ๊ฐ์ ์ด ํ๋์ ๋๋ฌด๊ฐ ๋์ด, ๋น์ ์ ์ ์์ ์๋๋๋ค. ๐ฑ
์ฝ๋ ๋ณด๊ธฐ
pipeline {
agent any
tools {
gradle 'gradle'
jdk 'openJDK17'
}
environment {
GITHUB_URL = 'https://github.com/x1-company/be14-4th-x1-GROO-BE.git'
}
stages {
stage('Preparation') {
steps {
script {
if (isUnix()) {
sh 'docker --version'
} else {
bat 'docker --version'
}
}
}
}
stage('Checkout & Inject Secrets') {
steps {
git branch: 'feature/roy/CICD', url: "${env.GITHUB_URL}"
withCredentials([file(credentialsId: 'x1_groo_boot-yml', variable: 'APP_YML_PATH')]) {
script {
if (isUnix()) {
sh "mkdir -p ./src/main/resources"
sh "cp $APP_YML_PATH ./src/main/resources/application.yml"
} else {
bat 'if not exist src\\main\\resources mkdir src\\main\\resources'
bat 'copy %APP_YML_PATH% src\\main\\resources\\application.yml'
}
}
}
}
}
stage('Source Build') {
steps {
script {
if (isUnix()) {
sh "chmod +x ./gradlew"
sh "./gradlew clean build"
} else {
bat "gradlew.bat clean build"
}
}
}
}
stage('Container Build and Push') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'DOCKERHUB_PASSWORD', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
if (isUnix()) {
sh "docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}"
sh "docker build -t ${DOCKER_USER}/x1_groo_boot:latest ."
sh "docker push ${DOCKER_USER}/x1_groo_boot:latest"
} else {
bat "docker login -u %DOCKER_USER% -p %DOCKER_PASS%"
bat "docker build -t ${DOCKER_USER}/x1_groo_boot:latest ."
bat "docker push ${DOCKER_USER}/x1_groo_boot:latest"
}
}
}
}
}
stage('Run Container') {
steps {
script {
def containerName = "x1_groo_boot_container"
def imageName = "cxzaqq/x1_groo_boot:latest"
if (isUnix()) {
sh "docker ps -q --filter 'name=${containerName}' | grep -q . && docker rm -f ${containerName} || echo 'No existing container to remove'"
sh "docker run -d --name ${containerName} -p 8080:8080 ${imageName}"
} else {
bat """
FOR /F %%i IN ('docker ps -q --filter "name=${containerName}"') DO docker rm -f %%i
docker run -d --name ${containerName} -p 8080:8080 ${imageName}
docker ps
docker logs ${containerName}
"""
}
}
}
}
}
post {
always {
script {
// application.yml ์ญ์
if (isUnix()) {
sh 'rm -f ./src/main/resources/application.yml'
sh 'docker logout'
} else {
bat 'del /F /Q src\\main\\resources\\application.yml'
bat 'docker logout'
}
}
}
success {
echo 'Pipeline succeeded!'
}
failure {
echo 'Pipeline failed!'
}
}
}๋งํฌ ๋ณด๊ธฐ
ERD ์์ธ๋ณด๊ธฐ
erDiagram
user {
INT id PK
VARCHAR email
VARCHAR oauth_provider
VARCHAR oauth_id
VARCHAR password
DATETIME created_at
VARCHAR role
DATETIME birth
VARCHAR nickname
BOOLEAN is_deleted
}
background {
INT id PK
VARCHAR name
VARCHAR image_url
}
category {
INT id PK
VARCHAR category
}
item {
INT id PK
VARCHAR name
VARCHAR image_url
INT category_id FK
VARCHAR emotion
}
forest {
INT id PK
VARCHAR name
VARCHAR month
BOOLEAN is_public
INT background_id FK
INT user_id FK
}
user_item {
INT id PK
INT item_id FK
INT user_id FK
INT total_count
INT placed_count
INT forest_id FK
}
shared_forest {
INT id PK
INT user_id FK
INT forest_id FK
}
mailbox {
INT id PK
VARCHAR content
DATETIME created_at
BOOLEAN is_deleted
INT user_id FK
INT forest_id FK
}
announcement {
INT id PK
INT admin_id FK
VARCHAR title
TEXT content
DATETIME created_at
}
diary {
INT id PK
DATETIME created_at
DATETIME updated_at
TEXT content
BOOLEAN is_published
INT user_id FK
INT forest_id FK
VARCHAR weather
}
diary_emotion {
INT id PK
INT weight
INT diary_id FK
VARCHAR emotion
}
placement {
INT id PK
DECIMAL position_x
DECIMAL position_y
INT user_id FK
INT user_item_id FK
}
item }o--|| category : belongs_to
forest }o--|| background : uses
forest }o--|| user : owned_by
user_item }o--|| user : owned_by
user_item }o--|| item : contains
user_item }o--|| forest : placed_in
shared_forest }o--|| user : viewer
shared_forest }o--|| forest : shared_from
mailbox }o--|| user : written_by
mailbox }o--|| forest : posted_in
announcement }o--|| user : created_by
diary }o--|| user : written_by
diary }o--|| forest : related_to
diary_emotion }o--|| diary : analyzed_from
placement }o--|| user : placed_by
placement }o--|| user_item : uses
๊ฐ์ /๋ ์จ ํ ์ด๋ธ ์ ๊ฑฐ ๋ฐ ๊ตฌ์กฐ ๋จ์ํ ์ด์
์ผ์ชฝ: ๊ตฌ์กฐ ์ด๊ธฐ ์ค๊ณ | ์ค๋ฅธ์ชฝ: ๋ฆฌํฉํ ๋ง ์ดํ ๊ตฌ์กฐ
Groo ์๋น์ค ์ด์์์๋ ๊ฐ์ (emotion)๊ณผ ๋ ์จ(weather) ์ ๋ณด๋ฅผ ๊ฐ๊ฐ ๋ณ๋์ ํ
์ด๋ธ๋ก ๊ด๋ฆฌํ๋ค ํ๋์ ํ
์ด๋ธ๋ก ๋ฌถ์ด, ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ํ
์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฅํ ๋ค ํด๋น ๊ฐ์ ์ ๋ฐ๋ฅธ ๋ ์จ๋ฅผ ๋งคํํ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์ค๊ณ์์ต๋๋ค.
ํ์ง๋ง ์ค์ ์๋น์ค ํ๋ฆ๊ณผ ์ด์ ํ๊ฒฝ์ ๊ณ ๋ คํ์ ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ด ์์์ต๋๋ค:
- ๊ฐ์ ๊ณผ ๋ ์จ์ ์ข ๋ฅ๋ ์ฌ์ ์ ์ ์๋ ๊ณ ์ ๊ฐ
- ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ ์ค ๊ฐ์ฅ ๋์ ๊ฐ์ ํ๋๋ง ์ฌ์ฉํ์ฌ ๋ ์จ์ 1:1 ๋งคํ
- ๋ถ์ ๊ฒฐ๊ณผ๋ ์ผ๊ธฐ ๋ฑ๋ก ์์ ์ ํ ๋ฒ๋ง ๋ฐ์๋๊ณ , ์์ ์์๋ ์ฌ๋ถ์๋์ง ์์
๋ํ ๊ฐ์ ์ถ์ถ์ ์ฌ์ฉ๋๋ AI ๋ชจ๋ธ์ ๋ฌธ์ฅ์ ๊ธธ์ด๋ ํ๊ฒฝ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ๋ฐํ์ ๋ค์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์์๊ณ ,์ด๋ก ์ธํด ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ฅํ ๊ฐ๋จํ๊ฒ ์ ์งํ ํ์๊ฐ ์๋ค๋ ํ๋จ์ด ์์์ต๋๋ค.
์ด๋ฌํ ์ ์ ๊ณ ๋ คํด, ๊ฐ์ ๊ณผ ๋ ์จ ์ ๋ณด๋ฅผ ํ
์ด๋ธ๋ก ๋ถ๋ฆฌํ์ฌ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ๋ณด๋ค๋ ๋ฐฑ์๋ ๋ก์ง ๋ด ์์ ๊ธฐ๋ฐ Map<String, String> ๋งคํ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๊ณ , ๋ถ์๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ง ์ ์ฅํ๋ ๊ตฌ์กฐ๊ฐ
ํ์ค์ ์ธ ์๋น์ค ์ด์ ๋ชฉ์ ์ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ์์ต๋๋ค.
์ด์ ๋ฐ๋ผ ๊ด๋ จ ํ ์ด๋ธ์ ERD์์ ์ ๊ฑฐํ๊ณ , ๊ฐ์ -๋ ์จ ๋งคํ์ ์ฝ๋ ์์์ ์ง์ ์ ์๋ Map ๊ฐ์ฒด๋ก ๋์ฒดํ์ฌ ๋ถ์ ๊ฒฐ๊ณผ๋ DTO ๊ฐ์ฒด ๋ด์ ๊ฐ๋จํ ๋ด์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๋ฆฌํฉํ ๋ง๋์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ์ ์ฒด ๊ตฌ์กฐ๋ ๊ฐ๊ฒฐํด์ก๊ณ , ์ฒ๋ฆฌ ์๋ ๋ฐ ์ ์ง๋ณด์ ํจ์จ์ฑ๋ ํฅ์๋์์ต๋๋ค.
ํ๊ณ ๋ณด๊ธฐ
| ์ด๋ฆ | ํ๊ณ |
|---|---|
| ๋ฐ์ง์ | ๋ด์ฉ |
| ์ ๋ฏผ๊ฒฝ | ์ด๋ฒ ํ๋ก์ ํธ๋ ๊ฐ์ ์ ๊ธฐ๋กํ๊ณ ์ ์์ผ๋ก ํํํ๋ ๊ฐ์ฑ ๋ค์ด์ด๋ฆฌ ์๋น์ค์์ต๋๋ค. ์ฃผ์ ๋ ์์ ๋กญ๊ฒ ์ ํ ์ ์์๋๋ฐ, ์์ ์ ๊ตญ๋ฆฝํ๋๋ฏธ์ ๊ด ์ธ๋ถ์ ์ค์น๋ ์ ์ ๊พธ๋ฏธ๊ธฐ ์คํฌ๋ฆฐ์ด ๋ ์ฌ๋ผ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์ด๋์ด๋ฅผ ์ ์ํ๊ณ , ํ์๋ค๋ ์ด์ ๊ณต๊ฐํด ์ฃผ๋ฉฐ ์ฃผ์ ๊ฐ ๊ตฌ์ฒดํ๋์์ต๋๋ค. โ์ผ๊ธฐ๋ฅผ ์ฐ๊ณ , ๊ทธ ๊ฐ์ ์ ๋ฐ๋ผ ์ฒ์ ๊พธ๋ฏผ๋คโ๋ ์ฝ์ ํธ๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด UI ์ค๊ณ์ ๋ง์ ๊ณ ๋ฏผ์ ์์์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ์ฃผ๋ก ๊ณต๋ถํด์๊ธฐ ๋๋ฌธ์ ํ๋ก ํธ์๋ ๊ตฌํ์ ๋ค์ ๋ฏ์ค์์ง๋ง, ํ์๋ค๊ณผ ์์ฐจ๋ก ํ์๋ฅผ ๊ฑฐ์ณ ์๊ฒฌ์ ์กฐ์จํ ๋์ ๋ง์กฑ์ค๋ฌ์ด ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑํ ์ ์์์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ๊ฐ์ฅ ํฌ๊ฒ ๋๋ ์ ์ ์๊ตฌ์ฌํญ ์ ์์ ์ค์์ฑ์ด์์ต๋๋ค. ์๊ตฌ์ฌํญ์ ์ถฉ๋ถํ ์ ๋ฆฌํ์ง ์์ ์ฑ ๊ฐ๋ฐ์ ์์ํ๋ฉด์, ์ค๊ฐ์ ๋ค์ ์ ์ ๋จ๊ณ๋ก ๋๋์๊ฐ์ผ ํ๊ณ , ์ด์ ๋ฐ๋ผ ์ฝ๋ ์์ ์ ๋ฌผ๋ก ๋ชจ๋ธ๋ง ์ค๊ณ๋ ์ผ๋ถ ๋ณ๊ฒฝํด์ผ ํ์ต๋๋ค. ๋ํ ์ผ์ ๊ด๋ฆฌ๊ฐ ๋ฏธํกํ๋ ํ์ ๊ตฌํํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ์ ์ธํ๊ฒ ๋ ์ ๋ ์์ฌ์์ผ๋ก ๋จ์ต๋๋ค. ๊ธฐ์ ์ ์ผ๋ก๋ MyBatis์ JPA๋ฅผ ํจ๊ป ํ์ฉํ์ฌ ๋ฐฑ์๋ ๋ก์ง์ ๊ตฌํํ๋ฉด์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์ ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ ๋ํ ์ดํด๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์์ต๋๋ค. ๋ํ ํ ์คํธ ๊ณผ์ ์์๋ ๋ฐฑ์๋์์์ ์์ธ ์ฒ๋ฆฌ์ ์๋ฌ ์๋ต ์ค๊ณ ๋๋ถ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ ์ค๋ฅ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ๊ณ ์์ ํ ์ ์์๋ ์ ์ด ์ข์์ต๋๋ค. 2์ฃผ๋ผ๋ ์งง์ ๊ธฐ๊ฐ ์์ ๊ธฐํ๋ถํฐ ๊ฐ๋ฐ, ๋ฐฐํฌ๊น์ง ๋ชจ๋ ๊ณผ์ ์ ๋ง์น๋ ๊ฒ์ ์ฝ์ง ์์์ง๋ง, ํ์๋ค์ ํ์ ๊ณผ ํ๋ ฅ์ด ์์๊ธฐ์ ๋๋ผ ์ ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐค๋ฎ์์ด ๋ ๋์ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํจ๊ป ๊ณ ๋ฏผํ๊ณ , ์๋ก๋ฅผ ๋ฐฐ๋ คํ๋ฉฐ ๋ฌ๋ ค์จ ํ์๋ค ๋๋ถ์ ์ค๊ฐ์ ์ง์น ๋๋ง๋ค ๋ค์ ํ์ ์ป์ ์ ์์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์์ฑ๋ ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค ์ ์์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, ํ๋ก์ ํธ ์์ฐ ๋ ๋ค๋ฅธ ํ์ผ๋ก๋ถํฐ ์ข์ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์๋ ๊ฑด, ์ ์ ์ผ๋ก ๋ชจ๋ ํ์์ด ๊ฐ์์ ์ญํ ์ ์ต์ ์ ๋คํด ๋ชฐ๋ํด์ค ๋๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์๋ค์๊ฒ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ, ๋ชจ๋ ์๊ณ ๋ง์๋ค๋ ๋ง์ ๊ผญ ์ ํ๊ณ ์ถ์ต๋๋ค. |
| ์ด์์ | ์ด๋ฒ ํ๋ก์ ํธ๋ ๋ถ์คํ์์ผ๋ก ์์ฐ์ ์ผ๋์ ๋๊ณ , ์ฌ๋๋ค์ ์ด๋ชฉ์ ์ง์ค์ํฌ ์ ์๋๋ก ์๊ฐ์ ์ผ๋ก ํฅ๋ฏธ๋ฅผ ์ ๋ํ ์ ์๋๋ฐ ์ค์ ์ ๋์์ต๋๋ค. ui์ ์ผ๋ก ์ ๊ฒฝ์ ๋ง์ด ์ด ๊ฒฐ๊ณผ, ๋๊ธธ์ ๋๋ ์์ฑ๋ ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด ๋ผ ์ ์์์ต๋๋ค. ๋ชจ๋ธ๋ง์ ์๊ฐ์ ๋ง์ด ํฌ์ํด ๊ฐ๋ฐ์ ํ ์ ํ ์๊ฐ์ด ์ ์ด ๊ฑฑ์ ์ด ์์์ง๋ง ํ์๋ค์ ์์ฒญ๋ ์ง์ค๋ ฅ๊ณผ ์คํ๋ ฅ์ผ๋ก ์๋ฒฝํ๊ฒ ์ํํด๋ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ค์ ํ ๋ฒ ๋๊ผ๋ ๊ฑด, ํญ์ ๋ชจ๋ธ๋ง๊ณผ UI๋ฅผ ๊ตฌ์ํ๋ ๊ณผ์ ์ด ๊ฐ์ฅ ์ด๋ ต๋ค๋ ์ ์ด์์ต๋๋ค. ๊ฐ์ ์๊ฐํ๋ ํ๋ฉด๊ณผ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ํ๋์ ๋ฐฉํฅ์ผ๋ก ํตํฉํ๊ณ ์กฐ์จํด ๋๊ฐ๋ ์ผ์ด ์ผ๋ง๋ ์ด๋ ต๊ณ ์ฌ์ธํ ์์ ์ธ์ง ํ๋ฒ ๋ ๊นจ๋ฌ์๋ ์๊ฐ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ง์ ๊ทธ๋ฐ ์ํฉ ์์์ ์ ๊ทน์ ์ผ๋ก ์๊ฒฌ์ ์ ์ํ๊ฑฐ๋, ์กฐ์จ์ ์ฃผ๋ํ๋ ๊ฒ์ด ์ฝ์ง ์์ง๋ง, ์ด๋ฌํ ๊ฒฝํ์ ํตํด ๋ถ๋ช ํ ์ฑ์ฅํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์ ํ๋ก์ ํธ์์๋ ๋ ์ ๊ทน์ ์ผ๋ก ์ํตํ๊ณ , ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ดํดํ๋ ์ฌ๋์ด ๋๊ณ ์ถ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋๊น์ง ํจ๊ป ๊ณ ๋ฏผํ๊ณ ๋ฉ์ง ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ธ ์ฐ๋ฆฌ ํ ๋๋ฌด ์๋์ค๋ฝ๊ณ ๊ฐ์ฌํ๋ค๋ ๋ง์ ์ ๋ค๊ณ ์ถ์ต๋๋ค. |
| ์ด์ค๊ท | ์ด๋ฒ ํ๋ก์ ํธ๋ ๋ฐํ ํ์์ด ์๋, ๋ถ์ค๋ฅผ ํตํด ์๋ก์ ์๋น์ค๋ฅผ ์ง์ ์ฒดํํด๋ณด๋ ํ์์ด์๊ธฐ ๋๋ฌธ์ ์ฃผ์ ์ ์ ๋ถํฐ ์ฝ์ง ์์์ต๋๋ค. ํนํ ์ฌ์ฉ์์ ์ง์ ์ ์ธ ์ฐธ์ฌ๊ฐ ์ค์ํ ํํ์๊ธฐ์, ๊ธฐํ ๋จ๊ณ์์๋ถํฐ ํ๋ก ํธ์๋ ์์์ ๋ง์ ์ ๊ฒฝ์ ์ผ์ต๋๋ค. ํ์ง๋ง ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ฅผ ํฌ๋งํ๋ ์ฐ๋ฆฌ ํ์ด ๊ณผ์ฐ ์ด๋ฐ ๋ฐฉํฅ์ด ๋ง๋๊ฐ์ ๋ํ ๊ณ ๋ฏผ๋ ํจ๊ป ๋ค์์ต๋๋ค. ๋ชจ๋ธ๋ง์ ๋ง์น๊ณ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฐฉ์ํ์ ๋, ์์๋ณด๋ค ํจ์ฌ ๋ณต์กํ๊ณ ์ด๋ ต๋ค๋ ๊ฑธ ๋๊ผ์ต๋๋ค. ๋จ์ํ ํ ์ด๋ธ ์๋ ์ ์์ง๋ง, ๊ณ ๋ คํด์ผ ํ ๋ก์ง์ด ๋ง์ ๊ธฐ๋ฅ ๊ตฌํ ์ดํ์๋ ๋ฐ๋ณต์ ์ธ ์์ ์์ ์ด ํ์ํ์ต๋๋ค. ์ ๋ ์ฃผ๋ก ์กฐํ ๊ธฐ๋ฅ์ ๋งก์ ๊ฐ๋ฐํ๊ณ , ๊ทธ ๊ณผ์ ์์ MyBatis์ SQL์ ๋ํ ์ดํด๊ฐ ํ์ธต ๊น์ด์ก๋ค๋ ์ ์์ ์๋ฏธ ์๋ ์๊ฐ์ด์์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ด์ ๊ณผ ๋ฌ๋ฆฌ ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ ์ค์ ๋ก ์ฐ๋ํด ๊ฐ๋ฐ์ ์งํํ์ต๋๋ค. ์ด์ ํ๋ก์ ํธ์์๋ ๊ฐ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํด ์์ ํ๊ธฐ ๋๋ฌธ์, ๊ธฐ๋ฅ๋ง ์ ์ ๋์ํ๋ฉด ๋๋ค๊ณ ์๊ฐํ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฒ์ ํ๋ก ํธ์๋์์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ์ํ๊ณ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง๋ฅผ ๊ณ ๋ คํ๋ฉฐ ๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํด์ผ ํ๋ค๋ ์ ์ ์ฒด๊ฐํ๊ณ , ์ด ๊ฒฝํ์ด ํฐ ๊นจ๋ฌ์์ด ๋์์ต๋๋ค. ๋ํ, ์ด๋ฒ ํ๋ก์ ํธ์์๋ S3 ์๋ฒ์ Redis ์๋ฒ๋ ํ์ฉํด๋ณด์์ต๋๋ค. ์ด์ ๊น์ง๋ ์ด๋ฆ์กฐ์ฐจ ๋ฏ์ค์๋ ๊ธฐ์ ๋ค์ด์์ง๋ง, ์ง์ ์ ์ฉํด๋ณด๋ฉฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก์ ํ์ธต ์ฑ์ฅํ ์ ์์๋ ๋ป๊น์ ๊ฒฝํ์ด์์ต๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๋ ๋ฉ์ธ ํ๋ฉด์ ์คํ์ ํจ๊ป ๋๋ ๋ด๋นํ์ต๋๋ค. ๋ฐฑ์๋์์ ์ ๋ฌ๋ weather ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ด 7๊ฐ์ ๋ ์จ ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ํธ์ถํ๋ ๋ก์ง์ ๊ตฌํํ๋๋ฐ, ์๋น์ค์์ ์ฐจ์งํ๋ ๋น์ค์ด ํฐ ๊ธฐ๋ฅ์ด๊ธฐ๋ ํ๊ณ UI์ ์์ฑ๋์ ๋ฐ๋ผ ์ ์ฒด ์๋น์ค์ ์ธ์์ด ๋ฌ๋ผ์ง๋ ๋งํผ ๋ ์ด์ฌํ ๋ชฐ์ ํ์ต๋๋ค. ๋ ์จ๊ฐ ์ ์์ ์ผ๋ก ํ๋ฉด์ ํ์๋์์ ๋ ๋๋ ์ฑ์ทจ๊ฐ์ ์ด๋ฒ ํ๋ก์ ํธ ์ ์ฒด๋ฅผ ํตํ์ด ๊ฐ์ฅ ์ปธ๋ ์๊ฐ์ด์์ต๋๋ค. ์ผ๊ธฐ ์์ฑ ์์๋ OpenAI API๋ฅผ ํ์ฉํด ๊ฐ์ ๋ถ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ฒฝํ๋ง ์๋ ์ ์๊ฒ๋ ๋งค์ฐ ์ ์ ํ ๋์ ์ด์์ต๋๋ค. Fine-tuning๊น์ง ์ง์ ํด๋ณผ ์ ์์๋ค๋ฉด ๋์ฑ ์ ํํ ๋ถ์ ๋ชจ๋ธ์ ๋ง๋ค ์ ์์๊ฒ ์ง๋ง, ๊ด๋ จ ์ง์ ๋ถ์กฑ์ผ๋ก ํฌ๊ธฐํ๊ฒ ๋ ์ ์ ์์ฌ์์ผ๋ก ๋จ์ต๋๋ค. ๊ธฐํ๊ฐ ๋๋ค๋ฉด, AI ์ ๋ฌธ๊ฐ์ ํจ๊ป ์ตํฉ ํ๋ก์ ํธ๋ฅผ ์งํํด๋ณด๊ณ ์ถ๋ค๋ ์๊ฐ๋ ํ๊ฒ ๋์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์ด ํ๋ก์ ํธ๋ฅผ ํจ๊ปํ ํ์๋ค์๊ฒ ๊น์ ๊ฐ์ฌ๋ฅผ ์ ํ๊ณ ์ถ์ต๋๋ค. ์งง์ ์๊ฐ, ๋์ ๊ฐ๋์๋ ๋ถ๊ตฌํ๊ณ ์๋ก๋ฅผ ๋ฐฐ๋ คํ๋ฉฐ ๋๊น์ง ํจ๊ปํด์ค ํ์๋ค์ด ์์๋ค๋ฉด ์ ๋ 2๋ฑ์ด๋ผ๋ ๊ฐ์ง ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ์ ๊ฒ์ ๋๋ค. AI๋ฅผ ๋๋งก์์ฃผ๊ณ ๊ฐ๊ฐ์ ์ธ ๋์์ธ ์์ ์ ๋ํด ๋ฐฑ์๋ ๋ฆฌ๋ทฐ๊น์ง ๊ผผ๊ผผํ ์งํํด์ค ์๋ฏผ์ด, ์ผ๊ธฐ ๊ธฐ๋ฅ์ ์์ฑ๋ ๋๊ฒ ๊ตฌํํ๊ณ OpenAI API ์ฐ๋์ ๋๋งก์์ค ์ง์์ด, ์๋ฒฝํ Figma ๋์์ธ๊ณผ ํจ๊ป ํ ๋ถ์๊ธฐ๋ฅผ ์ด๋๋ฉฐ ๋ก๊ทธ์ธ๊ณผ ์ฐ์ ์ ์ฒ์ด๋ผ๋ ํต์ฌ ๊ธฐ๋ฅ์ ๋ฌต๋ฌตํ ๋งก์์ค ๋ฏผ๊ฒฝ์ด, ์ต์ ์ AI API๋ฅผ ์ฐพ๊ธฐ ์ํด ์๋ง์ ํ ์คํธ๋ฅผ ๊ฑฐ์ณ ์ง์ ์ ์ฉํด๋ณด๊ณ , git ์ถฉ๋์ด ๋ง์ ์๋ฐ์ ์๋ ์ํฉ์์ ํญ์ ๋ง์ง๋ง ์ฐจ๋ก์ ๋ณํฉ์ ํ์ฌ ํ๋ค์์ ํ ๋ฐ ๋ฌต๋ฌตํ ๋ณํฉ๊ณผ ์ฌ๊ฐ๋ฐ์ ๋ฐ๋ณตํด์ค ์์์ด, ๊ธฐํ๋ถํฐ ๊ฐ๋ฐ, ๋ฐฐํฌ๊น์ง ๋ชจ๋ ๊ณผ์ ์ ์ด๊ดํ๋ฉฐ ํ์ ๋ฒํ๋ชฉ ์ญํ ์ ํด์ฃผ๊ณ ํ์๋ค์ ์๋ง์ ์ง๋ฌธ์ ๋ฐ์์ฃผ๋ฉฐ ๋ณธ์ธ ๊ฐ๋ฐ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋๋ฉ์ธ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ฒฝ ์จ์ค ์คํ์๊ฒ ์ง์ฌ์ผ๋ก ๊ณ ๋ง๋ค๋ ๋ง์ ์ ํ๋ฉฐ ์ด๋ฒ ํ๋ก์ ํธ ํ๊ณ ๋ฅผ ๋ง์นฉ๋๋ค. |
| ์กฐ์คํ | ์ด๋ฒ ํ๋ก์ ํธ๋ ํผ์์๋ค๋ฉด ๊ฒฐ์ฝ ํด๋ผ ์ ์์์ ๋งํผ, ํ์ ํ์ด ์ผ๋ง๋ ํฐ์ง๋ฅผ ์จ์ ํ ๋๋ ์ ์์๋ ์์คํ ๊ฒฝํ์ด์์ต๋๋ค. ์ฃผ์ ์์ฒด๋ ํฅ๋ฏธ๋ก์ ์ฆ๊ฒ๊ฒ ๋ชฐ์ ํ ์ ์์๊ณ , ํ์๋ค ๋ชจ๋ ๊ฐ์ ๋งก์ ์ญํ ์ ์๋ฐ์ ์ผ๋ก ์ฐพ์์ ๋ฅ๋์ ์ผ๋ก ์์ง์ฌ์ค ๋๋ถ์ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์์ต๋๋ค. ํผ์ ์ฝ๋ฉ์ ๊ณต๋ถํ๋ ์์ ๊ณผ ๋น๊ตํ๋ฉด, ํจ๊ป ํ์ ํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์๊ฒฌ์ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์ด ํจ์ฌ ๋ ์ฆ๊ฒ๊ณ ๋ชฐ์ ๊ฐ ์๊ฒ ๋๊ปด์ก์ต๋๋ค. ํนํ ๋ถ์กฑํ ์๊ฐ ์์์ ๋ฐค๋ฎ ์์ด ์์ ํ๋ ํผ๊ณคํ๊ณ ์๋ฏผํ ์ํฉ ์์์๋, ์๋ก๋ฅผ ๋ฐฐ๋ คํ๊ณ ์์์ ์์ง ์์ผ๋ฉฐ ๋๊น์ง ํ์ํฌ๋ฅผ ์ง์ผ๋๊ฐ ์ ์ด ๋งค์ฐ ์ธ์ ๊น์์ต๋๋ค. ํ ๋ฒ์ ๋๋ฌด ์ง์ณ์ ๋ง์์ด ๊บพ์ผ ๋ปํ ์๊ฐ๋ ์์์ง๋ง, ๊ทธ๋ด ๋๋ง๋ค โํ ์ ์๋คโ๊ณ ๊ฒฉ๋ คํด์ฃผ๊ณ ๋ฌต๋ฌตํ ์๊ธฐ ํ ์ผ์ ํด๋๊ฐ๋ ํ์๋ค์ ๋ชจ์ต์ ํ์ ์ป์ด, ์ ์ญ์ ๋ค์ ๋ง์์ ๋ค์ก๊ณ ์ง์คํ ์ ์์์ต๋๋ค. ๋ฌด์๋ณด๋ค ์ด๋ฒ ํ๋ก์ ํธ๋ ๋จ์ํ ๊ณผ์ ๋ฅผ ๋์ด์, ์คํ ๊ฐ๋ฅํ ์๋น์ค์ ๊ฐ๊น์ด ๊ฒฐ๊ณผ๋ฌผ์ด ๋์๋ค๋ ์ ์์ ํฐ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์ ๋ฉ์ถ์ง ์๊ณ , ์์ผ๋ก๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ถ๊ฐํ๊ณ ๊ณ ๋ํํ์ฌ ์ค์ ์๋น์ค๋ก ๋ฐฐํฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ผ์์ต๋๋ค. ์ ๋ง ๊ฐ์ง๊ณ ๋ป๊น์ ์๊ฐ์ด์์ผ๋ฉฐ, ์ด ๋ชจ๋ ๊ฒ์ ํจ๊ปํด์ค ํ์๋ค์๊ฒ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ์ ๋ง์์ ์ ํฉ๋๋ค. ์ต์ข ํ๋ก์ ํธ์์๋ ์ ๋ถํ๋๋ฆฌ๊ณ , ํ์๋ค ๋ชจ๋ ๊ฑด๊ฐํ๊ธธ ๋ฐ๋ผ๋ฉฐ ๋ง์นฉ๋๋ค. |
| ํฉ์๋ฏผ | 2์ฃผ๋ผ๋ ์งง์ ๊ธฐ๊ฐ ๋์ ๊ธฐํ๋ถํฐ ํ๋ก ํธ์๋, ๋ฐฑ์๋, ๋ฐฐํฌ๊น์ง ์ ๊ณผ์ ์ ์ง์ ๊ฒฝํํด๋ณผ ์ ์์ด ์ ๋ง ๋ง์ ์ฑ์ฅ์ ๋๋ ์ ์์๋ ์๊ฐ์ด์์ต๋๋ค. ์ด๋ฐ์ ๊ธฐํ์ ๋ง์ ์๊ฐ์ ํฌ์ํ์ง๋ง, ์๊ตฌ์ฌํญ์ ๊ณ์ํด์ ๋ฐ๋์๊ณ ๊ทธ์ ๋ฐ๋ผ ๋์์ธ๊ณผ ๋ชจ๋ธ๋ง๋ ์ฌ๋ฌ ๋ฒ ์์ ํ๊ฒ ๋๋ฉด์ ์๊ตฌ์ฌํญ ์ ์๊ฐ ์ผ๋ง๋ ์ค์ํ์ง ๋ค์ ํ ๋ฒ ๊นจ๋ฌ์์ต๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์์ง ์ต์ํ์ง ์์ง๋ง, ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ๊ณ๊ธฐ๋ก three.js, babylon.js ๊ฐ์ ์๋ก์ด ๊ธฐ์ ์ ๊ณต๋ถํ๊ณ ์ง์ ์ ์ฉํด๋ณด๋ฉด์ ํ๋ก ํธ ์ชฝ์ ๋ํ ํฅ๋ฏธ๋ ์๊ฒผ์ต๋๋ค. ๋ํ, OpenAI๋ฅผ ํ์ฉํ ๊ฐ์ ์ผ๊ธฐ ๋ถ์ ๋ก์ง์ ํ์๊ณผ ํจ๊ป ๊ตฌํํ๋ฉด์ REST API์ ๋ฐฑ์๋ ํ๋ฆ์ ๋ํด ๋ ๊น์ด ์ดํดํ๊ฒ ๋์๊ณ , ๋๋ถ์ ๊ฐ๋ฐ์๋ก์ ํ์ธต ๋ ์ฑ์ฅํ ์ ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ง ๋ถ์กฑํ ์ ๋ ๋ง์ง๋ง, ์์ ๋ณด๋ค ๊ฐ๋ฐ ์๋๋ ๋นจ๋ผ์ง๊ณ ์์ ๊ฐ๋ ๋ถ์ ์ ๋ชจ์ต์ ๋ณด๋ฉด์ ์ค์ค๋ก๋ ๋ง์ด ๋๋์ต๋๋ค. ๋ฌด์๋ณด๋ค, ์ด ํ๋ก์ ํธ๋ ํ์๋ค๊ณผ ํจ๊ปํ๊ธฐ์ ๊ฐ๋ฅํ๋ ๊ฒฐ๊ณผ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํผ์์๋ค๋ฉด ์ ๋ 2์ฃผ ์์ ์ด ์ ๋ ์๋น์ค๋ฅผ ์์ฑํ์ง ๋ชปํ์ ๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ์ด๋ฒ ๊ฒฝํ์ ํตํด ํ์ ์ ์ค์์ฑ๊ณผ ํ์ํฌ์ ํ์ ๋ค์ ํ ๋ฒ ๋๋ ์ ์์๊ณ , ์์ผ๋ก๋ ํจ๊ปํ๋ ์ฌ๋๋ค์ ์์คํจ์ ์์ง ์๊ณ ๊ฐ๋ฐํด ๋๊ฐ๊ณ ์ถ์ต๋๋ค. |
-
ํ๋ก์ ํธ์์ ๋งก์ ๋ถ๋ถ
- ์์ดํ ๋ฐฐ์น ๊ด๋ จ API ๊ฐ๋ฐ
- ๋ฐฉ๋ช ๋ก ๊ด๋ จ API ๊ฐ๋ฐ
- S3 ์ค์
- RDS ์ค์
-
์ํ ์
- ํ๋ ์ผ์ ์์์๋ ์๋ก ์์์ ์์ง ์๊ณ , ๊ฐ์์ ์ญํ ์ ์ฑ
์๊ฐ์ ๊ฐ์ง๊ณ ๋๊น์ง ํ๋ ฅํด ๋๊ฐ๋ค๋ ์ ์ด ์ธ์์ ์ด์์ต๋๋ค.
ํ์ํฌ์ ๊ธ์ ์ ์ธ ๋ถ์๊ธฐ๊ฐ ํ๋ก์ ํธ๋ฅผ ๋๊น์ง ๋๊ณ ๊ฐ ์ ์์๋ ํฐ ์๋๋ ฅ์ด ๋์์ต๋๋ค.
- ํ๋ ์ผ์ ์์์๋ ์๋ก ์์์ ์์ง ์๊ณ , ๊ฐ์์ ์ญํ ์ ์ฑ
์๊ฐ์ ๊ฐ์ง๊ณ ๋๊น์ง ํ๋ ฅํด ๋๊ฐ๋ค๋ ์ ์ด ์ธ์์ ์ด์์ต๋๋ค.
-
์์ฌ์ด ์
- ์์
์ค ํ์ผ ์ถฉ๋์ ํผํ๊ธฐ ์ํด ํจํค์ง๋ฅผ ๋๋ด์ง๋ง, ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํ์ผ๊น์ง ๋ถ๋ฆฌ๋๋ฉด์ ์คํ๋ ค ๋ถํ์ํ๊ฒ ํ์ผ ์๊ฐ ๋ง์์ก์ต๋๋ค.
ํฅํ์๋ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๊ณ , ๊ณตํต ํ์ผ์ ์ ์ ํ ๋ชจ์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋ฆฌํฉํ ๋ง์ด ํ์ํฉ๋๋ค.
- ์์
์ค ํ์ผ ์ถฉ๋์ ํผํ๊ธฐ ์ํด ํจํค์ง๋ฅผ ๋๋ด์ง๋ง, ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํ์ผ๊น์ง ๋ถ๋ฆฌ๋๋ฉด์ ์คํ๋ ค ๋ถํ์ํ๊ฒ ํ์ผ ์๊ฐ ๋ง์์ก์ต๋๋ค.
-
์์ผ๋ก์ ๊ฐ์ ๋ฐฉํฅ
- placement ํ
์ด๋ธ์ scale๊ณผ z_index ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ, ์์ดํ
๋ฐฐ์น ์ ํฌ๊ธฐ ์กฐ์ ๋ฐ ์๋ค ์์๋ฅผ ์กฐ์ ํ ์ ์๋๋ก ๊ฐ์ ํ ์์ ์
๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์์ดํ ์ ๋์ฑ ์์ ๋กญ๊ณ ์ง๊ด์ ์ผ๋ก ์ปค์คํฐ๋ง์ด์งํ ์ ์๊ฒ ํ์ฌ, ๋ฐฐ์น์ ํํ๋ ฅ์ ๋์ผ ์ ์์ต๋๋ค.
- placement ํ
์ด๋ธ์ scale๊ณผ z_index ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ, ์์ดํ
๋ฐฐ์น ์ ํฌ๊ธฐ ์กฐ์ ๋ฐ ์๋ค ์์๋ฅผ ์กฐ์ ํ ์ ์๋๋ก ๊ฐ์ ํ ์์ ์
๋๋ค.
-
ํ๋ก์ ํธ์์ ๋งก์ ๋ถ๋ถ
- (BE) ๋ฉ์ธ ํ๋ฉด์์ ํ์ํ ์ฒid์ ๋ฐ๋ฅธ ์์ธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ
- (BE) ์ฒ์ ๊ณต๊ฐ ์ํ ๋ณ๊ฒฝ ๊ธฐ๋ฅ ๊ตฌํ
- (FE) ๋ก๊ทธ์ธ ์ดํ ๋ณด์ฌ์ง ๋ฉ์ธ ํ๋ฉด ๊ตฌํ
- (FE) ๋ ์จ ์ปดํฌ๋ํธ ๊ตฌํ
- (FE) AI ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ๋ ์จ ์ปดํฌ๋ํธ ํธ์ถ ๋ก์ง ๊ตฌํ
-
์ํ ์
- ๋ฉ์ธ ํ๋ฉด์ ํด๋นํ๋ ๋ณต์กํ ์กฐํ ๊ธฐ๋ฅ์ ๊ตฌํํ์ผ๋ฉฐ, ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํด์ผ ํ๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํจ.
- ์๋น์ค์ ํต์ฌ ๊ธฐ๋ฅ์ธ ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ๋ ์จ ๋ฐ์ ๊ธฐ๋ฅ์ ์ค๋ฅ ์์ด ์ ๋ง๋ค์์.
- ๋ ์จ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๋ ๊ณผ์ ์์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํํํ๊ธฐ ์ด๋ ค์ด ๋ ์จ๋ค๋ ์์์ง๋ง, ํฌ๊ธฐํ์ง ์๊ณ ์ฌ์ง์ ์ฐ์์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ฑฐ๋, ์๋ยท๋ฐ๊ธฐยทํฌ๋ช ๋ ๋ฑ์ ์กฐ์ ํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ํ์ฉํด UI ์ธก๋ฉด์์ ์ฌ์ฉ์์ ํฅ๋ฏธ๋ฅผ ์ ๋ํ ์ ์๋๋ก ๋ ธ๋ ฅํจ.
-
์์ฌ์ด ์
- ์ฃผ๋ก ์กฐํ ๊ธฐ๋ฅ์ ๋ด๋นํ์ฌ ๋ง๋ค์ด์ JPA ํ์ฉ์ ๊ฑฐ์ ํด๋ณด์ง ๋ชป ํ๋ค.
- SNS ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด๊ณ ์ถ์์ง๋ง ์๊ฐ์ด ๋ถ์กฑํ์ฌ ์คํจํ๋ค. ์ถํ ๋ฆฌํฉํ ๋ง๊ณผ์ ์์ ์ถ๊ฐํด๋ณผ ์์ ์ด๋ค.
- Fine-Tuning์ ํ ์ ์๋ ๋ฅ๋ ฅ์ด ์์๋ค๋ฉด ์กฐ๊ธ ๋ ์ ํ๋ ๋์ ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด ๋ผ ์ ์์์ ํ ๋ฐ ์ด๋ฅผ ํ์ง ๋ชป ํด ๊ฐ์ ๋ถ์์ ์ ํ๋๊ฐ ์กฐ๊ธ ์์ฌ์ ๋ค.
- ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ํ ํ ์์ ํ๋ ์ผ์ด ๋ง์์. ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์๋น์ค์ ๋ํ ์ดํด๋์ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ข ๋ ๊น๊ฒ ์๊ฐํ๊ณ ๊ฐ๋ฐ์ ๋ค์ด๊ฐ์ผํ ํ์์ฑ์ ๋๊ผ๋ค.
-
์์ผ๋ก์ ๊ฐ์ ๋ฐฉํฅ
- ๊ฐ๋ฐ ํ๊ธฐ์ ์์ ์๋น์ค์ ๋ํ ์ดํด๋๋ฅผ ๋์ด๊ณ ํ ์ด๋ธ ๊ตฌ์กฐ ํ์ ์ ์ฒ ์ ํ๊ฒ ํด์ผ๊ฒ ๋ค.
- ํ๋ก ํธ์๋ ๊ณต๋ถ๋ฅผ ์ข ๋ ํด์ ํ๋ก์ ํธ ์งํํจ์ ์์ด ํ์๋ค์๊ฒ ๋์์ ์ฃผ๊ณ ์ถ๋ค.
-
ํ๋ก์ ํธ์์ ๋งก์ ๋ถ๋ถ
- Figma๋ฅผ ํ์ฉํ ์๋น์ค ์ ๋ฐ์ย UI/UX ๊ธฐํ ๋ฐ ์ค๊ณ
- OpenAI API๋ฅผ ํ์ฉํย ์ผ๊ธฐ ๊ฐ์ ๋ถ์ ๊ธฐ๋ฐ ๋๋ค ์์ดํ ์ถ์ฒ ๊ธฐ๋ฅย ๊ฐ๋ฐ
- ์ผ๊ธฐ ์์ ๊ธฐ๋ฅ ๋ฐย ๋ ์งยท๊ธฐ๊ฐ ๊ธฐ๋ฐ ๊ฐ์ ์ผ๊ธฐ ์กฐํ ๊ธฐ๋ฅย ๊ตฌํ
- LottieFilesย ๊ธฐ๋ฐ์ ๊ฐ์ ๋ถ์ ์งํ ์คย ๋ก๋ฉ ์ ๋๋ฉ์ด์ ๊ธฐ๋ฅ ๊ตฌํ
- ํ๋ก ํธ์๋ ๋ฐ์ํ ์ฌ์ด๋๋ฐ ์ปดํฌ๋ํธย ๊ฐ๋ฐ ๋ฐ Vue.js ๊ธฐ๋ฐ ๋ผ์ฐํ ์ค์
- ๋ ์ง ๊ธฐ๋ฐ ์ผ๊ธฐ ์์ฑ ๋ฐ ๊ฐ์ ๋ถ์ ํ๋ฉด UI ๊ฐ๋ฐ
-
์ํ ์
- AI ๊ฐ์ ๋ถ์ API์ ์ง์ฐ ์๊ฐ์ ๊ณ ๋ คํดย Lottie ๋ก๋ฉ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐ, ์ฌ์ฉ์ ์ดํ์ ๋ฐฉ์งํ๊ณ UX ํฅ์ ์ ๋
- Figma ์ปดํฌ๋ํธ ์ค๊ณ๋ฅผ ํตํด ๋์์ธ ์ผ๊ด์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ ํ๋ณด
- ์ผ๊ธฐ ๋ฑ๋ก โ ๊ฐ์ ๋ถ์ โ ์์ดํ ์ถ์ฒ ๋ฐ ์ ์ฅ๊น์ง์ ํ๋ฆ์ย ๋จ์ผ API ํ๋ก์ฐ๋ก ๊ตฌํ, ์ฌ์ฉ์ ์ค์ฌ์ ์์ฐ์ค๋ฌ์ด ๊ฒฝํ ์ ๊ณต
-
์์ฌ์ด ์
- ์๊ตฌ์ฌํญ๊ณผ ํ ์คํธ์ผ์ด์ค๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์์ฑํ์ง ์์ย Figma ์ค๊ณ ์์ ์ด ์ฆ๊ณ ํ์ ๊ฐ UI ํฉ์์ ์๊ฐ์ด ์์๋จ
- ๊ธฐํ์ ์๊ฐ์ด ๋ง์ด ์์๋์ด ์ผ๋ถ ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ๋ชปํด ์์ฌ์์ด ๋จ์
- ์์ธ ์ฒ๋ฆฌ์ ๋จ์ ํ ์คํธ๊ฐ ๋ถ์กฑํดย ์์ ์ฑ ์ธก๋ฉด์์ ์์ฌ์
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ์ค๊ณ๋ฅผ ๋์ณ ํ๋ก ํธ์๋ ์ฝ๋ ์ค๋ณต ๋ฐ์
-
์์ผ๋ก์ ๊ฐ์ ๋ฐฉํฅ
- ๋ง๊ฐ๊ธฐํ์ ์ด๋ฐํ๊ฒ ๊ฐ๋ฐ์ ํ์ง ์๊ณ , ์๊ฐ์ ์ฌ์ ๋ฅผ ๋๊ณ ์ฌ์ ๋กญ๊ฒ ๊ฐ๋ฐํ๋ ์ฌ๋์ด ๋๊ณ ์ถ๋ค.
- ํ์๋ค์ PR ๋ฆฌ๋ทฐ๋ฅผ ๋ณด๋ค ๊ผผ๊ผผํ๊ฒ ๊ฒํ ํ ๊ฒ
- ๋ชจ๋ธ๋ง ๋ถ๋ถ์์ ์ข ๋ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ์ฌ, ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฐ ํจ์จ์ ๊ณ ๋ คํ ๋ชจ๋ธ๋ง ์ค๊ณ๋ฅผ ์ฃผ๋ํด ๋ณด๊ณ ์ถ๋ค.





















