GCP 공부#3. 웹 애플리케이션의 기초

정은경·2020년 1월 23일
0

Google Cloud Platform

목록 보기
3/7

애플리케이션이 다루게 될 데이터 종류에 따라서!
적절한 데이터 저장 방법을 생각하는 것이!
클라우드에 적합한 아키텍처를 만드는 첫걸음이다.

웹 애플리케이션 vs. 네이티브 애플리케이션

  • 웹 애플리케이션: 인터넷과 인트라넷 등의 네트워크를 통해서 웹 브라우저를 사용하는 애플리케이션
  • 브라우저에서 애플리케이션에 접속하면 네트워크에 있는 웹 서버에서 처리가 이뤄진 다음에 처리 결과가 브라우저에 표시됨
  • 서버에 대한 네트워크 통신이 가능한 환경이라면 컴퓨터, 스마트폰, 태블릿등 브라우저가 이용할 수 있는 단말기에서 플랫폼을 가리지 않고 이용할 수 있는 것이 특징
  • 네이티브 애플리케이션: 휴대전화나 게임기에서도 실행되는 애플리케이션을 네이티브 애플리케이션이라고 함
  • 애플리케이션을 설치한 단말기나 컴퓨터에서 처리를 수행
  • 애플리케이션 구현(소스 코드나 빌드된 바이너리 파일)은 실행하는 하드웨어나 OS에 의존
  • 같은 기능을 가진 애플리케이션이라도 플랫폼마다 다르게 개발해야 함.
  • 플랫폼의 고유 기능을 이용할 수 있기 때문에 개발의 자유도가 높고 처리 속도가 빠르기 때문에 게임 애플리케이션 등의 개발에서 자주 이용됨
  • 기기에 고유 기능을 제공하는 기기 드라이버의 개발에도 적합함

요청과 응답

  • 요청(Request): 브라우저에서 웹 애플리케이션에 어떠한 처리를 의뢰하는 것
  • 응답(Response): 웹 서버에서 브라우저로 처리 결과를 보내는 것

URL(Uniform Resource Locator)

  • 브라우저에서 요청을 보낼 때는 "어느 웹 서버에 어떤 처리를 할 것인가?"를 URL로 지정
  • URL은 네트워크에 의존하는 정보 리소스의 위치를 기술하기 위한 데이터 형식
  • 웹 애플리케이션의 주소에 해당함
  • 웹 브라우저에 URL을 입력하면 그에 맞는 웹 서버 프로그램이나 파일이 호출되는 것임

일반적인 URL의 구조

image.png

  • (1) Scheme(스킴)
    • 통신에 사용할 프로토콜을 지정
    • 프로토콜의 종류: ftp, http, https, mailto, file
  • (2) 사용자 이름 (생략가능)
  • (3) 비밀번호 (생략가능)
  • (4) Hostt Address
    • 접속할 서버의 주소를 지정
    • IP주소를 직접 지정할 수도 있지만, 일반적으로 서버를 나타내는 도메인 이름을 지정
  • (5) Port Number (포트 번호)
    • 접속할 서버의 애플리케이션이 요청을 받을 포트 번호 지정
    • 스킴에 따라 결정되거나 기본 포트 번호를 사용하는 경우는 생략 가능 (ex) http를 사용하는 경우 기본적으로 80번 포트가 사용됨)
  • (6) Document Path (문서 경로)
    • 접속할 서버에 배치된 프로그램이나 파일의 경로를 지정
    • 생략한 경우는 접속할 애플리케이션의 기본 처리가 이뤄짐
    • 웹 서버라면 일반적으로 메인 화면의 HTML 파일 'index.html'로 접근함
  • (7) 검색 파라미터
    • 스킴이 http일 경우에 사용!
    • 서버에 물어볼 때에 사용할 파라미터를 지정
    • Query String (쿼리 스트링)이라고도 부름
    • 'key=value'형식으로 기술
    • 여러 파라미터를 송신할 때에는 '&'로 구분함!

HTTP 통신 구조

  • 웹 애플리케이션에서는 클라이언트 단말기의 브라우저에서 웹 서버에 접근하여 처리가 이뤄짐

  • 이때 클라이언트와 웹 서버 사이에서는 HTTP라는 통신 프로토콜이 사용됨

  • HTTP (Hyper Text Transfer Protocol)

  • 브라우저와 웹 서버 사이에서 HTML 등의 콘텐츠 송수신에 이용되는 통신 프로토콜

  • 영국의 물리학자 팀 버너스리가 1991년에 웹 구조를 발명했을 때 개발된 프로토콜

  • HTTP 메서드 (8가지)

  • GET: 리소스 취득을 요청. 웹 사이트를 열람할 때에 웹 페이지나 그림의 취득 등에 사용

  • POST: 폼에 입력한 데이터를 서버에 전송

  • PUT: 리소스 갱신을 요구

  • DELETE: 리소스 삭제를 요구

  • HEAD: HTTP 헤더 정보만을 요구

  • CONNECT: 프록시 서버를 경유해서 SSL 통신하는 경우 등에 사용

  • OPTIONS: 서버가 지원하는 메서드나 옵션을 조사

  • TRACE: HTTP 동작을 트레이스

    어떤 웹 사이트의 메인 화면에 접근한 경우를 생각해보자

  1. 브라우저는 URL로 지정된 웹 서버에 대해서 GET 메서드 요청을 보냄

  2. 요청을 받은 웹 서버는 해당 응답으로 자신이 가진 index.html 데이터를 클라이언트 브라우저에 보냄

  3. 웹 서버에서 응답을 받은 브라우저는 응답 내용(이 경우라면 index.html)을 해석해서 HTML 규약에 맞춰 데이터를 형태에 따라 정리한 다음에 그 결과를 화면에 표시함(즉, 응답결과를 브라우저가 해석해서 표시)

    HTTP 상태코드 (1xx, 2xx, 3xx, 4xx, 5xx)

    HTTP 통신에서는 서버가 클라이언트로부터의 요청을 언제나 제대로 처리한다고 단정할 수 없음
    어떤 이유로든 에러는 발생할 수 있기 때문
    웹 애플리케이션 개발이나 운용은 항상 에러와의 싸움이라고 한다.
    HTTP 통신은 데이터를 암호화하지 않기 때문에 통신 경로 중 어딘가에서 내용이 도청될 가능성이 있음
    정보가 누출되지 않으려면 암호화된 HTTPS를 사용해야 함

  • 1xx : 정보
    • 100/Continue : 처리를 계속하고 있다. 다음 요청을 보내기를 기다리는 상태
  • 2xx : 성공
    • 200/OK : 성공
  • 3xx : 리다이렉트 (예를 들어, 301은 다른 URL로 이동)
    • 304/Not Modified : 갱신되지 않음, 브라우저 안의 캐시에 남아있는 콘텐츠를 사용해서 웹 페이지를 표시
    • 305/Use Proxy : 프락시 사용, Location 헤더에 지정한 프락시를 사용
  • 4xx : 클라이언트 에러
    • 400/Bad Request : 올바르지 않은 요청, 브라우저(클라이언트)에서 보내진 요청이 바르지 않아서 제대로 처리할 수 없을 때 내는 에러
    • 401/Unauthorized : 인증 에러, 비밀번호가 걸린 웹 사이트에 대해서 비밀번호가 틀렸을 때 내는 에러. 그리고 접근 권한이 없을 때에도 표시됨
    • 403/Forbidden : 접근 금지 에러, 접근이 금지되었을 때에 표시되는 에러. 서버의 높은 부하가 원인인 경우도 있음
    • 404/Not Found : 파일을 찾을 수 없는 에러, 페이지가 삭제되었거나 URL이 변경되어 페이지를 찾을 수 없을 때 표시되는 에러
    • 407/Proxy Authentication Required : 프락시 인증이 필요, 프락시 인증이 필요한 사이트에 접근했을 때의 에러
    • 408/Request Timeout : 타임아웃, 요청이 타임아웃 됐을 때의 에러
  • 5xx : 서버 에러
    • 500/Internal Server Error : 서버 내부 에러, 프로그램에 문제가 있거나 접근 권한 등의 설정이 제대로 되어 있지 않았을 때 표시되는 에러
    • 501/Not Implemented : 구현되지 않음, 요청받은 기능에 대해서 서버가 지원하지 않을 때 표시되는 에러
    • 502/Bad Gateway : 게이트웨이가 올바르지 않음, 프락시 서버가 제대로 되지 않은 응답을 받았을 때 표시되는 에러
    • 503/Service Unavailable : 서비스를 이용할 수 없음, 서버 과부하 상태로 일시적으로 웹 페이지를 표시할 수 없을 때 발생하는 에러

포트 번호

서버에서 동작하는 애플리케이션과 클라이언트 애플리케이션이 포트 번호를 사용해서 통신할 때는 소켓 통신이라는 구조를 사용!
소켓통신은 IP 네트워크를 거쳐서 애플리케이션끼리 통신하는 구조로 'TCP'와 'UDP' 두 종류의 프로토콜이 있음

TCP와 UDP 중 어느 것을 사용할 것인지는 애플리케이션마다 다름
서버에서 동작하는 애플리케이션은 고유 포트 번호를 통해 클라이언트로부터의 접속을 받음

  • 예) SSH 서버는 TCP 22번 포트로 접속을 받음
  • 예) DNS 서버는 TCP 53번 포트와 UDP 53번 포트 양쪽으로 접속을 받음

서버 애플리케이션에 접속하는 클라이언트 애플리케이션은
클라이언트 머신에서 사용하지 않은 포트번호를 하나 고른 다음,
접속할 IP주소와 포트 번호를 지정하여 통신을 시작함
이때 서버와 클라이언트는 다음 두 개의 정보로 서로 통신 상태를 특정함

  • 서버 IP 주소와 포트 번호
  • 클라이언트 IP 주소와 포트 번호
    IP주소와 포트 번호의 조합을 소켓이라고 부름!
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글