본문 바로가기

Study

[내일배움캠프 TIL] REST API에서 현재 로그인 유저를 표현하는 방법 - /me vs /{userId}

728x90
반응형

MSA 프로젝트에서 API 설계를 하다가 "내 프로필 조회 API URL을 어떻게 할까?" 고민하게 됐다.

처음엔 당연히 이렇게 해야 한다고 생각했다.

 
 
GET /api/v1/users/{userId}

근데 API 설계를 찾아보다가 /me 라는 방식이 있다는 걸 처음 알게 됐다.


/{userId} 방식의 문제점

처음엔 userId를 경로에 넣는 게 당연하다고 생각했는데, 생각해보니 문제가 있었다.

 
 
→ 클라이언트가 자신의 userId를 직접 알고 있어야 함
→ 다른 사람의 userId를 넣으면 타인 정보 접근 가능
→ 추가적인 권한 검증 로직이 필요해짐

/me 방식

 
 
GET /api/v1/users/me

"현재 인증된 나" 를 의미하는 관용적 표현이었다.

JWT 기반 MSA에서는 이런 흐름으로 동작한다:

 
 
클라이언트 → Authorization: Bearer {JWT} → Gateway
→ Gateway가 JWT 검증
→ X-User-Id 헤더에 userId 주입
→ 서비스에서 헤더로 userId 추출
→ 내 정보 조회

클라이언트가 userId를 몰라도 되고, 헤더에서 추출하니까 타인 정보 접근도 불가능하다.

이미 업계에서 관용적으로 쓰이는 패턴이었는데 몰랐던 것이었다.


배운 점

/me 와 /{userId} 를 용도에 맞게 구분해서 쓰는 게 좋다.

 
 
GET /api/v1/users/me           → 내 정보 조회 (로그인한 본인)
GET /api/v1/users/{userId}     → 특정 유저 조회 (관리자 or 서비스 간 내부 호출)

당연하다고 생각했던 것도 한 번 더 찾아보면 더 좋은 방법이 있다는 걸 배웠다.

반응형