250x250
๋ฐ˜์‘ํ˜•
Notice
Recent Posts
Recent Comments
Link
ยซ   2024/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

BEAT A SHOTGUN

[AWS] ์ž๋ฐ”์ฝ”๋“œ์—†์ด REACT ์—์„œ RDS ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ. ์ง„์งœ AtoZ ๋ณธ๋ฌธ

PROJECT

[AWS] ์ž๋ฐ”์ฝ”๋“œ์—†์ด REACT ์—์„œ RDS ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ. ์ง„์งœ AtoZ

thovy 2022. 11. 21. 04:26
728x90
๋ฐ˜์‘ํ˜•
SMALL

์‹œ์ž‘ ๐Ÿ‘Š

์„ฑ๊ณตํ•ด์„œ ์ด ๊ธ€์„ ์“ฐ๊ธฐ ๊นŒ์ง€ 3์ผ์ด๋‚˜ ๊ฑธ๋ ธ๋‹ค. ๋งค์ผ ์ƒˆ๋ฒฝ 4์‹œ๊นŒ์ง€ ํ‚ค๋ณด๋“œ ๋ถ€์…”๊ฐ€๋ฉด์„œ 502 504 ์™€ ์”จ๋ฆ„ํ–ˆ์ง€๋งŒ. ์—๋Ÿฌ์˜ ์›์ธ์€ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋˜ ๊ฒƒ๋“ค์ด ์•„๋‹ˆ์—ˆ๋‹ค. ์ „๋ถ€.

๊ธฐ๋ณธ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ซ๋Š” 3์ผ์ด์—ˆ๋‹ค.

์šฐ์„  ๋‚˜๋Š” ์ž๋ฐ”์ฝ”๋“œ ์—†์ด react ๋งŒ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—
์ž๋ฐ” api ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ€ ์—†๋‹ค. mysql ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๊ณ  RDS ๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ, RDS ๋งŒ๋“ค๊ธฐ
๋๊นŒ์ง€ ์ธํ…”๋ฆฌ์ œ์ด๋ฅผ ์ผœ๊ธฐ ์‹ซ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— RDS ๋กœ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•  ์ˆœ ์—†๋‚˜? ํ•ด์„œ 3์ผ๋™์•ˆ ๋™๋™ ์•“์•˜๋‹ค.

ํŠน๋ณ„ํ•˜๊ฒŒ
๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑด
๋‚˜๋Š” TS , http-proxy-middleware ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ express ์™€ mysql ์„ ์‚ฌ์šฉํ•  ๊ฑฐ๋‹ค.
์ด๊ฒŒ ์ด ํŒŒํŠธ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ๋“ค์ด๊ณ  ๋‚˜๋จธ์ง„ ๋ญ ๋‹ฌ๋ผ์ ธ๋„ ์ƒ๊ด€ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค.

์ง„์งœ ์‹œ์ž‘ ๐Ÿ‘Š

๊น”์•„์•ผํ•  ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

  1. express
    npm install express

  2. mysql
    npm install mysql

  3. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— crypt ๊ฐ€ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด
    npm install bcrypt

    ํ•˜์ง€๋งŒ (๊ธฐ์ดˆ์ง€์‹์ด ์—†๋Š”) ๋‚ด๊ฐ€ ๋ดค์„ ๋• crypt ํ•„์š”์—†๋‹ค. ์—๋Ÿฌ๋‚˜๋ฉด ๊ทธ ๋•Œ ๊น”์ž.

์„ค์น˜ ๋

์ง„์งœ ์ง„์งœ ์‹œ์ž‘ ๐Ÿ‘Š

์„œ๋ฒ„๋งŒ๋“ค๊ธฐ

  1. server ํด๋”๋ฅผ ๋งŒ๋“ ๋‹ค.

    config ์•ˆ ๋งŒ๋“ค์–ด๋„ ๋œ๋‹ค. ํ•„์š”์—†๋‹ค.

  2. express ๋กœ test ๋ฅผ ํ•ด๋ณธ๋‹ค. ์ผ๋‹จ ๋จผ์ € ์„œ๋ฒ„๊ฐ€ ๋˜์•ผํ•˜๋‹ˆ๊นŒ.

  3. server.js ๋ฅผ ๋งŒ๋“ ๋‹ค. ts๋Š” ์•ˆ๋œ๋‹ค.

    // server.js
    // express ๋ชจ๋“ˆ ํ˜ธ์ถœ
    const express = require('express');
    const app = express();
    const PORT = process.env.PORT || 4000;
    

// localhost:4000 ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด ์‘๋‹ตํ•˜๋Š” api
app.get('/', (req,res) =>{
res.send( {test:'Server Response Success'} );
})

// vscode ํ„ฐ๋ฏธ๋„์— ์ฐํž log
app.listen(PORT, () => {
console.log(Server run : http://localhost:${PORT}/)
})

// ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ
module.exports = app;


4. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ
```bash
C:\Users\ ... \project> cd server
C:\Users| ... \project\server> node server.js

๋ฅผ ์ž…๋ ฅํ•ด server ํด๋”์—๋“ค์–ด๊ฐ€์„œ server ๋ฅผ ์ผœ์ค€๋‹ค.

  1. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด, ํ„ฐ๋ฏธ๋„์—์„œ๋Š” Server run : http://localhost:4000/ ์ด ์ถœ๋ ฅ๋˜๊ณ 
  2. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:4000 ์— ์ ‘์†ํ•˜๋ฉด {test:Server Response Success} ๊ฐ€ ์ถœ๋ ฅ๋˜์–ด์žˆ์„ ๊ฑฐ๋‹ค.

๋”ฐ๋ž€~!

์„œ๋ฒ„์— React ์—ฐ๊ฒฐํ•˜๊ธฐ

์„œ๋ฒ„๋Š” ๋งŒ๋“ค์—ˆ๊ณ , react axios ๋กœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

  1. axios ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋  ๊ณณ์—(๋‚˜๋Š” App.tsx ์—์„œ useEffect ๋กœ ์‚ฌ์šฉํ•  ๊ฑฐ๋‹ค.) get ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ์š”์ฒญ์„ ํ•ด์ค€๋‹ค.
    // App.tsx
    ...
    

useEffect(()=>{
awsTest()
},[])

function awsTest(){
axios.get('/api/test')
.then((response)=>{
console.log("awsTest",response);
})
.catch((error)=>{
console.log("error", error);
})
}


2. `setupProxy.js` ์—์„œ `/api` ๋ฅผ ๋ฐ›์•„์•ผํ•˜๋‹ˆ๊นŒ ์„ค์ •ํ•ด์ฃผ์ž.
```js
// setupProxy.js

module.exports = (app)=>{
  ...
  app.use(
    createProxyMiddleware('/api',{
      target:'http://localhost:4000',
      changeOrigin:true
    })
  )
  ...
}
  1. ๊ทธ ๋‹ค์Œ, server.js ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์กฐ๊ธˆ ์ „์— ๋งŒ๋“ค์—ˆ๋˜ / ์„ /api/test ๋กœ ๋ฐ”๊ฟ”๋†“์œผ๋ฉด
    ์šฐ๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ server ๊ฐ€ ๋ณด๋‚ธ Server Reseponse Success ๋ฐ›๊ฒŒ ๋œ๋‹ค.
    ์•„๋งˆ console ์— ๋“ค์–ด์˜จ response.data.test ์— ๋ณด๋ฉด ์žˆ์„ ๊ฑฐ๋‹ค.

๊ฐœ์šดํ•˜๋‹ค

์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ์ด์ œ ๋๋‚ฌ๋‹ค. ์ด์ œ rds ์— ์ ‘์†ํ•ด ์ฟผ๋ฆฌ๋งŒ ๋‚ ๋ฆฌ๋ฉด ๋œ๋‹ค.

MySQL ๋กœ RDS ์— ๋ฐ์ดํ„ฐ ์š”์ฒญํ•˜๊ธฐ

  1. server.js ์— ์ ์–ด๋ฒ„๋ฆฌ์ž. ๋‹ค๋ฅธ ๊ณณ์— ์ ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ๋˜๋ฐ, ๋‚œ ๊ทธ๋Ÿฐ ๊ฑด ๋ชจ๋ฅด๊ฒ ๊ณ . ์™ ์ง€ ๋ชฐ๋ผ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ค๊ฐ€ 3์ผ์„ ๋ณด๋ƒˆ๋‹ค.
    // server.js
    

...

const mysql = require('mysql'); // express ๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ ์ฒ˜๋Ÿผ mysql ๋„ ๊ฐ€์ ธ์˜ค์ž.
connection = mysql.createConnection({
host:'RDS์˜ ์—”๋“œํฌ์ธ๋“œ',
port:'RDS์˜ ํฌํŠธ',
user:'RDS์˜ ๋งˆ์Šคํ„ฐ ์‚ฌ์šฉ์ž ์ด๋ฆ„',
password:'RDS์˜ ๋งˆ์Šคํ„ฐ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ',
database:'๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„', // RDS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹๋ณ„์ž๊ฐ€ ์•„๋‹˜.
});

...


2. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐ‘์— `/api/test` API ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•ด๋ณด์ž.
```js
// server.js

...

app.get('/api/test', (req,res) => {
    var sql = 'SELECT * FROM viewcount'
    connection.connect(function(err){
        if(err){
            throw console.log("servererror", err);
        }else{
            connection.query("SELECT * FROM viewcount", function(err, rows, fields){
                console.log(rows);
                res.send(rows);
            })
        }
    })
})

...

์ฐธ๊ณ : AWS RDS Docs

  1. ์šฐ๋ฆฌ๊ฐ€ App.tsx ์—์„œ axios ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด, response ๋ฅผ console ์— ์ฐ๋„๋ก ํ–ˆ์œผ๋‹ˆ

heide ๋กœ ์ž„์‹œ๋กœ ๋„ฃ์–ด์คฌ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€

๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—๋„ ์ž˜ ํ‘œํ˜„๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋

๋„ˆ๋ฌด ์‰ฝ๋‹ค.

๊ฒฐ๋ก ์€

ํ”„๋ก ํŠธ axios ๋กœ ์š”์ฒญํ•˜๊ณ  ๋ฐฑ์—”๋“œ ์—ญํ• ์„ ํ•  express ๊ฐ€ RDS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฑฐ๋‹ค.
๊ทธ๋ž˜์„œ express api ๊ฐ€ axios ๋ฅผ ์ž˜ ๋ฐ›์•„์ฃผ๋ฉด์„œ RDS ์— ์ œ๋Œ€๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

504 error 502 error ๋กœ skip-name-resolve๋ฅผ ON ์œผ๋กœ ๋ฐ”๊ฟ”๋ผ. time ์„ ๋Š˜์—ฌ๋ผ ๋“ฑ๋“ฑ ๋‹ค ํ–ˆ์ง€๋งŒ, ๋‚˜๋Š” ๋ญ˜ ๋ฐ”๊ฟ€๋ ค๊ณ  ํ•ด๋„ ๋ฐ”๋€Œ์ง€๋„ ์•Š๊ณ ,

๋ณ„์˜ ๋ณ„ ์ง“์„ ๋‹ค ํ–ˆ์ง€๋งŒ,

๊ธฐ๋ณธ์„ ์•Œ๊ณ  ์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋ฉด ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ํ’€๋ฆฌ๋Š” ๊ฑฐ๋‹ค.
์—‰๋ง์ง„์ฐฝ

๊ฒฐ๋ก : ์“ธ๋ฐ์—†๋Š” ์—๋Ÿฌ๋กœ ๊ณ ๋ฏผํ•˜์ง€๋ง๊ณ  ๊ธฐ๋ณธ ๋กœ์ง์„ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜์ž!

axios - express - database

proxymiddleware ๋ฅผ ์•ˆ ์“ธ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ฉด ์–ด์ฉŒ๋‚˜? proxy๋ฅผ ํ•ด์•ผ์ง€ ;

์ง„์งœ ๋

3 ์ผ๋™์•ˆ ๊ณ ์ƒํ–ˆ๋‹ค.
3 ์ผ๋™์•ˆ ๋‹ค์–‘ํ•œ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๊ณ  ๋‹ค์–‘ํ•œ ํ•ด๊ฒฐ๋ฒ•์„ ๋ณด๊ณ  ์‹œ๋„ํ•ด๋ดค์ง€๋งŒ ์ œ๋Œ€๋กœ ํ•ด๊ฒฐ ๋œ ๊ฑด ์—†์—ˆ๋‹ค.
๊ฒฐ๊ตญ ๋‚ด๊ฐ€ ํ•˜๋‹ค๋ณด๋‹ˆ '์•„ ์ด๊ฒŒ ์ด๋ ‡๊ฒŒ ๋˜๋Š”๊ฑฐ์˜€๋„ค? ๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ํ•˜๋Š”๊ฑฐ ์•„๋‹๊นŒ?' ํ•˜๊ณ  ๋š๋”ฑ๋š๋”ฑ ํ•ด๋ณธ ๊ฑฐ๋‹ค.
์ง€๊ธˆ ๋‹น์žฅ๋งŒ ๋ด๋„ ์ค‘์š”ํ•œ path ์™€ ์ •๋ณด๋“ค์„ env ํŒŒ์ผ์— ๋„ฃ์ง€๋„ ์•Š๊ณ  ์—ฐ๊ฒฐ๋งŒ ๋ผ๋ผ ์ œ๋ฐœ...!!! ํ•˜๋ฉด์„œ ๋งŒ๋“ ๊ฑฐ๋ผ.
์•ž์œผ๋กœ ๊ณ ์ณ์•ผํ•  ๋ถ€๋ถ„์ด ๋งŽ๋‹ค.

๋š๋”ฑ์ด๊ฐ€ ๋˜๊ธฐ ์‹ซ์œผ๋ฉด ๊ธฐ๋ณธ์„ ๊ณต๋ถ€ํ•˜์ž! (569384๋ฒˆ์งธ ๋งํ•จ)

์ด์ œ ์šฐ๋ฆฌ๋Š” ์ž๋ฐ”์ฝ”๋“œ ์—†์ด ts, js ๋กœ ํ”„๋ก ํŠธ ๋ฐฑ ๋ชจ๋‘ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
LIST
Comments