• 로그인
  • 장바구니에 상품이 없습니다.

HTTP 요청 & REST API 개념정리

 

0:00 URL과 method

2:53 HTTP요청 날리는 법

5:47 REST API

8:21 좋은 URL 작명법

 

 

 

코드 배운대로 똑같이 싸지르는건 AI가 더 잘하기 때문에 

큰그림이랑 원리같은걸 배워가는게 되게 중요합니다. 

그걸 알아야 AI에게 코딩을 시키든 말든 할거아니닙니까

 

 

 

 

▲ 지금 하는 짓거리를 그림으로 그려보면 이렇게 생겼습니다.

유저가 웹브라우저를 써서 서버에게 이거저거 달라고 요청을 날려서 웹페이지나 데이터를 받아보고 있습니다. 

 

근데 요청할 때 지켜야될 예절이 있는거 아십니까 

아무렇게나 싸가지없이 서버에게 요청을 날리면 

서버는 그 요청을 안들어줍니다.

1. method 2. URL을 정확히 적어서 예절바르게 요청을 보내야 서버가 답례로 데이터를 보내줍니다.

 

URL은 알아서 잘 기입하면 되고

method는 이런 것들이 있는데 이 중에서 마음에 드는거 하나 고르면 됩니다.

GET은 서버에게 데이터를 달라고할 때 

POST는 서버에게 데이터를 보내고싶을 때

UPDATE, PUT은 서버에게 DB 수정요청같은걸 할 때

DELETE는 서버에게 DB 삭제요청같은걸 할 때  

주로 고르면 됩니다.

그래야 서버는 요청을 알아듣고 이제 유저에게 데이터나 웹페이지를 응답해줄 수 있습니다. 

 

 

 

 

@GetMapping("/경로")
@ReponseBody
String hello(){
   return "유저에게 보내줄데이터";
}

자세히 보면 서버기능 만들 때 여러분들이 맘대로 URL과 method를 정해놓을 수 있습니다. 

URL은 /경로 형태로 잘 입력할 수 있고

@GetMapping 이라고 쓰면 서버에서 GET요청을 수신하겠다는 뜻입니다.

Get이라고 적힌 부분은 Post, Put, Delete 이렇게 맘대로 바꿔서 코드짜놓을 수 있습니다.

 

그래서 서버에서 맘대로 URL과 method를 정해둘 수 있는데

유저는 거기 맞춰서 요청날리면 서버기능을 이용가능합니다.

 

 

 

 

 

 

 

요청날리는 방법

 

지금 요청요청 거리고 있는데 이걸 정확한 말로 HTTP 요청이라고 합니다. 

근데 실제로 유저가 HTTP 요청을 어떻게 날리냐고요? 

 

GET요청하는건 쉬운데 

웹브라우저 주소창에다가 URL을 때려박으면 그 URL로 GET요청을 날려줍니다.

엔터치면 요청이 날라가고 서버가 보낸 데이터를 브라우저에서 볼 수있습니다. 

<form> 태그나 ajax 기능을 쓰면 POST, PUT, DELETE 요청도 가능한데 나중에 알아봅시다..

 

 

 

 

 

 

 

서버에 없는 URL과 method로 요청날리면?

 

근데 서버에 기재되지 않은 URL과 method로 요청날리면 어떻게 될까요?

URL 아무렇게나 /aaaa 이렇게 입력해서 접속해보면 에러페이지가 나옵니다.

왜냐면 /aaaa 라는 URL로 오는 요청을 처리하는 기능은 서버에 안만들어놨으니까요. 

그래서 유저는 당연히 서버에 미리 정의해놓은 URL과 method로 요청해야합니다. 

 

 

Q. 유저가 서버파일을 볼 수도 있는것도 아닌데 유저는 어떤 URL과 method로 요청해야하는지 어떻게 알죠?

그건 여러분이 나중에 웹페이지 안에 숨겨놓으면 됩니다.

버튼누르면 특정 URL과 method로 요청되게 만들고

사진누르면 특정 URL과 method로 요청되게 만들고

그러면 됩니다.

웹페이지는 그래서 실은 서버기능을 진열해놓은 진열장같은 역할입니다.

 

그리고 용어 하나 배우자면

URL과 method 기재해서 작성해놓은 서버기능 하나를 API라고 부릅니다.

API는 그냥 "프로그램의 사용법"이라는 뜻인데

우리는 서버 프로그램을 만들고 있고 그거 하나하나가 "서버 사용법" 아닙니까

그래서 이걸 서버 API라고 부릅니다. 

 

 

 

 

@Controller
public class BasicController {

  @GetMapping("/경로")
  @ReponseBody
  String hello(){
    return "유저에게 보내줄데이터";
  }

}

그래서 @GetMapping 부터 작성한거 하나를 API라고 부르면 되겠습니다.

그리고 API들을 담고있는 클래스는 보통 Controller라고 부릅니다.

유저의 요청을 여기저기 API로 안내하는 역할이라 '컨트롤러'라고 부름

그리고 아무 클래스에나 @Controller 넣어두면 API를 만들 수 있다는것도 잘 기억해두시면 되겠습니다.

 

 

 

 

 

 

REST API

 

그리고 개발하다보면 맨날 REST API 아니면 RESTful API 이런 단어들도 가끔 들립니다.

자주 들리니까 이것도 뭔지 알아보도록 합시다.

REST는 어떤 배나온 잡배 아저씨가 졸업논문으로 쓴 '좋은 API 만드는 법'을 의미합니다.

6가지 원칙을 제안했는데 

 

1. Uniform Interface

- 비슷한 기능을 하는 API들은 URL과 method가 유사성, 일관성이 있는게 좋습니다.

- 간결하고 예측가능하게 URL과 method를 만드는게 좋습니다. 

 

2. Client-server 역할 구분 

유저에게 서버역할을 맡기거나 DB를 직접 입출력하게 시키면 안좋습니다. 

 

3. Stateless

셋째로 요청들은 서로 의존성이 있으면 안되고 각각 독립적으로 처리되어야합니다.

 

4. Cacheable

서버가 보내는 자료들은 캐싱이 가능해야합니다.

그러니까 자주 받는 자료들은 브라우저에서 하드에 저장해놓고 

서버에 요청을 날리는게 아니라 하드에서 뽑아쓰는걸 캐싱이라고 합니다. 

 

5. Layered System 

서버기능을 만들 때 레이어를 걸쳐서 코드가 실행되도록 만들어도 된다고 합니다. 

 

6. Code on demand

서버는 실행가능한 코드를 보낼 수 있습니다. 

 

 

그래서 이런 원칙들을 잘 지키면서 서버 API를 만들면 그걸 REST아니면 RESTful API 라고 부릅니다.

그런데 이상한 아저씨 한명의 졸업논문일 뿐이라 근본은 별로 없는 개념이고

저걸 정확히 지키는 서버도 거의 없고 추상적인 포인트도 많아서 권장사항으로만 참고만 해두면 되겠습니다.

 

실은 요즘 와전된 다른 뜻도 있는데

원래 서버에서 .html 웹페이지를 보내는게 아니라 JSON 데이터만 달랑 보낼 수도 있습니다.

그니까 자바로 치면 Map, ArrayList 자료

자바스크립트로 치면 object랑 array 자료만 서버에서 보내주는 겁니다.

그렇게 데이터만 보내는 API들을 REST API라고 부르는 경우도 있습니다.

 

 

Q. 서버에서 html이 아니라 데이터만 보내면 쓸데없는거 아님?

그럴 수 있습니다 서버에서 { product : 바지, price : 7000 } 이런 데이터만 보내봤자 뭐하겠습니까 html로 보여줘야 쓸모있지않겠습니까

근데 서버에서 데이터만 받아온 후에 그걸 가지고 html을 브라우저에서 자바스크립트로 생성하는 방법도 있습니다.

클라이언트 사이드 렌더링이라고 부르는데 그런 식으로도 개발이 가능해서 그렇습니다.

React, Vue 이런 라이브러리가 그걸 쉽게 도와주는 라이브러리입니다.

 

 

 

 

 

 

 

예쁜 URL 만들기

 

URL 이름지을 때도 몇가지 원칙들을 지키면 이해가 쉽고 깔끔한 URL을 만들 수 있는데 

 

- 단어들을 동사보다는 명사 위주로 구성함

- 띄어쓰기는 언더바_대신 대시-기호-사용

- 파일 확장자 쓰지 말기 (.html 이런거)

- 하위항목을 표현하고 싶으면 / 기호를 사용하면 좋습니다. (하위폴더같은 느낌)

 

 

예시를 한번 보도록 합시다. 

facebook.com/bbc/photos

instagram.com/explore/tags/food

▲ 이 URL들은 매우 잘 만든 것 같지 않습니까. 

 

왜냐면 facebook.com/bbc/photos 여기로 GET요청하면 딱봐도 보내줄 데이터가 뭔지 느낌이 오지 않습니까

딱봐도 facebook 계정 중에 bbc 계정의 사진첩을 보여줄 것 같습니다.

실제로 들어가봅시다.

 

instagram.com/explore/tags/food 이건 무슨 데이터를 보내줄 것 같습니까

인스타그램 탐색페이지를 보여주는데 해시태그 #food 달린 사진만 가져다줄 것 같죠?

한 눈에 딱 보이고 깔끔하군요.

 

그래서 이런 식으로 깔끔하게 만드는게 좋으니 앞으로 서버 API에서 URL 작명할 때 한번 쯤 생각해봅시다.

 

 

 

 

 

SEE ALL Add a note
YOU
Add your Comment

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠