Skip to content

[Feat] Token Header 삽입#130

Merged
kimjw2003 merged 3 commits into
developfrom
feat/#129-token-header-inject
Jan 17, 2026
Merged

[Feat] Token Header 삽입#130
kimjw2003 merged 3 commits into
developfrom
feat/#129-token-header-inject

Conversation

@kimjw2003

@kimjw2003 kimjw2003 commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

📮 관련 이슈

📌 작업 내용

  • 서버 통신시 필요한 Token Header에 주입

Summary by CodeRabbit

릴리스 노트

  • 개선 사항

    • 네트워크 요청에 자동 토큰 인증 추가 — 저장된 액세스 토큰이 모든 API 호출의 Authorization 헤더에 자동으로 포함됩니다.
    • 로그인·인증 관련 기능의 안정성 및 보안성 향상.
  • 잡무

    • 내부 네임스페이스(패키지) 정리로 코드 구조 및 유지보수성 개선.

✏️ Tip: You can customize this high-level summary in your review settings.

@kimjw2003 kimjw2003 self-assigned this Jan 17, 2026
@kimjw2003 kimjw2003 requested a review from a team as a code owner January 17, 2026 14:50
@kimjw2003 kimjw2003 added the Feat ✨ 신규 기능을 추가하거나 기존 기능의 동작, 정책을 변경 label Jan 17, 2026
@coderabbitai

coderabbitai Bot commented Jan 17, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

OkHttp 클라이언트에 TokenInterceptor를 주입하도록 NetworkModuleprovideOkHttpClient 시그니처와 빌더 호출을 변경했고, TokenInterceptor 클래스를 추가했으며, KakaoLoginManager의 패키지 선언을 이동했습니다.

Changes

코호트 / 파일(s) 변경 요약
네트워크 모듈 통합
app/src/main/java/com/flint/core/common/di/NetworkModule.kt
provideOkHttpClient 시그니처에 tokenInterceptor: TokenInterceptor 파라미터 추가 및 OkHttpClient.BuilderaddInterceptor(tokenInterceptor) 호출 추가. TokenInterceptor 임포트 추가.
토큰 인터셉터 추가
app/src/main/java/com/flint/core/common/di/interceptor/TokenInterceptor.kt
새 클래스 TokenInterceptor 추가 (@Inject 생성자). Interceptor 구현, PreferencesManager에서 토큰을 동기적으로 조회(runBlocking)해 Authorization: Bearer <token> 헤더를 조건부로 추가하고 chain.proceed 호출.
패키지 선언 이동
app/src/main/java/com/flint/core/common/manager/KakaoLoginManager.kt, app/src/main/java/com/flint/presentation/login/LoginScreen.kt
KakaoLoginManager의 패키지 선언을 com.flint.presentation.login.managercom.flint.core.common.manager로 변경되었고, LoginScreen의 import 경로가 이에 맞춰 업데이트됨.

Sequence Diagram(s)

sequenceDiagram
    participant Client as Client
    participant OkHttp as OkHttp
    participant TokenInterceptor as TokenInterceptor
    participant Preferences as PreferencesManager
    participant Server as Server

    Client->>OkHttp: 요청 실행
    OkHttp->>TokenInterceptor: intercept(chain)
    TokenInterceptor->>Preferences: ACCESS_TOKEN 조회 (runBlocking)
    Preferences-->>TokenInterceptor: 토큰 반환
    TokenInterceptor->>TokenInterceptor: 토큰이 있으면 Authorization 헤더 추가
    TokenInterceptor->>OkHttp: chain.proceed(수정된 요청)
    OkHttp->>Server: HTTP 요청 전송
    Server-->>OkHttp: HTTP 응답 반환
    OkHttp-->>Client: 응답 전달
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰
주머니 속 토큰 한 줌 꺼내
살금살금 헤더에 달아 주었네
빵실한 귀로 서버에게 인사하고
당근 꿈꾸며 응답을 기다리네 🥕

🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Out of Scope Changes check ❓ Inconclusive KakaoLoginManager 파일의 패키지 이동은 Token Header 주입 기능 구현과 직접적인 관련이 없어 보이며, 추가적인 설명이 필요합니다. KakaoLoginManager의 패키지 변경 사유를 명확히 설명하거나, 이것이 필수 변경사항임을 문서화하세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목 '[Feat] Token Header 삽입'은 이 PR의 주요 변경사항을 명확하게 설명합니다. 변경 내용은 서버 통신 시 필요한 Token Header를 주입하는 기능 구현입니다.
Description check ✅ Passed PR 설명은 관련 이슈(#129)와 작업 내용을 기술했으나, 템플릿의 스크린샷과 리뷰어 섹션이 없습니다. 하지만 핵심 정보는 포함되어 있습니다.
Linked Issues check ✅ Passed TokenInterceptor를 생성하여 서버 통신 시 Token Header를 주입하도록 구현했습니다. 이는 이슈 #129의 요구사항을 충족합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@app/src/main/java/com/flint/core/common/di/interceptor/TokenInterceptor.kt`:
- Around line 34-36: TokenInterceptor currently adds refreshToken to every
request via requestBuilder.header("refreshtoken", refreshToken); change this to
only add the header for the token refresh endpoint by checking the request URL
(use originalRequest.url.encodedPath or similar) and only call
requestBuilder.header when refreshToken is not empty AND the path matches the
refresh endpoint (e.g., contains "/auth/refresh"); update TokenInterceptor to
implement this conditional logic so other API calls do not carry the refresh
token.
🧹 Nitpick comments (1)
app/src/main/java/com/flint/core/common/di/interceptor/TokenInterceptor.kt (1)

18-26: 두 개의 runBlocking 호출을 하나로 통합하세요.

현재 runBlocking을 두 번 호출하여 불필요한 오버헤드가 발생합니다. 단일 runBlocking 블록 내에서 두 토큰을 모두 가져오는 것이 더 효율적입니다.

♻️ 제안하는 리팩토링
-        val accessToken =
-            runBlocking {
-                preferencesManager.getString(ACCESS_TOKEN).first()
-            }
-
-        val refreshToken =
-            runBlocking {
-                preferencesManager.getString(REFRESH_TOKEN).first()
-            }
+        val (accessToken, refreshToken) = runBlocking {
+            preferencesManager.getString(ACCESS_TOKEN).first() to
+                preferencesManager.getString(REFRESH_TOKEN).first()
+        }

Comment thread app/src/main/java/com/flint/core/common/di/interceptor/TokenInterceptor.kt Outdated

@giovannijunseokim giovannijunseokim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

runBlocking이 메인 스레드 차단하지 않는지만 확인 부탁드립니다~!

LGTM 👍

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@app/src/main/java/com/flint/core/common/manager/KakaoLoginManager.kt`:
- Line 1: Update the import in LoginScreen.kt to reference the moved
KakaoLoginManager class: locate the import statement currently referencing
com.flint.presentation.login.manager.KakaoLoginManager and change it to import
com.flint.core.common.manager.KakaoLoginManager so the LoginScreen.kt uses the
new package for the KakaoLoginManager class.
🧹 Nitpick comments (1)
app/src/main/java/com/flint/core/common/di/interceptor/TokenInterceptor.kt (1)

5-5: 사용되지 않는 import 제거

REFRESH_TOKEN이 import 되었지만 실제로 사용되지 않습니다. 불필요한 import는 제거하세요.

♻️ 수정 제안
 import com.flint.core.common.datastore.PreferencesManager
 import com.flint.core.common.util.DataStoreKey.ACCESS_TOKEN
-import com.flint.core.common.util.DataStoreKey.REFRESH_TOKEN
 import kotlinx.coroutines.flow.first

@nahy-512 nahy-512 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

굿

@kimjw2003 kimjw2003 merged commit 69e9552 into develop Jan 17, 2026
2 checks passed
@kimjw2003 kimjw2003 deleted the feat/#129-token-header-inject branch January 17, 2026 16:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feat ✨ 신규 기능을 추가하거나 기존 기능의 동작, 정책을 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] Token Header 주입

3 participants