본문 바로가기

Backend/Web

[Web] about API

반응형

웹에 대한 기초가 없이 개발을 시작하다 보니 REST API가 무엇인가 하는 의문이 남아있었다.

어떻게 만드는지는 알지만 왜 가 빠져 있는 상태이다. 그래서 약간의 짬이 생겼을 때 공부하려고 한다.

 

Spring Controller에서 구현할때 API를 RestFul한 방식으로 구현한다고 한다. 그리고 우리는 Mapping하는 값으로 URL을 지정한다. 그래서 나타난 질문

 

API와 Domain의 차이가 뭘까? 거기에 URL은 무엇을 의미하는 걸까?

예시는 다음과 같다.

예) https://www.example.com/path/to/resource?query=example#section

      127.0.0.1:8080/path/to/resource?query=example#section

- Domain : IP/Port접근인 127.0.0.1:8080을 사용하는 대신 도메인 명인 example.com으로 접근 가능 하게 하는 것

- API : 통신을 위한 함수 및 프로토콜의 내용(요청 URI, 응답코드, 응답결과내용 등), 특정 URI (엔드포인트) 에 연결되어있음

- URI : 인터넷에 있는 자원을 식별하거나 위치를 지정하기 위한 문자열, URI는 자원의 이름(URN: Uniform Resource Name) 또는 위치(URL: Uniform Resource Locator)를 포함할 수 있음

  • https: 스킴(프로토콜)
  • www.example.com: 호스트(도메인 이름)
  • /path/to/resource: 경로
  • ?query=example: 쿼리 문자열
  • #section: 프래그먼트

- URL : 자원의 접근 경로( https://www.example.com/path/to/resource )

 

 

각 요소들의 관계는 다음과 같다.

 

  • URL과 URI: URI가 URL보다 상위 개념이다. 모든 URL은 URI가 될 수 있지만, 모든 URI는 URL이라고 단정지을 수 없다.
  • 도메인과 URL/URI: 도메인은 URL이나 URI의 호스트 부분을 구성한다. URL은 특정 도메인에서 특정 자원에 접근하기 위한 전체 주소를 제공한다.
  • URL/URI와 API: 웹 API는 URI를 통해 액세스된다. 각 API 엔드포인트는 고유한 URI를 가지며, 클라이언트는 이 URI를 통해 API 요청을 보낸다.
  • 도메인과 API: API가 제공되는 서버의 도메인은 API 요청을 보내기 위한 기본 주소를 제공하며, URI의 일부로 사용된다.

 

 

API키란 무엇일까?

API키는 API에 접근하는 사용자를 인증 및 식별을 하고 접근제어하는데 사용하는 고유의 문자열이라고 한다.

보통 헤더에 Authorization: Bearer로 전달하거나 URL 파라미터에 포함하는 방식으로 서버에 인증한다고 한다.

 

그래서 이어지는 질문은 CSRF나 JWT같은 토큰들도 사용자을 인증하고 보안을 위해 사용되는데 해당 토큰들이 API키라고 할수있을까? 하는 부분이었다. JWT는 API키 보다 보안성 및 인증용이가 쉽기 때문에 API키의 일종으로 사용이 가능하다고 한다.

하지만 CSRF 토큰은 요청의 출처가 명확한지에 대한 검증을 수행하기 위해 사용한다고 한다.

예를 들어 비교하면

CSRF 토큰은 "이 시설에서 발급 한 Access카드"인지를 확인하는 토큰

API키는 "이 시설에서 일하는 뫄뫄"라는 신분증인지를 확인하는 키

JWT는 "이 시설에 등록이 되어있는 Access카드"인지를 확인하는 토큰

라고 이해했다.

 

 

반응형

'Backend > Web' 카테고리의 다른 글

[Security] Blind SQL Injection  (0) 2024.08.06
[CSS] 하위 요소 적용 및 단어단위로 줄바꾸기  (0) 2024.08.01
[보안 취약점] PRG 패턴 (Post-Redirect-Get Pattern)  (0) 2024.07.04
[CSRF]About CSRF  (0) 2024.04.04
[HTTP] 상태 코드  (0) 2024.03.18