🌳λͺ©ν‘œ

μ½”λ“œλ₯Ό μœ μ—°ν•˜κ³  읽기 μ‰½κ²Œ κ°œμ„ ν•˜λŠ” 것을 β€œλ¦¬νŒ©ν† λ§ ν•œλ‹€β€λΌκ³  λ§ν•˜λŠ”λ°μš”, 이번 κΈ€μ—μ„œλŠ” 이전에 μž‘μ„±ν•œ ν—¬λ‘œμ›”λ“œ μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

server.js νŒŒμΌμ— μž‘μ„±ν•œ μ½”λ“œλŠ” 두 가지 일을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  1. μ„œλ²„ 생성 - createServer()
  2. μ„œλ²„ ꡬ동 - listen()

πŸ€μ‹€μŠ΅ - 역할에 따라 νŒŒμΌμ„ 뢄리해 λ³΄μ„Έμš”

μœ„μ—μ„œ λ‚˜λˆˆ 두 가지 역할에 따라 νŒŒμΌμ„ 뢄리해 λ³΄μ„Έμš”.

μ§€λ‚œ μ‹œκ°„κΉŒμ§€ μž‘μ„±ν•œ μ½”λ“œλ‘œ μ΄λ™ν•˜κ² μŠ΅λ‹ˆλ‹€.

$ git checkout -f module/http-refactoring-spec

μ œκ°€ 미리 λ§Œλ“€μ–΄λ‘” ν…ŒμŠ€νŠΈ μ½”λ“œλ„ μ„±κ³΅μ μœΌλ‘œ 톡과해야 ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ μ½”λ“œ 싀행은 npm testλΌλŠ” κ±Έ μžˆμ§€ λ§ˆμ‹œκ³ μš”.

힌트: server.jsλŠ” μ„œλ²„ 생성, bin.jsλŠ” μ„œλ²„ μ‹€ν–‰

πŸ€ν’€μ΄

첫 μ‹€μŠ΅! μ–΄λ• λ‚˜μš”? ν˜Ήμ‹œ 뭐뢀터 μ‹œμž‘ν•΄μ•Όν• μ§€ μ „ν˜€ λͺ¨λ₯΄κ² λ‹€κ³ μš”? κ±±μ •ν•˜μ§€ λ§ˆμ„Έμš”. μ²˜μŒλΆ€ν„° 술술 ν’€λ¦°λ‹€λ©΄ 이 μ—°μž¬κΈ€μ„ 보싀 자격이 μ—†μŠ΅λ‹ˆλ‹€.

μ°¨κ·Όμ°¨κ·Ό ν’€μ–΄ λ³Όκ²Œμš”.

ν—¬λ‘œμ›”λ“œ μ„œλ²„μ˜ 두 역할쀑 μ„œλ²„ 생성 뢀뢄을 server.js νŒŒμΌμ— λ‹€μ‹œ μž‘μ„±ν•˜κ² μŠ΅λ‹ˆλ‹€. μ½”λ“œλŠ” 두 λΆ€λΆ„μœΌλ‘œ λ‚˜λˆ μ„œ μ„€λͺ…ν•©λ‹ˆλ‹€.

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

http λͺ¨λ“ˆμ„ 가져와 createServer() ν•¨μˆ˜λ‘œ μ„œλ²„λ₯Ό 생성 ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€. μƒμ„±ν•œ μ„œλ²„λŠ” server μƒμˆ˜μ— μ €μž₯ν–ˆκ΅¬μš”.

그럼 이 νŒŒμΌμ— μžˆλŠ” μ„œλ²„ 객체λ₯Ό μ™ΈλΆ€μ˜ λ‹€λ₯ΈνŒŒμΌμ—μ„œ μ‚¬μš©ν•΄μ•Όκ² μŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ μ„œλ²„λ₯Ό κ΅¬λ™ν•˜λŠ” νŒŒμΌμ—μ„œ 이 μ„œλ²„ 객체λ₯Ό μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ΄μ£ .

λ”°λΌμ„œ server.js에 μžˆλŠ” μ„œλ²„κ°μ²΄ serverλ₯Ό μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜λ„λ‘ β€œλ…ΈμΆœβ€ν•΄μ•Ό ν•©λ‹ˆλ‹€.

module.exports = server

λ…Έλ“œμ—μ„œλŠ” module.exports에 λ…ΈμΆœν•  객체λ₯Ό μ§€μ •ν•˜λ©΄ λ‹€λ₯Έ νŒŒμΌμ—μ„œ 이λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ €λŠ” μ„œλ²„κ°μ²΄ serverλ₯Ό λ°”λ‘œ μ§€μ •ν•œ κ²ƒμž…λ‹ˆλ‹€.

λ‹€μŒμ€ bin.js νŒŒμΌμ„ λ§Œλ“ λ’€ μ„œλ²„λ₯Ό 가져와 ꡬ동해 λ³΄κ² μŠ΅λ‹ˆλ‹€. 이것도 두 λ‹¨κ³„λ‘œ μ„€λͺ…ν• κ²Œμš”.

const server  = require('./server');
const hostname = '127.0.0.1'
const port = 3000

첫번째 λ§Œλ“€μ—ˆλ˜ server.js νŒŒμΌμ„ λΆˆλŸ¬μ˜΅λ‹ˆλ‹€. 이 νŒŒμΌμ—μ„œλŠ” μ„œλ²„κ°μ²΄λ₯Ό λͺ¨λ“ˆλ‘œ λ…ΈμΆœν–ˆκΈ° λ•Œλ¬Έμ— require('./server')둜 κ°€μ Έμ™€μ„œ server μƒμˆ˜μ— μ €μž₯ν•  수 μžˆλŠ” 것이죠.

그리고 μ‚¬μš©ν•  μ„œλ²„ 호슀트λͺ…κ³Ό 포트λ₯Ό μƒμˆ˜λ‘œ μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

λ§ˆμ§€λ§‰μœΌλ‘œ μ„œλ²„λ₯Ό μš”μ²­ λŒ€κΈ°μƒνƒœλ‘œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

이제 ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό λŒλ €λ³ΌκΉŒμš”?

$ npm test

  server
    βœ“ should have listen()

  1 passing (8ms)

ν…ŒμŠ€νŠΈμ— μ„±κ³΅ν–ˆμŠ΅λ‹ˆλ‹€. μ„œλ²„ λͺ¨λ“ˆλ§Œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλŠ”λ°μš” κ°„λ‹¨νžˆ listen λ©”μ†Œλ“œλ₯Ό κ°€μ Έμ•Ό ν•œλ‹€λŠ” μ½”λ“œμž…λ‹ˆλ‹€. κΆκΈˆν•˜μ‹  뢄은 ν…ŒμŠ€νŠΈ μ½”λ“œκΉŒμ§€ ν•œ 번 μ‚΄νŽ΄ λ³΄μ„Έμš”.

μ§€κΈˆκΉŒμ§€ μš°λ¦¬κ°€ μž‘μ„±ν•œ λͺ¨λ“ˆμ„ 도식화 해보면 μ΄λ ‡μŠ΅λ‹ˆλ‹€.

λ‚˜λ¨Έμ§€ λΉˆκ³΅κ°„μ€ μ°¨μΈ° κ°œλ°œν•΄ λ‚˜κ°ˆ μ˜ˆμ •μž…λ‹ˆλ‹€.

정리

  • 역할에 따라 λͺ¨λ“ˆμ„ λΆ„λ¦¬ν•˜μ—¬ λ¦¬νŒ©ν† λ§ ν–ˆμŠ΅λ‹ˆλ‹€.

λͺ©μ°¨ λ°”λ‘œκ°€κΈ°