rosieblue
article thumbnail
[JUnit] assertThrows ๋ฉ”์†Œ๋“œ

์˜ค๋Š˜ ๋ถ„์„ํ•  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์˜ ์ •ํ™•ํ•œ ์›๋ฆฌ๊ฐ€ ๊ถ๊ธˆํ•ด์„œ assertThrows์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. assertThrows๋Š” JUnit์—์„œ ์ œ๊ณตํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค. //memberService.join(member2)ํ•˜๋ฉด IllegalStateException์ด ์ผ์–ด๋‚˜์•ผํ•œ๋‹ค๋Š” ๋œป IllegalStateException e= Assertions.assertThrows(IllegalStateException.class, ()->memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค."); ์ผ๋‹จ JUnit์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋ผ๊ณ  ํ•˜๋‹ˆ JUnit์ด ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ์ธ์ง€๋งŒ ์•„์ฃผ์•„์ฃผ ์งง๊ฒŒ ์ •..

article thumbnail
[SpringBoot ์ž…๋ฌธ ์‹œ๋ฆฌ์ฆˆ (2)] ์Šคํ”„๋ง ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ - ์ •์  ์ปจํ…์ธ , MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„, API

์ด ํฌ์ŠคํŠธ๋Š” ์ธํ”„๋Ÿฐ์˜ ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น 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์— ํŒŒ์ผ ์ž…๋ ฅํ•˜๋ฉด ..

article thumbnail
[SpringBoot ์ž…๋ฌธ ์‹œ๋ฆฌ์ฆˆ (1)] ์Šคํ”„๋ง๋ถ€ํŠธ ํ™˜๊ฒฝ ์„ค์ • - ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ, View ํ™˜๊ฒฝ ์„ค์ •, ๋นŒ๋“œํ•œ ํ›„ ์‹คํ–‰ํ•˜๊ธฐ

์ด ํฌ์ŠคํŠธ๋Š” ์ธํ”„๋Ÿฐ์˜ ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น 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๋กœ ์—ด๋ฉด ..

article thumbnail
[AWS] Route53 ๋น„์šฉ/์š”๊ธˆ
๐Ÿงฐ Back-end/Server 2023. 3. 6. 14:59

AWS์˜ ๋™์•„๋ฆฌ ์„œ๋ฒ„์—์„œ ๋งŽ์€ ์–‘์€ ์•„๋‹ˆ์ง€๋งŒ ์š”๊ธˆ์ด ์ฒญ๊ตฌ๋˜์–ด์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฒญ๊ตฌ๋˜๋Š”์ง€ ์ฐพ์•„๋ดค๋‹ค. ๋ณด๋‹ˆ๊นŒ ๋‹ค Route53์—์„œ ๋‚˜๊ฐ„ ๊ฑฐ์˜€๋‹ค. Route53์ด๋ž€ DNS ์„œ๋น„์Šค์ธ๋ฐ, ๋Œ€์ถฉ ์šฐ๋ฆฌ์˜ IP๋ฅผ Route53์— ๋“ฑ๋กํ•œ ํ˜ธ์ŠคํŒ…์˜์—ญ์˜ ๋„๋ฉ”์ธ์ด๋ž‘ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์• ์ด๋‹ค. ๋œฌ๊ธˆ ์—†๋Š” Route53 ์ด๋ฆ„์˜ ์œ ๋ž˜๋ฅผ ์‚ดํŽด๋ณด๋ฉด DNS ์„œ๋ฒ„๊ฐ€ ํฌํŠธ 53์œผ๋กœ ์˜จ ์š”์ฒญ์— ์‘๋‹ตํ•˜๊ณ  ์—”๋“œ ์œ ์ €๋“ค์„ ์šฐ๋ฆฌ์˜ ์•ฑ์œผ๋กœ ๋ผ์šฐํŒ…ํ•ด์ค˜์„œ Route 53์ด๋ผ๊ณ  ํ•œ๋‹ค. (๊ณต์‹๋ฌธ์„œ ์ฐธ๊ณ ) ์œ„ ์‚ฌ์ง„์€ ํ•œ ํ˜ธ์ŠคํŒ… ์˜์—ญ์— ๋“ค์–ด์žˆ๋Š” ์• ๋“ค์„ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์šฐ๋ฆฌ ๋™์•„๋ฆฌ ์ด๋ฆ„์ด dongari๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด, ํ•œ ํ˜ธ์ŠคํŒ… ์˜์—ญ์— www.dongari.com, , dongari.com ๋“ฑ๋“ฑ ์ด๋Ÿฐ์‹์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ˜ธ์ŠคํŒ… ์˜์—ญ ํ•˜๋‚˜ ๋‹น ๋งค..

article thumbnail
[Nginx] Nginx ๊ฐœ๋… ์ •๋ฆฌ (2) - upstream ์„ค์ •์œผ๋กœ Nginx๋ฅผ Load Balancer(๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ)๋กœ ์‚ฌ์šฉํ•˜๊ธฐ
๐Ÿงฐ Back-end/Server 2023. 3. 1. 17:10

Upstream์˜ ๊ฐœ๋… ๊ฐ•์˜ ์ƒ๋ฅ˜๋ฅผ upstream, ํ•˜๋ฅ˜๋ฅผ downstream์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋•Œ ์ƒ๋ฅ˜๋Š” ๋ฌผ์„ ๋ณด๋‚ด๊ณ  ํ•˜๋ฅ˜๋Š” ๋ฌผ์„ ๋ฐ›๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด๋ฅผ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„ ๊ด€์ ์—์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค : upstream์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ, downstream์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ชฝ์œผ๋กœ! ๋ณดํ†ต ์„œ๋ฒ„๊ฐ€ upstream์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๋„ upstream์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์„œ๋ฒ„๋ฅผ upstream์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ๊ฒƒ์œผ๋ฏ€๋กœ ์„œ๋ฒ„๊ฐ€ upstream์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜๊ฒ ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Nginx์˜ upstream์€ ์ •ํ™•ํžˆ ์–ด๋–ค ์—ญํ• ์„ ํ• ๊นŒ? upstream์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ˜น์€ ๋ผ์šฐํŒ…์„ ์œ„ํ•ด ์›น/์•ฑ ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ ์“ฐ์ธ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ ์„œ๋ฒ„๋“ค์„ ๋ฌถ..

article thumbnail
[Nginx] Nginx ๊ฐœ๋… ์ •๋ฆฌ (1) - ์›น์„œ๋ฒ„, WAS, ํ”„๋กœ์„ธ์Šค, ์šฉ๋„, configuration file
๐Ÿงฐ Back-end/Server 2023. 2. 25. 12:00

ํ”„๋กœ์ ํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐฐํฌํ•  ๋•Œ, ๋‹จ์ˆœํžˆ ๋ธ”๋กœ๊ทธ๋งŒ ๋ณด๋ฉด์„œ ๋”ฐ๋ผํ•˜๋Š” ๊ฒƒ์€ ์‹ค๋ ฅ์ด ๋Š˜ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ Nginx์— ๋Œ€ํ•˜์—ฌ ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•ด๋ณด๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๊ปด์กŒ๋‹ค. ์˜ค๋Š˜์€ Nginx๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  configuration file (ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ)์€ ์–ด๋–ค ์‹์œผ๋กœ ๋˜์–ด์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 0) ์„œ๋ฒ„, ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๊ฐœ๋… Nginx๋Š” '์›น ์„œ๋ฒ„'์ด๋‹ค. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(WAS)๊ฐ€ ์•„๋‹Œ ์›น์„œ๋ฒ„! ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ •์  ํŒŒ์ผ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค(?) ๊ทธ๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์  ๋ฐ์ดํ„ฐ(HTML์ด๋‚˜ CSS, ์ด๋ฏธ์ง€ ๋“ฑ..)์„ ์š”์ฒญํ•˜๋ฉด ์ œ๊ณตํ•˜๋Š” ์ผ์„ ํ•˜๊ณ , ๋™์  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด WAS์—๊ฒŒ ๋ถ€ํƒํ•ด์„œ ๋ฐ›์•„์˜จ ํ›„ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค..