1. 모듈 불러오기

✅ http 모듈
- Node.js의 내장 모듈
- 클라이언트의 요청(request)를 받고, 서버의 응답(response)을 보내는 기능을 제공
- 웹 서버를 만들고 요청과 응답을 처리하는 모듈
✅ url 모듈
URL 주소를 분석하고 필요한 정보를 꺼내기 위한 Node.js의 내장 모듈
2. 서버 생성

👉 http 모듈에게 사용자가 요청하면 이 함수를 실행하라고 알려줌
👉 req(사용자의 요청 정보), res(사용자에게 보낼 응답) 는 자동으로 전달됨
2.1 첫번째 라우팅( / )

👉 사용자가 http://localhost:3000/ 으로 들어오면 실행한다.

✅ writeHead()
👉 클라이언트에게 응답에 대한 정보를 전달하는 함수
👉 이 정보를 통해 브라우저는 어떤 형식의 데이터를 받을지를 알 수 있다.
👉 200 : 요청을 정상적으로 처리했다는 의미(성공)
👉 content-type : 지금 보내는 데이터의 형식을 알려주는 헤더
- text/html : HTML 문서
- application/json : JSON 데이터
- text/plain : 일반 텍스트
✅ end()
사용자에게 실제 데이터를 보내고 응답을 종료하는 함수
👉 브라우저에게
res.end('<h2>Hello Node.js</h2>')
를 전송한 뒤 응답을 종료한다.
응답이 끝나면 브라우저는 받은 데이터를 화면에 출력한다.
2.2 두 번째 라우팅 ( /about )
앞의 내용과 마찬가지로 이해하면 쉽다.

👉 사용자가 http://localhost:3000/about 으로 들어오면 실행된다.
👉 요청이 정상적으로 처리(200)되면 html 형식으로 문서를 브라우저에게 보낸다
2.3 세 번째 라우팅 ( /api/user)

👉 사용자가 http://localhost:3000/api/user로 들어오면 실행된다.
🔸 서버에서 user 라는 자바스크립트 객체를 생성한다
const user ={
userid : 'apple',
name : '김사과',
age : 20,
job : 'AI 개발자'
}
🔸 JSON으로 변환 후 브라우저에게 JSON으로 보낸다
JSON.stringify(user)
user 객체를 JSON 문자열로 바꿔준다.
💡 왜 문자열로 바꿔줘야 할까?
앞의 user 는 자바 스크립트 객체(Object)이다.
이 때, HTTP는 객체를 그대로 전송할 수 없다.
따라서, 객체를 문자열 형태의 JSON 데이터로 변환한 후 전송해야 한다.
자바스크립트 객체 → JSON.stringify() → JSON 문자열 → 브라우저로 전송
3. 서버 실행

✅ server.listen()
👉 listen() 은 서버를 실행하고, 지정한 포트에서 사용자의 요청을 기다리도록 하는 함수이다.
listen()함수의 구조
listen(port ,callback)
- listen()은 두 개의 매개변수를 가장 많이 사용한다.
- port : 포트 번호 , 서버가 몇 번 포트에서 요청을 받을 것인 지를 의미
- callback : 서버가 정상적으로 실행된 직후 한 번만 실행되는 함수
실행 결과
npm run dev를 실행하면 nodemon이 서버를 실행하고, 3000번 포트에서 사용자의 요청을 기다리는 상태가 된다.

브라우저에서
1️⃣ http://127.0.0.1:3000/으로 접속하면 req.url 값이 /이 되어 첫 번째 라우팅 코드가 실행된다.

2️⃣ http://127.0.0.1:3000/about으로 접속했을 때의 결과

3️⃣ http://127.0.0.1:3000/api/user으로 접속했을 때의 결과
