πŸ˜‚ν”„λ‘œμ νŠΈ 진행 μ‹œ λ§‰ν˜”λ˜ λΆ€λΆ„

ꡬ본식·2022λ…„ 8μ›” 23일
1

μ„œλ²„ ꡬ좕 λΆ€λΆ„

1. AWS EC2 μ„œλ²„μ—μ„œ gradles buildμ‹œ μ„œλ²„κ°€ λ©ˆμΆ”λŠ” ν˜„μƒ

ν”„λ‘œμ νŠΈλ₯Ό buildν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•¨κ»˜ λ„μš°λŠ” μˆœκ°„ κ°‘μžκΈ° AWS EC2μ„œλ²„κ°€ 먹톡이 λ˜λ©΄μ„œ λ©ˆμΆ”λŠ” ν˜„μƒμ΄ λ°œμƒν–ˆλ‹€. μ„œλ²„ ν™˜κ²½μ€ cpu:2μ½”μ–΄ ,30GB둜 κ΅¬μ„±λ˜μ–΄ μžˆμ–΄ λ©”λͺ¨λ¦¬μƒ μΆ©λΆ„ν•  것이라고 μƒκ°ν–ˆλ‹€. ν•˜μ§€λ§Œ 이 λ¬Έμ œλŠ” μΈμŠ€ν„΄μŠ€ λ¦¬μ†ŒμŠ€ 문제 라고 μ°Ύμ•˜λ‹€.
μ΄ˆκΈ°μ— free -m λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ swapλ©”λͺ¨λ¦¬κ°€ "0"으둜 λ˜μ–΄μžˆμ—ˆλ‹€.
swapμ΄λž€ μ‰½κ²Œ λ§ν•΄μ„œ λ‚΄ ν•˜λ“œλ””μŠ€ν¬(30Gib)의 곡간을 λΉŒλ €μ„œ "가상메λͺ¨λ¦¬"둜 μ‚¬μš©ν•˜λŠ” 것이닀. 즉 ν•˜λ“œλ””μŠ€ν¬μ˜ μš©λŸ‰μ€ μΆ©λΆ„ν•˜μ§€λ§Œ 가상메λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•΄μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œλΌλŠ” 것을 μ•Œμ•˜λ‹€.

ν˜„μž¬ λ‚΄ μ„œλ²„μ˜ RAM은 30GB 이고 μŠ€μ™‘νŒŒμΌμ„ 4GB둜 μž‘μ•„λ³΄μ•˜λ‹€.(RAM크기에 따라 μŠ€μ™‘νŒŒμΌ μš©λŸ‰μ„ μ •ν•˜λŠ” 방법이 μžˆλ‹€λŠ”λ° κ·Έκ±°λŠ” λ‚˜μ€‘μ— λ”°λ‘œ 봐야겠닀..😊)

sudo dd if=/dev/zero of=/swapfile bs=128M count=32 : 루트 파일 μ‹œμŠ€ν…œμ— μŠ€μ™‘νŒŒμΌμ„ μƒμ„±ν•œλ‹€.
sudo chmod 600 /swapfile :μŠ€μ™‘νŒŒμΌμ˜ κΆŒν•œ μ—…λ°μ΄νŠΈ
sudo mkswap /swapfile : λ¦¬λˆ…μŠ€ μŠ€μ™‘ μ˜μ—­μ„ μ„€μ •
sudo swapon /swapfile : μŠ€μ™‘ 곡간에 μŠ€μ™‘νŒŒμΌ μΆ”κ°€ μŠ€μ™‘νŒŒμΌ μ¦‰μ‹œ μ‚¬μš©κ°€λŠ₯ν•˜κ²Œ 함
sudo vi /etc/fstab : /etc/fstab νŒŒμΌμ„ νŽΈμ§‘ν•˜μ—¬ λΆ€νŒ…μ‹œ μŠ€μ™‘ νŒŒμΌμ„ ν™œμ„±ν™” ν•˜κ²Œ ν•œλ‹€.
(vi μž…λ ₯κΈ° μ•ˆμ—μ„œ)/swapfile swap swap defaults 0 0 :νŒŒμΌλμ— ν•΄λ‹Ή λ‚΄μš©μ„ μΆ”κ°€ν•˜κ³  μ €μž₯

결과적으둜 μŠ€μ™‘ λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλ˜κ³  λΉŒλ“œμ‹œ ν•˜κ³  μ»¨ν…Œμ΄λ„ˆλ₯Ό λ›°μš°λŠ”λ° μ„±κ³΅ν•˜κ²Œ λœλ‹€.

2. gradlew buildμ‹œ test μ½”λ“œμ— μ‹€νŒ¨ 였λ₯˜

temp
보톡 κ°œλ°œμ‹œμ—λŠ” IntelliJλ₯Ό μ‚¬μš©ν•˜μ—¬ Gradle의 컴파일 및 jarλ₯Ό μƒμ„±ν•˜μ—¬ μž‘μ—…μ„ ν•œλ‹€. λ¦¬λˆ…μŠ€μ—μ„œλŠ” 보톡 CLI기반으둜 μž‘λ™λ˜κΈ° λ•Œλ¬Έμ— gradle build λ˜λŠ” gradlew build λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ μœ„μ™€ 같은 Test μ½”λ“œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
Test νŒŒμΌλ“€μ„ 컴파일 ν•˜λ©΄μ„œ IntelliJλ₯Ό μ‚¬μš©ν•˜μ§€μ•Šκ³  gradle buildλ₯Ό μ‚¬μš©ν• λ•Œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

temp
μœ„μ™€ 같이 섀정을 ν•˜κ²Œ 되면 test 파일 컴파일이 μž‘λ™λ˜λŠ” 쑰건이 λ³€λ™λ˜μ–΄ Test μ½”λ“œκ°€ 정상 ν†΅κ³Όν•˜κ²Œ λœλ‹€. ν•˜μ§€λ§Œ 이방법은 νšŒν”Όμ±…μΌ μˆ˜λ„ μžˆλ‹€.

3. AWS EC2 내뢀에 DBμ‚¬μš©μ‹œ application.yml 파일 μˆ˜μ •

μ„œλ²„ 내뢀에 DBλ₯Ό μ‚¬μš©ν•˜λŠ”κ²ƒμ΄κΈ° λ•Œλ¬Έμ— application.ymlνŒŒμΌμ— κΈ°μ‘΄μ—λŠ”
jdbc:mysql://localhost:3306/ams?serverTimezone=UTC&characterEncoding=UTF-8
와 같이 μ„€μ •ν•΄λ†“μ•˜λ‹€. μ™œλƒν•˜λ©΄ 자기 μ„œλ²„μ— μžˆλŠ” DBλ₯Ό μ‚¬μš©ν•˜λŠ”κ²ƒμ΄κΈ° λ•Œλ¬Έμ— localhost둜 μ„€μ •ν•΄μ•Όλœλ‹€κ³  μƒκ°ν•˜μ˜€λ‹€.
ν•˜μ§€λ§Œ Access denied for user 'root'@'localhost 와 같은 였λ₯˜κ°€ λ°œμƒν•˜μ˜€κ³  접속을 κ±°λΆ€ λ‹Ήν–ˆλ‹€.
localhost에 AWS EC2 Ipλ₯Ό λ„£κ²Œ λ˜λ‹ˆ 문제 없이 μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλ‹€.

4. "Web server failed to start. Port 8888 was already in use"

Springbootμ—λŠ” tomcat μ„œλ²„κ±° λ‚΄μž₯λ˜μ–΄μžˆλ‹€. μ΄ˆκΈ°μ— μ„œλ²„λ₯Ό κ΅¬μΆ•ν• λ•Œ tomcatμ„œλ²„λ„ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ„€μΉ˜ν•˜μ—¬ :8888포트둜 μ‹€ν–‰μ‹œμΌœλ†“μ•˜λ‹€. κ·ΈλŸ¬ν•œ μƒν™©μ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰μ‹œν‚€λ‹ˆ
포트λ₯Ό 이미 μ‚¬μš©ν•˜κ³  μžˆλ‹€λŠ” 였λ₯˜κ°€ λ°œμƒν•˜μ˜€λ‹€. κ·Έ μ΄μœ λŠ” 이미 Springbootμ—λŠ” tomcat을 λ‚΄μž₯λ˜μ–΄μžˆμ–΄ ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œμ‹œ λ‚΄μž₯λ˜μ–΄μžˆλŠ” tomcatμ„œλ²„κ°€ μ„€μ •λ˜λ‘œ :8888포트λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•˜λŠ”λ° λ”°λ‘œ μ„€μΉ˜ν•˜μ—¬ μ‹€ν–‰μ‹œμΌœλ†“μ€ tomcat μ„œλ²„κ±° μ‹€ν–‰λ˜κ³  μžˆμ–΄ μƒκΈ°λŠ” 였λ₯˜μ˜€λ‹€.
λ”°λ‘œ μ‹€ν–‰μ‹œμΌœλ†“μ€ tomcatμ„œλ²„λ₯Ό μ’…λ£Œμ‹œν‚€κ³  λΉŒλ“œν•˜λ‹ˆ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλ‹€.


κΈ°λŠ₯ κ΅¬ν˜„ λΆ€λΆ„

1. " HttpMediaTypeNotAcceptableException"

REST APIλ₯Ό λ§Œλ“œλŠ” κ³Όμ •μ—μ„œ λ°œμƒν•œ μ—λŸ¬
μ»¨νŠΈλ‘€λŸ¬μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ 츑으둜 응닡을 λ‚΄λ €μ€„λ•Œ @ResponseBody(http body에 jsonν˜•μ‹μœΌλ‘œ)둜 내렀주도둝 κ΅¬ν˜„ν•˜μ˜€λ‹€. 이것을 ReturnValueHandlerκ°€ HTTP λ©”μ‹œμ§€ 컨버터λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄μ£Όκ²Œ λ˜λŠ”λ° http body에 담을 객체에 Getterκ°€ μ—†μ–΄μ„œ λ°œμƒν•œ λ¬Έμ œμ΄λ‹€.

2. axios ν†΅μ‹ λΌμ΄λΈŒλŸ¬λ¦¬ GET+Body μ§€μ›μ•ˆν•¨

ν”„λ‘ νŠΈμ•€λ“œλŠ” λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•˜κ³  λ°±μ—”λ“œλŠ” μŠ€ν”„λ§μ„ μ‚¬μš©ν•˜λŠ” μƒν™©μ—μ„œ axios ν†΅μ‹ λΌμ΄λΈŒλŸ¬λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ ν†΅μ‹ ν•˜λŠ” μƒν™©μ΄μ˜€λ‹€.

κ²Œμ‹œλ¬Όμ„ κ²€μƒ‰ν•˜λŠ” API의 Http λ©”μ„œλ“œλ₯Ό GET으둜 μ„€μ •ν•˜κ³  검색 ν•„ν„°λ§μœΌλ‘œ ν•΄μ‹œνƒœκ·Έ,제λͺ©λ“±κ³Ό μΆ”κ°€λ‘œ λ¬΄ν•œμŠ€ν¬λ‘€ 방식을 μœ„ν•΄μ„œ κ²Œμ‹œλ¬Όid, μ’‹μ•„μš”μˆ˜λ“±μ„ μ „λ‹¬ν•΄μ•Όλ˜κΈ° λ•Œλ¬Έμ—
ν•΄λ‹Ή νŒŒλΌλ―Έν„°λ₯Ό Body에 λ‹΄μ•„ λ³΄λ‚΄κ²Œ κ΅¬μ„±ν•˜μ˜€λ‹€.

ν•˜μ§€λ§Œ GET+Bodyλ₯Ό 보내면 400μ—λŸ¬κ°€ λœ¨λ©΄μ„œ μš”μ²­μ΄ μ œλŒ€λ‘œ λ˜μ§€ μ•Šμ•˜λ‹€.
μ°Ύμ•„λ³Έκ²°κ³Ό 이건 axios 라이브러리 뿐만 μ•„λ‹ˆλΌ HTTP ν”„λ‘œν† μ½œ μžμ²΄κ°€ GET λ©”μ„œλ“œμ‹œ Bodyλ₯Ό ν¬ν•¨ν•˜μ—¬ μš”μ²­ν• μˆ˜ μ—†λŠ”κ²ƒμ΄μ˜€λ‹€.

μΏΌλ¦¬νŒŒλΌλ―Έν„° λ°©μ‹μœΌλ‘œ λ°”κΏ€κΉŒ ν•˜λŠ” 생각을 ν•˜μ˜€λŠ”λ° μ „λ‹¬ν•˜λ €λŠ” νŒŒλΌλ―Έν„°λ“€μ΄ URL에 μœ μΆœλ˜λŠ”κ²ƒμ€ 쒋지 λͺ»ν•˜λ‹€κ³  νŒλ‹¨ν•˜μ—¬ POST λ©”μ„œλ“œλ‘œ λ°”κΎΈμ–΄ ν•΄κ²°ν•˜μ˜€λ‹€.

HTTP ν”„λ‘œν† μ½œμ— λŒ€ν•΄μ„œ ν•™κ΅μ—μ„œ ν•™μŠ΅ν•˜μ˜€λŠ”λ° κΈ°λ³Έκ°œλ…μ„ μˆœκ°„ μžŠμ–΄λ²„λ¦¬κ³  κ°œλ°œν–ˆλ˜κ±° κ°™λ‹€πŸ€£

profile
λ°±μ—”λ“œ 개발자λ₯Ό 꿈꾸며 κΈ°λ‘μ€‘πŸ’»

0개의 λŒ“κΈ€