์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- AWS EC2
- deploy
- springboot
- linux
- fastapi
- github
- webhook
- 500
- Java
- MongoDB
- Github Actions
- React
- python
- js
- RDS
- TypeScript
- MUI
- error
- Spring
- axios
- javascript
- Express
- ngrok
- docker
- macbook
- nodejs
- Jenkins
- EC2
- AWS
- Troubleshooting
- Today
- Total
BEAT A SHOTGUN
[AWS] ์๋ฐ์ฝ๋์์ด REACT ์์ RDS ์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ. ์ง์ง AtoZ ๋ณธ๋ฌธ
[AWS] ์๋ฐ์ฝ๋์์ด REACT ์์ RDS ์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ. ์ง์ง AtoZ
thovy 2022. 11. 21. 04:26์์ ๐
์ฑ๊ณตํด์ ์ด ๊ธ์ ์ฐ๊ธฐ ๊น์ง 3์ผ์ด๋ ๊ฑธ๋ ธ๋ค. ๋งค์ผ ์๋ฒฝ 4์๊น์ง ํค๋ณด๋ ๋ถ์ ๊ฐ๋ฉด์ 502 504 ์ ์จ๋ฆํ์ง๋ง. ์๋ฌ์ ์์ธ์ ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ๋ค์ด ์๋์๋ค. ์ ๋ถ.
๊ธฐ๋ณธ์ด ๋งค์ฐ ์ค์ํ๋ค๋ ๊ฑธ ๊นจ๋ซ๋ 3์ผ์ด์๋ค.
์ฐ์ ๋๋ ์๋ฐ์ฝ๋ ์์ด react ๋ง์ผ๋ก ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ์ถ์๊ธฐ ๋๋ฌธ์
์๋ฐ api ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ์๋ค. mysql ๋ ์ฌ์ฉํ์ง ์์๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์์ฑ์ ๋๊ผ๊ณ RDS ๋ฅผ ๋ง๋ค์์ง๋ง, RDS ๋ง๋ค๊ธฐ
๋๊น์ง ์ธํ
๋ฆฌ์ ์ด๋ฅผ ์ผ๊ธฐ ์ซ์๊ธฐ ๋๋ฌธ์ RDS ๋ก ๋ฐ๋ก ์ฐ๊ฒฐํ ์ ์๋? ํด์ 3์ผ๋์ ๋๋ ์์๋ค.
ํน๋ณํ๊ฒ
๋ด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ฑด
๋๋ TS , http-proxy-middleware ๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก express
์ mysql
์ ์ฌ์ฉํ ๊ฑฐ๋ค.
์ด๊ฒ ์ด ํํธ์์ ์ค์ํ ๊ฒ๋ค์ด๊ณ ๋๋จธ์ง ๋ญ ๋ฌ๋ผ์ ธ๋ ์๊ด ์์ ๊ฒ ๊ฐ๋ค.
์ง์ง ์์ ๐
๊น์์ผํ ๊ฒ๋ค์ด ์๋ค.
express
npm install express
mysql
npm install mysql
๊ทธ๋ฆฌ๊ณ ๋์ค์
crypt
๊ฐ ์๋ค๋ ์๋ฌ๊ฐ ๋ ์๋ ์๋๋ฐ ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉดnpm install bcrypt
ํ์ง๋ง (๊ธฐ์ด์ง์์ด ์๋) ๋ด๊ฐ ๋ดค์ ๋
crypt
ํ์์๋ค. ์๋ฌ๋๋ฉด ๊ทธ ๋ ๊น์.
์ค์น ๋
์ง์ง ์ง์ง ์์ ๐
์๋ฒ๋ง๋ค๊ธฐ
server
ํด๋๋ฅผ ๋ง๋ ๋ค.config
์ ๋ง๋ค์ด๋ ๋๋ค. ํ์์๋ค.express
๋กtest
๋ฅผ ํด๋ณธ๋ค. ์ผ๋จ ๋จผ์ ์๋ฒ๊ฐ ๋์ผํ๋๊น.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
๋ฅผ ์ผ์ค๋ค.
- ๊ทธ๋ ๊ฒ ๋๋ฉด, ํฐ๋ฏธ๋์์๋
Server run : http://localhost:4000/
์ด ์ถ๋ ฅ๋๊ณ - ์น ๋ธ๋ผ์ฐ์ ์์
localhost:4000
์ ์ ์ํ๋ฉด{test:Server Response Success}
๊ฐ ์ถ๋ ฅ๋์ด์์ ๊ฑฐ๋ค.
๋ฐ๋~!
์๋ฒ์ React ์ฐ๊ฒฐํ๊ธฐ
์๋ฒ๋ ๋ง๋ค์๊ณ , react axios ๋ก ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ด์ผํ๋ค.
- 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
})
)
...
}
- ๊ทธ ๋ค์,
server.js
์์ ์ฐ๋ฆฌ๊ฐ ์กฐ๊ธ ์ ์ ๋ง๋ค์๋/
์/api/test
๋ก ๋ฐ๊ฟ๋์ผ๋ฉด
์ฐ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ์์ server ๊ฐ ๋ณด๋ธServer Reseponse Success
๋ฐ๊ฒ ๋๋ค.
์๋ง console ์ ๋ค์ด์จ response.data.test ์ ๋ณด๋ฉด ์์ ๊ฑฐ๋ค.
๊ฐ์ดํ๋ค
์ฐ๊ฒฐ์ ์ฑ๊ณตํ๋ค๋ฉด ์ด์ ๋๋ฌ๋ค. ์ด์ rds ์ ์ ์ํด ์ฟผ๋ฆฌ๋ง ๋ ๋ฆฌ๋ฉด ๋๋ค.
MySQL ๋ก RDS ์ ๋ฐ์ดํฐ ์์ฒญํ๊ธฐ
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
- ์ฐ๋ฆฌ๊ฐ
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 ๋ก ํ๋ก ํธ ๋ฐฑ ๋ชจ๋ ํด๊ฒฐํ ์ ์๊ฒ ๋์๋ค.
'PROJECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PROJECT] ๋ฐฐํฌ์ ์์ - Jenkins ์ค์นํ๊ธฐ๋ถํฐ EC2์ ๋น๋๊น์ง (1) | 2022.11.29 |
---|---|
[REACT] useState ๋์ useMemo ๋ฅผ ์ฌ์ฉํด๋ณด์ (0) | 2022.11.23 |
[AWS] REACT ์ ์ฐ๊ฒฐํ AWS RDS ๋ง๋ค๊ธฐ (1) | 2022.11.21 |
[Recharts] ๋ ์ฐจํธ๋ฅผ Synchronize ํด ์ง์ง ์ฃผ์ ์ฐจํธ์ฒ๋ผ ๋ง๋ค๊ธฐ (0) | 2022.11.16 |
[JS] ๊ณต๊ฐ๋๋ฉด ์ ๋๋ secret key ๋ฅผ .env ํ์ผ์ ๋ฃ์ด๋๊ธฐ (0) | 2022.11.15 |