ย ๋ด๊ฐ ๊ธฐ์ฌํ ๋ถ๋ถ
โข
GitHub Actions์ AWS Elastic Beanstalk๋ฅผ ์ฌ์ฉํ์ฌ ์ง์์ ํตํฉ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถ
โข
CORS ์ฒ๋ฆฌ
โข
OpenAI API๋ฅผ ํ์ฉํ์ฌ PR ์ GPT๊ฐ ์ฝ๋๋ฆฌ๋ทฐ ํด์ฃผ๋๋ก ์ค์
โข
GitHub์ ํตํ ํ์ ๊ด๋ฆฌ๋ฅผ ์ํ, ๋ธ๋์น ์ ๋ต ๊ณํ, ์ปค๋ฐ ์ปจ๋ฒค์
, PR ์ปจ๋ฒค์
, ์ฝ๋ ์ปจ๋ฒค์
์ค์
ย ์ฌ์ฉ ๊ธฐ์
โข
DataBase
โฆ
ElasticSearch
โข
BackEnd
โฆ
Kotlin / Spring Boot / Spring Data JPA
โข
DevOps
โฆ
Docker / GitHub Actions / AWS(Elastic Beanstalk, EC2, Lambda, S3, Route53)
โข
Software Architecture Pattern
โฆ
Monolithic Architecture
โข
FrontEnd
โฆ
HTML / CSS / JavaScript / Vue.js
โข
Collaboration
โฆ
GitHub / Slack / Notion / Figma / Miro / Jira
System Architecture
MarketNawa System Architecture
ํธ๋ฌ๋ธ ์ํ 1
๋ฌธ์ ๋ฐฐ๊ฒฝ
์จ๋ผ์ธ ์ผํ๋ชฐ ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋งํ๋ ๋์ค, ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฐ์ํ Unknown Host ์๋ฌ๋ฅผ ๊ฒฝํํ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ Test-NetConnection์ ์ฌ์ฉํ ํ
์คํธ์์๋ ์ ์์ ์ผ๋ก ๋์ํ์์ผ๋, ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ lookup ๊ณผ์ ์์ DNS ์ฟผ๋ฆฌ๊ฐ ์ ๋๋ก ์ฒ๋ฆฌ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ํ์ธํ์ต๋๋ค.
์๋์ฐ์์ nslookup ๋ช
๋ น์ด๋ฅผ ํตํด DNS ์๋ฒ์์ ํต์ ์ ํ์ธํ์ผ๋, ๊ธฐ๋ํ ์๋ต์ ์ป์ง ๋ชปํ์ผ๋ฉฐ, ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฐ ์ธํฐ๋ท ์ ์ ํ
์คํธ๋ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค. ์ด ๋ฌธ์ ์ ์์ธ์ผ๋ก๋ ๋ฐฉํ๋ฒฝ ์ค์ ์ด๋ DNS ์บ์ ๋ฌธ์ ๋ฅผ ์์ฌํ๊ฒ ๋์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
1.
DNS ์๋ฒ ์ค์ ํ์ธ: DNS ์๋ฒ ์ค์ ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ์๊ณ , ๋ธ๋ผ์ฐ์ ์ ์ธํฐ๋ท ์ ์ ํ
์คํธ๋ฅผ ํตํด ๋ฌธ์ ๊ฐ DNS ์๋ฒ ์์ฒด์ ์์ง๋ ์์์ ํ์ธํ์ต๋๋ค.
2.
๋ฐฉํ๋ฒฝ ์ค์ ํ์ธ: ๋ฐฉํ๋ฒฝ์ด DNS ์ฟผ๋ฆฌ ํธ๋ํฝ์ ์ฐจ๋จํ๋ ์ํฉ์ ๊ณ ๋ คํ์ฌ, ํนํ UDP 53๋ฒ ํฌํธ๊ฐ ์ฐจ๋จ๋์์ ๊ฐ๋ฅ์ฑ์ ํ์ธํ์ต๋๋ค. ์์๋ฐ์ด๋ ๊ท์น์์ ์ด์ ๊ด๋ จ๋ ํธ๋ํฝ์ ํ์ฉํ๊ธฐ ์ํด ๋ฐฉํ๋ฒฝ ์ค์ ์ ์ ๊ฒํ๊ณ ์์ ํ์์ต๋๋ค.
3.
DNS ์บ์ ๋ฌธ์ ํด๊ฒฐ: ๋ก์ปฌ์์ ipconfig/flushdns ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด DNS ์บ์๋ฅผ ๋น์ฐ๊ณ ๋ค์ ํ
์คํธํ์์ผ๋ ๋ฌธ์ ๋ ํด๊ฒฐ๋์ง ์์์ต๋๋ค. ์ด๋ก ์ธํด DNS ์บ์ ๋ฌธ์ ๋ ์์ธ์ด ์๋์ ํ์ธํ์์ต๋๋ค.
4.
๋ณด์ ๊ทธ๋ฃน ์ค์ ํ์ธ: AWS ๋ณด์ ๊ทธ๋ฃน์์ ์์๋ฐ์ด๋ ๊ท์น์ด ๋ชจ๋ TCP ํธ๋ํฝ์ ํ์ฉํ๋๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํ์๊ณ , ์ด๋ฅผ ํตํด DNS ํธ๋ํฝ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
โข
์์๋ฐ์ด๋ ๊ท์น์์ ๋ชจ๋ TCP ํธ๋ํฝ์ ํ์ฉํ๋๋ก ๋ณด์ ๊ทธ๋ฃน ์ค์ ์ ์์ ํ ํ, DNS ์ฟผ๋ฆฌ๊ฐ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ์์ํ์ต๋๋ค.
โข
Unknown Host ์๋ฌ๋ ๋ ์ด์ ๋ฐ์ํ์ง ์์๊ณ , ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํ DNS ์กฐํ๊ฐ ์ํํ๊ฒ ์ด๋ฃจ์ด์ก์ต๋๋ค.
โข
๋ฐฉํ๋ฒฝ ์ค์ ์ ํตํด ๋คํธ์ํฌ ํธ๋ํฝ ํ๋ฆ์ ๊ด๋ฆฌํจ์ผ๋ก์จ, DNS ์ฟผ๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ํฌ๋กค๋ง ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์๋ํ ์ ์๊ฒ ๋์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
์ด๋ฒ ํธ๋ฌ๋ธ ์ํ
์ ํตํด ๋คํธ์ํฌ ๋ฐ ๋ณด์ ์ค์ ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์์ ์ฑ์ ๋ฏธ์น๋ ์ํฅ์ ๊น์ด ์ดํดํ๊ฒ ๋์์ต๋๋ค. ํนํ, DNS ์ฟผ๋ฆฌ์ ๊ด๋ จ๋ ๋คํธ์ํฌ ๋ฌธ์ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ๋๋ก ๋์ํ์ง ๋ชปํ๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋คํธ์ํฌ ํธ๋ํฝ ํ๋ฆ์ ๋ํ ์ธ์ฌํ ๊ด๋ฆฌ์ ์ค์ ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.
์ฒ์ ์ค์ ํ ์์๋ฐ์ด๋
๋ณ๊ฒฝ๋ ์์๋ฐ์ด๋
ํธ๋ฌ๋ธ ์ํ 2
๋ฌธ์ ๋ฐฐ๊ฒฝ
Elasticsearch๋ฅผ AWS EC2์ ์ค์ ํ ํ, ํ๋ฆฌํฐ์ด(t2.micro) ์ธ์คํด์ค์์ ์คํํ๋ ค ํ์ง๋ง ์๋น์ค๊ฐ ์์๋์ง ์๊ณ ๊ณ์ํด์ ์คํจํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. systemctl status elasticsearch์ journalctl ๋ก๊ทธ๋ฅผ ํ์ธํ ๊ฒฐ๊ณผ, Elasticsearch๊ฐ ์ ๋๋ก ์์๋์ง ์๊ณ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค. ํ๋ฆฌํฐ์ด์ ์ ํ๋ ๋ฆฌ์์ค(RAM 1GB)๋ก ์ธํด Elasticsearch๊ฐ ์๊ตฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๊ฐ๋นํ์ง ๋ชปํ๋ ๊ฒ์ด ๋ฌธ์ ์ ์์ธ์ผ๋ก ์ถ์ธกํ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
1.
RAM ํ์ธ ๋ฐ ์
๊ทธ๋ ์ด๋: ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด ๋ฌธ์ ์ ์์ธ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์, ํ๋ฆฌํฐ์ด์์ ์ ๊ณต๋๋ RAM(1GB) ๋์ 4GB RAM์ ์ ๊ณตํ๋ ์ธ์คํด์ค ํ์
(t2.medium)์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
2.
Elasticsearch ์ฌ์ค์น ๋ฐ ์ค์ ์ต์ ํ: ๊ธฐ์กด ์ค์น๋ Elasticsearch๋ฅผ ์์ ํ ์ ๊ฑฐํ๊ณ , ๋ค์ ์ค์นํ ํ ์ค์ ํ์ผ์ ์ต์ ํํ์ต๋๋ค. network.host ์ค์ ์ 0.0.0.0์ผ๋ก ์ค์ ํ์ฌ ์ธ๋ถ ์ ์์ ํ์ฉํ๋๋ก ํ์ต๋๋ค.
3.
์๋น์ค ์ฌ์์ ๋ฐ ์ํ ํ์ธ: ์์ ์ฌํญ์ ์ ์ฉํ ํ Elasticsearch ์๋น์ค๋ฅผ ๋ค์ ์์ํ๊ณ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ์ธํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
RAM์ 4GB๋ก ํ์ฅํ ํ Elasticsearch๋ ์ฑ๊ณต์ ์ผ๋ก ์์๋์๊ณ , ๋ก๊ทธ ํ์ผ์์ ๋ ์ด์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๊ด๋ จ ์ค๋ฅ๊ฐ ๋ํ๋์ง ์์์ต๋๋ค. ์๋น์ค๋ ์์ ์ ์ผ๋ก ์๋ํ๊ณ , ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด http://ec2-3-35-54-47.ap-northeast-2.compute.amazonaws.com:9200๋ก ์ ์ํด Elasticsearch๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
๋ฆฌ์์ค๊ฐ ์ถฉ๋ถํ์ง ์์ ํ๊ฒฝ์์ ๋ฉ๋ชจ๋ฆฌ ์ง์ฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉด ๋ถ์์ ์ฑ์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๋ก๊ทธ ๋ถ์๊ณผ ์ค์ ์ต์ ํ๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ ์ ํ ์ธํ๋ผ ์ ํ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ค์ํ ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.
ํธ๋ฌ๋ธ ์ํ 3
๋ฌธ์ ๋ฐฐ๊ฒฝ
๋น๋ ๋ฐ ๋ฐฐํฌ ๊ณผ์ ์์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์์ ์ผ๋ก ์คํ๋์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, AWS Elastic Beanstalk ํ๊ฒฝ์์ ๋ฐฐํฌ ์ Java ํ๋ก์ธ์ค๊ฐ ์ ๋๋ก ์์๋์ง ์๊ณ , CORS ๊ด๋ จ ์ค๋ฅ๋ก ์ธํด ํ๋ก ํธ์๋์์ API ์์ฒญ์ด ์ฐจ๋จ๋์์ต๋๋ค. ๋ํ, ํ๊ฒฝ ๋ณ์ ์ค์ ์ด ๋๋ฝ๋์ด ์ผ๋ถ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
1.
ํ๋ก์ธ์ค ์์ ๋ฌธ์ ํด๊ฒฐ: 00-makeFiles.config ํ์ผ์ ์ ๊ฒํ ๊ฒฐ๊ณผ, ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ ๋ถ๋ถ์์ ํ๊ฒฝ ๋ณ์๊ฐ ์ ๋๋ก ์ค์ ๋์ง ์์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด๋ฅผ ์์ ํ๊ธฐ ์ํด java -Dloader.main=marketnawa.be.ott.marketnawabe.MarketNawaBeApplicationKt -Dfile.encoding=UTF-8 -jar $JAR_PATH ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ํ๋๋ก ์ค์ ์ ๋ณ๊ฒฝํ์ต๋๋ค.
2.
CORS ๋ฌธ์ ํด๊ฒฐ: Kotlin์์ CORS ์ค์ ์ ์ถ๊ฐํ์ฌ ํน์ ๋๋ฉ์ธ์์๋ง ์์ฒญ์ ํ์ฉํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค. ์ด ๊ณผ์ ์์ CORS ์ค์ ์ด ๋๋ฝ๋์ด API ํธ์ถ์ด ์ฐจ๋จ๋์์์ ์ธ์งํ๊ณ , ์ค์ ํด๋์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
3.
ํ๊ฒฝ ๋ณ์ ์ค์ ์ค๋ฅ ์์ : ๋ฐฐํฌ ํ๊ฒฝ์ ํ์ํ ์ธ๋ถ ์๋น์ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ๋๋ก ์ค์ ํ์ง ์์ ์ผ๋ถ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๊ฒฝ ๋ณ์ ์ค์ ์ ์ฌ๊ฒํ ํ๊ณ , ํ์ํ ๊ฐ์ ๋ชจ๋ ์ง์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์์ ์ผ๋ก ์๋ํ๋๋ก ์กฐ์นํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
โข
ํ๋ก ํธ์๋์์์ API ์์ฒญ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์๊ณ , CORS ๋ฌธ์ ๋ ํด๊ฒฐ๋์์ต๋๋ค.
โข
๋ชจ๋ ๊ธฐ๋ฅ์ด ์๋ํ ๋๋ก ์๋ํ๋ฉฐ, ๋น๋ ๋ฐ ๋ฐฐํฌ ๊ณผ์ ์ ์์ ์ฑ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
โข
ํ๊ฒฝ ๋ณ์ ์ค์ ์ด ๋ฐฐํฌ์ ํต์ฌ ์์์์ ๋ค์ ํ๋ฒ ๊นจ๋ฌ์์ต๋๋ค. ํนํ ์ธ๋ถ ์๋น์ค์์ ํตํฉ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ํํ ์ค์ ํด์ผ ์์์น ๋ชปํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
โข
๋ฐฐํฌ ํ๊ฒฝ์ ํน์ฑ์ ๊ณ ๋ คํ ์ค์ ์ด ๋งค์ฐ ์ค์ํ๋ค๋ ์ ์ ์๊ฒ ๋์์ต๋๋ค. ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ์ ๋์ํ๋๋ผ๋, ๋ฐฐํฌ ํ๊ฒฝ์์๋ ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ ์ ์์์ ์ธ์งํ๊ฒ ๋์์ต๋๋ค.
โข
ํธ๋ฌ๋ธ์ํ
๊ณผ์ ์์ ๋ก๊ทธ์ ์ค์ ํ์ผ์ ๊ผผ๊ผผํ ์ ๊ฒํ๋ ๊ฒ์ด ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ํด๊ฒฐํ๋ ๋ฐ ํฐ ๋์์ด ๋์์ต๋๋ค.
makeFiles.configํ์ผ
CorsConfig ํ์ผ
๐ซก ํ๊ณ
โ๋ฌธ์ ํด๊ฒฐ์ ๋ณธ์ง์ ๊นจ๋ฌ์ผ๋ฉฐ ์ฑ์ฅํ๋ ๊ณผ์ โ
๋ง์ผ๋์ ํ๋ก์ ํธ๋ ๋ค์ํ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์์์ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ๊ณ ํด๊ฒฐํด ๋๊ฐ๋ ์ค์ํ ๊ธฐํ๊ฐ ๋์์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ์ฌ๋ฌ ๊ธฐ์ ์ ๋์ ๊ณผ ์ฅ์ ๋ฅผ ๊ฒช์์ง๋ง, ๊ทธ ๊ณผ์ ์์ ๋ฐฐ์ด ์ ์ ์์ผ๋ก์ ๊ฐ๋ฐ์๋ก์์ ์ญ๋์ ๋์ฑ ๊ฐํ์์ผ์ฃผ์์ต๋๋ค. ํนํ ๋คํธ์ํฌ ๊ด๋ จ ๋ฌธ์ ํด๊ฒฐ, ์ธํ๋ผ ์ต์ ํ, ๊ทธ๋ฆฌ๊ณ ๋ฐฐํฌ ํ๊ฒฝ์์์ ์ธ๋ถ์ ์ธ ์ค์ ๊ด๋ฆฌ์ ๊ฐ์ ์ค์ํ ์์๋ค์ ๋ฐฐ์ธ ์ ์์๋ ๊ฐ์ง ์๊ฐ์ด์์ต๋๋ค.