나만의 개발 로그 | 고민 로그
REST API에서 Path Variable과 Query Parameter의 차이 + JWT 기반 인증 전략 (Access Token / Refresh Token) 본문
웹 개발
REST API에서 Path Variable과 Query Parameter의 차이 + JWT 기반 인증 전략 (Access Token / Refresh Token)
ultramancode 2023. 1. 12. 01:24
✅ Path Variable vs Query Parameter
1. Path Variable
- 고유 리소스를 식별할 때 사용
- API 구조상 리소스에 접근하는 명확한 경로로 사용된다.
✅ 예시
GET /users/42 → ID가 42번인 유저 조회
GET /posts/123 → ID가 123번인 게시글 조회
📌 이 값은 보통 DB의 PK(ID)나 고유 식별자(UUID) 등과 1:1 대응된다.
2. Query Parameter
- 정렬, 필터링, 페이징 등 옵션을 전달할 때 사용
- 리소스를 조작하거나 세부 조건을 붙일 때 적합하다.
✅ 예시
GET /users?age=30&gender=male → 30세 남성 유저 필터링
GET /posts?page=2&size=10 → 게시글 목록 페이징 처리
GET /logs?level=ERROR&from=2024-01-01
📌 Query Parameter는 유연성을 위해 선택적이고, 동일 리소스 범위 내에서 세부 조건만 바뀌는 경우에 적합하다.
✨ 정리
항목 | Path Variable | Query Parameter |
용도 | 리소스 식별 | 정렬/검색/필터링/페이징 등 |
필수 여부 | 대부분 필수 | 선택적 |
예시 | /users/1 | /users?role=admin |
🔐 JWT 기반 인증 구조 (Access Token / Refresh Token)
현대 웹/모바일 서비스에서 인증(Authentication)은 성능과 보안 모두를 만족시켜야 한다.
이때 많이 사용되는 구조가 Access Token + Refresh Token 방식이다.
✅ Access Token
- 로그인 시 발급되는 짧은 유효기간의 토큰
- API 요청 시 헤더에 담아 사용
→ Authorization: Bearer {accessToken}
- JWT(Json Web Token) 형식인 경우, 자체적으로 유저 정보와 서명이 포함되어 있어
→ 서버에서 DB 조회 없이도 토큰 자체로 검증이 가능하다.
📌 장점: 빠른 처리, 무상태(stateless) 인증
📌 단점: 탈취 시 위험, 중간 무효화 어려움
✅ Refresh Token
- Access Token이 만료되었을 때 다시 발급받기 위한 토큰
- 서버 또는 Redis 등에서 관리되어야 함 (탈취 방지 목적)
⛔ 문제점
만약 Refresh Token 없이 Access Token만 사용한다면?
→ 사용자는 1시간 뒤에 갑자기 로그인이 풀리게 되고, 앱 UX가 최악이 된다.
🔁 Refresh Token Rotation 전략
보안을 강화하려면 Refresh Token도 매번 재발급하는 구조를 사용하는 것이 좋다.
[기본 흐름]
1. 로그인 → Access Token + Refresh Token 발급
2. Access Token 만료 → Refresh Token으로 재발급 요청
3. 이때 새로운 Refresh Token도 함께 재발급 (→ 기존 토큰은 무효화)
📌 자주 사용하는 앱이라면 유저가 로그인을 거의 인식하지 못하고 지속적으로 인증 상태를 유지할 수 있다.
📦 유효기간 추천
토큰 유형 | 예시 유효기간 | 비고 |
Access Token | 15분 ~ 1시간 | 짧게 설정 (탈취 대비) |
Refresh Token | 1주 ~ 2주 | 길게 설정 (지속 로그인) |
✅ 실전 팁: 토큰 보안 관련 추가 고려사항
- ✅ Refresh Token은 반드시 DB or Redis에서 관리하고, 탈취 시 즉시 무효화 가능해야 함
- ✅ HTTPS는 필수. (Access/Refresh 모두 외부로 유출되지 않도록 클라이언트와 서버 간 데이터를 암호화하여 전송)
- ✅ HttpOnly, Secure 쿠키 옵션을 활용해 보안, XSS 방지 강화
- Secure 쿠키 : HTTPS로만 쿠키 전송
- HttpOnly 쿠키 : 자바스크립트에서 쿠키 접근 불가(document.cookie) -> XSS 공격 방지 - ✅ 로그아웃할 경우, Refresh Token도 반드시 삭제 처리
🧠 마무리 정리
- 리소스 식별 → Path Variable
- 조건/옵션 전달 → Query Parameter
- 인증 처리 → JWT Access Token + Refresh Token
- UX 개선 + 보안 강화 → Refresh Token Rotation 전략 추천
'웹 개발' 카테고리의 다른 글
Postman 테스트? NO! 테스트 코드를 활용하자! (0) | 2023.02.17 |
---|---|
Lombok @NoArgsConstructor(force = true) (1) | 2023.02.16 |
Lombok + Jackson 사용 시 boolean 필드 네이밍 주의(isIsActive...!?) (0) | 2023.02.15 |
왜 JPA에서 @DynamicInsert를 쓰면 Statement 캐싱 효율이 떨어질까? (0) | 2023.02.10 |
배열 <깊은 복사, 얕은 복사> (0) | 2023.01.13 |
Comments