์ค๋ ๋ถ์ํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค. ์๋ ์ฝ๋์ ์ ํํ ์๋ฆฌ๊ฐ ๊ถ๊ธํด์ assertThrows์ ๋ํด ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. assertThrows๋ JUnit์์ ์ ๊ณตํ๋ ํ ์คํธ ๋ฉ์๋ ์ค์ ํ๋์ด๋ค. //memberService.join(member2)ํ๋ฉด IllegalStateException์ด ์ผ์ด๋์ผํ๋ค๋ ๋ป IllegalStateException e= Assertions.assertThrows(IllegalStateException.class, ()->memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์ฌํ๋ ํ์์ ๋๋ค."); ์ผ๋จ JUnit์์ ์ ๊ณตํด์ฃผ๋ ๋ฉ์๋๋ผ๊ณ ํ๋ JUnit์ด ์ด๋ค ํ๋ ์์ํฌ์ธ์ง๋ง ์์ฃผ์์ฃผ ์งง๊ฒ ์ ..
์ด ํฌ์คํธ๋ ์ธํ๋ฐ์ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ (๋ฌด๋ฃ) ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ด๋ค. ์คํ๋ง์ด ํด๋ผ์ด์ธํธ์๊ฒ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ๋ ์ธ๊ฐ์ง๊ฐ ์๋ค. ์ ์ ํ์ผ ์ ๊ณต (ex: test.jpeg, test.html) ํ ํ๋ฆฟ ์์ง(html์ ๋์ ์ผ๋ก ๋ฐ๊พธ๋ ์ ๋ค)๊ณผ MVC(Model, View, Controller) API - JSON ํํ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค์ฃผ๋ ํ์ ์ค๋์ ์ด ์ธ๊ฐ์ง์ ๋ํด ํฌ์คํ ํด๋ณด๋๋ก ํ๊ฒ ๋ค. ์ ์ ํ์ผ ์ ๊ณต src/main/resources/static์ ์ ์ ํ์ผ abc.txt๋ฅผ ์ ์ฅํ๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด URL์์ ๊ฒ์ํ ๋ localhost:8080/abc.txt๋ก ๊ทธ๋ฅ ์ ๊ทผํ๋ฉด๋๋ค. (๋จ์ํ URL์ ํ์ผ ์ ๋ ฅํ๋ฉด ..
์ด ํฌ์คํธ๋ ์ธํ๋ฐ์ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ด๋ค. ์ค๋์ ์๋ ๊ณผ์ ์ ์ค์ตํด๋ณผ ๊ฒ์ด๋ค. 1. ํ๋ก์ ํธ ์์ฑ 2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ 3. View ํ๊ฒฝ ์ค์ 4. ๋น๋ํ๊ณ ์คํํ๊ธฐ ํ๋ก์ ํธ ์์ฑ https://start.spring.io/ ์ ๋ค์ด๊ฐ์ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ํด์ค๋ค. 2.x๋ฒ์ ์ ํด์ผ Java 11๋ฒ์ ์ผ๋ก ํ ์ ์๋ค. ์๊ทธ๋ฌ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค. Gradle๋ก ํด์ฃผ๊ณ , Dependencies์ Spring Web, Thymeleaf๋ฅผ ์ ํํด์ค๋ค. Thymeleaf๋ ํ ํ๋ฆฟ ์์ง์ด๋ผ๊ณ ํ๋ค. ๋ค ์ค์ ํ ํ generate ๋ฒํผ์ ๋๋ฌ์ฃผ๊ณ ์์ถ์ ํด์ ํด์ค๋ค. ์ดํ ์ด๋ฅผ IntelliJ์์ Open as Project๋ก ์ด๋ฉด ..
AWS์ ๋์๋ฆฌ ์๋ฒ์์ ๋ง์ ์์ ์๋์ง๋ง ์๊ธ์ด ์ฒญ๊ตฌ๋์ด์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฒญ๊ตฌ๋๋์ง ์ฐพ์๋ดค๋ค. ๋ณด๋๊น ๋ค Route53์์ ๋๊ฐ ๊ฑฐ์๋ค. Route53์ด๋ DNS ์๋น์ค์ธ๋ฐ, ๋์ถฉ ์ฐ๋ฆฌ์ IP๋ฅผ Route53์ ๋ฑ๋กํ ํธ์คํ ์์ญ์ ๋๋ฉ์ธ์ด๋ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ ์ด๋ค. ๋ฌ๊ธ ์๋ Route53 ์ด๋ฆ์ ์ ๋๋ฅผ ์ดํด๋ณด๋ฉด DNS ์๋ฒ๊ฐ ํฌํธ 53์ผ๋ก ์จ ์์ฒญ์ ์๋ตํ๊ณ ์๋ ์ ์ ๋ค์ ์ฐ๋ฆฌ์ ์ฑ์ผ๋ก ๋ผ์ฐํ ํด์ค์ Route 53์ด๋ผ๊ณ ํ๋ค. (๊ณต์๋ฌธ์ ์ฐธ๊ณ ) ์ ์ฌ์ง์ ํ ํธ์คํ ์์ญ์ ๋ค์ด์๋ ์ ๋ค์ ๋งํ๋ค. ๊ทธ๋ฌ๋๊น ์ฐ๋ฆฌ ๋์๋ฆฌ ์ด๋ฆ์ด dongari๋ผ๊ณ ์๊ฐํด๋ณด๋ฉด, ํ ํธ์คํ ์์ญ์ www.dongari.com, , dongari.com ๋ฑ๋ฑ ์ด๋ฐ์์ผ๋ก ์ฌ๋ฌ๊ฐ ๋ฑ๋กํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํธ์คํ ์์ญ ํ๋ ๋น ๋งค..
Upstream์ ๊ฐ๋ ๊ฐ์ ์๋ฅ๋ฅผ upstream, ํ๋ฅ๋ฅผ downstream์ด๋ผ๊ณ ํ๋ค. ์ด๋ ์๋ฅ๋ ๋ฌผ์ ๋ณด๋ด๊ณ ํ๋ฅ๋ ๋ฌผ์ ๋ฐ๋ ์ญํ ์ ํ๋ค. ์ด๋ฅผ ๋ฐ์ดํฐ์ ํ๋ฆ ๊ด์ ์์ ์๊ฐํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค : upstream์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ์ชฝ, downstream์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์ชฝ์ผ๋ก! ๋ณดํต ์๋ฒ๊ฐ upstream์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ํด๋ผ์ด์ธํธ๋ upstream์ด ๋ ์ ์๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์๋ฒ๋ฅผ upstream์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์ผ๋ฏ๋ก ์๋ฒ๊ฐ upstream์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๊ฒ ๋ค. ๊ทธ๋ฌ๋ฉด Nginx์ upstream์ ์ ํํ ์ด๋ค ์ญํ ์ ํ ๊น? upstream์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ํน์ ๋ผ์ฐํ ์ ์ํด ์น/์ฑ ์๋ฒ ํด๋ฌ์คํฐ๋ฅผ ์ ์ํ ๋ ์ฐ์ธ๋ค. ํด๋ฌ์คํฐ๋ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ์๋ฒ๋ค์ ๋ฌถ..
ํ๋ก์ ํธ๋ฅผ ์๋ฒ์์ ๋ฐฐํฌํ ๋, ๋จ์ํ ๋ธ๋ก๊ทธ๋ง ๋ณด๋ฉด์ ๋ฐ๋ผํ๋ ๊ฒ์ ์ค๋ ฅ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํ์ฌ Nginx์ ๋ํ์ฌ ์ ๋๋ก ๊ณต๋ถํด๋ณด๋ ๊ฒ์ด ํ์ํ๋ค๊ณ ๋๊ปด์ก๋ค. ์ค๋์ Nginx๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ configuration file (ํ๊ฒฝ์ค์ ํ์ผ)์ ์ด๋ค ์์ผ๋ก ๋์ด์๋์ง์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. 0) ์๋ฒ, ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋ํ ๊ฐ๋ Nginx๋ '์น ์๋ฒ'์ด๋ค. ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(WAS)๊ฐ ์๋ ์น์๋ฒ! ๊ทธ๋ฌ๋๊น ์ ์ ํ์ผ๋ค์ ์ ๊ณตํ๊ณ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ ๊ฒ ๊ฐ๋ค(?) ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ๋ฐ์ดํฐ(HTML์ด๋ CSS, ์ด๋ฏธ์ง ๋ฑ..)์ ์์ฒญํ๋ฉด ์ ๊ณตํ๋ ์ผ์ ํ๊ณ , ๋์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉด WAS์๊ฒ ๋ถํํด์ ๋ฐ์์จ ํ ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค..