[Client, Server, API]

G·2021년 5월 8일
0
post-thumbnail

클라이언트?? 서버??

클라이언트는 영어 뜻 자체로 보면 고객을 의미한다.
왜 client라고 지었을까?? 내 생각에는 서버가 제공하는 서비스를 클라이언트가 사용(소비??)하기 때문에 저렇게 지은것 같다.

일상에서 우리가 사용하는 쇼핑몰 어플을 예로 들자.
어플의 내용을 보면 계속해서 새로운 물품들로 바뀌고 업데이트가 실시간으로 되는 걸 볼 수 있다. 또 인터넷이 끊기게되면 우리는 사용할 수가 없게 된다.
왜냐하면 모든 상품정보는 서버로부터 받아오기 때문이다.

뭐 그럼 만약에 앱과 연결된 서버가 없다고 생각하면, 우리는 새로운 상품정보를 계속해서 업데이트를 시켜주기위해 사용하는 앱 자체를 계속해서 업데이트 시켜줘야한다. 엄청 귀찮고 비효율적인 방법이다.

결론적으로 쇼핑몰앱의 상품정보(리소스)를 제공하는곳과 이 리소스를 가져다가 사용하는 앱으로 나뉘어져야 한다.
이를 2티어 아키텍처라고 부른다.


즉, 리소스를 사용하는곳이 클라이언트 리소스를 제공하는곳이 서버이다.
클라이언트와 서버는 위 그림처럼 서로 요청과 응답을 주고받는 관계이고,
클라이언트-서버 아키텍처에서는 요청이 선행되고 후에 응답이 온다.

서버는 제공하는 역할을 하는데 그럼 데이터의 저장은 어디서 하는걸까??
아직은 배우지않았지만, 리소스를 저장하는 공간이 바로 데이터베이스라 한다. 하나의 큰 창고라고 생각하면 될 것 같다.


위 그림을 3티어 아키텍처라 한다.

클라이언트와 서버를 종류별로 좀 보자면,

클라이언트 : 웹사이트, 웹앱, ios나 안드로이드 같은 스마트폰 플랫폼
서버 : 파일제공앱, 메일을 주고받는 앱 등..

서버는 하려는 목적에 따라 종류가 달라진다.

클라이언트-서버 통신 / API

위에서도 언급했듯이 클라이언트와 서버간의 통신은 요청(request)과 응답(response)으로 이루어져있다.
이렇게 통신을 할때 서로 다른언어로 데이터를 주고받으면 당연히 통신이 불가할 것이다. 이때문에 약속이란게 존재하는데 이를 프로토콜. 통신규약이라고 한다. mininode때도 대충은 알았으나 여기서 한번 더 기초를 다져야겠다.

클라이언트와 서버가 서로 HTTP라는 프로토콜을 이용해서 요청과 응답을 주고받는다.(HTTP메시지라고 부른다.)

음.. 우리가 맥도날드를 갔다고 생각해보자. 그러면 우리는 음식을 주문할 수 있는 방법이 몇가지가 있다. 직접 카운터쪽으로 찾아가서 알바생에게 주문하는 방법과, 키오스크를 이용해서 주문하는 방법이 있다. 소비자(client) 입장에서 보면 이런것들이 다 프로토콜이다.
통신규약의 관점에서 예를들어보면, 우리가 우편물을 보낼때 반드시 지켜야할 것들이 있다. 보내는사람과 받는사람, 우편번호, 우표 이런것들이 지켜져야 우편물이 제대로 보내지게 된다.

참고 사이트

어어어엄청 많다... 이런것들이 있다 정도만 지금은 알고가야겠다.

그러면 우리는 통신을 어떤 방법으로 하는걸까.. 뭐 알려주지도 않고 뭐 어떻게 생겨먹은지도 모른다.

이를 해결할 방법이 바로 API(Application Progrmming Interface)

서버쪽에서는 클라이언트에게 리소스를 이렇게 이렇게 활용해라~ 라고 인터페이스를 제공해주는데 이게 바로 앞서 언급한 API다.

다시 맥도날드로 예를들어보자. 우리는 뭘 보고 음식을 요청할까?? 바로 메뉴판이다.

이런식으로 서버도 메뉴판(API)을 구축해놓아야 클라이언트가 이를 활용해서 요청을 할 수 있게된다. 보통 데이터를 요청할 때는 HTTP 프로토콜을 이용하며, 주소값(URL, URI)을 통해 접근이 가능하다.

예를들면,

요청 : 빅맥 하나 주세요
URL ==> /hamburger/bigmac
요청: 빅맥2개주세요
URL ==> /hambuger/bigmac?quantity=2

이런식으로 요청이 가능한다.
?기호들은 쿼리스트링이라고 한다.쿼리스트링

이런 HTTP API를 잘 만들기 위해서는 메소드를 잘 써먹어야한다.

CRUD라고 부르는데 이에 맞춰서 내가 하려는 목적에 맞게 적절하게 써야한다.

Create(추가) === POST
Read(조회) === GET
Update(갱신) === PUT, PATCH
Delete(삭제) === DELETE

profile
Drarreg

0개의 댓글