로그인 이후 인증을 유지하기 위해 프론트엔드에 아이디와 비밀번호를 저장하는 것은 적절하지 않다.
특히 비밀번호는 매우 민감한 정보이기 때문에 가능한 한 클라이언트에서 계속 가지고 있지 않는 것이 좋다.
REST API는 기본적으로 무상태성(Stateless)을 지향한다.
즉, 서버가 클라이언트의 상태를 계속 저장하고 관리하기보다는 각 요청에 필요한 인증 정보를 클라이언트가 전달하는 방식을 사용한다.
따라서 다음과 같은 방식으로 인증 정보를 전달할 수 있다.
대신 아이디와 비밀번호를 직접 전달하지 않고, 인증을 위한 별도의 무작위 값인 API Key를 사용하는 방식으로 개선할 수 있다.
2. API Key 발급
회원이 생성될 때 UUID를 이용해 API Key를 생성한다.
@Entity
@Getter
@NoArgsConstructor
public class Member extends BaseEntity {
@Column(unique = true)
private String username;
private String password;
private String nickname;
@Column(unique = true)
private String apiKey;
public Member(String username, String password, String nickname) {
this.username = username;
this.password = password;
this.nickname = nickname;
this.apiKey = UUID.randomUUID().toString();
}
}
여기서 apiKey는 아이디나 비밀번호 대신 사용자를 식별하고 인증하기 위한 값이다.
UUID.randomUUID()를 이용해 회원마다 서로 다른 무작위 값을 생성한다.
또한 @Column(unique = true)를 설정해 같은 API Key가 중복해서 저장되지 않도록 한다.
회원 생성
↓
UUID 생성
↓
API Key 발급
↓
Member에 저장
3. API 요청에 API Key 전달하기
프론트엔드에서는 아이디와 비밀번호 대신 발급받은 API Key를 API 요청에 포함할 수 있다.
@PostMapping
public void write(
@RequestParam String apiKey
) {
Member member = memberService.findByApiKey(apiKey)
.orElseThrow(() ->
new ServiceException(
"401-1",
"API Key가 유효하지 않습니다."
)
);
// 인증된 회원의 요청 처리
}
요청이 들어오면 apiKey를 이용해 회원을 조회한다.
API Key가 존재하지 않거나 유효하지 않다면 401 인증 오류를 발생시킨다.
4. API Key 방식의 핵심
API Key 방식에서는 아이디와 비밀번호 자체를 API 요청의 인증 정보로 사용하지 않고, 별도로 발급한 무작위 값을 사용한다.
| 구분 | ID / PW | API Key |
| 용도 | 로그인 정보 | API 인증 |
| 비밀번호 포함 | O | X |
| 값의 특징 | 사용자가 직접 설정 | 무작위 값 생성 |
| 회원 식별 | ID 사용 | API Key 사용 |
| 중복 방지 | ID에 적용 | unique 적용 |
다만 API Key도 인증에 사용되는 중요한 인증 정보이므로 안전하게 관리해야 한다.
'BackEnd > Spring' 카테고리의 다른 글
| [Postman] API Key 변수 관리와 Authorization Header 활용하기 (0) | 2026.09.02 |
|---|---|
| [Spring] 로그인 기능 구현하기 (0) | 2026.09.02 |
| [Spring] 예외 처리 | ServiceException과 전역 예외 처리 (0) | 2026.09.01 |
| Spring Boot 프로젝트 Railway 배포하기 + 배포 과정에서 발생한 오류 해결 (0) | 2026.08.27 |
| [Spring] CORS 설정 방법 | REST API와 프론트엔드 연결하기 (0) | 2026.08.19 |
댓글