๐ŸฆŠcodecamp 1~3์ผ์ฐจ ์ •๋ฆฌ๋ณธ

JBoBยท2023๋…„ 2์›” 25์ผ
0

๐ŸฆŠNode.js 1์ผ์ฐจ

๐Ÿ‘ปย Node.js

NodeJS ๋Š” ๊ตฌ๊ธ€ ํฌ๋กฌ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ๊ธฐ๋ฐ˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ”Œ๋žซํผ์ด๋‹ค.

๋…ธ๋“œ๋Š” ์›น์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋‹ค.

๐Ÿ‘ปย Node.js์˜ ํŠน์ง•

  • ๋น„๋™๊ธฐ์‹ ์œ„์ฃผ : ๋…ธ๋“œ์˜ ๋ชจ๋“  API๋Š” ๋น„๋™๊ธฐ์‹์ด๋‹ค. Node.js์„œ๋ฒ„๋Š” API๊ฐ€ ์‹คํ–‰๋˜์—ˆ์„๋•Œ,
    ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™œํ• ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ API๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „์— ์‹คํ–‰ํ–ˆ๋˜
    API๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์‹œ, ์ด๋ฒคํŠธ ์•Œ๋ฆผ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค.
  • ๋น ๋ฅธ์†๋„
  • ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ/ ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ
  • ๋…ธ ๋ฒ„ํผ๋ง

๐Ÿ‘ปย Node.js ๋กœ ์‹ค์Šตํ•ด๋ณด๊ธฐ

  • Node.js ๋กœ ์ธ์ฆ๋ฒˆํ˜ธ ํ† ํฐ ์ƒ์„ฑ
function getToken() {
  const result = String(Math.floor(Math.random() * 1000000)).padStart(6, "0");
  console.log(result);
}

getToken();

  • Node.js๋กœ ํ† ํฐ ์ƒ์„ฑ
function createTokenOfPhone(qqq) {
  // 1. ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ๋งž๋Š”์ง€ ํ™•์ธ
  if (qqq.length !== 11) {
    console.log("์—๋Ÿฌ๋ฐœ์ƒ !! ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ๋ฅผ ์ œ๋Œ€๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!");
    return;
  }

  // 2. ์ธ์ฆ๋ฒˆํ˜ธ ์ƒ์„ฑ
  const result = String(Math.floor(Math.random() * 1000000)).padStart(6, "0");
  console.log(result);

  // 3. ์ธ์ฆ๋ฒˆํ˜ธ ์ „์†ก
  console.log(qqq + "๋ฒˆํ˜ธ๋กœ ์ธ์ฆ๋ฒˆํ˜ธ " + result + "๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.");
}

createTokenOfPhone("01012345678"); // 0101234567: ์ธ์ž(argument)

  • ํผ์‚ฌ๋“œํŒจํ„ด (facade Pattern)

facade๋Š” ๊ฑด๋ฌผ์˜ ์ •๋ฉด์„ ์˜๋ฏธํ•œ๋‹ค.

ํผ์‚ฌ๋“œ ํŒจํ„ด์€ ์—ฌ๋Ÿฌ ์„œ๋ธŒ ์‹œ์Šคํ…œ์˜ ์ž‘์—…๋“ค์„ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ.

function createTokenOfPhone(qqq) {
  // 1. ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ๋งž๋Š”์ง€ ํ™•์ธ
  if (qqq.length !== 11) {
    console.log("์—๋Ÿฌ๋ฐœ์ƒ !! ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ๋ฅผ ์ œ๋Œ€๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!");
    return false
  } else {
		return true
}

  // 2. ์ธ์ฆ๋ฒˆํ˜ธ ์ƒ์„ฑ
  const result = String(Math.floor(Math.random() * 1000000)).padStart(6, "0");
  console.log(result);

  // 3. ์ธ์ฆ๋ฒˆํ˜ธ ์ „์†ก
  console.log(qqq + "๋ฒˆํ˜ธ๋กœ ์ธ์ฆ๋ฒˆํ˜ธ " + result + "๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.");
}

createTokenOfPhone("01012345678"); // 0101234567: ์ธ์ž(argument)

์ด๊ฒƒ์„ ํผ์‚ฌ๋“œ ํŒจํ„ด์œผ๋กœ ์ ์šฉํ•ด๋ณด์ž.
function createTokenOfPhone(myphone) {
  // 1. ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ๋งž๋Š”์ง€ ํ™•์ธ
  const isValid = checkPhone(myphone);
  if (isValid === false) {
    return;
  }

  // 2. ์ธ์ฆ๋ฒˆํ˜ธ ์ƒ์„ฑ
  const myToken = getToken();

  // 3. ์ธ์ฆ๋ฒˆํ˜ธ ์ „์†ก
  sendTokenToSMS(myphone, myToken);
}

function checkPhone(myphone) {
  if (myphone.length !== 11) {
    console.log("์—๋Ÿฌ๋ฐœ์ƒ !! ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ๋ฅผ ์ œ๋Œ€๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!");
    return false;
  } else {
    return true;
  }
}

function getToken() {
  const result = String(Math.floor(Math.random() * 1000000)).padStart(6, "0");
  console.log(result);
}

function sendTokenToSMS(myphone, result) {
  console.log(qqq + "๋ฒˆํ˜ธ๋กœ ์ธ์ฆ๋ฒˆํ˜ธ " + result + "๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.");
}
  • ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ์ƒ์†์ด๋‚˜ ๊ตฌ์„ฑ๋„ ์—†๊ณ  ํŠธ๋ฆฌํ‚คํ•œ ๊ตฌ์กฐ๊ฐ€ ์—†๊ธฐ ๋–„๋ฌธ์— ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค,
  • ์ฆ‰, ํผ์‚ฌ๋“œ๋Š” ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณต์žกํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋กœ์ง์ด ์žˆ๋”๋ผ๋„, ๋ฐ–์—์„œ ๋ณด์ด๋Š” ์ •๋ฉด์— ์žˆ๋Š” ํ•จ์ˆ˜์—์„œ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ๋ฆ„์„ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆใ„ธ.

๐ŸฆŠNode.js 2์ผ์ฐจ

๐Ÿ‘ปย Template Literal

Template Literal

: ๋‚ด์žฅ๋œ ํ‘œํ˜„์‹์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด๋‹ค.

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์€ ํ‘œํ˜„์‹/๋ฌธ์ž์—ด ์‚ฝ์ž…, ์—ฌ๋Ÿฌ์ค„ ๋ฌธ์ž์—ด, ๋ฌธ์ž์—ด ํ˜•์‹ํ™”, ๋ฌธ์ž์—ด ํƒœ๊น…๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

const apple = 3;
const banana = 2;

console.log("์ฒ ์ˆ˜๋Š” ์‚ฌ๊ณผ๋ฅผ " + apple + "๊ฐœ, " + "๋ฐ”๋‚˜๋‚˜๋ฅผ " + banana + "๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.");
console.log(`์ฒ ์ˆ˜๋Š” ์‚ฌ๊ณผ๋ฅผ ${apple}๊ฐœ, ๋ฐ”๋‚˜๋‚˜๋ฅผ ${banana}๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.`);  // ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด

์ด์ฒ˜๋Ÿผ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐํ„ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ๊ฐ์‹ธ์ฃผ์ง€ ์•Š์•„๋„ ๋ฌธ์ž์—ด ์‚ฝ์ž… ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ‘œํ˜„์‹์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `` ์•ˆ์— ${}์„ ๊ฐ์‹ธ์ค˜์•ผํ•œ๋‹ค.

๐Ÿ‘ปShorthand property

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” key-value๋ฅผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ.๊ฐ™์€ ๋‹จ์–ด๋ฅผ ๋‘๋ฒˆ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

๊ฐ์ฒด์—์„œ ํ‚ค ๋ฐธ๋ฅ˜๋ช…์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ถ•์•ฝํ•ด์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค.

1. shorthandย propertyย names

shorthand property names์€ ๊ฐ์ฒด์—์„œ key์™€ value๋ช…์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ถ•์•ฝํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

*//๊ธฐ์กด ๊ฐ์ฒด ์ฝ”๋“œ*

const obj = {
  name: name,
  color: color,
  x: x,
  y: ,
};

*//shorthand property names๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ*

const obj = {
  name,
  color,
  x,
  y,
};

๐Ÿ‘ปย Destructuring(๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น)

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

: ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•ด์ฒดํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์ด๋‹ค.

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ํ•จ์ˆ˜์— ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ณค ํ•˜๋‚Ÿ. ๊ฐ€๋”์€ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋Ÿด๋–„ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

function zzz(aaa){ // const aaa = basket
    console.log(aaa) // ๊ฐ์ฒด
    console.log(aaa.apple) // 3
    console.log(aaa.banana) // 10
}

const basket = {
    apple: 3,
    banana: 10
}
zzz(basket)

์ฝ˜์†”์„ ํ™•์ธํ•ด๋ณด๋ฉด ,aaa ๋Œ€์‹ ์— { apple: 3, banana: 10 } ์ธ basket ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ์„ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ•˜๋ฉด

// ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌ
function zzz({ apple, banana }){ // const { apple, banana } = basket
    console.log(apple) // 3
    console.log(banana) // 10
}

const basket = {
    apple: 3,
    banana: 10
}
zzz(basket)

๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ key๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋˜๋ฉด,

ํ•จ์ˆ˜ ์‹คํ–‰์‹œ ์ธ์ž์˜ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์ฐพ์•„์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•œ ํ•จ์ˆ˜ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

const user = {
    name: '์ฒ ์ˆ˜',
    age: 13,
    school: '๋‹ค๋žŒ์ฅ์ดˆ๋“ฑํ•™๊ต',
    createdAt: '2010-09-07',
}

const name = user.name
const age = user.age
const school = user.school
const createdAt = user.createdAt

// ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น
const {name, age, school, createdAt} = user

user ๊ฐ์ฒด์— ์ผ์ผ์ด ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณ€์ˆ˜ ๋ช…์„ ์žฌํ• ๋‹นํ•œ๊ฒƒ๋ณด๋‹ค ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•œ๊ฒŒ 
๊ตฌ์กฐ๋ถ„ํ•ด๋กœ ์žฌํ• ๋‹นํ•œ ๋ถ€๋ถ„์ด ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์ค„์—ฌ์ค˜ ์ข€๋” ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

const classmates = ['์ฒ ์ˆ˜', '์˜ํฌ', 'ํ›ˆ์ด'];

const child1 = classmates[0];
const child2 = classmates[1];
const child3 = classmates[2];

// ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ์ด์šฉํ•ด
// child1์—” arr[0]
// child2์—” arr[1]
// child3์—” arr[2]์„ ํ• ๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค.
const [child1, , child2, child3] = classmates;

๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ์ƒใ…‡ํ•˜์—ฌ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ถ€๋ถ„์„ ํ•œ์ค„๋กœ ์ •๋ฆฌํ•˜์˜€๋‹ค.

๊ฐ์ฒด๋Š” ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์‹œ ๊ฐ์ฒด ์•ˆ์˜ Key๊ฐ’์„ ๊ฐ€์ ธ์™€ ํ• ๋‹น!
๋ฐฐ์—ด์€ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์‹œ ๋ฐฐ์—ด์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”! 

๐ŸฆŠNode.js 3์ผ์ฐจ

๐Ÿ‘ปHTTP ์™€ REST_API / Graphql_API

๐Ÿ‘ปHTTP

HTTP : Hyper Text Transfer Protocol ์˜ ๋‘๋ฌธ์ž์–ด๋กœ, ์ธํ„ฐ๋„ท์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ

ํ”„๋กœํ† ์ฝœ : ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ, ๋˜๋Š” ์ปดํ“จํ„ฐ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ตํ™˜ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๊ทœ์น™ ์„ธ๊ณ„
โ‡’ ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๋ฒ•, ์˜ค๋ฅ˜์ฒ˜๋ฆฌ, ์•”ํ˜ธ, ์ธ์ฆ , ์ฃผ์†Œ ๋“ฑ์„ ์ •์˜ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋Š” ๋ฐฑ์—”๋“œ์—๊ฒŒ ์š”์ฒญ์„ ํ•˜๋Š”๋ฐ API๋ผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

API : HTTP ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ ์ปดํ“จํ„ฐ์— ๋ณด๋ƒˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฐฑ์—”๋“œ ๊ธฐ๋Šฅ์ด๋‹ค.

์„œ๋ฒ„๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„  ๊ฐ๊ฐ์˜ HTTP๋ผ๋Š” ๊ธธ์ด ์กด์žฌํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์š”์ฒญ๋งˆ๋‹ค ๋‹ด๋‹ด์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค

๊ทธ ๋‹ด๋‹น์ž๋ฅผ API ๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ‘ปย API ์ข…๋ฅ˜(Rest-API vs GraphQL-API) ์˜ ์ฐจ์ด์ 

  1. ํ•จ์ˆ˜ ์ด๋ฆ„์˜ ์ฐจ์ด

  1. ์‘๋‹ต ๊ฒฐ๊ณผ๋ฌผ์˜ ์ฐจ์ด

Rest-API ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— GraphQL-API ๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ณจ๋ผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

Rest ์š”์ฒญ๋‹ด๋‹น์ž๋Š” axios , Graphql ์š”์ฒญ ๋‹ด๋‹น์ž๋Š” apollo-client ์ด๋‹ค.

API ์‘๋‹ต ์ฃผ๋Š” ๋ฒ• CRUD

swagger๋Š” Rest-API๋ฅผ ์œ„ํ•œ ์„ค๋ช…์„œ (์ „์ฒด ์กฐํšŒ)

playground๋Š” GraphQL-API๋ฅผ ์œ„ํ•œ ์„ค๋ช…์„œ (์ฟผ๋ฆฌ ์–ธ์–ด๋กœ ๊ฐœ๋ณ„ ์กฐํšŒ ๋ฐ ์ˆ˜์ • ๊ฐ€๋Šฅ)

Error: listen EADDRINUSE: address already in use :::3000

ํ˜น์‹œ ์ด๋Ÿฐ ์—๋Ÿฌ ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋‚˜์š”?
์œ„์—์„œ ์‚ดํŽด๋ณด์•˜๋“ฏ์ด ํ•˜๋‚˜์˜ ํฌํŠธ ๋ฒˆํ˜ธ์—๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์„ค๋ช…์„ ์ฝ๊ณ , ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ด์ฃผ์„ธ์š”!

๋งŒ์•ฝ์— ์„œ๋ฒ„๊ฐ€ ์ผœ์ง„ ํ„ฐ๋ฏธ๋„์„ ์ฐพ์„ ์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด,

ํ„ฐ๋ฏธ๋„์— netstat -anv | grep LISTEN ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์„ธ์š”.

3000๋ฒˆ ํฌํŠธ๋กœ ์„œ๋ฒ„๋ฅผ ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ถ€๋ถ„์„ ์ฐพ์•„, process id๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ด ์•„์ด๋””๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

kill -9 ํ”„๋กœ์„ธ์Šค_์•„์ด๋”” ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” kill -9 7381๊ฐ€ ๋˜๊ฒ ๋„ค์š”.

๋‹ค์‹œ netstat -anv | grep LISTEN ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ ํ™•์ธํ•ด๋ณด๋ฉด, 3000๋ฒˆ ํฌํŠธ์—์„œ ๋™์ž‘์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์€ ์—†๋‹ค๋Š”๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
๊ฐ„์ ˆํ•˜๊ณ  ์น˜์—ดํ•˜๊ฒŒ ์‚ด์ž

0๊ฐœ์˜ ๋Œ“๊ธ€