Skip to content

Commit 63542e9

Browse files
authored
Merge branch 'dev' into Feat/89
2 parents f3af9e7 + 0104908 commit 63542e9

File tree

19 files changed

+1575
-532
lines changed

19 files changed

+1575
-532
lines changed

.github/workflows/deploy.yml renamed to .github/workflows/backend-cd.yml

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: deploy
1+
name: backend-cd
22
on:
33
push:
44
paths:
@@ -61,7 +61,7 @@ jobs:
6161
- name: set lower case owner name
6262
run: |
6363
echo "OWNER_LC=${OWNER,,}" >> ${GITHUB_ENV}
64-
64+
6565
6666
- name: 빌드 앤 푸시
6767
uses: docker/build-push-action@v3
@@ -71,12 +71,18 @@ jobs:
7171
tags: |
7272
ghcr.io/${{ env.OWNER_LC }}/${{ env.DOCKER_IMAGE_NAME }}:${{ needs.makeTagAndRelease.outputs.tag_name }},
7373
ghcr.io/${{ env.OWNER_LC }}/${{ env.DOCKER_IMAGE_NAME }}:latest
74-
75-
74+
75+
7676
deploy:
7777
runs-on: ubuntu-latest
7878
needs: [ buildImageAndPush ]
79+
env:
80+
OWNER: ${{ github.repository_owner }}
7981
steps:
82+
- name: set lower case owner name
83+
run: |
84+
echo "OWNER_LC=${OWNER,,}" >> ${GITHUB_ENV}
85+
8086
- name: AWS SSM Send-Command
8187
uses: peterkimzz/aws-ssm-send-command@master
8288
id: ssm
@@ -88,7 +94,18 @@ jobs:
8894
working-directory: /
8995
comment: Deploy
9096
command: |
97+
# 0. env 변수 확인
98+
echo "OWNER_LC = ${{ env.OWNER_LC }}"
99+
100+
# 1. 최신 이미지 pull
91101
docker pull ghcr.io/${{ env.OWNER_LC }}/catfe-backend:latest
102+
103+
# 2. 기존 컨테이너 종료 및 제거
92104
docker stop catfe-backend 2>/dev/null
93105
docker rm catfe-backend 2>/dev/null
94-
docker run -d --name catfe-backend -p 8080:8080 ghcr.io/${{ env.OWNER_LC }}/catfe-backend:latest
106+
107+
# 3. 새로운 컨테이너 실행
108+
docker run -d --name catfe-backend -p 8080:8080 ghcr.io/${{ env.OWNER_LC }}/catfe-backend:latest
109+
110+
# 4. dangling 이미지 삭제
111+
docker rmi $(docker images -f "dangling=true" -q)

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ out/
4040
db_dev.mv.db
4141
db_dev.trace.db
4242
.env
43+
.env.*
4344

4445
### Terraform ###
4546
/infra/terraform/.terraform

Dockerfile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,14 @@ WORKDIR /app
88
COPY build.gradle.kts .
99
COPY settings.gradle.kts .
1010

11+
# 종속성 설치
1112
RUN gradle dependencies --no-daemon
1213

1314
# 소스코드 복사
1415
COPY src src
1516

16-
# .env 복사
17-
COPY .env .env
18-
1917
# 애플리케이션 빌드
20-
RUN gradle build --no-daemon
18+
RUN gradle build --no-daemon -x test
2119

2220
# 두 번째 스테이지 : 실행 스테이지
2321
FROM container-registry.oracle.com/graalvm/jdk:21
@@ -26,7 +24,9 @@ WORKDIR /app
2624

2725
# 첫 번째 스테이지에서 빌드된 JAR 파일 복사
2826
COPY --from=builder /app/build/libs/*.jar app.jar
29-
COPY --from=builder /app/.env .env
27+
28+
# 빌드 컨텍스트의 .env(backend-cd 작업에서 빌드된 .env)를 컨테이너 안으로 복사
29+
COPY .env .env
3030

3131
# 실행할 JAR 파일 지정
3232
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "app.jar"]

src/main/java/com/back/domain/user/controller/AuthController.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.back.domain.user.dto.LoginResponse;
55
import com.back.domain.user.dto.UserRegisterRequest;
66
import com.back.domain.user.dto.UserResponse;
7-
import com.back.domain.user.service.UserService;
7+
import com.back.domain.user.service.AuthService;
88
import com.back.global.common.dto.RsData;
99
import jakarta.servlet.http.HttpServletRequest;
1010
import jakarta.servlet.http.HttpServletResponse;
@@ -23,14 +23,14 @@
2323
@RequestMapping("/api/auth")
2424
@RequiredArgsConstructor
2525
public class AuthController implements AuthControllerDocs {
26-
private final UserService userService;
26+
private final AuthService authService;
2727

2828
// 회원가입
2929
@PostMapping("/register")
3030
public ResponseEntity<RsData<UserResponse>> register(
3131
@Valid @RequestBody UserRegisterRequest request
3232
) {
33-
UserResponse response = userService.register(request);
33+
UserResponse response = authService.register(request);
3434
return ResponseEntity
3535
.status(HttpStatus.CREATED)
3636
.body(RsData.success(
@@ -45,7 +45,7 @@ public ResponseEntity<RsData<LoginResponse>> login(
4545
@Valid @RequestBody LoginRequest request,
4646
HttpServletResponse response
4747
) {
48-
LoginResponse loginResponse = userService.login(request, response);
48+
LoginResponse loginResponse = authService.login(request, response);
4949
return ResponseEntity
5050
.ok(RsData.success(
5151
"로그인에 성공했습니다.",
@@ -59,7 +59,7 @@ public ResponseEntity<RsData<Void>> logout(
5959
HttpServletRequest request,
6060
HttpServletResponse response
6161
) {
62-
userService.logout(request, response);
62+
authService.logout(request, response);
6363
return ResponseEntity
6464
.ok(RsData.success(
6565
"로그아웃 되었습니다.",
@@ -73,7 +73,7 @@ public ResponseEntity<RsData<Map<String, String>>> refreshToken(
7373
HttpServletRequest request,
7474
HttpServletResponse response
7575
) {
76-
String newAccessToken = userService.refreshToken(request, response);
76+
String newAccessToken = authService.refreshToken(request, response);
7777
return ResponseEntity.ok(RsData.success(
7878
"토큰이 재발급되었습니다.",
7979
Map.of("accessToken", newAccessToken)

src/main/java/com/back/domain/user/controller/AuthControllerDocs.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ ResponseEntity<RsData<UserResponse>> register(
131131

132132
@Operation(
133133
summary = "로그인",
134-
description = "username + password로 로그인합니다. "
134+
description = "username + password로 로그인합니다. " +
135+
"로그인 성공 시 Access Token을 응답 본문에, Refresh Token을 HttpOnly 쿠키에 담아 반환합니다. "
135136
)
136137
@ApiResponses({
137138
@ApiResponse(
@@ -311,7 +312,7 @@ ResponseEntity<RsData<Void>> logout(
311312
@Operation(
312313
summary = "토큰 재발급",
313314
description = "만료된 Access Token 대신 Refresh Token을 이용해 새로운 Access Token을 발급받습니다. " +
314-
"Refresh Token은 HttpOnly 쿠키에서 추출하며, 재발급 성공 시 응답 헤더와 본문에 새로운 Access Token을 담습니다."
315+
"Refresh Token은 HttpOnly 쿠키에서 추출하며, 재발급 성공 시 본문에 새로운 Access Token을 담습니다."
315316
)
316317
@ApiResponses({
317318
@ApiResponse(
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.back.domain.user.controller;
2+
3+
import com.back.domain.user.dto.UpdateUserProfileRequest;
4+
import com.back.domain.user.dto.UserDetailResponse;
5+
import com.back.domain.user.service.UserService;
6+
import com.back.global.common.dto.RsData;
7+
import com.back.global.security.CustomUserDetails;
8+
import jakarta.validation.Valid;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.http.ResponseEntity;
11+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
12+
import org.springframework.web.bind.annotation.*;
13+
14+
@RestController
15+
@RequestMapping("/api/users")
16+
@RequiredArgsConstructor
17+
public class UserController implements UserControllerDocs {
18+
private final UserService userService;
19+
20+
@GetMapping("/me")
21+
public ResponseEntity<RsData<UserDetailResponse>> getMyInfo (
22+
@AuthenticationPrincipal CustomUserDetails user
23+
) {
24+
UserDetailResponse userDetail = userService.getUserInfo(user.getUserId());
25+
return ResponseEntity
26+
.ok(RsData.success(
27+
"회원 정보를 조회했습니다.",
28+
userDetail
29+
));
30+
}
31+
32+
@PatchMapping("/me")
33+
public ResponseEntity<RsData<UserDetailResponse>> updateMyProfile(
34+
@AuthenticationPrincipal CustomUserDetails user,
35+
@Valid @RequestBody UpdateUserProfileRequest request
36+
) {
37+
UserDetailResponse updated = userService.updateUserProfile(user.getUserId(), request);
38+
return ResponseEntity
39+
.ok(RsData.success(
40+
"회원 정보를 수정했습니다.",
41+
updated
42+
)
43+
);
44+
}
45+
}

0 commit comments

Comments
 (0)