클라이언트 / 서버 통신

2021. 4. 30. 02:35CodeStates/TIL_IM

728x90
반응형

Client Server Architecture (= 2 Tier Architecture) 

  - 상품 정보와 같이 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것

코드스테이츠 1-1

 

 

클라이언트는 손님, 서버는 서빙하는 사람으로 생각해보자

리소스(메뉴)에 접근하려고 하는 손님이 리소스를 갖고 있는 점원에게 물품을 요청해야 한다.

요청에 따라 점원은 리소스를 담아 응답한다.

코드스테이츠 1-2

 

이처럼 클라이어트와 서버는 요청과 응답을 주고 받는 관계

요청이 선행되고 응답이 온다

요청이 없다면? -> 응답도 없지

 

그런데 보통 서버는 리소스를 전달해주기만 할 뿐..

저장하는 공간은 따로 두는 것이 보통이다

리소스 저장 공간을 데이터 베이스라고 한다.

 

데이터 베이스가 추가되면 3 티어 아키텍처라고 부른다.

 

 

클라이언트와 서버의 종류

코드스테이츠 1-3

 

--------------------------------

 

클라이언트와 서버의 통신

 

클라이언트-서버 아키텐처에서는 서버 마음대로 클라이언트에 리소스를 전달하지 않는다.

 

 

프로토콜(Protocol)

  - 통신규약, 즉 약속

  - 클라이언트의 요청이 외계어와 알수 없는 단어들로 요청하면 안되기 때문에

  - 지켜야 하는 약속이 몇 가지 존재한다

 

 

웹 애플리케이션 프로토콜 : HTTP

코드스테이츠 2 - 1

클라이언트와 서버가 서로 HTTP라는 프로토콜을 이용해 서로 대화를 나눈다.

  • HTTP 1.1
    •   기본적으로 커넥션당 하나의 요청과 응답만 처리
    •   여러 요청 한 번에 전송 불가, 응답 또한 불가
    •   예를 들어 link, img, script 태그 등에 의한 소스 요청이 개별적으로 전송되고 응답 또한 개별적 전송된다.
    •   이처럼 리소스의 동시 전송기 불가능한 구조, 요청할 리소스의 개수에 비례해 응답 시간도 증가하는 단점이 있다.

추가 적인 예로

  - 우편을 보낼 때 수신자를 표히하지 않으면 이 전송 요청은 갈길을 잃고 말 것.

  - 그리고 수신자를 적어도 우표를 안붙이면 마찬가리로 반송된다. (그런데 요즘 우표 안붙인다..ㅋ 다른거 붙이더라..)

  - 이처럼 우편 전송 이라는 행동을 하기 위해 반드시 지켜야 하는 규약이 있다.

 

프로토콜은 각자의 프로토콜마다 지켜야 하는 규약이 존재함.

 

 

--------------------------------

API

 

코드스테이츠 3 - 1

컴퓨터에게 요청할 때에는 정확한 주문 방법을 따라 요청해야 한다.

그런데 서버가 어떻게 구성되어 있는지 모른다면 클라이언트는 어떻게 자원을 확인할 수 있지?

정답은 API 

 

서버는 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스(interface)를 제공해줘야 한다.

이것이 API

 

*** 인터페이스(interface) = 의사소통이 가능하도록 만들어진 접점

 

코드스테이츠 3 - 2

서버가 리소스 전달을 위해 API를 구축해 놓아야 클라이언트가 이를 활용할 수 있다.

보통 인터넷에 있는 데이터를 활용할 때에는 HTTP라는 프로토콜을 사용하며,

주소(URL, URI)를 통해 접근할 수 있다.

 

예로 스타벅스 API 서버가 제공하는 적절한 URL 디자인 예제를 보자

코드스테이츠 3 - 3

파라미터를 사용하기 위해 ? 와 & 기로를 사용한다.

 

URL 디자인은 비교적 단순하나 "메소드"라는 개념이 등장한다.

HTTP 요청에는 리소스를 그저 달라고 요청 (GET)

사용관리 API에서는 사용자를 추가해달라고 요청 (CREATE)

지워달라고 요청 (DELETE)

 

HTTP메소드는 CRUD 행동에 따라 목적에 맞게 써야 한다.

 

다섯가지 메소드를 기억하자

 

GET (조회)

POST (추가)

PUT (갱신)

PATCH (부분 변경)

DELETE (삭제)

 

 

 

참고

developer.mozilla.org/ko/docs/Web/HTTP/Methods

developer.mozilla.org/ko/docs/Web/HTTP/Messages

developer.mozilla.org/ko/docs/Web/HTTP/Status

728x90
반응형