์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํ๋ธ๋ก
- ํ ์คํธ๋ง์ด๋
- ์์ฐ์ด์ฒ๋ฆฌ
- ํ๋ธ๋ฃจ
- abap
- erp
- ๋ฆฌ์กํธ
- nlp
- ๋น ๋ฐ์ดํฐ
- react
- Git
- ์ฝ๋ฉํ ์คํธ
- ํ์ด์ฌ
- AWS
- ํ ์คํธ๋ถ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ์ดํฐ๋ถ์
- ์๋ง์กด์น์๋น์ค
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝํ
- sap
- github
- ๋ฐ์ดํฐ ๋ถ์
- AI
- DFS
- ๊นํ๋ธ
- ๋ฐฑ์ค
- tableau
- ์ธ๊ณต์ง๋ฅ
- ๋ฅ๋ฌ๋
- Today
- Total
Hey Tech
ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (1) React ๊ธฐ๋ฐ Frontend ๊ฐ๋ฐ ๋ณธ๋ฌธ
ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (1) React ๊ธฐ๋ฐ Frontend ๊ฐ๋ฐ
Tony Park (ํ ๋) 2022. 6. 8. 11:46๐ ์๋ฆฌ์ฆ ํฌ์คํ
1. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (1) React ๊ธฐ๋ฐ Frontend ๊ฐ๋ฐ
2. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (2) AWS IAM ์ญํ ์์ฑ
3. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (3) AWS Lambda ์์ฑ
4. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (4) AWS S3 ์์ฑ
5. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (5) AWS API Gateway ์์ฑ
6. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (6) AWS Lambda ํจ์ ์์ฑ
7. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (7) Axios ๊ธฐ๋ฐ API Call
8. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (8) ํ์ผ ์ ๋ก๋ ํ ์คํธ
9. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (9) AWS S3 ๊ธฐ๋ฐ ์น ํธ์คํ
๐จ๐ป ๋ค์ด๊ฐ๋ฉฐ
๋ณธ ํฌ์คํ ์์๋ React๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ผ์ ์ ๋ก๋ํ๋ ์น ํ์ด์ง๋ฅผ(frontend) ๊ตฌ์ถํฉ๋๋ค. ์ค์ ํ์ผ์ ์ ๋ก๋ํ๊ธฐ ์ํด์๋ ์๋ฒ๊ฐ ํ์ํฉ๋๋ค. ๋ณธ ํ๋ก์ ํธ์์๋ ์๋ฒ ๊ตฌ์ถ์ ํด๋ผ์ฐ๋ ์๋น์ค์ธ Amzoan Web Service(AWS)๋ฅผ ํ์ฉํ์ฌ ๊ตฌ์ถํฉ๋๋ค.
๐ ๋ชฉ์ฐจ
1. ์ฌ์ ์์
2. ์คํ ๊ฒฐ๊ณผ
3. ์ ์ฒด ์ฝ๋
4. ์ฝ๋ ์ค๋ช
1. ์ฌ์ ์์
node, npx, IDLE๋ฅผ ๋จผ์ ์ค์นํด ์ฃผ์ธ์.
1.1. Node ์ค์น
1) Window OS
์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
https://heytech.tistory.com/199
2) Mac OS
Mac ์ฌ์ฉ์๋ผ๋ฉด ์๋ ๊ณต์ ์น ํ์ด์ง์ ์ ์ํ์
์ ๋ค์ด๋ก๋ํ์๋ฉด ๋ฉ๋๋ค(๊ทธ๋ฆผ 1).
https://nodejs.org/ko/download/
1.2. npx
1) npx ๊ฐ๋
npx๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๊ด๋ฆฌ ๋ชจ๋์ธ npm(Node Package Module) 5.2.0์ ์๋ก์ด ๋ฒ์ ๋ถํฐ ์๋ก ์ถ๊ฐ๋ CLI(Command-line interface) ํด์ ๋๋ค. npm๊ณผ ๋ค๋ฅธ ํจํค์ง ๊ด๋ฆฌ ๋ชจ๋์ด ์๋ npm์ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ธฐ ์ํด npm์์ ์ง์ ์ ๊ณตํ๋ ํด์ ๋๋ค.
2) npx ์ค์น
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด npx๋ฅผ ์ค์นํฉ๋๋ค.
npm install npx -g
1.3. IDLE
ํตํฉ๊ฐ๋ฐํ๊ฒฝ(IDLE)๋ฅผ ํ๋ ์ค์นํด ์ฃผ๋ฉด ํ๋ก์ ํธ ์์
์ด ํจ์ฌ ํธ๋ฆฌํฉ๋๋ค. ์ ๋ Microsoft์์ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ VS Code๋ฅผ ์ฌ์ฉ ์ค์
๋๋ค. ํ๋จ์ ๋งํฌ๋ฅผ ํตํด ๋ค์ด๋ก๋ ๋ฐ์ผ์๊ธธ ๋ฐ๋๋๋ค.
https://code.visualstudio.com/
2. ์คํ ๊ฒฐ๊ณผ
๋ณธ ํฌ์คํ
์ ์ต์ข
๊ฒฐ๊ณผ๋ฌผ์ ๊ทธ๋ฆผ 2์ ๊ฐ์ผ๋ฉฐ, ์คํ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
1) [ํ์ผ ์ ํ] ๋ฒํผ์ ํด๋ฆญํ์ฌ ์
๋ก๋ํ ํ์ผ์ ์ ํ
2) ํ์ผ์ ๋ํ ์ ๋ณด ์ถ๋ ฅ(ํ์ผ ์ด๋ฆ, ์ ํ, ์ต์ข
์์ ์ผ)
3) [ํ์ผ ์
๋ก๋] ๋ฒํผ์ ํด๋ฆญํ์ฌ ํ์ผ ์
๋ก๋ ์์ฒญ
3. ์ ์ฒด ์ฝ๋
์ฝ๋๋ Github์ ์
๋ก๋ํด ๋์์ต๋๋ค.
https://github.com/park-gb/file-uploader-frontend
4. ์ฝ๋ ์ค๋ช
Step by Step์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ๋ณธ ํฌ์คํ ์ ์ฝ๋๋ ์ด๊ณณ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค.
4.1. IDLE ์คํ
์์ ์ค์นํ IDLE(e.g., VS Code)์ ํฐ๋ฏธ๋์ ์ด์ด์ค๋๋ค.
4.2. create react app
ํฐ๋ฏธ๋์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ํด๋๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด ์ฃผ์๊ณ react app์ ์ค์นํฉ๋๋ค. ํฐ๋ฏธ๋ ๋ด ๋จ์ถํค๋ ์ด๊ณณ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
npx create-react-app ํ๋ก์ ํธ์ด๋ฆ
์ค์ ํ ํ๋ก์ ํธ ์ด๋ฆ์ ํด๋นํ๋ ํด๋๊ฐ ์์ฑ๋์์ ๊ฒ๋๋ค. ํด๋น ํด๋ ์์ผ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
cd ํ๋ก์ ํธ์ด๋ฆ
๋ฆฌ์กํธ ์ฑ์ด ์ ์ค์น๋์๋์ง ์๋ฒ๋ฅผ ์คํ์์ผ ๋ด ๋๋ค.
npm start
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฆฌ๊ณ ์๋์ ๊ทธ๋ฆผ 3๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์๋ค๋ฉด ์ ์์ ์ผ๋ก ์๋ฒ๊ฐ ์คํ๋ ๊ฒ์ ๋๋ค.
4.3. ๋ถํ์ํ ํ์ผ ์ ๊ฑฐ
ํ๋ก์ ํธ์์ ๋ถํ์ํ ํ์ผ์ ์ ๊ฑฐํ๊ณ ์์ํฉ๋๋ค.
1) packagelock.json
2) src/logo.svg
3) src/reportWebVitals.js
4) src/setupTests.js
5) src/App.test.js
4.4. App.js
import './App.css';
import React, {Component} from 'react';
class App extends Component{
state = {
selectedFile: null,
fileUploadedSuccessfully: false
}
onFileChange = event => {
this.setState({selectedFile : event.target.files[0]});
}
onFileUpload = () => {
const formData = new FormData();
formData.append(
"demo file",
this.state.selectedFile,
this.state.selectedFile.name
)
this.setState({selectedFile: null});
this.setState({fileUploadedSuccessfully: true});
}
fileData = () => {
if (this.state.selectedFile){
return(
<div>
<h2>ํ์ผ ์ธ๋ถ์ ๋ณด</h2>
<p>ํ์ผ๋ช
: {this.state.selectedFile.name}</p>
<p>ํ์ผ์ ํ: {this.state.selectedFile.type}</p>
<p>Last Modified: {" "}
{this.state.selectedFile.lastModifiedDate.toDateString()}
</p>
</div>
)
} else if (this.state.fileUploadedSuccessfully){
return(
<div>
<br />
<h4>ํ์ผ ์ ์ ์
๋ก๋!</h4>
</div>
)
} else{
return(
<div>
<br/>
<h4> ํ์ผ์ ์ ํํ๊ณ ์
๋ก๋ ๋ฒํผ์ ํด๋ฆญํด ์ฃผ์ธ์.</h4>
</div>
)
}
}
render(){
return (
<div className='container'>
<h2>ํ์ผ ์
๋ก๋ ์น ํ์ด์ง</h2>
<a href = "https://heytech.tistory.com" target="blank">Hey Tech ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ทธ</a>
<div>
<br></br>
<input type = "file" onChange = {this.onFileChange} />
<button onClick={this.onFileUpload}>
ํ์ผ ์
๋ก๋
</button>
</div>
{this.fileData()}
</div>
)
}
}
export default App;
1) state
2๊ฐ์ง state ๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ฌ๋ฌ ๋ก์ง์ ์ํํฉ๋๋ค.
- selectedFile: ํ์ผ ์ ํ ์ฌ๋ถ ํ์ธ์ฉ
- fileUploadedSuccessfully: ํ์ผ ์ ๋ก๋ ์ฌ๋ถ ํ์ธ์ฉ
2) onFileChange ํจ์
๋ ๋๋ง์์ input ํ๊ทธ์์ file ์ ํ์ผ๋ก ํ์ผ์ ์ ๋ก๋ ํ๊ธฐ ๋๋ฌธ์ event.target.files๋ก ํ์ผ์ด ์ ๋ฌ๋ฉ๋๋ค. ์ด ๊ฐ์ผ๋ก selectedFile์ state ๊ฐ์ ์ค์ ํฉ๋๋ค.
3) onFileUpload ํจ์
FormData ๊ฐ์ฒด๋ฅผ ์๋กญ๊ฒ ๋ง๋ค๊ณ ์ ํํ๋ ํ์ผ๊ณผ ํ์ผ๋ช ์ ์ ๋ ฅํฉ๋๋ค.
4) fileData ํจ์
(1) ํ์ผ ๋ฏธ์ ํ ์, ํ์ผ ์
๋ก๋ ๋ฐฉ๋ฒ ์ถ๋ ฅ
(2) ํ์ผ์ด ์ ํ๋ ๊ฒฝ์ฐ, ํ์ผ์ ๋ํ ์ธ๋ถ์ ๋ณด ์ถ๋ ฅ
(3) ํ์ผ ์
๋ก๋ ๋ฒํผ ํด๋ฆญ ์, ํ์ผ ์
๋ก๋ ์ฑ๊ณต ๊ฒฐ๊ณผ ์ถ๋ ฅ
4.5. App.css
css๋ฅผ ํตํด App.js์์ ๋ ๋๋ง๋๋ ์ ์์ญ์ ๊ฐ์ด๋ฐ ์ ๋ ฌํด ์ค๋๋ค.
.container{
text-align: center;
}
๋ค์ ํฌ์คํ ๋ถํฐ๋ AWS์ ์ฌ๋ฌ ์๋น์ค๋ฅผ ์ธํ ํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ๋ค๋ฃน๋๋ค.
๐ ์๋ฆฌ์ฆ ํฌ์คํ
1. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (1) React ๊ธฐ๋ฐ Frontend ๊ฐ๋ฐ
2. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (2) AWS IAM ์ญํ ์์ฑ
3. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (3) AWS Lambda ์์ฑ
4. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (4) AWS S3 ์์ฑ
5. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (5) AWS API Gateway ์์ฑ
6. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (6) AWS Lambda ํจ์ ์์ฑ
7. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (7) Axios ๊ธฐ๋ฐ API Call
8. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (8) ํ์ผ ์ ๋ก๋ ํ ์คํธ
9. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (9) AWS S3 ๊ธฐ๋ฐ ์น ํธ์คํ
ํฌ์คํ
๋ด์ฉ์ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ๋ณด์ํ ์ฌํญ์ด ์๋ค๋ฉด ์๋์ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ :)
๊ทธ๋ผ ์ค๋๋ ์ฆ๊ฒ๊ณ ๊ฑด๊ฐํ ํ๋ฃจ ๋ณด๋ด์๊ธธ ๋ฐ๋๋๋ค๐
๊ณ ๋ง์ต๋๋ค :D
'SW ๊ฐ๋ฐ > Amazon Web Service' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (3) AWS Lambda ์์ฑ (0) | 2022.06.10 |
---|---|
ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (2) AWS IAM ์ญํ ์์ฑ (0) | 2022.06.09 |
AWS Lambda ์น ์๋ฒ ๋ง๋ค๊ธฐ: Lambda, API Gateway ์์ฑ (0) | 2022.06.01 |
AWS Lambda ๊ฐ๋ , ์ฅ๋จ์ , ์ฌ์ฉ๋ชฉ์ (0) | 2022.06.01 |
MFA ๊ฐ๋ ๊ณผ AWS MFA ๋ฑ๋ก ๋ฐฉ๋ฒ(feat. AWS IAM) (0) | 2022.05.26 |