[데브코스] Spring Boot 인증·인가(Auth) (29강) - 댓글 작성 시 인증된 회원을 작성자로 등록하기

zuno·2026년 1월 13일

이번 강의에서는 댓글 작성 시 로그인한 사용자(인증된 회원)가 자동으로 작성자로 저장되도록 구조를 변경했다.

이전까지는 테스트를 위해 임시로 특정 회원(user1)을 작성자로 고정했지만,
이제는 Authorization 헤더에 전달된 apiKey를 기준으로 실제 로그인한 회원을 찾아 댓글 작성자(actor)로 사용한다.


변경 배경

기존 댓글 작성 로직은 아래와 같은 문제가 있었다.

  • 실제 로그인 여부와 무관하게
  • 서버 코드에서 임의로 작성자를 지정
  • 인증(Authentication)과 댓글 작성 로직이 분리되어 있음

즉, API 요청에 인증 정보를 보내도 댓글 작성자와 전혀 연결되지 않는 상태였다.

이번 강의의 목표는 다음과 같다.

  • Authorization 헤더에서 apiKey 추출
  • apiKey로 회원(Member) 조회
  • 조회된 회원을 댓글 작성자로 등록

컨트롤러 변경 내용

Authorization 헤더 추가

@Operation(summary = "작성")
public RsData<PostCommentDto> write(
        @PathVariable int postId,
        @Valid @RequestBody PostCommentWriteReqBody reqBody,
        @NotBlank @Size(min = 30, max = 50)
        @RequestHeader("Authorization") String authorization
) {
  • @RequestHeader("Authorization")
    → HTTP 헤더에서 Authorization 값 수신
  • @NotBlank, @Size
    → 인증 정보가 비어있거나 형식이 잘못된 경우 차단

Bearer 토큰에서 apiKey 추출

String apiKey = authorization.replace("Bearer ", "");
  • Postman에서 전달되는 형식
    Authorization: Bearer {apiKey}
  • 실제 필요한 값은 Bearer 접두사를 제거한 apiKey

apiKey로 인증된 회원 조회

Member actor = memberService.findByApiKey(apiKey)
        .orElseThrow(() -> new ServiceException("401-1", "존재하지 않는 apiKey 입니다."));
  • apiKey에 해당하는 회원이 없으면 인증 실패
  • 이 시점에서 인증(Authentication) 이 완료됨

댓글 작성 시 인증된 회원을 작성자로 전달

Post post = postService.findById(postId).get();

PostComment postComment =
        postService.writeComment(actor, post, reqBody.content);
  • actor → 인증된 회원
  • 댓글 엔티티의 작성자(author)로 저장됨
  • 이제 댓글은 항상 로그인한 사용자 기준으로 생성

테스트 코드 변경

테스트에서도 Authorization 헤더 전달

Member actor = memberService.findByUsername("user1").get();
String actorApiKey = actor.getApiKey();

mvc.perform(
        post("/api/v1/posts/%d/comments".formatted(postId))
                .header("Authorization", "Bearer " + actorApiKey)
                .contentType(MediaType.APPLICATION_JSON)
                .content("""
                        {
                          "content": "댓글 내용"
                        }
                        """)
);
  • 실제 API 사용 방식과 동일하게 테스트 구성
  • 테스트 역시 인증 기반 흐름을 따르게 됨

핵심 정리

  • 댓글 작성 시 임의의 사용자를 쓰지 않는다
  • Authorization 헤더의 apiKey로 회원을 식별한다
  • 인증된 회원이 댓글 작성자가 된다
  • API, 서비스, 테스트 코드가 동일한 인증 흐름을 공유한다

이로써 댓글 기능도 완전한 인증 기반 구조로 동작하게 되었다.

0개의 댓글