37강에서는 글 쓰기 요청에 인증 정보가 없을 때
서버가 올바르게 401 Unauthorized를 반환하는지 검증하는
테스트 케이스를 추가한다.
겉으로 보면 단순한 테스트 하나 추가처럼 보이지만,
이 강의의 핵심은 “무엇을 꼼꼼하게 테스트해야 하는가”에 있다.
이번 커밋에서 변경된 내용은 두 가지다.
if (headerAuthorization == null || headerAuthorization.isBlank())
throw new ServiceException("401-1", "로그인 후 이용해주세요.");
👉 사용자 관점에서 더 자연스러운 메시지로 개선
@Test
@DisplayName("글 쓰기, without authorization header")
void t10() throws Exception {
ResultActions resultActions = mvc
.perform(
post("/api/v1/posts")
.contentType(MediaType.APPLICATION_JSON)
.content("""
{
"title": "제목",
"content": "내용"
}
""")
)
.andDo(print());
resultActions
.andExpect(handler().handlerType(ApiV1PostController.class))
.andExpect(handler().methodName("write"))
.andExpect(status().isUnauthorized())
.andExpect(jsonPath("$.resultCode").value("401-1"))
.andExpect(jsonPath("$.msg").value("로그인 후 이용해주세요."));
}
강의에서 강조한 포인트는 이거다.
“권한 체크는 반드시 꼼꼼하게 테스트해야 한다.”
이유는 명확하다.
@Valid
@NotBlank
@Size(min = 2, max = 100)
👉 테스트 우선순위가 상대적으로 낮다
Member actor = rq.getActor();
post.checkActorCanDelete(actor);
👉 테스트를 안 하면 위험하다
이 테스트는 단순히 응답을 확인하는 게 아니다.
이걸 보장한다 👇
즉,
“로그인하지 않은 사용자는 글을 쓸 수 없다”
라는 정책을 코드가 아니라 테스트로 고정한 것이다.
/api/v1/posts POST 요청rq.getActor() 호출401-1 예외 발생👉 보안상 매우 바람직한 흐름
글 쓰기는 대표적인 인증 필수 기능이다.
👉 그래서 글 쓰기 요청을 기준으로 테스트를 추가한 것이다.
이 패턴은 이후에도 그대로 확장된다.
37강의 핵심 메시지는 이 문장이다.
“권한 체크는 개발자가 직접 만드는 로직이기 때문에
반드시 테스트로 안전망을 만들어야 한다.”
👉 단순 기능 구현이 아니라
보안과 책임 분리를 단계적으로 강화하는 흐름이다.
이 강의는
“보안은 코드로만 만드는 게 아니라 테스트로 완성된다”는 걸 알려준다.