๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study

ํ’€์Šคํƒ์œผ๋กœ ์ฝ”๋กœ๋‚˜ ํ™•์ง„์ž ์ง€๋„ ์„œ๋น„์Šค ๋งŒ๋“ค์–ด๋ณด๊ธฐ

๐Ÿ“Œ  ํ”„๋ก ํŠธ์—”๋“œ(reactjs), ๋ฐฑ์—”๋“œ(nodejs, mysql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค), ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„(aws) ์˜์—ญ์„ ๋ชจ๋‘ ์ด์šฉํ•˜๊ธฐ 

 

React.js๋ž€?

 

๐Ÿ“Œ ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ Component ๋‹จ์œ„๋กœ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•ด, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ, ์ด์‹์„ฑ, ์žฌํ™œ์šฉ์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ํ™”๋ฉด์— ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ทธ๋ ค์ฃผ๋Š” ๋ Œ๋”๋ง ํšจ์œจ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ํ•œ๋งˆ๋””๋กœ, ์‚ฌ์šฉ์ž ๋ˆˆ์— ๋ณด์ด๋Š” ํ™”๋ฉด ์˜์—ญ(ํ”„๋ก ํŠธ์—”๋“œ)์„ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

 

 

Node.js๋ž€?

๐Ÿ“Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๊ฐ„์˜ ๋ฐฑ์—”๋“œ ์ง€์› ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์‰ฌ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ๋ณต์žกํ•œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ด, ๊ฐœ์ˆ˜๋Š” ๋งŽ์ง€๋งŒ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์œ ๋ฆฌํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, DB๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ณต์žกํ•œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. (ํ”„๋ก ํŠธ์—”๋“œ ์–ธ์–ด์ธ react์—์„œ๋Š” DB๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

 

 

MySQL์ด๋ž€?

 

๐Ÿ“Œ ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ์›น ์‚ฌ์ดํŠธ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€, ๊ด€๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ“Œ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๋Š” ์กฐํšŒ, ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

AWS๋ž€?

๐Ÿ“Œ ํด๋ผ์šฐ๋”ฉ ์ปดํ“จํŒ… ์„œ๋น„์Šค๋กœ, ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹Œ ์ธํ„ฐ๋„ท์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ปดํ“จํ„ฐ๋ฅผ ์˜จ๋ผ์ธ์œผ๋กœ ๋Œ€์—ฌํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์‚ฌ์šฉ์ž๋Š” ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ง€๋ถˆํ•˜๊ณ  ์ปดํ“จํ„ฐ ์ž์›์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ˆ˜์—…์—์„œ๋Š” mysql ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•  RDS ์ธ์Šคํ„ด์Šค, react์™€ node์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•  EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ React๋Š” html, css, javascript๋ฅผ ์‚ฌ์šฉํ•ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Node๋Š” React์„œ๋ฒ„์˜ ํ˜ธ์ถœ์„ ๋ฐ›์•„, ์‹คํ–‰ํ•  Mysql์ฟผ๋ฆฌ๋ฅผ mysql์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Mysql์—์„œ ์‹คํ–‰ํ•œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ, React์„œ๋ฒ„์— ์ „๋‹ฌํ•ด ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ React > Node > Mysql๋ฅผ ๋ชจ๋‘ AWS์— ๋ฐฐํฌํ•˜๋ฉด, ์™ธ๋ถ€์—์„œ๋„ ์ ‘์†๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๋ผ์šฐํŒ… : ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ๋กœ์— ๋งž๋Š” ํ™”๋ฉด ๋˜๋Š” ๋กœ์ง์„ ๋งค์นญํ•ด ์ฃผ๋Š” ๊ฒƒ. 

๋ฆฌ์•กํŠธ์—์„œ๋Š” ํ™”๋ฉด์„. ๋…ธ๋“œ์—์„œ๋Š” ๋กœ์ง์„ ๋งค์นญํ•ด์คŒ. 

 

๐Ÿ“Œ npm์€ node package manager๋กœ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ“Œ yarn๋„ npm๊ณผ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์Šค๋ถ์—์„œ npm์„ ๊ฒฝ๋Ÿ‰ํ™”ํ•ด ๋งŒ๋“  ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.


ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

 

๐Ÿ“Œ react์—์„œ node์„œ๋ฒ„ ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ํ˜ธ์ถœ URL์„ ๊ฐ„ํ˜ธํ™” ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ) localhost:5000/users > /users

 

๐Ÿ“Œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด cors์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

http (HyperText Transfer Protocol)

- ์›น์ƒ์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์š”์ฒญ/์‘๋‹ต์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ

 

 

http get๋ฉ”์†Œ๋“œ

 

๐Ÿ“Œ get๋ฉ”์†Œ๋“œ๋Š” ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , URL์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ) ?name=value&name2=value2

 

๐Ÿ“Œ ๋‹จ์ˆœ ์กฐํšŒ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 

http post๋ฉ”์†Œ๋“œ

๐Ÿ“Œ post๋ฉ”์†Œ๋“œ๋Š” http body์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. URL์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ณ , ์ „์†ก ๊ธธ์ด ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ์กฐํšŒ๋ฅผ ํฌํ•จํ•ด ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

corsํŒจํ‚ค์ง€ ์„ค์น˜

๐Ÿ“Œ node์„œ๋ฒ„์— cors์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋ฉด, react์™€ node์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„์ด์ง€๋งŒ ํ”„๋ก์‹œ ์„ค์ • ์—†์ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ์‚ฌ์šฉ ๋ช…๋ น์–ด

cors ํŒจํ‚ค์ง€ ์„ค์น˜ : [npm install --save cors]

 

proxy๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 

 

const callApi = async () => {
    try{
    const response = await fetch('http://localhost:5000/users');
    const body = await response.text();
    alert(body)
  } catch (error) {
    alert(error)
  }
  };
 
 

์—ฌ๊ธฐ์„œ localhost5000์„ ์ƒ๋žตํ•ด๋„ ๋˜๊ณ  

cors ์„ค์ •๋„ ๋ถˆํ•„์š”ํ•จ.

 

--> client package.json์— ์ด์™€ ๊ฐ™์ด ์„ค์ • 

  "proxy": "http://127.0.0.1:5000/"

 


html์†Œ์Šค๋ฅผ jsx์— ์ ์šฉํ•  ๋•Œ, ์ฃผ์˜ํ•  ์ 

 

๐Ÿ“Œ jsx์—์„œ๋Š” ๊ผญ ๋‹ซ์•„์ค˜์•ผ ํ•˜๋Š” htmlํƒœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ {/* ์ฃผ์„ *}๋ฌธ๋ฒ•์œผ๋กœ ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ํ•˜์œ„ ํƒœ๊ทธ๋ฅผ ๊ฐ์‹ธ์•ผํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ class๋Œ€์‹  className์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ์นด๋ฉœํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

reactstrap์ด๋ž€

๐Ÿ“Œ bootstrap๊ณผ react์˜ ํ•จ์„ฑ์–ด๋กœ, react์—์„œ bootstrap์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ๋œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

 

state๋ณ€์ˆ˜๋ž€

๐Ÿ“Œ react์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“Œ javascript์™€ html์ฝ”๋“œ ์˜์—ญ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ state๋ณ€์ˆ˜์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜, ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.