Skip to content

[Feature/#61] 사용자 정보 조회 api 연동#62

Merged
Seojegyeong merged 3 commits intodevelopfrom
feature/#61
Feb 26, 2026
Merged

[Feature/#61] 사용자 정보 조회 api 연동#62
Seojegyeong merged 3 commits intodevelopfrom
feature/#61

Conversation

@Seojegyeong
Copy link
Collaborator

@Seojegyeong Seojegyeong commented Feb 26, 2026

🚨 관련 이슈

#61

✨ 변경사항

  • 🐞 BugFix Something isn't working
  • 💻 CrossBrowsing Browser compatibility
  • 🌏 Deploy Deploy
  • 🎨 Design Markup & styling
  • 📃 Docs Documentation writing and editing (README.md, etc.)
  • ✨ Feature Feature
  • 🔨 Refactor Code refactoring
  • ⚙️ Setting Development environment setup
  • ✅ Test Test related (storybook, jest, etc.)

✏️ 작업 내용

1. Router.tsx

  • AuthGuard 실제 인증 로직으로 교체
  • isTokenInitialized 체크 추가 → 토큰 재발급 완료 전엔 null 반환
  • 미인증 시 /login으로 리다이렉트 수정

2. 마이페이지 API 연동

  • IMyPageInfoResponse 타입 추가
  • getMyInfo() API 함수 추가
  • 비밀번호 store 저장 제거

3. 기타

  • Sidebar : max-w-58 (Tailwind 값으로 통일)
  • 인증번호 입력 버그 및 에러메시지 간격 조정

😅 미완성 작업

N/A

📢 논의 사항 및 참고 사항

N/A

💬 리뷰어 가이드 (P-Rules)
P1: 필수 반영 (Critical) - 버그 가능성, 컨벤션 위반. 해결 전 머지 불가.
P2: 적극 권장 (Recommended) - 더 나은 대안 제시. 가급적 반영 권장.
P3: 제안 (Suggestion) - 아이디어 공유. 반영 여부는 드라이버 자율.
P4: 단순 확인/칭찬 (Nit) - 사소한 오타, 칭찬 등 피드백.

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 사용자 정보 조회 API 및 관련 타입 추가
    • 회원가입 단계에서 비밀번호를 단계 간에 직접 전달하도록 흐름 개선
  • Refactor

    • 토큰 초기화 상태 도입 및 인증 저장소/라우터 인증 흐름 개선
    • 레이아웃에서 사용자 정보 사전조회 추가
  • Style

    • 사이드바 너비 조정
    • 입력 컴포넌트의 비활성화 시각성 및 UI 간격 미세조정
    • 인증폼 타이머 간격 축소

@Seojegyeong Seojegyeong requested review from YermIm and jjjsun February 26, 2026 11:15
@Seojegyeong Seojegyeong self-assigned this Feb 26, 2026
@Seojegyeong Seojegyeong added ✨ Feature 기능 개발 📬 API 서버 API 통신 labels Feb 26, 2026
@Seojegyeong Seojegyeong linked an issue Feb 26, 2026 that may be closed by this pull request
3 tasks
@coderabbitai
Copy link

coderabbitai bot commented Feb 26, 2026

📝 Walkthrough

Walkthrough

사용자 정보 조회 API(getMyInfo) 추가, 인증 토큰 초기화 플래그(isTokenInitialized) 도입 및 토큰 재발급 흐름 보강, 회원가입 단계에서 패스워드 전달 방식 변경, 라우터 인증 가드에 실제 인증 검사 로직을 적용했습니다. 일부 UI 컴포넌트 스타일/속성(입력 비활성화 처리, 레이아웃 너비)도 변경되었습니다.

Changes

Cohort / File(s) Summary
인증 API 및 타입
src/api/auth/auth.ts, src/types/auth/auth.ts
getMyInfo() 추가로 /api/users/my 호출 구현. IMyPageInfoResponse·TLoginProvider 추가, 사용되지 않거나 중복된 타입 일부 제거. 로그인 호출에 auth-specific client 사용 전환.
상태 관리 및 토큰 초기화
src/store/useAuthStore.ts, src/hooks/auth/useTokenRefresh.ts
isTokenInitialized 상태·setTokenInitialized 추가. 패스워드 상태 제거(대신 socialId 사용/nullable). 토큰 재발급 흐름에서 초기화 플래그 항상 설정하도록 변경.
라우터 및 인증 가드
src/routes/Router.tsx
AuthGuard가 isTokenInitialized 먼저 확인하고 초기화되지 않으면 렌더 중단, 초기화 후 isLoggedIn 여부로 이동 제어(로그인 리다이렉트)하도록 제어 흐름 변경.
회원가입 플로우 리팩토링
src/pages/auth/Signup.tsx, src/components/auth/flows/signup/PasswordSetupStep.tsx, src/components/auth/flows/signup/ProfileSetupStep.tsx
패스워드를 컴포넌트 간 props로 전달하도록 변경: PasswordSetupStep.onNext → (password: string), Signup에서 로컬 state로 저장, ProfileSetupStep이 password prop 받음. useAuthStore의 password 의존 제거.
UI 컴포넌트 변경
src/components/common/input/Input.tsx, src/components/auth/common/InputActions.tsx
Input에 disabled prop 핸들링 추가(컨테이너 스타일·input disabled attr 적용). InputActions 타이머 우측 마진 제거(간격 축소).
레이아웃/스타일 조정 및 데이터 페칭
src/layout/main/MainLayout.tsx, src/components/Sidebar/Sidebar.tsx
MainLayout에서 useCoreQuery(["myInfo"], getMyInfo) 호출 추가. 레이아웃 max-width 클래스 값 변경, Sidebar 내부 컨테이너 폭 클래스 변경.

Sequence Diagram(s)

sequenceDiagram
    participant Browser as Browser
    participant Router as Router/AuthGuard
    participant Hook as useTokenRefresh<br/>(Hook)
    participant AuthStore as useAuthStore
    participant API as Auth API

    Browser->>Router: 앱 마운트
    Router->>AuthStore: isTokenInitialized?
    alt 미초기화
        Router->>Hook: 토큰 초기화 시작
        Hook->>AuthStore: hasSession 확인
        alt 세션 없음
            AuthStore-->>Hook: hasSession=false
            Hook->>AuthStore: setTokenInitialized()
        else 세션 있음
            Hook->>API: reissueToken 요청
            alt 성공
                API-->>Hook: 새 토큰
                Hook->>AuthStore: setAccessToken(...)
            else 실패
                API-->>Hook: 에러
                Hook->>AuthStore: resetAuth()
            end
            Hook->>AuthStore: setTokenInitialized()
        end
        Hook-->>Router: 초기화 완료
        Router-->>Router: null (대기)
    else 초기화됨
        AuthStore-->>Router: true
        Router->>AuthStore: isLoggedIn?
        alt 로그인됨
            Router->>Browser: 보호된 컴포넌트 렌더
        else 미로그인
            Router->>Browser: navigate("/login")
        end
    end
Loading
sequenceDiagram
    participant User as User
    participant Signup as Signup.tsx
    participant PassStep as PasswordSetupStep
    participant Profile as ProfileSetupStep
    participant API as Auth API

    User->>Signup: 회원가입 시작
    Signup->>PassStep: 렌더(Step 2)
    User->>PassStep: 비밀번호 입력 및 제출
    PassStep->>Signup: onNext(password)
    Signup->>Signup: password 상태 저장
    Signup->>Profile: 렌더(provided password)
    User->>Profile: 프로필 입력 및 제출
    Profile->>API: 회원가입 요청 (email, password, profile)
    API-->>Profile: 성공
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • jjjsun
  • YermIm

세부 리뷰(요약·권장 개선)

  • 인증 초기화 플래그

    • 문제: isTokenInitialized가 잘 설정되지 않으면 앱이 영구 대기 상태가 될 수 있음.
    • 권장: useTokenRefresh에서 모든 에러 경로에 대해 setTokenInitialized가 확실히 호출되는지 재검증하고, 네트워크 오류 시 재시도/백오프 정책 고려.
  • useAuthStore 변경(비밀번호 제거·socialId nullable)

    • 문제: password가 store에서 제거되어 사이드 이펙트 가능성 감소는 좋으나, socialId가 nullable로 바뀌며 null 초기화/복구 흐름 확인 필요.
    • 권장: logout/resetAuth 경로에서 관련 값(in-memory·localStorage)이 일관되게 정리되는지 E2E 시나리오로 검증.
  • 라우터 AuthGuard

    • 문제: 초기화 중(null 반환) UX가 깜빡임을 유발할 수 있음(특히 SSR/CSR 혼합 환경).
    • 권장: 전역 로더 또는 스켈레톤 표시로 사용자 피드백을 추가하고, 초기화 지연 시 타임아웃 처리 정책 검토.
  • 회원가입 흐름(패스워드 전달)

    • 문제: email은 store, password는 로컬 state로 혼재되어 있음(일관성 부족).
    • 권장: 폼 데이터는 가능한 한 상위 컴포넌트(혹은 form manager)에서 통일해 전달하거나, ProfileSetupStep도 필요한 모든 필드를 props로 받도록 통일성 유지.
  • Input disabled 처리

    • 문제: helper text의 마진 변경과 disabled 스타일 우선순위는 레이아웃 차이를 만들 수 있음.
    • 권장: 접근성 측면에서 disabled일 때 aria-disabled/aria-describedby가 적절히 설정되어 있는지 확인하고, 시각적 대비를 점검.
  • 레이아웃 너비 변경

    • 문제: MainLayout/Sidebar에서 max-width 값(예: 1600→400)이 크게 변경되어 의도치 않은 레이아웃 붕괴 가능성 있음.
    • 권장: 변경 의도 확인 후 디자인 시스템(또는 전역 컨테이너)과 일치하도록 조정. UI 테스트로 다양한 뷰포트에서 확인.

버그/안정성 우선 체크리스트

  • useTokenRefresh의 finally에서 항상 setTokenInitialized 호출되는지 확인
  • Router가 초기화 중에 null을 반환하는 동안 사용자에게 적절한 피드백 제공 여부
  • Signup → Profile로 넘어갈 때 password가 올바르게 전달되는지 및 이메일/패스워드의 일관성
  • Input disabled 상태에서 키보드/스크린리더 동작 검증(aria 속성)
  • MainLayout/Sidebar 변경으로 인한 레이아웃 깨짐 여부(반응형 포함)

필요하면 해당 파일들 중심으로 더 자세한 라인별 리뷰 제공할게.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

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.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 핵심 변경사항인 사용자 정보 조회 API 연동을 명확하게 요약하고 있으며, 이슈 번호 #61을 포함하여 구체적입니다.
Description check ✅ Passed PR 설명이 템플릿을 따르고 있으며, 핵심 변경사항(Router 개선, 마이페이지 API 연동, 기타 UI 수정)을 섹션별로 명확하게 정리했습니다.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#61

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

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: 4

🧹 Nitpick comments (4)
src/routes/Router.tsx (1)

13-26: 인증 가드 로직이 올바르게 구현되었습니다.

토큰 초기화 전에 null을 반환하여 인증되지 않은 상태에서 보호된 콘텐츠가 잠깐 보이는 문제(flash)를 방지했습니다. selector 패턴 사용도 불필요한 리렌더링 방지에 좋습니다.

다만, 초기화 중 빈 화면이 표시되는 시간이 길어질 경우 사용자 경험을 위해 로딩 인디케이터 추가를 고려해볼 수 있습니다.

💡 선택적: 로딩 상태 표시
   if (!isTokenInitialized) {
-    return null;
+    return (
+      <div className="flex h-screen items-center justify-center">
+        <LoadingSpinner />
+      </div>
+    );
   }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/routes/Router.tsx` around lines 13 - 26, AuthGuard currently returns null
while isTokenInitialized is false, which can cause a prolonged blank screen;
update AuthGuard to render a loading indicator instead of null during token
initialization by replacing the null return in the isTokenInitialized check with
a lightweight loader component or spinner (e.g., render a <Loader /> or simple
"Loading..." element), keeping the rest of the logic (useAuthStore selectors and
the Navigate redirect when !isLoggedIn) unchanged so protected content and
redirects behave the same.
src/types/auth/auth.ts (1)

77-85: 타입 정의가 잘 되어 있습니다.

한 가지 확인이 필요합니다: profileImageUrl이 사용자가 프로필 이미지를 설정하지 않은 경우 서버에서 null이나 빈 문자열을 반환할 수 있는지 확인해 주세요. 만약 그렇다면 타입을 string | null로 변경하는 것이 안전합니다.

💡 선택적 수정 제안
 export interface IMyPageInfoResponse {
   userId: number;
   email: string;
   name: string;
-  profileImageUrl: string;
+  profileImageUrl: string | null;
   phoneNumber: string;
   isEmailVerified: boolean;
   providerType: TLoginProvider;
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/types/auth/auth.ts` around lines 77 - 85, The
IMyPageInfoResponse.profileImageUrl currently typed as string may actually be
null or empty when a user hasn't set an image; update the IMyPageInfoResponse
interface to make profileImageUrl nullable (e.g., string | null) and audit
usages of IMyPageInfoResponse (calls that read profileImageUrl, components
rendering profile images, and any serialization logic) to handle null/empty
values safely (fallback image or conditional rendering).
src/layout/main/MainLayout.tsx (1)

10-10: 쿼리 결과 활용 및 에러 처리 검토가 필요합니다.

useCoreQuery를 호출하고 있지만 결과를 사용하지 않고 있습니다. 현재 의도가 무엇인지에 따라 다음을 고려해 주세요:

  1. 데이터 프리페칭 목적이라면: 에러 발생 시 사용자에게 피드백이 없습니다. API 실패 시 토스트나 에러 바운더리를 통한 처리가 필요할 수 있습니다.

  2. 실제 데이터 사용 목적이라면: 쿼리 결과를 destructuring하여 isLoading, isError, data를 활용해야 합니다.

♻️ 에러 처리 추가 예시
 export default function MainLayout() {
-  useCoreQuery(["myInfo"], getMyInfo);
+  const { isError } = useCoreQuery(["myInfo"], getMyInfo);
+  
+  // 필요시 에러 처리 로직 추가
+  // if (isError) { ... }
+
   return (
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/layout/main/MainLayout.tsx` at line 10, The call to
useCoreQuery(["myInfo"], getMyInfo) in MainLayout currently ignores the returned
query result; update it to capture and handle the query tuple (e.g., const {
data, isLoading, isError, error } = useCoreQuery(...)) and then use those flags
to either prefetch only (silently) or surface failures—if prefetching, swallow
failures but log them; if using data, render loading state when isLoading, show
a user-facing error (toast or error boundary) when isError using the error
object, and use data where needed; reference useCoreQuery and getMyInfo to
locate and modify the call and add the appropriate UI/error handling paths.
src/components/auth/flows/signup/ProfileSetupStep.tsx (1)

31-35: 리다이렉트 전 일시적 렌더링 방지 고려

현재 useEffect에서 리다이렉트가 발생하기 전에 폼이 잠깐 렌더링될 수 있습니다. 사용자 경험 개선을 위해 조건이 맞지 않을 때 early return으로 로딩 상태나 null을 반환하는 것을 고려해 주세요.

♻️ 제안하는 개선 방법
  useEffect(() => {
    if (!email || !password) {
      navigate("/signup", { replace: true });
    }
  }, [email, password, navigate]);

+ if (!email || !password) {
+   return null;
+ }
+
  const {
    register,
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/auth/flows/signup/ProfileSetupStep.tsx` around lines 31 - 35,
In ProfileSetupStep, avoid briefly rendering the form before the useEffect
redirect by adding an early return when email or password are missing: inside
the ProfileSetupStep component (before JSX return), check the email and password
props/state and return null or a loading placeholder instead of rendering the
form, so navigation(navigate) still occurs in the existing useEffect but no UI
flashes; ensure you reference the same email, password and navigate identifiers
used in the current useEffect.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/common/input/Input.tsx`:
- Around line 56-62: In Input.tsx fix the typo in the success branch of the
className ternary (the conditional that checks the success prop) where "rubg-2"
is used; replace it with "ring-2" so the success state applies the intended ring
styling (update the class string in the success branch of the disabled ? ... :
error ? ... : success ? ... : ... expression).

In `@src/store/useAuthStore.ts`:
- Line 8: The stored state property socialId is declared as number | null but
the setter setSocialId only accepts number; update setSocialId's parameter type
to accept number | null (or alternatively change socialId to number if null
isn't allowed) so types are consistent—locate the socialId declaration and the
setSocialId action in useAuthStore and make their types match.
- Line 47: The resetAuth setter only clears email and should also clear socialId
to match logout's behavior; update the resetAuth implementation in useAuthStore
so it calls set with both email: "" and socialId: null (i.e., resetAuth: () =>
set({ email: "", socialId: null })) so temporary social login state is fully
cleared and consistent with logout; ensure you reference the existing resetAuth
and logout methods and the socialId state key when making the change.
- Around line 30-37: The logout implementation (logout) fails to reset
isTokenInitialized, causing state mismatch; update logout to also reset
isTokenInitialized to false (call the existing setter or set the field in set)
so token initialization flow restarts on next login, or alternatively change
setTokenInitialized to accept a boolean (setTokenInitialized(value: boolean))
and use it here to set false—locate logout and setTokenInitialized in
useAuthStore and apply one of these fixes.

---

Nitpick comments:
In `@src/components/auth/flows/signup/ProfileSetupStep.tsx`:
- Around line 31-35: In ProfileSetupStep, avoid briefly rendering the form
before the useEffect redirect by adding an early return when email or password
are missing: inside the ProfileSetupStep component (before JSX return), check
the email and password props/state and return null or a loading placeholder
instead of rendering the form, so navigation(navigate) still occurs in the
existing useEffect but no UI flashes; ensure you reference the same email,
password and navigate identifiers used in the current useEffect.

In `@src/layout/main/MainLayout.tsx`:
- Line 10: The call to useCoreQuery(["myInfo"], getMyInfo) in MainLayout
currently ignores the returned query result; update it to capture and handle the
query tuple (e.g., const { data, isLoading, isError, error } =
useCoreQuery(...)) and then use those flags to either prefetch only (silently)
or surface failures—if prefetching, swallow failures but log them; if using
data, render loading state when isLoading, show a user-facing error (toast or
error boundary) when isError using the error object, and use data where needed;
reference useCoreQuery and getMyInfo to locate and modify the call and add the
appropriate UI/error handling paths.

In `@src/routes/Router.tsx`:
- Around line 13-26: AuthGuard currently returns null while isTokenInitialized
is false, which can cause a prolonged blank screen; update AuthGuard to render a
loading indicator instead of null during token initialization by replacing the
null return in the isTokenInitialized check with a lightweight loader component
or spinner (e.g., render a <Loader /> or simple "Loading..." element), keeping
the rest of the logic (useAuthStore selectors and the Navigate redirect when
!isLoggedIn) unchanged so protected content and redirects behave the same.

In `@src/types/auth/auth.ts`:
- Around line 77-85: The IMyPageInfoResponse.profileImageUrl currently typed as
string may actually be null or empty when a user hasn't set an image; update the
IMyPageInfoResponse interface to make profileImageUrl nullable (e.g., string |
null) and audit usages of IMyPageInfoResponse (calls that read profileImageUrl,
components rendering profile images, and any serialization logic) to handle
null/empty values safely (fallback image or conditional rendering).

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 63ceebe and 8c8f5c6.

📒 Files selected for processing (12)
  • src/api/auth/auth.ts
  • src/components/Sidebar/Sidebar.tsx
  • src/components/auth/common/InputActions.tsx
  • src/components/auth/flows/signup/PasswordSetupStep.tsx
  • src/components/auth/flows/signup/ProfileSetupStep.tsx
  • src/components/common/input/Input.tsx
  • src/hooks/auth/useTokenRefresh.ts
  • src/layout/main/MainLayout.tsx
  • src/pages/auth/Signup.tsx
  • src/routes/Router.tsx
  • src/store/useAuthStore.ts
  • src/types/auth/auth.ts

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.

♻️ Duplicate comments (1)
src/store/useAuthStore.ts (1)

13-13: ⚠️ Potential issue | 🟠 Major

isTokenInitialized가 로그아웃에서 리셋되지 않아 인증 상태가 꼬일 수 있어요

Line 30의 logout에서 isTokenInitialized를 초기화하지 않고, Line 44의 setTokenInitializedtrue만 설정 가능해서 상태 복원이 막혀 있습니다. 다음 로그인/토큰 초기화 사이클에서 가드 분기가 잘못될 가능성이 있습니다.

수정 제안
 interface IAuthState {
   isLoggedIn: boolean;
   isTokenInitialized: boolean;
@@
-  setTokenInitialized: () => void;
+  setTokenInitialized: (value: boolean) => void;
@@
   logout: () => {
     localStorage.removeItem("hasSession");
     set({
       isLoggedIn: false,
+      isTokenInitialized: false,
       accessToken: null,
       email: "",
       socialId: null,
     });
   },
@@
-  setTokenInitialized: () => set({ isTokenInitialized: true }),
+  setTokenInitialized: (value) => set({ isTokenInitialized: value }),

Also applies to: 30-38, 44-44

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/store/useAuthStore.ts` at line 13, The store's token-initialized flag
isn't reset on logout and the setter only allows true, causing stale auth state;
update the logout implementation (logout) to reset isTokenInitialized to false
and change setTokenInitialized to accept a boolean (or add a
clearTokenInitialized method) so callers can set it to false during logout or
reinitialize flows; update usages to call setTokenInitialized(false) (or the new
clear) where appropriate to ensure the guard branching uses the correct state.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@src/store/useAuthStore.ts`:
- Line 13: The store's token-initialized flag isn't reset on logout and the
setter only allows true, causing stale auth state; update the logout
implementation (logout) to reset isTokenInitialized to false and change
setTokenInitialized to accept a boolean (or add a clearTokenInitialized method)
so callers can set it to false during logout or reinitialize flows; update
usages to call setTokenInitialized(false) (or the new clear) where appropriate
to ensure the guard branching uses the correct state.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8c8f5c6 and c833106.

📒 Files selected for processing (2)
  • src/components/common/input/Input.tsx
  • src/store/useAuthStore.ts

Copy link
Collaborator

@jjjsun jjjsun left a comment

Choose a reason for hiding this comment

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

P4: 확인했습니다! 고생하셨어요!

@YermIm
Copy link
Collaborator

YermIm commented Feb 26, 2026

P4: 확인했습니다 고생하셨습니다!

@Seojegyeong Seojegyeong merged commit d185245 into develop Feb 26, 2026
2 checks passed
@Seojegyeong Seojegyeong deleted the feature/#61 branch February 26, 2026 13:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📬 API 서버 API 통신 ✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨ [Feature] 마이페이지 사용자 정보 조회 API 연동

3 participants