본문 바로가기
Back-end/멋쟁이사자처럼

[멋쟁이사자처럼] 1주차 정기세션(HTTP, REST_API)

by 잔디🌿 2024. 3. 12.

    이제 2교시!

     

    HTTP

    http는 인터넷에서 정보를 주고 받는데 사용되는 통신규약(프로토콜)이다. 

    웹브라우저와 웹 서버 사이에 데이터를 주고 받는 방법은 정의한 것이다.

     

    클라이언트 : 정보를 요청하는 사용자. 웹 브라우저가 이 역할을 한다. 사용자가 웹 브라우저를 통해 웹페이지를 요청하면 이 요정이 HTTP메세지로 웹 서버로 전송된다.

     

    서버 : 클라이언트 요청에 응답하여 정보를 제공하는 컴퓨터이다. 웹서버는 클라이언트의 요청을 받아 해당하는 웹 페이지나 데이터를 전송한다.

     

     

    클라이언트는 프론트, 서버는 백이라고 생각해도 된다.

     

    HTTP 메세지는 클라이언트와 서버 사이에 교환되는 데이터이다. http 메세지는 요청과 응답 두 가지가 있다. 요청은 클라이언트 -> 서버이고, 응답은 서버 -> 클라이언트이다.

     

    <요청 Request>

    클라이언트가 서버에게 정보를 요청할 때 보내는 메세지이다. 요청은 http메서드. 요청 대상의 url, 추가적인 정보를 포함한다. 

    예를 들어 웹 브라우저에서 웹페이지를 열면 웹 브라우저는 해당 웹페이지의 URL을 서버에 요청한다.

     

     

     요청 헤더는 위와 같이 생겼다. 

     

    <응답 response>

    서버가 클라이언트에게 정보를 제공할 때 보내는 메세지이다. 응답은 상태코드, 응답의 내용 등으로 구성된다. 상태코드는 성공,실패여부를 나타낸다. 성공한다면 상태코드는 200 OK이다. 

     

    응답헤더

    200번대는 정상적인 요청, 300번대는 리다이섹션 메시지, 400번대는 프런트의 잘못된 요청, 500번대는 서버의 문제이다.

     

    Method의 종류

    - GET : 읽기

    - POST : 쓰기

    - PUT : 수정

    - DELETE : 삭제

     

    이제까지는 헤더에 대해서 알아봤고, 이제부터 body에 들어가는 JSON 대해 알아보겠다!

    JSON은 데이터 교환 형식의 일종이다.

    JSON은 문자열이다. JSON안에는 자바스크립트의 기본 데이터타입과 다른 객체를 포함할 수 있다. 

    JSON은 key-value형태로, Map형태로 구성되어있다. 

     

    이름 : 김민지
    나이 : 23
    주소지 : 대전
    듣는 수업 : 데이터통신, 데이터베이스, 운영체제

    위와 같은 데이터를 JSON화 하면

    {
      "name" : "김민지",
      "age"  : 23,
      "address" : "대전",
      "classes" : [
              "데이터통신",
              "데이터베이스",
              "운영체제"
       ]
     }

    이렇게 된다. []를 이용해서 배열을 표현하고, {}를 이용해서 객체 단위를 나눈다.

     

    Spring에 적용하기

     

    요청

    회원가입을 위해서는 데이터 추가가 필요하다. 추가의 http 메서드는 POST가 적당하다.

    그래서 spring에서 제공하는 @PostMapping을 사용하여 URI와 함께 적용한다.

     

    @RequestBody는 요청메세지의 body부분에서 가져오는 것이다.

    해당 키 값에 대한 값을 가져올수도 있고, body의 내용들을 class객체형태로 가져올수도 있다.

    이를 연결하면 위와 같다.

     

    조회

    사용자의 정보를 읽어오는 것이기 때문에 GET이 적절하다.

    여기서 @PathVariable은 host의 url에서 {memberid}를 가져오는 어노테이션이다.

     

    이를 http메세지에 연결해보면

     

    이렇게 된다.

     

    수정

     

    수정의 HTTP 메서드는 PUT이다.

    @PutMapping을 이용하여 member의 정보를 수정한다.

     

    이를 연결하면 위와 같이 된다.

     

     

    삭제

    삭제하는 http 메서드는 delete이다. 

     

     

    @RequestBody : Body에 담겨져오는 JSON 데이터 가져오기

    @PathVariable : URI에서 값을 가져온다.

    @RequestParam : URI 뒤에 파라미터값으로 전달되는 데이터를 가져온다.(ex ) information?memberld=멋쟁이사자)

    @ModelAttribute : 여러개의 파라미터를 클래스로 만들어서 가져온다. JSON데이터나 파라미터 데이터를 가져올 수 있다.

     

    Context-Type

    전송되는 데이터의 타입을 나타내는 header의 정보 중 하나이다.

     

    일반 텍스트  : text/plain

    html의 form : key = value&key = value

    JSON 데이터 : {key : value}

    업로드 한 파일 : multipart/form-data

     

     

     

     

    REST란?

    http uri를 통해 자원을 명시하는 것

     

    http Method : 해당 자원(uri)에 대한 CRUD option을 적용하는 것

     

    CRUD란?

    데이터 처리 기능을 말한다.

    C : create 생성

    R : read 읽기

    U : update 수정

    D : delete 삭제

     

    statefull과 stateless

     

    statefull은 서버에서 이전 요청에 대한 상태를 기억하고 있어야한다. 

    stateless는 서버에서 이전 요청에 대한 상태를 기억하지 않고 주어진 요청에 대해서만 응답한다.

     

    stateless는 서버가 바뀌어도 문제없이 서비스를 수행할 수 있다.

    단점은 클라이언트가 하고자하는 최종목적을 위해 지나가는 과정마다 전달해야하는 내용이 많아진다는 것이다.

    http는 stateless를 기본적으로 가지고있다.

     

    api의 uri를 정하는 방법

     

    uri는 리소스만 식별한다. 리소스는 명사이고 행위는 동사이다. 이 때 행위는 http method로 사용한다. 

     

    회원목록 조회 uri : /members

    회원 등록 uri : /members/{id}

     

    위에 method를 붙이면

     

    회원목록 조회  : GET / HTTP/ 1.1 /members

    회원 등록 : POST/ HTTP/ 1.1 /members/{id}

     

    끝!

     

    정리하는데 정말 힘들고 오래걸렸지만 막상 해보니 훨씬 이해가 잘 된다.

    이제 과제하러 가야겠다.......

    안녕!