HTTP

조예슬·2022년 10월 12일
0

Server

목록 보기
1/6
post-thumbnail

서버 개발자라면 기본으로 알고 있어야 할 개념 중 하나이다 !

HTTP를 알기 전에 서버의 개념을 먼저 간단하게 다시 보자.

1. 서버

  • 서버란?

    네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

  • 웹이나 앱을 사용할 떼 데이터(아이디, 비밀번호, 이메일 등)와 서비스의 데이터가 생성되면, 이를 어딘가에 저장하고 클라이언트는 이 어딘가에서 데이터를 받아와야하는데 이곳이 바로 서버이다.

이런 서버의 동작을 하는 간단한 코드를 작성해보자.

2. 로컬에 서버 띄우기

서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식 이라고 생각하면 된다.
클라이언트로 부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해두어야 한다.

const http = require("http"); //기본으로 내장된 http 모듈

const port = 3000;

http
    .createServer((req, res) => { //인수로 요청에 대한 콜백 함수, 이 콜백 함수에 응답을 적으면 됨 !
        //req 객체: 요청(request)에 관한 정보, res 객체: 응답(response)에 관한 정보
        res.write("<h1>IN SOPT SERVER!</h1>");
        res.end("<p>awesome</p>");
    })
    .listen(port, () => { //서버 연결
        console.log(`${port} 번 포트에서 대기중 !`);
    });

다음과 같은 코드를 작성 후 터미널에서 node createServer.js 명령어를 쳐보자.

3000 번 포트에서 대기중 !

라는 출력을 확인할 수 있다.
그렇다면 진짜 로컬에 서버를 띄우는 걸 성공한 것일까 ??

브라우저를 열고 http://localhost:3000 (http://127.0.0.1:3000) 으로 접속해보자!

짠. 성공한 것을 확인할 수 있다 !
명령어를 입력한 터미널에서 서버를 종료하고 싶다면 Cmd + c 를 누르면 된다.
(window의 경우는 control + c)

📌 잠시만! localhost와 포트는 뭐야 근데 ?..

- localhost 란 현재 컴퓨터 내부 주소를 가리킨다. 외부에서는 접근할 수 없고 자신의 컴퓨터에서만 접근할 수 있으므로, 서버 개발 시 테스트용으로 많이 사용된다. localhost 대신 127.0.0.1을 주소로 사용해도 같다 ! (이러한 숫자 주소를 IP라고 한다.)

- 포트는 서버 내에서 프로세스를 구분하는 번호이다. 서버는 HTTP 요청을 대기하는 것 외에도 다양한 작업을 한다. 데이터베이스와 통신해야 하고, FTP 요청을 처리하기도 한다. 따라서 서버는 프로세스에 포트를 다르게 할당하여 들어오는 요청을 구분한다.
유명한 포트 번호는 21(FTP), 80(HTTP), 443(HTTPS), 3306(MYSQL)이 있다.

그래서 https://github.com 는 사실 포트 번호(443)가 생략되어 있는 것이다. https://github.com:443 으로 요청해도 똑같이 깃허브 홈페이지에 접속한다.

여기서 3000이란 포트 번호를 사용한 것은 충돌을 방지하기 위해서 ! 일반적으로 컴퓨터에서는 80번이나 443번 포트는 이미 다른 서비스가 사용하고 있을 확률이 크다. 따라서 예제를 실행할 때는 다른 포트 번호들을 사용하고, 실제로 배포할 때는 80번 또는 443번 포트를 사용한다.

3. HTTP 개념

HTTP란 ?
하이퍼 텍스트를 주고 받는 프로토콜(규칙)을 말한다.

1) Request

서버에 어떠한 작업을 요청하는 날리는 것을 Request 를 한다고 표현한다.

Request를 할 때는 주소를 통해 요청의 내용을 표현한다. 여기서 발전하는 개념이 REST 인데 이 것은 다음 포스팅에서 자세히 설명하기로 한다.

여기서 주목해야할 점은 주소 이외에도 HTTP 요청 메서드 라는 것을 사용하여 요청하는 내용이 무엇인지를 명확히 전달한다는 것이다.

이 때 사용되는 HTTP의 9가지 메서드 중 주요 메서드는 5가지가 된다.

  • GET : 서버 자원을 가져오고자 할 때 사용 (조회)
  • POST : 서버에 자원을 새로 등록하고자 할 때 사용 (생성)
  • PUT : 서버의 자원을 요청에 들어 있는 자원으로 치환하고자 할 때 사용 (수정)
  • PATCH : 서버 자원의 일부만 수정하고자 할 때 사용 (일부 수정)
  • DELETE : 서버의 자원을 삭제하고자 할 때 사용 (삭제)

2) Response

반대로 서버가 이런 요청을 받아 결과를 보내주는 것을 Response 한다고 표현한다.

여기서 알고 있으면 좋은 개념인 Response Status 를 살짝 보고 가자 ㅎ

저번 학기 웹 개발 수업을 들었을 때 진짜 팔짝 뛰는 화면..

이런 것들을 Status Code (상태 코드) 라고 한다.
나 또는 클라이언트에서 보낸 요청이 어떤 상태가 되었는지 코드로 알려주는 것이다.

Status Code를 크게 나누면 다음과 같다.

  • 2xx : 성공 상태
  • 3xx : 리다이렉션
  • 4xx : 요청 에러
  • 5xx : 서버 내부 에러

자세한 코드는 다음과 같다.
이는 클라이언트와 통신할 때 마주치기 쉬우니 잘 알아두는 것이 좋다 !

응답 코드설명
200성공 OK
201성공, 리소스 생성 Created
204성공, 응답 데이터 없음 No Content

응답 코드설명
400요청을 이해할 수 없음 Bad Request
401인증 필요 Unauthorized
403요청 거부 Forbidden
404리소스를 찾을 수 없음 Not Found
409요청 충돌 Conflict

응답 코드설명
500서버 내부 오류 Internal Server Error
503일시적 서버 이용 불가능 Service unavailable
profile
코딩 해라 스리스리 예스리 얍!

0개의 댓글