Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[YS-65] feat: 테스트용 토큰 강제 발급 API & AccessToken 갱신 API 구현 #16

Merged
merged 37 commits into from
Jan 3, 2025

Conversation

Ji-soo708
Copy link
Member

@Ji-soo708 Ji-soo708 commented Jan 1, 2025

💡 작업 내용

  • 테스트용 강제 토큰 발급 API를 구현했습니다
    • 처음에는 memberId를 String으로 처리한다고 가정하고 작성한 코드를, 현재는 Long으로 처리하고 있어 관련 코드를 수정했습니다
  • RefreshToken을 이용해 AccessToken을 갱신하는 API를 구현했습니다

✅ 셀프 체크리스트

  • PR 제목을 형식에 맞게 작성했나요?
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있나요?
  • 테스트는 잘 통과했나요?
  • 빌드에 성공했나요?
  • 본인을 assign 해주세요.
  • 해당 PR에 맞는 label을 붙여주세요.

🙋🏻‍ 확인해주세요

  • 그라밋은 OAuth 로그인만 제공해서 따로 개발자들이 사용할 테스트용 강제 토큰 발급 API가 필요하다고 생각해 구현했습니다
  • 생각보다 누락된 기본 로직들이 좀 있어 바뀐 파일들이 많습니다. 이 부분 양해해주세요. 커밋별로 보시면 더 좋을 거 같아요!
  • 두 API 모두 로컬에서 호출을 통해 정상 동작함을 확인했습니다

🔗 Jira 티켓


https://yappsocks.atlassian.net/browse/YS-65

Summary by CodeRabbit

  • 의존성 업데이트

    • SpringDoc OpenAPI UI 버전을 2.5.0에서 2.7.0으로 업그레이드
    • 테스트를 위해 MockK 라이브러리 1.13.10 버전 추가
  • 새로운 기능

    • 테스트 멤버를 위한 토큰 생성 기능 추가
    • 인증 엔드포인트에 토큰 강제 발급 API 도입
  • 내부 구조 변경

    • 멤버 ID 타입을 문자열에서 Long으로 변경
    • 사용 사례(UseCase) 인터페이스 도입으로 애플리케이션 아키텍처 개선

@Ji-soo708 Ji-soo708 added the ✨ FEATURE 기능 추가 label Jan 1, 2025
@Ji-soo708 Ji-soo708 self-assigned this Jan 1, 2025
@github-actions github-actions bot changed the title feat: 테스트용 강제 토큰 발급 API 구현 [YS-65] feat: 테스트용 강제 토큰 발급 API 구현 Jan 1, 2025
@Ji-soo708 Ji-soo708 added the 🔒 HOLD 홀드 label Jan 1, 2025
@Ji-soo708 Ji-soo708 requested a review from chock-cho January 1, 2025 11:20
Copy link
Member Author

@Ji-soo708 Ji-soo708 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

미리 올라간 GoogleOAuth PR과 충돌이 생길 거 같아 해당 PR은 hold합니다. 리뷰만 부탁드려요~

Copy link

coderabbitai bot commented Jan 1, 2025

Walkthrough

이 풀 리퀘스트는 Dobby 백엔드 애플리케이션의 여러 컴포넌트에 걸쳐 중요한 변경 사항을 포함하고 있습니다. 주요 변경 사항은 멤버 ID 타입 변경, 테스트 토큰 생성 기능 추가, 의존성 업데이트 등을 포함합니다. 새로운 UseCase 인터페이스와 GenerateTestToken 클래스가 도입되어 테스트 토큰 생성을 위한 표준화된 접근 방식을 제공합니다.

Changes

파일 변경 요약
build.gradle.kts - springdoc-openapi-starter-webmvc-ui 의존성 버전 2.5.0 → 2.7.0
- mockk 테스트 의존성 추가 (v1.13.10)
DobbyBackendApplication.kt - UseCase 클래스 임포트 추가
- @ComponentScan 어노테이션으로 컴포넌트 스캔 필터 추가
TokenGateway.kt - 테스트 멤버용 토큰 생성 메서드 2개 추가
Member.kt - memberId 타입을 String에서 Long으로 변경
새로 추가된 클래스 - GenerateTestToken: 테스트 토큰 생성 유스케이스
- UseCase: 제네릭 유스케이스 인터페이스
- AuthController: 토큰 강제 생성 엔드포인트
- TestMemberSignInResponse: 테스트 로그인 응답 DTO

Poem

🐰 코드의 토끼, 깡총깡총
의존성 업데이트, 기능 확장
멤버 ID는 Long으로 춤을 추고
테스트 토큰은 자유롭게 날아오르네
새로운 기능, 즐거운 코딩! 🚀


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/main/kotlin/com/dobby/backend/DobbyBackendApplication.kt (1)

3-3: UseCase 관련 임포트 추가
새로운 UseCase 인터페이스를 통해 도메인 로직을 확장 가능하게 설계한 점이 좋습니다. 다만, 다른 패키지 구조와의 충돌이나 중복 정의가 없는지 점검이 필요합니다.

src/main/kotlin/com/dobby/backend/domain/usecase/GenerateTestToken.kt (1)

8-10: Input 데이터 클래스 설계
Input 클래스로 memberId만 받고 있어 단일 책임을 잘 지키고 있습니다. 추후 확장 가능성(예: 추가 파라미터)을 고려하여 유지보수성을 검토해주세요.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 910db21 and 8bfa21a.

📒 Files selected for processing (13)
  • build.gradle.kts (2 hunks)
  • src/main/kotlin/com/dobby/backend/DobbyBackendApplication.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/domain/gateway/TokenGateway.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/domain/model/Member.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/domain/usecase/GenerateTestToken.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/domain/usecase/UseCase.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/infrastructure/database/entity/common/AuditingEntity.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/infrastructure/database/entity/enum/RoleType.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/infrastructure/gateway/TokenGatewayImpl.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/presentation/api/controller/AuthController.kt (1 hunks)
  • src/main/kotlin/com/dobby/backend/presentation/api/dto/response/TestMemberSignInResponse.kt (1 hunks)
  • src/test/kotlin/com/dobby/backend/domain/usecase/GenerateTestTokenTest.kt (1 hunks)
  • src/test/kotlin/com/dobby/backend/infrastructure/token/JwtTokenProviderTest.kt (2 hunks)
✅ Files skipped from review due to trivial changes (4)
  • src/main/kotlin/com/dobby/backend/infrastructure/database/entity/enum/RoleType.kt
  • src/main/kotlin/com/dobby/backend/domain/usecase/UseCase.kt
  • src/main/kotlin/com/dobby/backend/infrastructure/database/entity/common/AuditingEntity.kt
  • src/main/kotlin/com/dobby/backend/presentation/api/dto/response/TestMemberSignInResponse.kt
🔇 Additional comments (22)
src/main/kotlin/com/dobby/backend/domain/model/Member.kt (3)

4-4: 멤버 ID 타입 변경으로 인한 데이터 일관성 확인 필요
String 타입에서 Long 타입으로 변경되어, 숫자 범위 초과 방지와 DB 연동 시 일관성을 충분히 검토해야 합니다.


11-11: newMember 함수 파라미터 타입 수정
매개변수 타입을 Long으로 명시하여, ULID와 같은 문자열 식별자 로직이 제거되었습니다. 이후 다른 생성 로직과 호환 여부를 다시 한번 확인하시기 바랍니다.


15-15: memberId 할당 시 주의
memberId가 DB나 외부 API에서 넘어오는 값이라면, 무조건 존재하는 값임을 전제로 가정해도 되는지 재확인이 필요합니다.

src/main/kotlin/com/dobby/backend/domain/gateway/TokenGateway.kt (1)

8-9: 테스트용 토큰 발급 메서드 추가
테스트 목적에 특화된 메서드를 제공함으로써, 실제 회원 정보가 아닌 임시 회원 식별자를 기반으로 토큰을 발급할 수 있게 되었습니다. 보안적으로 잘 구분되어 있는지, 즉 테스트용 토큰이 실제 운영 토큰과 혼동될 여지가 없는지 확인이 필요합니다.

src/main/kotlin/com/dobby/backend/DobbyBackendApplication.kt (1)

6-14: 컴포넌트 스캔 전략 업데이트
@ComponentScan으로 UseCase를 스캔하도록 변경하여, 필요한 빈이 적절히 주입될 것으로 보입니다. 이 설정 변경이 기존 컴포넌트 스캔 구조와 충돌하지 않는지, 그리고 다른 레이어(Controller, Repository 등)도 정상적으로 스캔되는지 확인하세요.

src/main/kotlin/com/dobby/backend/domain/usecase/GenerateTestToken.kt (4)

1-4: 테스트 토큰 생성 UseCase 정의
domain.usecase 패키지에 새 클래스를 추가하여 책임을 명확히 분리했습니다. 향후 테스트 토큰 외에도 확장이 필요하다면, 다른 UseCase와의 의존성 충돌이 없는지 관리가 중요합니다.


5-7: TokenGateway 주입 확인
DI(의존성 주입) 구문이 깔끔하며, TokenGateway의 구체 구현체와도 적절히 연동될 것으로 보입니다.


12-15: Output 데이터 클래스 설계
accessTokenrefreshToken을 분리하여 반환함으로써, 후속 로직에서 각각의 토큰을 명확히 처리할 수 있어 가독성이 높습니다.


17-23: 토큰 발급 로직 간결화
memberId만으로 새 토큰을 발급하는 로직이 명확하게 분리되어 있습니다. 별도의 에러 처리(예: memberId가 잘못되었을 때)가 필요하다면, 예외 발생 또는 별도 검증 로직 추가를 고려해 보세요.

src/main/kotlin/com/dobby/backend/presentation/api/controller/AuthController.kt (3)

13-15: 클래스 주입 방식 확인
GenerateTestToken 의존성을 생성자 파라미터로 주입하여 관리하는 방식이 적절해 보입니다. Spring의 DI 흐름도 명확하게 유지되고 있어 좋습니다.


16-19: API 문서화 및 파라미터 검증 고려
테스트 토큰 발급 목적과 사용 의도가 명확하게 기술되어 있습니다. 다만 @RequestParam으로 받는 memberId 범위 및 유효성 검증 로직이 필요할 수 있으니, 혹시 모를 예외 상황(예: 유효하지 않은 memberId)에 대비해 검증 로직을 고려해보세요.


25-28: 응답 DTO 명확성
TestMemberSignInResponse에 accessToken, refreshToken이 분리되어 있어 구조가 명확합니다. 확장 가능성도 좋아 보입니다.

src/test/kotlin/com/dobby/backend/domain/usecase/GenerateTestTokenTest.kt (3)

9-11: Mock 객체 활용 알맞음
TokenGateway를 목으로 설정하고 GenerateTestToken의 실제 동작을 검증하는 방식이 적절합니다. 비즈니스 로직만 테스트하도록 분리되어 있어 테스트 품질이 좋아 보입니다.


13-17: 테스트 설명 및 시나리오 명시
given("memberId가 주어졌을 때")와 실제 토큰 문자열 설정은 가독성이 좋습니다. 비즈니스 요구사항을 코드로 잘 표현하고 있습니다.


25-28: 결과 검증 로직 간결성
실제 생성된 accessToken, refreshToken을 일관성 있게 검사하여 목적에 충실합니다.

src/main/kotlin/com/dobby/backend/infrastructure/gateway/TokenGatewayImpl.kt (2)

29-35: 테스트용 토큰 생성 로직 분리
generateAccessTokenForTestMember 메서드가 실제 멤버 객체 없이 memberId만으로 동작하도록 별도로 분리된 점이 뛰어납니다. 테스트 도메인이나 시나리오에서만 필요한 로직을 명확히 구분한 것으로 보이며, 재사용성에도 긍정적 영향을 줍니다.


37-43: Refresh 토큰 로직 일관성
generateRefreshTokenForTestMember 역시 UsernamePasswordAuthenticationToken 생성을 동일 패턴으로 유지하고 있으므로, 인증 로직에 대한 일관성이 잘 유지됩니다.

src/test/kotlin/com/dobby/backend/infrastructure/token/JwtTokenProviderTest.kt (3)

6-7: Kotest Matchers 활용
shouldBe, shouldNotBe 사용으로 테스트가 가독성 좋게 개선되었습니다.


21-28: Member 객체 변경사항 반영
memberId = 1 과 같이 Long 타입을 직접 주입하여 테스트함으로써 실제 사용 시나리오에 가까운 검증이 가능합니다.


34-44: 파싱 검증 로직 견고성
토큰 파싱 후 principal에서 memberId를 추출해 원본과 비교하는 로직이 명확하고 에러 범위를 잘 커버합니다.

build.gradle.kts (2)

64-64: 테스트 환경 구성이 적절합니다.

MockK 라이브러리 추가는 코틀린 테스트 작성을 위한 좋은 선택입니다. PR의 목적인 테스트용 토큰 발급 API 구현에 필요한 테스트 작성을 위해 적절한 버전의 의존성이 추가되었습니다.


43-43: springdoc-openapi 버전 업그레이드 검증 필요

springdoc-openapi 라이브러리의 버전 업그레이드가 기존 API 문서화에 영향을 미치지 않는지 확인이 필요합니다.

✅ Verification successful

springdoc-openapi 2.7.0 버전 업그레이드는 안전합니다

2.5.0에서 2.7.0으로의 업그레이드는 주로 버그 수정과 기능 개선을 포함하고 있으며, 호환성을 깨뜨리는 변경사항은 없습니다. 주요 개선사항:

  • Kotlin ByteArray 필드 설명 누락 문제 해결
  • RequestBody 메타 어노테이션 지원 추가
  • OAS v3.1 웹훅 지원 추가
  • 다양한 버그 수정
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for breaking changes in springdoc-openapi versions

# Get the changelog or release notes
gh api \
  -H "Accept: application/vnd.github+json" \
  repos/springdoc/springdoc-openapi/releases | \
  jq -r '.[] | select(.tag_name | contains("v2.5") or contains("v2.6") or contains("v2.7")) | .body'

Length of output: 17046

@Ji-soo708 Ji-soo708 changed the title [YS-65] feat: 테스트용 강제 토큰 발급 API 구현 [YS-65] feat: 테스트용 강제 토큰 발급 API & AccessToken 갱신 API 구현 Jan 2, 2025
@@ -10,7 +11,7 @@ import java.time.LocalDate
@Entity(name = "member")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "role_type")
open class Member (
class MemberEntity (
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로직을 구현하면서 알았는데 Entity와 model을 한 클래스에서 불러와 구현해야 하는 경우가 있어, 이름으로 구분을 주기 위해 다시 Entity를 뒤에 붙였습니다!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 이 부분이 우려되어서 초반에 네이밍을 달리했었던 기억이 납니다!
좋은 변화라고 생각합니다☺️

@Ji-soo708 Ji-soo708 changed the title [YS-65] feat: 테스트용 강제 토큰 발급 API & AccessToken 갱신 API 구현 [YS-65] feat: 테스트용 토큰 강제 발급 API & AccessToken 갱신 API 구현 Jan 2, 2025
chock-cho
chock-cho previously approved these changes Jan 2, 2025
Copy link
Contributor

@chock-cho chock-cho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SRP 원칙이 잘 준수된 것 같습니다. 구현량이 많으셨을 텐데 짧은 시간 내에 꼼꼼하게 잘 구현해주셔서 감사합니다 ☺️ 앞의 Google OAuth 머지되고 나서 머지하면 좋을 것 같습니다!
미리 리뷰 남깁니다.
LGTM‼️

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저희 요구사항에서는 RoleType이 RESEARCHER, PARTICIPANT로 구분된다는 점 참고 부탁드립니다 ☺️!!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분 아까 알아채서 최근 커밋에서 고쳤습니다! 좋은 지적 감사합니다👍🏻

@@ -10,7 +11,7 @@ import java.time.LocalDate
@Entity(name = "member")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "role_type")
open class Member (
class MemberEntity (
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 이 부분이 우려되어서 초반에 네이밍을 달리했었던 기억이 납니다!
좋은 변화라고 생각합니다☺️

chock-cho and others added 12 commits January 3, 2025 15:07
* feat: define domain models and enums for the project

- 프로젝트의 핵심 데이터를 표현하는 엔티티 클래스 정의
- 표준화를 위한 enum 클래스 구현
- 프로젝트 확장성과 명확성을 위한 기본 도메인 설계 완료

* refact: update domain structures for refactoring

- `AuditingEntityListener` 추가
- 기존: 리스트 순차 탐색 ➡️  Map의 key값으로 탐색 개선
- 패키지명 `enums` ➡️  `enum` 으로 변경

* fix: fixing some errors(Member, AuditingEntity)

- `AuditingEntity` 변경 내용 추가
- `Member` 의존성 알맞게 주입

* feat: 구글 OAuth 로그인 구현

- Google OAuth 로그인 구현
- 추후 회원가입 로직의 OAuth 정보 받아오는 과정 고려하여, 도메인 클래스
  일부 수정
- `.env` 파일 로드를 위한 의존성 파일 추가

* fix: add dotenv libraries

- 에러 수정을 위해 빌드 파일에 `dotenv` 라이브러리 추가

* fix: delete import which occurs dependency error

* fix: resolve context loading issue with active test profile

- 테스트 중 적절한 빈 구성 보장을 위해 `@ActiveProfiles("test")` 추가
- `SecurityFilterChain` 관련 Application Context 로딩 오류 해결

* feat: implement google oauth login

- 구글 oauth 로그인 구현
- 구글 oauth token, email, name 정보 가져오도록 설정

* refact: seperate responsibilities according to Clean Architecture
principal

- Google API 호출 로직을 `FetchGoogleUserInfoUseCase`로 이동하여 책임 분리
  개선
- `OauthService` 를 수정하여 사용자 정보 조회를 새로운 UseCase로 위임

* test: test code for Google OAuth login logic, AuditingEntity

- 구글 OAuth 로직에 대한 test code 작성: `OauthServiceTest`
  `FetchGoogleUserInfoTest`
- `AuditingEntityTest` 에 대한 test code 작성

- JaCoco 커버리지 테스트에서 AuditingEntityTest 커버리지 0.5로 목표치
  미달 → 추후 테스트 커버리지 개선 필요

* test: add OauthMapperTest and MemberServiceTest for refact test coverage

- `OauthMapperTest` 테스트 코드 추가
- `MemberServiceTest` 테스트 코드 추가

- `AuditingEntityTest` → 테스트 커버리지 50%로 목표치 70% 달성 실패,
  추후 개선 필요

* feat : add Google OAuth integration

- Google OAuth 연동을 위한 `GoogleAuthFeignClient` 추가
- 사용자 정보를 가져오는 `GoogleUserInfoFeignClient` 구현
- GoogleTokenRequest 및 GoogleTokenResponse DTO 정의
- OauthLoginResponse에 사용자 정보 및 accessToken, refreshToken 포함
- 기존 WebClientConfig 삭제 → FeignClient로 대체

* fix: add dependency code and custom exception code

- Google OAuth 로그인 시도 시 발생할 수 있는 예외처리
- Application에 FeignClient 설정

* fix: adjust things to build safely

* refact: update test codes to satisfy the newly requirement

* refact: reflect pr reviews and update changes

- 중복된 선언: `@Repository` 어노테이션 제거
- SwaggerConfig 가독성 개선

* refact: reflect code from reviews

- 빌드 파일에 중복된 의존성 제거
- `OAuthController` 제거 → `AuthController` 로 통일
- 파일 끝에 EOF 추가
Copy link

sonarqubecloud bot commented Jan 3, 2025

@Ji-soo708 Ji-soo708 requested a review from chock-cho January 3, 2025 06:41
Copy link
Member Author

@Ji-soo708 Ji-soo708 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OAuthLoginResponse 형태를 해당 PR에서 사용한 Response와 일치하도록 수정했습니다. 새로 추가된 커밋들은 대부분 conflicts 해결한 부분들이라 OAuthLoginResponse 부분만 확인해주시면 좋겠습니다.

@Ji-soo708 Ji-soo708 removed the 🔒 HOLD 홀드 label Jan 3, 2025
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UseCase interface로 책임 분리해주셔서 감사했습니다!
덕분에 책임 분리된 코드로 잘 리팩토링된 것 같아요~☺️☺️

Copy link
Contributor

@chock-cho chock-cho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제 담당이었던 직전 PR에서 작업 중간에 수정된 부분이 많아서 번거로우셨을텐데 conflict 해결을 잘해주셔서 감사합니다!
수고하셨어요 👍👍

@chock-cho chock-cho merged commit 88e6ff5 into dev Jan 3, 2025
3 checks passed
@chock-cho chock-cho deleted the feature/YS-65 branch January 3, 2025 06:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ FEATURE 기능 추가
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants