[WAFFLE] 0-1 Server Basic
Published:
In this post, basic concepts about Server is introduced.
Server
Client-Server model
- 일종의 분산 애플리케이션을 만들기 위한 동시성 모델 (?)
- 쉽게 말하면 서비스의 제공자와 요청자를 분리하는 기술(동시성 모델)
- 인터넷을 통해서 통신할 수도 있고, 같은 하드웨어 내에 존재할 수도 있음
- IPC, 프로세스 간에 상호 데이터 교환을 통한 서버-클라이언트 모델이 있을 수도 있고
- 동일한 코드 내에서 작동하지만 2개의 쓰레드를 나눠서 서버-클라이언트 모델을 구현할 수도 있음
- 상대적인 개념이므로 여러분의 서버도, 누군가의 클라이언트일 수 있음
- 서버 : 요청받은 서비스를 제공하는 소프트웨어(웹 서버, 데이터베이스)
- 클라이언트 : 서버에 서비스를 요청하는 소프트웨어(웹 브라우저, 모바일 애플리케이션)
Web Server
- 웹 서버 : 웹에 있는 서버(인터넷을 통해 갈 수 있는 서버)에 존재하는 자원을 호스팅해주는 원격의 서버
- 원래는 html, jpeg, avi 등 정적인 파일만 전달할 수 있었는데 애플리케이션 서버가 나오면서 동적인 콘텐츠를 전달할 수 있게 됨. 예를 들어, 나와 친구의 피드의 추천 게시글은 다름. 그 컨텐츠들은 인스타그램 서버에 정적파일 형태로 존재하는 것이 아니라 개인에 따라 동적으로 게시글을 추천하여 전달함. 동적컨텐츠는 이미 존재하는 자원이 아니라 원래는 없었던 자원인데 기존에 있는 자원들을 가지고 새로운 자원을 만들어 내보내주는 것.
- Web Application : 웹에서 실행되는 응용 프로그램
- Web Applicaiton Server : 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
- 웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 전달.
- 데이터베이스 서버는 데이터베이스 애플리케이션을 실행하는(데이터베이스를 호스팅해주는) 서버. 데이터베이스 서버가 웹 서버일 수도 있고 아닐 수도 있음.
- What I do in WAFFLE : 웹 서버 만들기 (X) / “웹 프레임워크”를 사용해서 “애플리케이션 서버”를 통해 “웹 서버”로 전달되는 동적 컨텐츠를 생성하는 “웹 애플리케이션”을 개발
CGI, WSGI, ASGI
- 애플리케이션 서버가 동적 컨텐츠를 전달하려면 동적 컨텐츠를 전달할 수 있는 프로그램이 있어야 함. 그 프로그램을 실행하는 방법에 다음 세 가지가 있음.
- CGI (Common Gateway Interface) : 웹 서버가 외부 프로그램을 실행할 수 있도록 하는 공통 인터페이스. 외부 프로그램이란 스크립트(.sh .py a.out 등) 또는 컴파일된 프로그램을 말함. 이들을 커맨드 라인에서 호출하여 stdin, stdout으로 결과를 받아 클라이언트에 주는 구조. CLI로 실행 가능한 무엇이든 사용할 수 있다는 장점이 있지만 요청이 들어올 때마다 프로세스를 하나 띄워야 한다는 단점이 있어 잘 사용하지 않음.
- WSGI (Web Server Gateway Interface) : 파이썬으로 작성된 애플리케이션을 실행할 수 있도록 하는 인터페이스. 애플리케이션 서버 프로세스가 하나 떠 있고 요청이 들어올 때마다 코드를 실행해서 반응하는 방식. 프로세스가 떠 있는데 요청이 들어올 때까지 기다려야 하니까 자체적으로 그 안에서 무한루프를 돌고 있음.
- ASGI (Asynchorous Server Gateway Interface) : WSGI의 슈퍼셋으로 비동기 기능을 갖춘 파이썬 애플리케이션을 실행
HTTP
- 웹에서 사용하는 정보전달 규약(프로토콜)
HTTP 리소스
- 파일 시스템 상에 존재하는 정적 컨텐츠
- 애플리케이션 서버를 통해 만들어지는 동적 컨텐츠
- HTML, 워드파일, JPEG, AVI, 바이트로 표현해서 전달할 수 있는 모든 것들. HTTP message의 body에 포함되어 전달됨.
HTTP 리소스 - 미디어 타입
- HTTP body를 통해 전달되는 데이터의 포맷
- HTTP를 통해 전달되는 모든 객체에는 MIME (다목적 이메일 확장) 이라는 타입 정보가 주어진다.
- e.g. Content-Type : text/html; utf-8 Content-Length: 3199
HTTP 리소스 - URI, URL, URN
- URI : ?
- URL : URI의 한 종류
- URN : URI의 한 종류

REST (Representational State Transfer)
- 서버 애플리케이션을 만드는 패러다임
- URL은 단일 리소스를 식별한다.
- http://waffle-sns.com/get-post-3 (X)
- http://waffle-sns.com/post/3.html (O)
- Stateless
- 상태가 존재하지 않는다는 뜻이 아님
- 클라이언트와 서버 각각 상태를 저장하고 있으며, 클라이언트가 어떤 상태인지 서버는 신경 쓰지 않는다는 의미
- 표준화된 메서드 : 메서드의 의미에 맞추어서 api 개발
- GET /post/3.html
- PUT /post/3.html
- RESTful 서비스 : REST 원칙을 지키는 서비스

Leave a Comment