Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
0dadac9
[CICD] deploy.yml 추가
simhyunmin Nov 3, 2025
62d9ed8
[CICD] gradle 설정 추가
simhyunmin Nov 3, 2025
570cead
[CICD] application.yml 삭제
simhyunmin Nov 3, 2025
f748aae
[CICD] deploy.yml 수정
simhyunmin Nov 3, 2025
7ecee4a
[CICD] deploy.yml 수정
simhyunmin Nov 3, 2025
cdc6ec8
[CICD] deploy.yml 수정
simhyunmin Nov 3, 2025
d2aeb60
[CICD] deploy.sh 추가
simhyunmin Nov 3, 2025
a2d95ae
[FEAT] Swagger 설정 추가
simhyunmin Nov 3, 2025
7e237ed
[CICD] nginx.conf 추가
simhyunmin Nov 4, 2025
8df9532
[CICD] 탄력적 IP 수정
simhyunmin Nov 4, 2025
66a3a0c
[CHORE] application.yml 설정
simhyunmin Nov 4, 2025
2a0a63d
[FEAT] HelloController 수정
simhyunmin Nov 4, 2025
36fbb2e
[CHORE] 기본 도메인 중심형 패키지 구조 추가
simhyunmin Nov 13, 2025
d2a333e
[FEAT] 기본 응답 구조, 에러 응답 구조, 성공 응답 구조, 에러 상태, 에러 핸들링 추가
simhyunmin Nov 13, 2025
3801b47
[CICD] deploy.yml 수정
simhyunmin Nov 13, 2025
ad27ee2
[CICD] deploy.sh 빌드 스크립트 수정
simhyunmin Nov 13, 2025
3b9828a
[FEAT] 성별 가입 상태, Provider, Style enums 추가
simhyunmin Nov 13, 2025
debf4a9
[FEAT] jwt token 관련 Controller 및 파일 생성 및 추가
simhyunmin Nov 13, 2025
c5a8dcd
[FEAT] 회원 도메인 설계 및 카카오 회원가입 추가
simhyunmin Nov 13, 2025
48e1c70
[FEAT] 카카오 로그인 토큰 검증 클래스
simhyunmin Nov 13, 2025
f88d74a
[FEAT] 회원 약관 동의 관련 도메인 설계
simhyunmin Nov 13, 2025
c3c998e
[REFACTOR] application에서 JpaAuditing 애노테이션 추가
simhyunmin Nov 13, 2025
50e9814
[FEAT] Spring Security 설정 추가
simhyunmin Nov 13, 2025
e7d03da
[FEAT] global 설정 파일 및 BaseEntity 추가
simhyunmin Nov 13, 2025
8809b8f
[REFACTOR] build.gradle 수정
simhyunmin Nov 13, 2025
65f8fed
[REFACTOR] FitFitApplication.java 수정
simhyunmin Nov 13, 2025
794cdfc
[REFACTOR] application.yml 수정
simhyunmin Nov 13, 2025
2d05709
[Chore] .gitignore 설정
simhyunmin Nov 13, 2025
df71e9b
[CHORE] deploy.sh 수정
simhyunmin Nov 13, 2025
b258f5d
[CHORE] validation 의존성 추가
simhyunmin Nov 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# 워크플로우의 전체 이름
name: 픽픽 CI/CD 배포

# 워크플로우가 언제 실행될지 정의하는 트리거
on:
# main 브랜치에 push 이벤트가 발생했을 때 실행
push:
branches: [ "main" ]

# 실행될 작업(Job)들을 정의
jobs:
# '빌드와 배포' 작업
build-and-deploy:
# 이 작업이 실행될 가상 머신의 종류 (최신 우분투)
runs-on: ubuntu-latest

# 작업 내에서 순서대로 실행될 단계(Step)들
steps:
# 1. 소스 코드 체크아웃
- name: 소스 코드 체크아웃
uses: actions/checkout@v4

# 2. JDK 17 설치
- name: JDK 17 설치
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

# 3. Gradle 캐시 설정
# 매번 Gradle 의존성 받을 필요 없어 빌드 속도 빨라짐
- name: Gradle 캐시 설정
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-

# 4. gradlew 실행 권한 부여
- name: gradlew 실행 권한 부여
run: chmod +x ./gradlew

# 5. Gradle로 빌드하기
- name: Gradle로 빌드하기
run: ./gradlew bootJar

# 6. EC2에 배포 스크립트와 JAR 파일 업로드
- name: EC2에 파일 업로드
uses: appleboy/scp-action@master
with:
host: 3.39.139.208
username: ubuntu
key: ${{ secrets.EC2_SSH_KEY }}
source: "build/libs/*.jar,deploy.sh" # .jar 파일과 deploy.sh 파일을 함께 업로드
target: "/home/ubuntu/app"

# 7. EC2에서 배포 스크립트 실행
- name: EC2에서 배포 스크립트 실행
uses: appleboy/ssh-action@master
with:
host: 3.39.139.208 # EC2 퍼블릿 IP
username: ubuntu
key: ${{ secrets.EC2_SSH_KEY }}
envs: |
SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }}
JWT_SECRET=${{ secrets.JWT_SECRET }}
KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
script: |
cd /home/ubuntu/app
chmod +x deploy.sh # 스크립트 실행 권한 부여
./deploy.sh # 스크립트 실행
40 changes: 40 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
HELP.md
.gradle
.idea
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
src/main/generated/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/
.DS_Store
Binary file removed .gradle/8.14.3/checksums/checksums.lock
Binary file not shown.
Binary file removed .gradle/8.14.3/checksums/md5-checksums.bin
Binary file not shown.
Binary file removed .gradle/8.14.3/checksums/sha1-checksums.bin
Binary file not shown.
Binary file removed .gradle/8.14.3/executionHistory/executionHistory.bin
Binary file not shown.
Binary file removed .gradle/8.14.3/executionHistory/executionHistory.lock
Binary file not shown.
Binary file removed .gradle/8.14.3/fileChanges/last-build.bin
Binary file not shown.
Binary file removed .gradle/8.14.3/fileHashes/fileHashes.bin
Binary file not shown.
Binary file removed .gradle/8.14.3/fileHashes/fileHashes.lock
Binary file not shown.
Binary file removed .gradle/8.14.3/fileHashes/resourceHashesCache.bin
Binary file not shown.
Empty file removed .gradle/8.14.3/gc.properties
Empty file.
Binary file removed .gradle/buildOutputCleanup/buildOutputCleanup.lock
Binary file not shown.
2 changes: 0 additions & 2 deletions .gradle/buildOutputCleanup/cache.properties

This file was deleted.

Binary file removed .gradle/buildOutputCleanup/outputFiles.bin
Binary file not shown.
Binary file removed .gradle/file-system.probe
Binary file not shown.
Empty file removed .gradle/vcs-1/gc.properties
Empty file.
14 changes: 0 additions & 14 deletions .idea/discord.xml

This file was deleted.

11 changes: 0 additions & 11 deletions .idea/gradle.xml

This file was deleted.

4 changes: 0 additions & 4 deletions .idea/misc.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

76 changes: 0 additions & 76 deletions .idea/workspace.xml

This file was deleted.

35 changes: 33 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.7'
id 'org.springframework.boot' version '3.3.13'
id 'io.spring.dependency-management' version '1.1.7'
}

Expand All @@ -22,15 +22,46 @@ configurations {

repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
}

dependencies {
// Spring Web MVC
implementation 'org.springframework.boot:spring-boot-starter-web'

// Spring Data JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'

// Lombok
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'

// Validation
implementation 'org.springframework.boot:spring-boot-starter-validation'

// MySQL
runtimeOnly 'com.mysql:mysql-connector-j'

// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'

// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'

// JTokkit
implementation 'com.knuddels:jtokkit:1.1.0'

// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly('io.jsonwebtoken:jjwt-jackson:0.11.5') // JSON parsing
}

tasks.named('test') {
Expand Down
Binary file removed build/classes/java/main/fitfit/FitfitApplication.class
Binary file not shown.
1 change: 0 additions & 1 deletion build/resources/main/application.properties

This file was deleted.

Binary file removed build/tmp/compileJava/previous-compilation-data.bin
Binary file not shown.
15 changes: 15 additions & 0 deletions deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
BUILD_JAR=$(ls /home/ubuntu/app/build/libs/*.jar)
JAR_NAME=$(basename $BUILD_JAR)
echo ">>> build file name: $JAR_NAME" >> /home/ubuntu/app/deploy.log

echo ">>> kill existing process" >> /home/ubuntu/app/deploy.log
PID=$(pgrep -f .jar)
if [ -n "$PID" ]; then
sudo kill -15 $PID
sleep 5
fi

echo ">>> execute new jar file" >> /home/ubuntu/app/deploy.log
cd /home/ubuntu/app
nohup sudo java -jar -Dspring.profiles.active=prod $BUILD_JAR > /home/ubuntu/app/application.log 2>&1 &
26 changes: 26 additions & 0 deletions nginx.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
server {
listen 443 ssl;
server_name api.fitfit.site;

# SSL 인증서 경로도 api.fitfit.site에 맞게 새로 발급
# (예: sudo certbot --nginx -d api.fitfit.site)
ssl_certificate /etc/letsencrypt/live/api.fitfit.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.fitfit.site/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

location / {
# 요청을 내부 스프링 앱(8080 포트)으로 전달하는 것은 동일합니다.
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

server {
listen 80;
server_name api.fitfit.site;
return 301 https://$host$request_uri;
}
2 changes: 2 additions & 0 deletions src/main/java/fitfit/FitfitApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing
public class FitfitApplication {

public static void main(String[] args) {
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/fitfit/HelloController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package fitfit;

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin(origins = "https://fitfit.site")
public class HelloController {

@GetMapping("/hello") // 1. HTTP GET 요청을 '/hello' 경로와 매핑
public String getHelloMessage() {
// 2. "환영합니다!" 라는 문자열을 반환
return "환영합니다!";
}
}
27 changes: 27 additions & 0 deletions src/main/java/fitfit/domain/kakao/converter/KakaoConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package fitfit.domain.kakao.converter;

import fitfit.domain.member.dto.MemberDataDTO;
import fitfit.domain.member.dto.MemberResponseDTO;
import fitfit.domain.member.entity.Member;
import io.jsonwebtoken.Claims;

import java.time.LocalDateTime;

public class KakaoConverter {

public static MemberDataDTO.MemberData toKakaoMemberData(Claims claims) {
return MemberDataDTO.MemberData.builder()
.sub(claims.getSubject())
.email(claims.get("email", String.class))
.build();
}

public static MemberResponseDTO.KkoOAuth2LoginResponse toKkoOAuth2LoginResponse(Member member, String accessToken, String refreshToken, LocalDateTime accessTokenExpireAt) {
return MemberResponseDTO.KkoOAuth2LoginResponse.builder()
.accessToken(accessToken)
.refreshToken(refreshToken)
.accessTokenExpireAt(accessTokenExpireAt)
.memberStatus(member.getStatus())
.build();
}
}
Loading