[개념 스터디] 2주차
개념 스터디

[개념 스터디] 2주차

HTTP

 

HTTP

하이퍼 텍스트 전송 프로토콜(Hypertext Transfer Protocol)의 약자이다. 서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜이며, 웹에서 클라이언트와 웹 서버간의 통신을 위한 프로토콜 중 하나이다.

 

HTTP 1.1/2.0

 

  • HTTP1.1은 연결당 하나의 요청과 응답을 처리한다. 그렇기 때문에 동시 전송 문제와 다수의 리소스를 처리하는데 속도와 성능의 문제가 존재합니다. 연결당 하나의 요청과 응답을 처리하기 때문에 패킷이 잘 도착했다는 응답이 늦어지게 되어 패킷 왕복 시간인 RTT가 증가합니다.
  • HTTP2.0은 연결당 여러개의 요청과 응답을 처리합니다. 그렇기 때문에 한 커넥션에 여러 개의 메시지를 동시에 주고받을 수 있고, RTT가 감소하기 때문에 성능과 속도면에서 HTTP1.1보다 뛰어납니다.

 

상태 코드

 

웹서비스의 장애를 알려주는 서비스로, 대표적인 상태 코드로는 '404 Not Found'가 있다. 

  • 1xx(정보): 요청을 받았으며 프로세스를 계속 진행합니다
  • 2xx(성공): 요청을 성공적으로 받았으며 인식했고 수용하였습니다.
  • 3xx(리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다.
  • 4xx(클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
  • 5xx(서버 오류): 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.

제가 서버를 다루면서 직접 겪었던, 자주 나오는 상태 코드만 알아보겠습니다.

 

  • 403 Forbidden: 서버가 사용자의 요청을 이해했지만 사용자에게 권한이 없어서 거절하는 경우
  • 404 Not Found: 서버가 자원을 찾을 수 없을 때, 주소가 사라졌을 때
  • 500 Internal Serqver Error: 접속하려는 웹 사이트 서버에 문제가 있지만 정확한 문제에 대해 설명할 수 없을 때 발생합니다. 저같은 경우에는 PHPMyAdmin 외부 접속 오류 및 수동 설치하기 블로그에도 올렸지만 PHPMyAdmin을 외부 접속할 때나 서브 도메인을 접속할 때 이러한 에러가 발생해서 따로 서버 설정을 해주었습니다.

 

요청 메소드

  • GET: 특정 리소스의 표시를 요청, 데이터를 받기만 함.
  • HEAD: GET 메소드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않음.
  • POST: 특정 리소스에 엔티티를 제출할 때 사용됨. 종종 서버의 상태 변화나 부작용을 일으킴.
  • PUT: 리소스 전체를 수정하는 데 사용, 정보를 서버로 제출하거나 갱신을 한다.
  • DELETE: 특정 리소스 삭제
  • CONNECT: 식별되는 서버로의 연결을 시작
  • OPTIONS: 가능한 메소드 옵션에 대한 질의
  • TRACE(en-US): 목적 리소스의 경로를 따라 메시지 반환함
  • PATCH: 리소스의 부분만을 수정하는 데 사용

HTTP vs HTTPS

HTTP

서버에서부터 브라우저로 전송되는 정보가 암호화되지 않기 때문에 데이터가 쉽게 도난당할 수 있다는 문제점을 갖고 있다. 

HTTPS

SSL을 사용하여 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 정보가 도난당하는 것을 막아줍니다. 

HTTP를 HTTPS로 전환하는 방법

 

HTTP vs TCP vs IP

TCP

데이터 전달을 관리하는 규칙으로 패킷을 조립하거나 손실된 패킷을 확인하고, 재전송하도록 요청하는 기능을 한다.

IP

 인터넷상의 주소 규칙으로, IP를 통해 인터넷의 주소를 확인할 수 있습니다.

 

클라이언트로부터 특정 주소로 요청이 들어오면 DNS 상에서 IP주소를 받아옵니다 → HTTP 계층에서 HTTP 메시지를 작성합니다 → TCP 계층에서 HTTP 메시지를 패킷으로 분해합니다. → IP계층에서 전송위치를 확인하고 → 네트워크를 통하여 전송합니다. 그 이후는 위의 과정의 역순으로 진행하여 처리합니다.

 

서버와 클라이언트

 

클라이언트 

서버와 대응되는 개념으로, 서비스를 사용하는 사용자를 의미합니다. 클라이언트는 서버에 요청 메시지 작성 →메시지 발송 →서버의 응답 대기 메시지 수신 → 메시지 해석 → 클라이언트에서 서버가 내린 요청을 추가 처리합니다.

서버

클라이언트에게 네트워크를 통해 서비스를 제공하는 시스템을 말합니다. 서버는 클라이언트의 요청 대기  요청 메시지 수신 → 메시지 해석 → 어플리케이션에 대한 내용 처리 → 결과 반환 → 응답 메시지 작성 → 메시지 발송의 과정을 거칩니다.

 

세션 & 쿠키

 

쿠키를 발급받고 사용하는 과정

쿠키

  • 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
  • 클라이언트의 정보를 로컬(개인 PC)에 저장했다가 참조
  • 예) 방문했던 사이트에 다시 방문했을 때 아이디와 비밀번호 자동 입력

서버

  • 세션은 쿠키와 비슷하지만 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
  • 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지함
  • 예) 화면이 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지

차이점

  • 쿠키는 브라우저에 정보가 저장되기 때문에 서버의 자원을 사용하지 않고 세션은 서버에 정보가 저장되므로 서버의 자원을 사용합니다.
  • 보안 면에서는 세션이 더 우수하며, 요청 속도는 쿠키가 더 빠릅니다.
  • 쿠키는 브라우저가 종료되도, 만료 시점이 지나지 않으면 삭제되이 않는다, 반대로 세션은 브라우저 종료시 삭제가 되며 기간을 지정 가능하다

 

Prettier & ESLint

 

Prettier

Prettier

코드를 보기 좋게 정해진 컨벤션대로 정렬해주는 도구, 기존의 코드에 적용되어있던 스타일들을 전부 무시하고 정해진 규칙에 따라 자동으로 코드를 변환한다.

ESLint

ESLint

코드를 정적으로 분석해주기 때문에 프로그램을 실행하지 않고도 안티 패턴들을 찾아주고, 일관된 코드 스타일로 작성하도록 도와준다

결론

스타일을 교정하려면 Prettier, 오류를 잡으려면 ESLint

 

 

 

웹 서버

 

웹 서버

웹 사용자가 호스트 파일에 접근하는 방법에 대해 관리한다. 브라우저가 웹 서버에 HTTP를 통해 파일을 요청하고, 요청이 올바른 웹 서버에 도달했을 때 HTTP 서버는 요청된 문서를 HTTP를 이용해 보내준다.

 

apache

정적인 데이터를 처리하는 웹서버로, 다중 프로세스로 처리하며 HTTP 요청을 받아들인다. HTML 문서와 같은 웹페이지를 클라이언트에게 반환한다. 다양하고 검증된 기능들을 필요로 하는 곳은 신뢰도가 더 높은 아파치를 사용한다

 

nginx

클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP 웹서버이며 이벤트로 처리한다. 모든 IO들을 전부 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빨라 하나의 프로세스로 더 빠른 작업이 가능하다. 성능과 가벼움을 중요시 하는 서비스에는 nginx를 사용한다

 

Node.js

내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다. 이벤트 기반 비동기 방식이라 하나의 thread가 요청을 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다. 그렇기 때문에 동시에 요청이 오더라도 처리가 완료될 때까지 기다리지 않아도 되기 때문에 서버 무리가 적고 가볍다. 간단한 로직과 대용량, 빠른 응답 시간과 빠른 개발이 필요한 웹 서비스에 잘 어울린다.

 

 

 

RDBMS와 NoSQL

 

RDBMS을 이용한 MySQL

RDBMS

RDBMSRelational Database Management System의 약자로 관계형 모델을 기반으로 하는 DBMS 유형이다. RDBMS는 서로 연관되어 있기 때문에 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다. 정규화를 통해 데이터의 중복성을 최소화하며 트랜잭션을 수행하는 것이 쉽고 데이터의 원자성, 일관성, 내구성을 유지하며 데이터 무결성을 높인다. 외래 키를 이용하여 테이블간의 관계를 나타내어 조인이 가능하다는게 큰 특징이다.

장점

  • 명확한 데이터 구조 보장
  • 관계는 각 데이터를 중복없이 한 번만 저장 가능

단점

  • 테이블이 많고 복잡해질수록 조인문이 많은 복잡한 쿼리가 만들어진다.
  • 스키마가 변경될 경우 관계된 테이블이 많아 수정이 복잡하다.

NoSQL을 이용한 mongoDB

NoSQL

NoSQL이란 Not Only SQL의 약자로 RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다. 테이블 간 관계를 정의하지 않기 때문에 테이블 간 조인이 불가능하다.

장점

  • 스키마가 없기 때문에 자유로운 데이터 구조를 가질 수 있으며  가능하다.
  • 데이터 분산이 용이하다.

단점

  • 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 경우 모든 컬렉션에서 수행을 해야 한다.
  • 스키마가 존재하지 않기 때문에 명확한 데이터 구조를 보장하지 않는다.

 

관련글