๐ ์ง์ฅ์์ ๋ง๋ ์ฌ๋๋ค์ ์ฐ๋ฝ์ฒ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ ์ถ๋ค๋ฉด !
๐ ๊ณ์ํด์ ์์ด๋ ๋ช
ํจ๋ค ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ง ๊ณ ๋ฏผ๋๋ค๋ฉด !
๐ ์ปค๋ฎค๋ํฐ๋ฅผ ํตํด ๋ค์ํ ์ง๊ตฐ์ ๋ํด ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๊ณ ์ถ๋ค๋ฉด !
- ์ด์ ๋น์ง๋์ค๋ก ์ค๋งํธํ๊ณ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํด ๋ณด์ธ์.
๐ ๋งํฌ ๋น์ง๋์ค ๋ฐ๋ก๊ฐ๊ธฐ
2022.11.04 ~ 2022.12.16
์๋น์ค ๋ฐ์นญ : 2022.12.08
| Part๐ | Techโ๏ธ |
|---|---|
| ๐ Front | |
| โ๏ธBack | |
| โ๏ธTool |
| ๊ธฐ์ ์คํ | ์ฌ์ฉ์ด์ |
|---|---|
| AWS Amplify | ํ ์คํธ ํ๊ฒฝ ๋ฐ ํผ๋๋ฐฑ ๊ธฐ๋ฐ ์ถ๊ฐ์์ ์ ์๋๋ฐฐํฌ ํ๊ฒฝ์ด ๊ฐ์ถ์ด์ ธ ์์ง ์์ผ๋ฉด ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง๋ค ๋ค์ ๋ฐฐํฌ๋ฅผ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ ์๋๋ฐฐํฌ ํ๊ฒฝ์ด ํ์ํ๋๋ฐ ๋ฐฐํฌํ ๋๋ฉ์ธ ํ๋๋ง ๊ตฌ๋งคํ๋ฉด ์ถ๊ฐ์ ์ธ ๋น์ฉ ์์ด ์๋๋ฐฐํฌ ํ๊ฒฝ์ ๊ฐ์ถ ์ ์๋ AWS Amplify๋ฅผ ์ฌ์ฉํ๋ค. |
| sockJs/Stomp | ์ฑํ ๊ธฐ๋ฅ์ ์ ํฉํ ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ์ฌ์ด์ ์งง์ ์ง์ฐ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ ์ง์ํ๋ API์ธ Sock.js์ HTTP์์ ๋ชจ๋ธ๋ง ๋๋ Frame ๊ธฐ๋ฐ ํ๋กํ ์ฝ Stomp๋ ์ฌ๋ฌ๊ฐ์ ์ฑํ ๋ฐฉ์ ๊ฐ์คํ๋ ์ํฉ์ ์ ํฉํ Stompํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค. |
| ๊ธฐ์ ์คํ | ์ฌ์ฉ์ด์ |
|---|---|
| Google Vision API OCR | ๋ช ํจ์ด๋ฏธ์ง ๋ด ํ ์คํธ๋ฅผ ์ถ์ถํด ํด๋น ๊ฐ์ด ์ ๋ ฅํ๊ธฐ ์ํด์๋ OCR ์์ง์ด ํ์ํ์๋ค. ๊ทธ๋์ Google Vision API (OCR)์ Tesseract OCR์ ๋ ๊ฐ์ง ์ ํ์ง ์ค์ Google Vision API์์ ์ ๊ณตํด์ฃผ๋ OCR์์ง์ด Tesseract OCR ๋ณด๋ค ํ๊ธ์ ์ธ์๋ฅ ๋ฐ ์ ํ๋๊ฐ ๋๊ณ ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ํ์์์ด ์ ํฉํ๋ค๊ณ ํ๋จํ์ฌ ์ฌ์ฉํ์๋ค. |
| Google Cloud Storage | ๋ช ํจ์ฒฉ ๋ฐ ๊ฒ์๊ธ์ ์ ๋ก๋ ํ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์ฅ์๊ฐ ํ์ํ์๋ค. OCR ๊ธฐ๋ฅ ๊ตฌํ์ ์์ด์ Storage์ ์ ๋ก๋ ๋ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด์ค๋ ๊ณผ์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์ธ๋ถ ํธ์คํ ์ด๋ฏธ์ง์ ์์กดํ๋ฉด ์๋๋ ์ํฉ์ด์๋ค. ์ฆ, GCS๋ง์ ์ง์ํ๊ธฐ์ AWS S3์ Google Cloud Storage ๋ ๊ฐ์ง ์ ํ์ง์ค GCS๋ฅผ ์ ํํ์๋ค. |
| Spring Batch | ๊ธฐ์ ๋ช , ๊ธฐ์ ์ฃผ์๋ ํ ์คํธ๋ก ์ถ์ถ์ด ๋ถ๊ฐํ์ฌ ๋ช ํจ ๋ฑ๋ก ์ ๊ธฐ์ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ๋ก ํ์๋ค. ๊ธฐ์ ์ ๋ณด ์คํ API๋ฅผ ์ฌ์ฉ ์ ํ๋ฒ์ ๋ง์ ์์ฒญ์ด ๊ฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ DB์ ๋ด์ฌํ ํด๋์์ผ๋ฉฐ, ์คํAPI์ ์ ๋ณด๊ฐ update๋ ๋ DB๋ update ๋ ์ ์๋๋ก Spring Batch๋ฅผ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ์๋ค. |
| STOMP | ๋ฉ์์ง ๋ฐฉ์๋ง ์ ์ ์ํ๋ค๋ฉด WebSocket ๋ง์ผ๋ก ์ข์ Server/Client ์์ผ ์๋ฒ๋ฅผ ์์ฑํ ์ ์์ผ๋, STOMP ํ๋กํ ์ฝ์ ์ด์ฉ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ ์กํ ๋ฉ์ธ์ง์ ์ ํ, ํ์, ๋ด์ฉ๋ค์ ์ ์ํ์ฌ ๊ฐ๋ฐ์ ํธ์์ฑ์ ๋์ด๊ณ ๋ฉ์์ง ํค๋์ ๊ฐ์ ์ธํ ํ ์ ์์ด ์ธ์ฆ ์ฒ๋ฆฌ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. |
| Redis | ๋ง์ฝ ํ๋ก์ ํธ์ ์ฌ์ฉ์๊ฐ ์ด๋์ ๋ ํ๋ณด๋๋ฉด ์๋ฒ์ ๊ฐฏ์๊ฐ ๋์ด๋จ์ ๋ฐ๋ผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ๋ฉ์ธ์ง ์ก/์์ ํ๋ ๋ธ๋ก์ปค๋ฅผ ์ธ๋ถ๋ก ๋ฐ๋ก ๋นผ๋ ๊ฒ์ด ๋ง๋ค๊ณ ํ๋จํ๋ค. ์ด๋ฒคํธ ๋ฐ์ดํฐ(์ฑํ )๋ฅผ DB์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ค์จ์ด์๋ ์ ์ฅ๋ ํ์๊ฐ ์๊ณ ์บ์์ฑ ๋ฐ์ดํฐ๋ฉด ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ RabbitMQ, Kafka๊ฐ ์๋, Redis๋ฅผ ์ธ๋ถ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ๋ค. ์ฌ์ฉ์์ ์ ์ฅ ์ ๋ณด, Unread Message Count ๋ฑ์ ๋ํด์ DB๋ก๋ถํฐ ์ฆ์ ์กฐํ๊ฐ ์ผ์ด๋๋ ๋ถ๋ถ์ ๋ํด์๋ Buffer(์์ ์ ์ฅ ๊ณต๊ฐ)๋ก๋ ์ฌ์ฉํ๋ค. |
- ์์ ๋ก๊ทธ์ธ (์นด์นด์ค)
- ๋ช ํจ ๊ด๋ฆฌ (OCR)
- ๋ด ์ผ์ ๊ด๋ฆฌ
- ์ค์๊ฐ 1:1 ์ฑํ
- ์ปค๋ฎค๋ํฐ ๊ฒ์ํ
- ๋ด ๋ช ํจ ๋ฐ ํ๋กํ ๊ด๋ฆฌ
| ์์ ๋ก๊ทธ์ธ | OCR(๋ช ํจ๋ฑ๋ก) | ๋ช ํจ ๋ด๋ณด๋ด๊ธฐ |
|---|---|---|
![]() |
![]() |
![]() |
| ์ผ์ ๊ด๋ฆฌ | ๊ฒ์๊ธ ์์ฑ | ์ค์๊ฐ ์ฑํ |
![]() |
![]() |
![]() |
โ Frond-end
ํ๋ฉด ์๋ก๊ณ ์นจ์ด๋ ์ ํ ์ ๋๋๋ง ์ด์
๐์ด์ ์ฌํญ
1.ํ์ด์ง ๋ ๋๋ง์ useSelector๋ก ๋ถ๋ฌ์ค๋ ๊ฐ์ด undefined, mapํจ์๋ฅผ ์ฌ์ฉํด ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์
๐๋ฌธ์ ํด๊ฒฐ
1.initialState ๊ธฐ๋ณธ ๊ฐ ์ค์
2.์ผํญ์ฐ์ฌ์ ํน์ if๋ฌธ์ผ๋ก undefined์ผ ๋์ ์กฐ๊ฑด์ ๊ฑธ์ด์ค
3.reducer์์ ์๋ฒ์ ํต์ ํ์ fulfill๋๋ dataํํ ํ์ธ
์ปค๋ฎค๋ํฐ ๋ ๋๋ง ์ด์
๐์ด์ ์ฌํญ
1.๊ฒ์๊ธ ๋ฑ๋ก/์์ /์ญ์ ์ ํ๋ฉด์ ๋ฐ๋ก ๋ ๋๋ง ๋์ง ์๋ ์ด์
2.์ปค๋ฎค๋ํฐ ์์ธ์กฐํ ํ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ ์ ๋ ํ๋ฉด์ ๋ถํ์ํ ๋ด์ฉ๋ค์ด ์ ๊น ๋ ๋๋ง ๋๋ ์ด์
๐๋ฌธ์ ํด๊ฒฐ
1.initialState์ isLoading๊ณผ useEffect๋ฅผ ํ์ฉ
2.loading์ด๋ผ๋ ์ํ๋ฅผ ๋ง๋ค๊ณ ์ํ๋ณ๊ฒฝ์ LoadingPage๋ฅผ return
InvalidStateError: The connection has not been established yet
๐์ด์ ์ฌํญ
1.๊ฒ์๊ธ์์ ์ฑํ ํ์ด์ง๋ก ์ด๋ ํ websocket connect๋ณด๋ค subscribe๊ฐ ๋จผ์ ์งํ๋๋ ์ด์๊ฐ ๋ฐ์ํ์ฌ TypeError๋ ํจ๊ป ๋ฐ์ํ์๋ค.
๐๋ฌธ์ ํด๊ฒฐ
1.์น์์ผ ์ปค๋ฅ์ ์ํ๋ฅผ ์ด์ฉํด ์น์์ผ์ ์ํ๊ฐ 1์ผ ๊ฒฝ์ฐ ์ฆ ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋๊ณ ํต์ ์ค์ธ ์ํ์ผ ๋ subscribe๊ฐ ์คํ๋๋ ๊ตฌ๋ ์ด ๋๋๋ก ํด๋ณด์์ง๋ง ๋ณํจ์ ์์๋ค.
2.ํ์ด์ง ์ด๋ํ ๋ง์ดํธ ๋ ๋ connect๋ณด๋ค subscirbe๊ฐ ๋์ค์ ์งํ๋๋๋ก setTimeout์ ์ค์ ํ์ฌ ํด๊ฒฐ
(navigate๋ฅผ ๋จผ์ ํ ๋นํ์ฌ ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง ์์ ์ ์ธ ์๋์ ์ํด setTimeout ์ง์ )
โ Back-end
๊ธฐ์ ๊ฒ์ ์ Full-text Index
๐์ด์ ์ฌํญ
1. ๊ธฐ์ ๊ฒ์ ์ฟผ๋ฆฌ๋ฌธ์ Like์ ์ ์ฌ์ฉํ์ฌ ์์ฑ โ JMeter๋ก ์ฑ๋ฅํ ์คํธ๋ฅผ ํด๋ณด๋ TPS๊ฐ ํ์ ํ ๋ฎ์ โ ๊ฐ์ ์ด ํ์ํ๋ค๊ณ ํ๋จ
๐๋ฌธ์ ํด๊ฒฐ
1. LIKE์ ์ ์ฌ์ฉํ์ ๋๋ ํ ์ด๋ธ์ full scan ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์๋ค๋ฐ์ ์ผ๋ก ์์ฒญํ๋ค๋ฉด ๋๋ ค์ง ์ ๋ฐ์ ์๋ค๊ณ ํ๋จ
-
FULL TEXT INDEX๋ฌธ์ผ๋ก ๋์ฒด
-
ํ ์คํธ ๊ฒฐ๊ณผ
๐๋์๋ค๋ฐ์ ์ผ๋ก ๊ธฐ์ ๊ฒ์ ์
- ๊ฐ์์ ์ 70๋ช โ ํ๊ท ํ ์คํธ ์๊ฐ: 2.3์ด ๊ฐ์
- ๊ฐ์์ ์ 200๋ช โ ํ๊ท ํ ์คํธ ์๊ฐ: 6์ด ๊ฐ์
๐ Saturation Point
โ 200๋ช
๐ 800๋ช
์ฆ๊ฐ
WebSocket์์์ ๋ณด์
๐์ด์ ์ฌํญ
1. <์ฌ์ฉ์ ๊ฒ์ฆ> WebSocket์์์ ์ฌ์ฉ์ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง์ง ์์ ๋ฌด๋ถ๋ณํ HandShake๊ฐ ๊ฐ๋ฅ. ์ด๋ฅผ ๋ง๊ธฐ ์ํด userdetails๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ์ง๋ง, HTTP์ WebSocket์ ํค๋๋ ์๋ก ๋ค๋ฅธ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋ณ๋์ ์ธ์ฆ ์ฒ๋ฆฌ ๊ตฌํ์ด ํ์ํ๋ค ํ๋จ.
-
<๊ตฌ๋ ์ฃผ์> ํน์ ์ฌ์ฉ์๊ฐ ์๋์ ์ผ๋ก ๋ค๋ฅธ ์ฑํ ๋ฐฉ์ ๊ตฌ๋ ํ ์, ์ฑํ ๋ฐฉ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์๋ณผ ์ ์๋ ๋ณด์์ Issue ๋ฐ์
๐๋ฌธ์ ํด๊ฒฐ -
Jwt๋ฅผ ๋ฐ๊ธํ์ฌ ํด๋น ํ ํฐ์ Stomphandler์์ ๋ฉ์ธ์ง๋ฅผ ์ธํฐ์ ํธํ ๋ accessor.getFirstNativeHeader("Authorization")๋ก ํ ํฐ์ ๊ฐ์ ธ์ค๊ณ ๋ณ๋๋ก ์์ฑํ JwtDecoder ํด๋์ค๋ฅผ ํตํด ํ ํฐ ๊ฒ์ฆ ๋ฐ ์ฌ์ฉ์ email ์ถ์ถ์ ์งํํ์ฌ ์ ์์ ์ธ ์ฌ์ฉ์์ ๋ํด ์๋ณํ์์
-
@MessageMapping์์๋ @Header("Authorization")์ token์ ๋ด์์์ ์ฌ์ฉ์๋ฅผ ํ์ธํ์์ผ๋ฉฐ, ํ ํฐ์ ํตํด ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก, ๊ธฐ์กด์ ํ๋ก ํธ๋ก๋ถํฐ sender๋ฅผ ์ ๋ ฅ๋ฐ๊ธฐ๋ก ํ์๋ ๊ฒ์ ์ ์ธํจ.(์๋ฒ์์ ๋ฉ์ธ์ง ์์ฑ์ ์ถ์ถ)
-
๊ตฌ๋ ์ฃผ์(subscribe destination)๋ฅผ UUID๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ์ฌ ์ฑํ ๋ฐฉId์ ๊ณ ์ ์ฑ ๋ณด์ฅ๊ณผ ๋์์ ์ฑํ ๋ฐฉ์ ์ํด์์ง ์์ ์ ์ ๊ฐ ๋ค๋ฅธ ์ฑํ ๋ฐฉ์ ๊ตฌ๋ ํ์ฌ ์ฑํ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์๋ณผ ์ ์๋๋ก ๋ณด์ ์ค์
์๋ฒ Memory ๋ถ์กฑ ํ์
๐์ด์ ์ฌํญ
1. t2.micro์ฌ์์ ๊ฐ์ง Ec2 Instance์ Spring Application์ ํฐ๋ฏธ๋ ์ธ์ ์ด ๋๊ฒจ๋ ์คํ์ ๋ฉ์ถ์ง ์๊ณ ๋์ํ๋๋ก ํ๊ธฐ ์ํด nohup์ผ๋ก ๋ฐฐํฌ (default : 7.6G)
-
์๋น์ค ์ด์ ์ค ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐ ๊ฒ์๊ธ ์์ฑ์ด ์๋๋ ํ์ ๋ฐ์
-
Ec2 ์๋ฒ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๋ํ ์ ๋ณด ์กฐํ
-
7.6G ์ค 7.6G๋ฅผ ๋ชจ๋ ์ฌ์ฉํด์ ์๋ฌ ๋ฐ์
-
์์ธ: nohup์ผ๋ก ๋ฐฐํฌ์ nohup.out ํ์ผ์ด ์์ฑ๋จ. ํ๋ก์ธ์ค ์คํ์ ์ถ๋ ฅ๋๋ stdout๋ด์ฉ์ด ์ด ํ์ผ์ ๊ธฐ๋ก๋จ. ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ stdout์ผ๋ก ์ถ๋ ฅ๋๋ ๋ชจ๋ ๋ด์ฉ์ด nohup.out์ผ๋ก ์์ด๋ฉด์ ์๊ฐ์ด ์ง๋๋ฉด nohup.out ํ์ผ ์ฉ๋์ด ์ปค์ง๊ฒ ๋จ.
-
๋ก๊ทธ๊ธฐ๋ก์ด ํ์ํ๊ธฐ์ nohup.outํ์ผ์ ๊ผญ ํ์ํ๋ค๊ณ ํ๋จ
-
nohup.outํ์ผ์ ๋ ์ง๋ณ๋ก ์์ฑํ์ฌ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ๋ฐ๋ก ์ ์ฅํ์ฌ ๋ถ๋ฆฌ
- ์ถํ ํด๊ฒฐ๋ฐฉ์ : ๋ฃจํธ ๋ณผ๋ฅจ ํฌ๊ธฐ & ํํฐ์ ํฌ๊ธฐ ๋๋ฆฌ๊ธฐ
| ๊น์์ฌ | ๊น์น์ฌ | ํ๋ง๋ก | ํฉ๋์ฐ | ๊น๋ณด๊ฒฝ | ์๋ณ๋ฒ | ์ ์ ์ฑ | ์ต์๋น |
|---|---|---|---|---|---|---|---|
| FE(๋ฆฌ๋) | FE | FE | FE | BE(๋ถ๋ฆฌ๋) | BE | BE | DESIGNER |
| ๐ | ๐ | ๐ | ๐ | ๐ | ๐ | ๐ | ๐ง choiyebin98@gmail.com |











