ํซ๋ก์ค ๊ทน๋ณต์ ์ํ ์ฑ๋ด ์๋น์ค
์ ํฌ ์๋น์ค โ๋ฌด์ง๊ฐํธ์งโ์ ๋ชฉํ๋ ํซ๋ก์ค ์ฆํ๊ตฐ์ ์๋ ์ฌ๋๋ค์ ์ํด ์ฑ๋ด์ด ์ฃผ๋ ์๋ก๋ฅผ ํตํด ๊ทน๋ณต์ ํ ๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. ์ฌ์ฉ์๋ค์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์์งํ ๋งํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๊ฐ์ด ๋ง์ด ์ง๋๋ ํธ์ด๋ด์ง ๋ชปํ ๊ฐ์ ์ ๋ฐ๋ ค๋๋ฌผ๊ณผ์ ๊ฐ์ ๋ํ๋ฅผ ํตํด ๋ถ๋ด ์์ด ํธ์ด๋์ ์ ์๊ณ , ์ด๋ ํซ๋ก์ค ์ฆํ๊ตฐ ๊ทน๋ณต์ ๊ธ์ ์ ์ธ ์์ฉ์ ํ ์ ์์ต๋๋ค. ์๊ฐ์ด ํ๋ฌ๋ ์ฌ์ ํ ๊ทธ๋ฆฌ์ด, ๋น์ ์ ๊ฐ์กฑ์ด์ ๊ธฐ์ตํ๊ณ ์ถ์ ์ด๋ค์๊ฒ ์ ํ๊ณ ์ถ์ ๋ง์ ๋ชจ์ ์ง์ ๋ณด๋ด๋ณด์ธ์. โ๋ฌด์ง๊ฐ ํธ์งโ๋ ๊ทธ ๋ง๋ค์ด ๋ฟ๊ธธ ๊ธฐ์ํ๋ฉฐ ๊ฐ์์ ๋ต๋ณ์ ๋ณด๋ด๋๋ฆฝ๋๋ค.
- java 17 : ์ฌ์ฉํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- springboot (3.1.1) : ํ๋ ์์ํฌ
- JWT : ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ์ ์ฌ์ฉํ๋ ํ ํฐ
- Open AI (GPT-4, DALL-E) : ํ ์คํธ ์์ฑ์ ์ํ GPT 4, ์ด๋ฏธ์ง ์์ฑ์ ์ํ DALL-E 3 API ํ์ฉ
- EC2 : ์๋ฒ
- RDS : ๋ฐ์ดํฐ๋ฒ ์ด์ค
- S3: ์ด๋ฏธ์ง ์ ์ฅ
- Open AI DALL-E
implementation 'com.theokanning.openai-gpt3-java:client:0.17.0'
implementation 'com.theokanning.openai-gpt3-java:service:0.17.0'
์ฐธ๊ณ
https://velog.io/@minji1289/Springboot-์คํ๋ง๋ถํธ๋ก-DALL-E-API-ํธ์ถํ๊ธฐ
2. ๋ก๊ทธ์ธ JWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5โ
- AWS EC2 ์์ฑ
EC2 name | hack_server |
AMI | Amazon Linux 2023 AMI |
Instance Type | t2 micro (free tier eligible) |
Key Pair | Create new key pair |
VPC | Default |
Subnet | Default |
Auto-assign public IP | Enable |
Security group | SSH, HTTP, HTTPS, 8080 |
2. RDS ์ค์
Create method | Standard create |
Engine option | MySQL Community |
Templates | free tier |
DB instance identifier | hack-db |
Computer Resource | Donโt connect to an EC2 compute resource |
Public access | Yes |
3. S3 ์ค์
Bucket name | hack-s3bucket |
ACLs | enable |
Block Public Access | disable |
4. ๋๋ฉ์ธ ์ค์
aws route53์์ ๋๋ฉ์ธ ๊ตฌ๋งค ํ api.rainbow-letter.com๊ณผ rainbow-letter.com ๋ฑ๋ก
5. EC2 ์๋ฒ์ ssh ์ ์
ssh -i {pem_key๊ฒฝ๋ก} ec2-user@{public_ip}
6. java 17 ์ค์น ๋ฐ ํ์์กด ๋ณ๊ฒฝ
## ec2์ java 17 ์ค์น sudo yum install java-17-amazon-corretto
java -version //openjdk "17.0.7"
sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime date #ํ์์กด ํ์ธ
7. git ์ค์น
sudo yum install git //git ์ค์น
git --version //์ค์น๋ git ๋ฒ์ ํ์ธ
8. MySQL ์ค์น
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el9-3.noarch.rpm
# [์ ์ผ ์ต์ ๋ฒ์ ์ผ๋ก ์ค์น]
sudo yum install mysql-community-server
sudo systemctl start mysqld
sudo systemctl status mysqld
- EC2 ์๋ฒ์ application.properties, build.gradle, gradlew, gradle ํด๋ ์ถ๊ฐ
a. open AI AP key
b. RDS ์๋ํฌ์ธํธ ๋ฐ ํจ์ค์๋
c. papago API key
- ๋ฐฐํฌ script ์์ฑ ํ ./deploy.sh or sh deploy.sh ๋ก ์คํ
#!/bin/bash
REPOSITORY=/home/ec2-user/app/step1
PROJECT_NAME=HACK_Server
cd $REPOSITORY/$PROJECT_NAME/
echo "> Git Pull"
git pull
echo "> ํ๋ก์ ํธ Build ์์"
./gradlew build
echo "> ๋๋ ํ ๋ฆฌ๋ก ์ด๋"
cd $REPOSITORY
echo "> Build ํ์ผ ๋ณต์ฌ"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
pid ํ์ธ"
CURRENT_PID=$(pgrep -fl wow_server.*.jar | grep java | awk '{print $1}')
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> ํ์ฌ ๊ตฌ๋์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ผ๋ฏ๋ก ์ข
๋ฃํ์ง ์์ต๋๋ค."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | head -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $JAR_NAME &
11. github action์ ์ด์ฉํ ์๋ ๋ฐฐํฌ
a. Github Repository์ Settings > Secrets and variables > Actions์ โRepository secrets" 3๊ฐ์ง ์ถ๊ฐ
- HOST = EC2 ์ธ์คํด์ค์ public IP
- USER = ์ฌ์ฉ์ (๋ณดํต์ ec2-user)
- SSH_PRIVATE_KEY =ย `.pem`ย ํค ํ์ผ ๋ด์ฉ
b. github/workflows ํด๋ ์์ฑ ํ main.yml ํ์ผ ์๋์ ๊ฐ์ด ์ถ๊ฐ
name: WORKFLOW_NAME # workflow ์ด๋ฆ ์ค์
# workflow๋ฅผ runํ๋ ์กฐ๊ฑด ์ค์
on:
push:
branches: [ main ] #์ค์ ํ workflow run ์กฐ๊ฑด: branch [main]์ push๋ฅผ ํ ๋๋ง๋ค
# workflow๊ฐ runํ ๋ ์คํํ๋ ๋ด์ฉ ์ ์
jobs:
SSH:
runs-on: ubuntu-latest # OS(workflow label)
steps:
- uses: actions/checkout@v3 #Repository ์ฐธ๊ณ
- name: ssh to ec2 #EC2์ ์ ์
uses: appleboy/ssh-action@master #์ ์ ์ ๊ณต Repository
with:
key: ${{ secrets.SSH_PRIVATE_KEY }} #Repository secrets ์ฌ์ฉ
host: ${{ secrets.HOST }} #Repository secrets ์ฌ์ฉ
username: ${{ secrets.USER }} #Repository secrets ์ฌ์ฉ
script: | #์คํํ ์ฝ๋
cd /home/ec2-user/app/step1 #๋ฐฐํฌ ์คํฌ๋ฆฝํธ ํ์ผ์ด ์๋ ํด๋๋ก ์ด๋
sh deploy.sh #๋ฐฐํฌ ์คํฌ๋ฆฝํธ ํ์ผ ์คํ
#๊ธฐ์กด deploy.sh ํ์ผ์์ nohup ๋ช
๋ น์ด๋ฅผ ํฌํจํ line์ ์ง์ฐ๊ณ , ์๋์ ๊ฐ์ด `.yml` ์คํฌ๋ฆฝํธ ํ์ผ์ ์ถ๊ฐ
nohup java -jar wow_server-0.0.1-SNAPSHOT.jar > nohup.out 2> nohup.err < /dev/null &
c. ๊ธฐ์กด deploy.sh ํ์ผ์์ nohup ๋ถ๋ถ ์ฃผ์ ์ฒ๋ฆฌ
## nohup java -jar $JAR_NAME &
- git clone https://github.com/ewha-cse-HACK/HACK_Server.git
- application.properties ํ์ผ ์ค์
a. openAI api key
b. rds ํน์ local db ์๋ํฌ์ธํธ ๋ฐ ํจ์ค์๋
c. papago api key - ์ดํ๋ฆฌ์ผ์ด์ ์คํ
- postman์์
http://localhost:8080/{ํ ์คํธํ _URL}
์ ํตํด API ์กฐํ - postman ํน์ chrome์์
https://api.rainbow-letter.com/{ํ ์คํธํ _URL}
์ ํตํด API ์กฐํ
- postman์์ http://localhost:8080/{ํ ์คํธํ๊ณ _์ถ์_api} ๋ฅผ ํตํด API ์กฐํ
- postman ํน์ chrome์์ https://api.rainbow-letter.com/{ํ ์คํธํ _URL}์ ํตํด API ์กฐํ
โโโ settings.gradle
โโโ src
โโโ main
โย ย โโโ java
โย ย โย ย โโโ com
โย ย โย ย โโโ hack
โย ย โย ย โโโ hack_server
โย ย โย ย โโโ Authentication
โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โโโ UserController.java
โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โโโ JoinRequestDto.java
โย ย โย ย โย ย โย ย โโโ LoginRequestDto.java
โย ย โย ย โย ย โโโ JwtAuthenticationFilter.java
โย ย โย ย โย ย โโโ JwtAuthorizationFilter.java
โย ย โย ย โย ย โโโ JwtProvider.java
โย ย โย ย โย ย โโโ PrincipalDetails.java
โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โโโ PrincipalDetailsService.java
โย ย โย ย โย ย โโโ UserService.java
โย ย โย ย โโโ ChatGpt
โย ย โย ย โย ย โโโ ChatGptConfig.java
โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โโโ ChatGptController.java
โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โโโ ChatGptAnswerResponseDto.java
โย ย โย ย โย ย โย ย โโโ ChatGptRequestDto.java
โย ย โย ย โย ย โย ย โโโ ChatGptResponseDto.java
โย ย โย ย โย ย โย ย โโโ Choice.java
โย ย โย ย โย ย โย ย โโโ DalleAnswerResponseDto.java
โย ย โย ย โย ย โย ย โโโ MessageRequestDto.java
โย ย โย ย โย ย โย ย โโโ MessageResponseDto.java
โย ย โย ย โย ย โย ย โโโ QuestionRequestDto.java
โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โโโ ChatGptService.java
โย ย โย ย โโโ Community
โย ย โย ย โย ย โโโ Comment
โย ย โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โย ย โโโ CommentController.java
โย ย โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โย ย โโโ CommentSaveRequestDto.java
โย ย โย ย โย ย โย ย โย ย โโโ CommentUpdateRequestDto.java
โย ย โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โย ย โโโ CommentService.java
โย ย โย ย โย ย โโโ Post
โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โโโ PostController.java
โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โโโ CommentDto.java
โย ย โย ย โย ย โย ย โโโ PostAddRequestDto.java
โย ย โย ย โย ย โย ย โโโ PostDetailResponseDto.java
โย ย โย ย โย ย โย ย โโโ PostImageDto.java
โย ย โย ย โย ย โย ย โโโ PostListResponseDto.java
โย ย โย ย โย ย โย ย โโโ PostModifyRequestDto.java
โย ย โย ย โย ย โย ย โโโ PostResponseDto.java
โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โโโ PostService.java
โย ย โย ย โโโ Dalle
โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โโโ ImageGeneratorController.java
โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โโโ JournalCommentDto.java
โย ย โย ย โย ย โย ย โโโ JournalCommentResponseDto.java
โย ย โย ย โย ย โย ย โโโ JournalListDto.java
โย ย โย ย โย ย โย ย โโโ JournalListPageResponseDto.java
โย ย โย ย โย ย โย ย โโโ JournalListResponseDto.java
โย ย โย ย โย ย โย ย โโโ JournalResponseDto.java
โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โย ย โโโ AIService.java
โย ย โย ย โย ย โย ย โโโ JournalService.java
โย ย โย ย โย ย โโโ ServicesConfig.java
โย ย โย ย โโโ Entity
โย ย โย ย โย ย โโโ BaseTimeEntity.java
โย ย โย ย โย ย โโโ Comment.java
โย ย โย ย โย ย โโโ Heart.java
โย ย โย ย โย ย โโโ Journal.java
โย ย โย ย โย ย โโโ JournalComment.java
โย ย โย ย โย ย โโโ Pet.java
โย ย โย ย โย ย โโโ Post.java
โย ย โย ย โย ย โโโ PostImage.java
โย ย โย ย โย ย โโโ User.java
โย ย โย ย โโโ Global
โย ย โย ย โย ย โโโ Config
โย ย โย ย โย ย โย ย โโโ JpaConfig.java
โย ย โย ย โย ย โย ย โโโ SecurityConfig.java
โย ย โย ย โย ย โโโ S3
โย ย โย ย โย ย โโโ S3Config.java
โย ย โย ย โย ย โโโ S3ImageController.java
โย ย โย ย โย ย โโโ S3Uploader.java
โย ย โย ย โโโ HackServerApplication.java
โย ย โย ย โโโ MyPage
โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โโโ MyPageController.java
โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โโโ MyPageRequestDto.java
โย ย โย ย โย ย โย ย โโโ NickNameModifyRequestDto.java
โย ย โย ย โย ย โย ย โโโ ProfileImageModifyRequestDto.java
โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โโโ MyPageService.java
โย ย โย ย โโโ Papago
โย ย โย ย โย ย โโโ NaverTransService.java
โย ย โย ย โย ย โโโ PapagoController.java
โย ย โย ย โโโ Persona
โย ย โย ย โย ย โโโ Controller
โย ย โย ย โย ย โย ย โโโ PersonaController.java
โย ย โย ย โย ย โโโ Dto
โย ย โย ย โย ย โย ย โโโ PersonaDto.java
โย ย โย ย โย ย โย ย โโโ PersonaListRequestDto.java
โย ย โย ย โย ย โย ย โโโ PetRequestDto.java
โย ย โย ย โย ย โย ย โโโ SpeciesRequestDto.java
โย ย โย ย โย ย โโโ Service
โย ย โย ย โย ย โโโ PersonaService.java
โย ย โย ย โโโ Repository
โย ย โย ย โโโ CommentRepository.java
โย ย โย ย โโโ HeartRepository.java
โย ย โย ย โโโ JournalCommentRepository.java
โย ย โย ย โโโ JournalRepository.java
โย ย โย ย โโโ PetRepository.java
โย ย โย ย โโโ PostImageRepository.java
โย ย โย ย โโโ PostRepository.java
โย ย โย ย โโโ UserRepository.java
โย ย โโโ resources
โย ย โโโ application.properties
โย ย โโโ static
โย ย โโโ templates
- Authentication: ๋ก๊ทธ์ธ/ํ์๊ฐ์
- ChatGpt: ์ฑํ
- Community: ์ปค๋ฎค๋ํฐ
- Dalle: ์ผ๊ธฐ ํ์ณ๋ณด๊ธฐ
- MyPage: ๋ง์ดํ์ด์ง
- Papago: Papago API ํธ์ถ
- Persona: ํ๋ฅด์๋ ์์ฑ
๊น๋ฏผ์ง | ์ต์ ๋ | ํ์ค์ง |
---|---|---|
Server AI |
Client Design |
Server AI |