Day 61 - AuthFlow

haxxru log;·2026년 6월 1일
post-thumbnail

이 글은 2026년 06월 01일 작성된 글입니다.

오늘은 REST API 인증(Authentication)과 인가(Authorization)를 구현하며 API Key 기반 인증 구조를 적용했다. 또한 회원가입, 로그인 API를 구현하고 Postman을 활용한 인증 테스트 방법을 학습했다.


1. DTO 변경 시 테스트도 함께 수정

DTO 구조가 변경되면 API 응답 형식도 변경되므로 테스트 코드 역시 함께 수정해야 한다.

핵심

  • DTO 변경 시 테스트 코드도 수정
  • 응답 JSON 검증 유지
  • 테스트와 실제 API 스펙 동기화

2. username/password 인증 방식

초기에는 글 작성 시 username과 password를 요청 파라미터로 전달하여 사용자를 식별했다.

{
  "username": "user1",
  "password": "1234"
}

문제점

  • 매 요청마다 인증정보 전송
  • 클라이언트에 비밀번호 저장 필요
  • 보안상 위험
  • 요청 데이터가 불필요하게 커짐

3. ServiceException과 전역 예외 처리

오류 응답 형식을 통일하기 위해 ServiceException을 도입하고 GlobalExceptionHandler에서 처리했다.

핵심

  • 예외 응답 형식 통일
  • 중복 코드 제거
  • 유지보수성 향상

4. API Key 인증 방식 도입

username/password 대신 apiKey를 사용하도록 구조를 변경했다.

@Column(unique = true)
private String apiKey;

핵심

  • 회원마다 고유 API Key 발급
  • 비밀번호 대신 API Key 사용
  • 클라이언트에는 API Key만 저장

5. API Key 방식의 장점

핵심

  • 비밀번호 노출 위험 감소
  • 사용자 비밀번호 저장 불필요
  • 인증정보 관리 단순화
  • 피해 범위 축소 가능

6. 회원가입 API 구현

회원가입 기능을 테스트 코드와 함께 구현했다.

POST /api/v1/members

핵심

  • 회원 생성
  • username 중복 검사
  • 서비스 계층으로 검증 로직 이동

7. 로그인 API 구현

로그인 성공 시 API Key를 반환하도록 구현했다.

POST /api/v1/members/login

응답 예시

{
  "resultCode": "200-1",
  "msg": "유저1님 환영합니다.",
  "data": {
    "apiKey": "..."
  }
}

핵심

  • 로그인 성공 시 API Key 반환
  • 이후 요청에서 API Key 사용

8. Postman API Key 자동 저장

로그인 성공 후 API Key를 자동으로 컬렉션 변수에 저장하도록 설정했다.

const apiKey = pm.response.json()?.data?.apiKey;

if (apiKey) {
    pm.collectionVariables.set("apiKey", apiKey);
}

핵심

  • 로그인 후 자동 갱신
  • 수동 복사 제거
  • 테스트 편의성 향상

9. Authorization 헤더 사용

인증정보를 요청 파라미터가 아닌 HTTP 헤더에 저장하도록 변경했다.

Authorization: Bearer {apiKey}

핵심

  • REST API 표준 방식
  • 인증정보와 요청 데이터 분리
  • 보안성 향상

10. @RequestHeader 활용

@RequestHeader("Authorization")
String authorization

핵심

  • HTTP 헤더 값 주입
  • Authorization 헤더 처리
  • Bearer Token 인증 구현

11. 인증정보 상속 구조(Postman)

Postman에서는 인증정보를 상위 레벨에서 설정할 수 있다.

핵심

  • Collection → Folder → Request 순서 상속
  • 중복 설정 제거
  • 유지보수 편리

12. 인증(Authentication)과 인가(Authorization)

인증

사용자가 누구인지 확인하는 과정

예시

  • 로그인
  • API Key 검증
  • 토큰 검증

인가

인증된 사용자의 권한을 확인하는 과정

예시

  • 본인 글만 수정 가능
  • 본인 댓글만 삭제 가능

13. 글 수정 권한 체크

글 작성자만 수정 가능하도록 인가 로직을 추가했다.

핵심

  • API Key 인증
  • 작성자 검증
  • 권한 없는 접근 차단

14. 글 삭제 권한 체크

글 작성자만 삭제 가능하도록 수정했다.

핵심

  • 작성자 검증
  • 권한 체크
  • 테스트 코드 수정

15. 댓글 API 인증 적용

댓글 등록 역시 API Key 인증 기반으로 변경했다.

핵심

  • 댓글 작성 인증
  • API Key 기반 사용자 식별
  • 테스트 코드 수정

✅ 정리

  • username/password 방식 대신 API Key 인증 구조를 도입했다.
  • ServiceException과 GlobalExceptionHandler로 예외 응답을 통일했다.
  • 회원가입과 로그인 API를 구현하고 API Key를 발급하도록 만들었다.
  • Authorization 헤더를 활용하여 인증정보를 표준 방식으로 전달하도록 변경했다.
  • Postman 컬렉션 변수를 활용해 API Key를 자동 관리할 수 있게 만들었다.
  • 글과 댓글 수정·삭제 시 작성자 권한 검사를 통해 인가 기능을 구현했다.

0개의 댓글