REST 무엇인가✨

YaR Lab·2024년 7월 5일
0

TIL✨

목록 보기
113/136
post-thumbnail

24.07.05

today 😉

[API란 무었인가❓]
개발공부를 시작한 초기에는 API라는 용어가 너무 중구난방하게 사용돼서 정의하기 어려웠지만, 어느정도의 사용되는 곳의 공통점은 API를 "외부 로직에 접근, 호출하기 위한 인터페이스"를 얘기할 때 사용되는 용어 같다.

[REST API가 뭘까❓]
REST는 Representational State Transfer의 약어이다.
API 개발을 할 때, 항상 "내가 만든 API가 REST API인가?"라는 생각이 들었는데, 찾아본 결과 HTTP 규약을 잘 지켜 만든 API를 REST API라고 하는 것 같다.

REST를 지키지 위한 노력 [참조 블로그, 참조 사이트]

  1. 동사는 사용 지양 ⇒ 행동은 method로 나타낸다
  2. 복수, 단수 통일 ⇒ 프론트가 헷갈리니까!
  3. _ 사용 금지 ⇒ 대신 하이픈- 사용
  4. 소문자 사용 ⇒ 의미를 알아보기 쉽게 하기 위해
  5. 마지막에 슬래시를 포함하지 않는다 ⇒ 후행 슬래시는 의미가 없다
  6. URI 사이에 연관 관계를 있는 경우 /리소스/고유ID/관계있는리소스 순으로 작성
    ex) users/profile/{userId} (X) user/{userId}/profile (O)

[사용자가 입력한 비밀번호와 DB에 암호화된 비밀번호를 어떻게 비교할까❓]
단순히, DB에 저장할 때 사용한 암호화 알고리즘을 똑같이 적용하면 된다고 생각했다.

그렇다면 요즘 사용자가 비밀번호를 찾을 때, 왜 똑같이 복호화해서 비밀번호를 보여주는 것이 아닌데 무조건 비밀번호 변경을 요청하는 것일까?

그 이유는 요즘에는 비밀번호에 복호화가 안되는 알고리즘을 사용하기 때문에 이미 암호화된 비밀번호를 복호화 할 수 없기 때문이다.

[비밀번호를 변경하는 요청에서 PUT, PATCH 중 뭘 쓸까❓]
"PUT과 PATCH 중 누가 더 빠른가?"를 생각하기 보다 HTTP Method는 무엇을 의미하느냐를 생각하는 것이 중요한 것 같다.

GET 요청을 보내고 POST 처럼 일하는 API로 구현할 수도 있고, POST 요청을 보내고 GET 처럼 일하게 구현 할 수도 있다.

이처럼 HTTP Method는 클라이언트와 서버간 통신을 표준화 하는 기준, 규약이면서 통신을 명확하고 일관성있게 하는 역활일 뿐이지 무조건 지켜야하는 것이 아니다.

따라서 무슨 HTTP Method를 써야하기 보단 DB에 저장된 비밀번호 Column을 수정할 때, 그 Field값만 수정하는것이 빠를지, 전체 Row를 Update하는 것이 빠를지를 생각해보는 것이 맞는 것 같다.

Column이 별로없는 Table에서나 많은 Table에서나 특정 Column을 찾는데 드는 비용이 있기 때문에 비밀번호테이블을 따로 분리하여 PUT 메서드 로직으로 전체 Row를 Update하는 것이 가장 빠를 것 같다는 생각이 들었다.

[Column이 많은 Table에 SELECT를 했을때 정말 성능차이 날까❓]
단순히 100개의 Column이 있는 곳에서 필요한 2개의 Column을 SELECT한다고 생각하면 100개 중의 2개를 찾아야하는 비용이 발생한다고 생각한다면 성능차이가 나는 것이 맞는 것 같다.
SELECT문이 메모리 관점에서 Row 전체가 메모리에 올라가는 가는지 열 기반으로 올라가는지는 DB자체가 행기반 저장소인지 행기반 저장소인지의 차이가 있는 것 같다.
DB가 메모리에 어떻게 올라가고 내려가는지에 대한 공부가 필요하다고 느껴졌다.

[URI vs URL vs URN❓]

URI

인터넷 상의 자원을 식별하는 데 사용되는 문자열의 집합이다. URL과 URN을 포함한다.
http://www.naver.com/index.html?page=1232950&id=776

URL

자원을 어떻게 접근할 수 있는지에 대한 정보를 제공한다. 자원의 위치와 자원에 접근하는 방법을 모두 포함한다.
http://www.naver.com/index.html

URN

자원의 이름을 식별하는 집합이다. 자원의 위치와 무관하게 자원을 유일하게 식별할 수 있는 이름을 제공한다.
자원 판별 고유 식별자 이름

1️⃣ 인터넷 vs 웹

인터넷

지구 전체를 연결한 연결망

우리 모두를 위한 정보 공유의 장

2️⃣ HTTP request

Start line(Request line)

  • HTTP method
  • request target(url)
  • HTTP version

Headers

  • Host(도메인, 포트넘버)
  • Content-Type
  • Authorization

Body

3️⃣ HTTP reponse

Status line

  • HTTP version
  • status code
  • status text

Headers

  • Content-Type
  • set-cookie

Body

4️⃣ HTTP method

HTTP methodCRUD
POSTCREATE
GETREAD
PUTUPDATE
PATCHUPDATE
DELETEDELETE

5️⃣ API 명세서

  • ex) 물건 등록
항목내용
MethodPOST
URI/products
Status code성공 201 / 실패 400
Request Body{
 "name" : "상품명",
 "price" : 가격
}
Response Body(프론트와 상의해서 결정)
  • URI에 -s 를 대부분 붙임

📓MDN: HTTP

0개의 댓글