REST API 설계, GET 방식과 보안이슈

2025. 3. 25. 00:00·SW 공학 & 프로그래밍 언어/Java
728x90
반응형

@ 스프링부트 기반

@ JDK 21


왜? GET은 JSON 처리가 된 않을까?

처음 REST API를 접했을 때, 모든 입출력값은 `JSON`으로 처리할 줄 알았습니다.

그러나, GET 방식에서는 JSON Body를 사용하지 않는게 표준입니다.

GET 요청은 원칙적으로 웹 요청에 본문(body)를 사용하지 않습니다.

  • GET 요청은 QueryString를 통해 데이터를 전달합니다.( ?value=1 )
    본문(body)은 거의 사용하지 않으며, 개부분 클라이언트나 프록시가 GET body를 무시하거나 막습니다.
  • 따라서 JSON 데이터를 통째로 전달하려면 POST/PUT/PATCH 같은 메서드를 사용하게 일반적입니다.

보안? 표현력의 트레이드오프

 

조회인데 POST를 써야 하나?  
처음 REST 설계를 할때 자주 부딪히는 보안 문제로 접하게 됩니다.

 

우선, 기존 REST 원칙은 보면 아래와 같습니다.

메서드 목적 예시
GET 리스스 조회 /users/{id}
POST 리소스 생성 or 복잡한 조회 /users or /users/search
PUT 리소스 전체 수정 /users/{id}
PATCH 리소스 부분 수정 /users/{id}

 

그런데 조회인데 URL에 파라미터 ID를 노출하고 싶지 않다면 어떤 HTTP 메서드를 사용하게 맞을까? 라는 의문이 자연스레 생각납니다.

그런데 현실은 민감한 정보는 노출하고 싶지 않은 경우가 많음으로 POST로 처리하는 경우가 대부분입니다.

 

🔐 GET 방식의 민감한 파라미터를 가진 URL이 노출되는 문제점은?

  1. URL은 브라우저 히스토리, 로그, 서버 접근 기록 등 여러 곳에 기록됩니다.
  2. 프록시 서버나 로드밸런서에 저장될 수 있습니다.
  3. 브라우저 캐시에 남을 수 있습니다.

➡️ 여러 곳에 보안 취약점으로 노출될 상황이 많이 생깁니다.

➡️ REST 원칙에서 벗어나지만 보안상의 이유로 POST 사용은 합리적인 트레이드오프 입니다.


해결방법 및 대안

  1. POST로 전달(위와 같은 방법)
  2. GraphQL 도입
    • POST 기반
    • URL 노출 없음
    • 단점: 도입 난이도 ⬆️, 단순한 경우는 과함
  3. 암호화/토큰화된 파라미터 사용
    • 민감한 데이터를 URL상에서 숨김 가능
    • 단점: 복잡하고 관리 어려움

결론

✅ 프로젝트의 관습에 따라 사용

✅ 실무에서 가장 많이 사용하는 방법: POST 로 전달

728x90
반응형
저작자표시 비영리 (새창열림)

'SW 공학 & 프로그래밍 언어 > Java' 카테고리의 다른 글

[Java] record는 뭐야?  (1) 2025.03.25
REST API에서 요청 DTO를 매번 만들어야 하나?  (0) 2025.03.25
Java 버전별 변천사 ( Java 6 ~ )  (2) 2025.03.15
자바의 특징  (0) 2025.03.13
클래스 초기화 순서  (0) 2025.03.13
'SW 공학 & 프로그래밍 언어/Java' 카테고리의 다른 글
  • [Java] record는 뭐야?
  • REST API에서 요청 DTO를 매번 만들어야 하나?
  • Java 버전별 변천사 ( Java 6 ~ )
  • 자바의 특징
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • IT 지식 (4)
      • CS (65)
        • 알고리즘 & 자료구조 (19)
        • 운영체제 (40)
        • 네트워크 (1)
        • 데이터베이스 (5)
      • 보안 (3)
      • SW 공학 & 프로그래밍 언어 (46)
        • Java (28)
        • 디자인 패턴 (1)
        • 형상관리 (2)
        • 톰캣(WAS) (2)
        • SW 방법론 (3)
        • 스프링부트 (5)
      • 시스템 설계 (4)
        • Docker (2)
      • 자격증 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      apropos
      2차
      1급
      Chage
      su
      REST API
      분석기법
      ADsP
      which
      passwd
      man
      스프링부트
      cifs
      비트연산
      알고리즘
      불변
      /etc/passwd
      whereis
      단반향
      리눅스
      문제해결
      usermod
      DI
      java
      암호설정
      자바
      chmod
      whatis
      DTO
      docker
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    크크크크
    REST API 설계, GET 방식과 보안이슈
    상단으로

    티스토리툴바