15강에서는 인증 방식이 결정적으로 바뀐다.
이제 더 이상 username/password로 인증하지 않고,
apiKey 하나로 사용자를 식별하도록 구조를 변경했다.
이전 구조에서는 글 작성 시 이런 방식이었다.
POST /api/v1/posts?username=user1&password=1234
이 구조에는 여러 문제가 있었다.
👉 결론:
비밀번호를 인증 수단으로 쓰는 구조 자체가 위험하다.
👉 그래서 인증 정보를 이렇게 바꾼다.
이전: username + password
이후: apiKey
@NotBlank String username,
@NotBlank String password
Member actor = memberService.findByUsername(username).orElseThrow(...);
if (!actor.getPassword().equals(password)) throw ...
@NotBlank @Size(min = 30, max = 50)
String apiKey
Member actor = memberService.findByApiKey(apiKey)
.orElseThrow(() -> new ServiceException("401-1", "존재하지 않는 apiKey 입니다."));
✔ username/password 검증 로직 제거
✔ apiKey 하나로 사용자 식별
POST /api/v1/posts?username=user1&password=1234
POST /api/v1/posts?apiKey=xxxxxxxx-xxxx-xxxx-xxxx
👉 이제 클라이언트는 apiKey만 저장하면 된다.
Optional<Member> findByApiKey(String apiKey);
public Optional<Member> findByApiKey(String apiKey) {
return memberRepository.findByApiKey(apiKey);
}
✔ apiKey로 회원 조회 가능
✔ 인증 로직이 훨씬 단순해짐
Member actor = memberService.findByUsername("user1").get();
String actorApiKey = actor.getApiKey();
post("/api/v1/posts?apiKey=" + actorApiKey)
👉 실제 서비스 흐름과 테스트 흐름이 완전히 일치하게 됨
강사님이 명확하게 짚어준 부분 👇
👉 현 단계에서는 합리적인 선택
이 구조는 다음 단계로 이어진다.
즉,
“인증 정보를 URL/Body에 직접 넣지 않는 구조”로 가기 위한 중간 단계다.
15강은 단순한 리팩토링이 아니다.
“인증 방식이 바뀌는 전환점”이다.
이제부터 인증의 중심은
👉 사람이 아는 비밀번호가 아니라
👉 서버가 발급한 신분증(apiKey) 이다.