40강에서는 “내 정보 조회 API” 를 구현한다.
지금까지 정리해온 인증 흐름(Rq)을 실제로 활용하는 단계다.
핵심은 단순하다.
로그인 안 했으면 401,
로그인 했으면 내 정보를 내려준다.
대부분의 서비스에는 반드시 이런 API가 있다.
즉,
“지금 로그인한 사용자가 누구인지”를 서버에서 알려주는 API
GET /api/v1/members/me
| 상황 | 응답 |
|---|---|
| 로그인 안 함 | 401 Unauthorized |
| 로그인 함 | 200 OK + 내 정보 |
이번 강의에서 추가된 컨트롤러 코드는 매우 단순하다.
@GetMapping("/me")
public RsData<MemberDto> me() {
Member actor = rq.getActor();
return new RsData<>(
"200-1",
"%s님의 정보입니다.".formatted(actor.getName()),
new MemberDto(actor)
);
}
rq.getActor() 호출👉 Rq에 인증 책임을 위임한 구조다.
/api/v1/members/me 요청rq.getActor() 호출{
"resultCode": "401-1",
"msg": "로그인 후 이용해주세요.",
"data": null
}
👉 컨트롤러 로직은 실행되지 않는다.
Authorization: Bearer {apiKey}
{
"resultCode": "200-1",
"msg": "관리자님의 정보입니다.",
"data": {
"id": 2,
"createDate": "2025-07-07T10:42:47",
"modifyDate": "2025-07-07T10:42:47",
"name": "관리자"
}
}
👉 현재 로그인한 사용자의 정보만 반환된다.
40강에서는 내 정보 API 테스트도 함께 추가한다.
@Test
@DisplayName("내 정보")
void t3() throws Exception {
Member actor = memberService.findByUsername("user1").get();
String actorApiKey = actor.getApiKey();
mvc.perform(
get("/api/v1/members/me")
.header("Authorization", "Bearer " + actorApiKey)
)
.andExpect(status().isOk())
.andExpect(jsonPath("$.resultCode").value("200-1"))
.andExpect(jsonPath("$.data.id").value(actor.getId()))
.andExpect(jsonPath("$.data.name").value(actor.getName()));
}
이 테스트가 보장하는 것:
40강까지 오면서 인증 흐름은 이렇게 완성됐다.
Rq
컨트롤러
엔티티 (36강)
테스트 (37~39강)
👉 40강은 이 구조를 실제 API로 증명하는 단계다.
40강의 핵심은 이 문장이다.
“인증 로직은 재사용되어야 하고,
내 정보 API는 그 가장 대표적인 예다.”
/api/v1/members/me API 구현이제 인증 구조는
“설계 → 구현 → 테스트 → 실제 사용”
까지 한 사이클이 완성됐다.