서버 개발자라면 기본으로 알고 있어야 할 개념 중 하나이다 !
HTTP를 알기 전에 서버의 개념을 먼저 간단하게 다시 보자.
네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
이런 서버의 동작을 하는 간단한 코드를 작성해보자.
서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식 이라고 생각하면 된다.
클라이언트로 부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해두어야 한다.
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번 포트를 사용한다.
HTTP란 ?
하이퍼 텍스트를 주고 받는 프로토콜(규칙)을 말한다.
서버에 어떠한 작업을 요청하는 날리는 것을 Request 를 한다고 표현한다.
Request를 할 때는 주소를 통해 요청의 내용을 표현한다. 여기서 발전하는 개념이 REST 인데 이 것은 다음 포스팅에서 자세히 설명하기로 한다.
여기서 주목해야할 점은 주소 이외에도 HTTP 요청 메서드 라는 것을 사용하여 요청하는 내용이 무엇인지를 명확히 전달한다는 것이다.
이 때 사용되는 HTTP의 9가지 메서드 중 주요 메서드는 5가지가 된다.
반대로 서버가 이런 요청을 받아 결과를 보내주는 것을 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 |