기존 까지 배운 HTML과 css, js로 웹페이지의 화면을 담당하는게 프론트엔드 개발자라면 백엔드 개발자는 말 그대로 웹페이지의 뒷단, 눈에 보이지 않는 부분을 담당하게 된다. 서비스에 필요한 모든 데이터를 관리하며 대표적으로 로그인 창에서 입력된 로그인 정보가 맞는지를 확인하는 절차를 구성하는게 백엔드 개발자이다.
웹서버, 웹 애플리케이션 서버, 데이터베이스를 통틀어서 백엔드라고 한다.
클라이언트로 부터 요청이 들어오면 웹 서버, 웹 애플리케이션 서버, 데이터베이스 순으로 들어오게 되고, 데이터베이스는 요청에 대한 응답을 웹 어플리케이션 서버, 웹서버 순으로 이동하여 클라이언트에게 보여주게 된다.
앞에 든 예시로 로그인을 한다면, 프론트 엔드가 만든 페이지에서 클라이언트가 로그인을 위해 정보를 입력하고 로그인을 하기 위해서 버튼을 클릭하면 해당 요청이 웹 어플리케이션에 들어오게 된다. 이때 웹 어플리케이션은 해당 정보들이 이메일의 형식에 맞는지, 비밀번호에 특수문자가 들어갔는지를 확인하고 만약 아니라면, "로그인을 위한 정보와 형식이 맞지 않다"를 웹서버에 보내 화면에 띄워줄 것이다. 맞다면 데이터베이스에 들어가 정보를 대조하여 있는 정보라면 로그인을 시켜주게 된다.
웹 서버(Web Server)
웹 서버는 정적 페이지에 대해 대응합니다.
동적 페이지에 대한 처리는 직접 처리하지 않고, 웹 어플리케이션 서버에게 전달 합니다.
Node.js는 JavaScript를 스크립트 언어 이상으로 프로그래밍 언어 역할을 할 수 있도록 지원하는 플랫폼이다. 즉, 앞에서 말한 웹서버와 웹 어플리케이션 서버를 만들 수 있게 해주는 JavaScript엔진이다.
설치
설치는 해당 사이트에 들어가면 나오는 버튼을 눌러 바로 다운로드할 수 있다.- OS도 알아서 맞춰준다.
LTS와현재버전2개 있을텐데,LTS(Long Term Support)가 안정성과 신뢰도를 보장해주는 버전이고 사이트에서도 권장하기에 이를 다운로드 해주는 것이 좋다.


const Server = require("http");Server상수에 할당한다.Server.createServer(onRequest).listen(8888);createServer로 서버를 만드는데, onRequest함수를 만들어 클라이언트 어떻게 통신할 것인지를 정하였다.listen(8888)을 통해 8888포트로 클라이언트의 연결 요청을 기다리게 만들었다.function onRequest(req,res)req(request)와 res(response)를 통해 요청정보와 응답정보를 정하였다.console.log(req.method, req.url); 해당 코드는 요청된 메소드와 URL을 터미널에 출력하여 어떤 요청이 들어왔는지 확인하는 명령어이다.포트 번호
무전기로 통신할때 주파수를 맞추는 것 처럼, 클라이언트와 서버도 같은 주파수(웹 주소나 포트 번호)를 맞춰야한다.
Head는 왜 쓰는가?
HTTP 통신을 위해서는 Head와 Body가 필요하다.
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜 즉, 약속이다. 웹에서 이루어지는 모든 데이터 교환은 이를 기초로 하기에 이에 맞게 데이터 교환을 해야한다.
그때 이 Head와 Body가 필요하게 된다.
Head에는 크게 2가지 들어간다.
- 통신 상태가 어떤지(HTTP status Code)
- 응답이 어떤 형태인지(txt, html등등)
local host
위에 나오는 localhost는 내 컴퓨터의 주소를 나타내는 주소이다.
127.0.0.1과 같은 의미이다.
URL
Uniform Resource Locator의 약자로 인터넷 상에서 웹 페이지가 어디있는지 "위치"를 알려주는 주소이다. 즉, 웹페이지의 주소라고 할 수 있다.
Node.js가 미리 만들어둔 모듈뿐만 아니라 내가 만든 server도 다른 javascript파일에서 사용할 수 있다.

exports.start = start명령어를 통해서 index.js에서 start()함수를 불러올 수 있도록 만들었다.서버는 클라이언트로 부터 Request를 받는 역할을 하고
Router는 Request의 URL에 따라 루트(route)를 정해준다. 즉, 어디로 갈지 길만 정해주는 것이다.

requestHandler.js파일에 handle 튜플을 만들어서 각각의 pathname에 대하여 어떤 페이지를 보여줄지 설명한다.main과 login에 대한 페이지를 만들어 줬다.router.js파일에서는 route함수를 만들어 클라이언트로 부터 받아온 pathname을 handle에 넣어서 해당하는 페이지를 찾고, 없다면 404를 띄워서 페이지가 없다는 것을 알려주도록 만들었다.server.js에서 기존의 메인 페이지에 대한 응답을 삭제하고 이를 router에게 맡긴게 되었다.