๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“”๊ฐ•์˜ ์ •๋ฆฌ ๋…ธํŠธ

(15)
[์Šคํ”„๋ง MVC 1] ์„œ๋ธ”๋ฆฟ, ํ…œํ”Œ๋ฆฟ์—”์ง„, MVC ํŒจํ„ด (2) ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ๋ฐฉ์‹ ์Šคํ”„๋ง๋ถ€ํŠธ๊ฐ€ ๋‚ด์žฅ๋œ ํ†ฐ์บฃ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์š”์ฒญ์„ request, response๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์„œ Servlet๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด Servelt๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ์ด HttpServletRequest๊ฐ์ฒด๋กœ ๋‹ด์•„์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. `HttpServletRequest` => [๋ฉ”์„œ๋“œ, URL์ •๋ณด, ์ฟผ๋ฆฌ์ŠคํŠธ๋ง // ํ—ค๋” // Body]์™€ ๊ฐ™์€ ์š”์ฒญ๋ฉ”์‹œ์ง€๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ. ๊ฐ™์€ ์š”์ฒญ์— ๊ฐ’์„ ์ž„์‹œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๋ฉด ์„ธ์…˜ ๊ด€๋ฆฌ๋„ ์ œ๊ณตํ•œ๋‹ค. HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋ฐฉ์‹ 3๊ฐ€์ง€ GET - ์ฟผ๋ฆฌํŒŒ๋ฆฌ๋ฏธํ„ฐ `ex) url?username=hello?age=20` POST - HTML FORM ๋ฉ”์‹œ์ง€ ๋ฐ”๋””..
[์Šคํ”„๋ง MVC 1] ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดํ•ด (1) ์›น์„œ๋ฒ„ ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต ์ •์  HTML, CSS, ์ด๋ฏธ์ง€, ์˜์ƒ ์˜ˆ) NGINX, APACHE ํ•˜์ง€๋งŒ ์ฝ˜ํ…์ธ ์˜ ํฌ๊ธฐ๊ฐ€ ์ˆ˜๋ฐฑ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ ๊ฐ™์ด ๋งค์šฐ ํฐ ๊ฒฝ์šฐ๋‚˜ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์ด๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ์›น์„œ๋ฒ„๋Š” '๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ', '๋ผ์šฐํ„ฐ ๋Œ€์—ญํญ', '์ผ€์ด๋ธ” ๋Œ€์—ญํญ' ๊ฐ์ข… ์ œํ•œ์— ๋„๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ œํ•œ์— ๊ฑธ๋ ค๋ฒ„๋ฆฌ๋ฉด ์›น์„œ๋ฒ„๋Š” ์ผ๋ฐ˜ ์š”์ฒญ๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” '๋งˆ๋น„'์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ์š”์ฒญ์ด ๋งŽ์•„์„œ ์›น์„œ๋ฒ„์— ์ œํ•œ์ด ๊ฑธ๋ฆด ๋•Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ ๋‹ค์ˆ˜์˜ ์›น์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ์ฝ˜ํ…์ธ  ์ถ”๊ฐ€์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ์ด ๋†’์€ '๋ฏธ๋””์–ด ์ฝ˜ํ…์ธ  ์„œ๋ฒ„'๋ฅผ ๋”ฐ๋กœ ๋‘”๋‹ค. ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋ฉด ์ฝ˜ํ…์ธ ์˜ ์ „์†ก ์†๋„๊ฐ€ ๋Š๋ ค์ง€๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ฝ˜ํ…์ธ  ์„œ๋ฒ„๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•˜..
[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section. 12 ์žฅ์•  ์ฒ˜๋ฆฌ์™€ Microservice ๋ถ„์‚ฐ ์ถ”์  & ๋ชจ๋‹ˆํ„ฐ๋ง Circuit Breaker - ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์„œ๋น„์Šค์— ๋ฐ˜๋ณต์ ์ธ ํ˜ธ์ถœ์ด ๋˜์ง€ ๋ชปํ•˜๊ฒŒ ์ฐจ๋‹จ - ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์œผ๋กœ ๋Œ€์ฒด ์ˆ˜ํ–‰ ์—ฐ๊ด€๋œ ์„œ๋น„์Šค๊ฐ€ ํŠน์ • ํ•œ๊ณ„์น˜ ์ด์ƒ ์‹คํŒจํ•œ๋‹ค๋ฉด Circuit Breaker๋Š” Open. (์ฐจ๋‹จ or ๋Œ€์ฒด ๊ธฐ๋Šฅ) ์ •์ƒ ์ž‘๋™ํ•œ๋‹ค๋ฉด Circuit Breaker๋Š” Closed. Mircroservice ํ†ต์‹  ์‹œ ์—ฐ์‡„ ์˜ค๋ฅ˜ USER์„œ๋น„์Šค์™€ ์—ฐ๊ด€๋œ ์„œ๋น„์Šค๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๋•Œ ๋Œ€์ฒ˜ํ•  ๋ฐฉ์•ˆ์ด ์žˆ์–ด์•ผํ•œ๋‹ค. Resilience4j์—์„œ Circuit breaking์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋กœ CustomizerํŒŒ์ผ์„ ์ •์˜ํ•ด์„œ ์„œํ‚ท๋ธŒ๋ ˆ์ด์ปค ์ƒ์„ธ ์„ค์ •์ด๋‚˜ ์‹œ๊ฐ„ ์ œํ•œ ์„ค์ •์„ ์ƒ์„ธํžˆ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์„ค์ •์„ ์ƒ๋žตํ•˜๊ณ  Ci..
[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section. 11 ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ Kafka ํ™œ์šฉ Apache Kafka - ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ํ”„๋กœ์ ํŠธ - ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ”ผ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ†ต์ผ๋œ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰, ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ง€๋‹Œ ํ”Œ๋žซํผ ์ œ๊ณต Kafka๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„๋„ ํ™•์žฅ์ด ์šฉ์ดํ•œ ์‹œ์Šคํ…œ Kafka Broker ์‹คํ–‰๋œ kafka ์„œ๋ฒ„ 3๋Œ€ ์ด์ƒ์˜ ๋ธŒ๋กœ์ปค ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ์„ค์ • ์ฝ”๋””๋„ค์ดํ„ฐ๋กœ 'Zookeeper' ์—ฐ๋™ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ (Broker ID, Controller ID ์ €์žฅ) ๋ฆฌ๋” ๋ธŒ๋กœ์ปค ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์žฅ์•  ๋Œ€์‘ํ•˜๋Š” ์—ญํ•  ๋ˆ„๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†Œ๋น„ํ•˜๋Š”์ง€ ์‹ ๊ฒฝ์“ฐ์ง€์•Š๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. - kafka client JAVA, Python, Go, C++ ๋“ฑ ๋งŽ์€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค. Kafka ์‹คํ–‰ํ•ด๋ณด๊ธฐ Zookeeper ์‹คํ–‰ ./bin/zookeeper-server-start..
[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section. 10 ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ„ ํ†ต์‹  ๋™๊ธฐ Http ํ†ต์‹  AMQP๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ํ†ต์‹  (Config์„œ๋ฒ„์—์„œ ๊ฐ ์„œ๋น„์Šค๋กœ ์„ค์ •์ •๋ณด ๋„˜๊ฒจ์ค„๋•Œ ์‚ฌ์šฉํ–ˆ์Œ) RestTemplate FeignClient - Rest Call์„ ์ถ”์ƒํ™”ํ•œ Spring Cloud Netflix ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ Multiple Order Service - Users์˜ ์š”์ฒญ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ - Orders ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ €์žฅ -> ๋™๊ธฐํ™” ๋ฌธ์ œ ๋ฐœ์ƒ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ํ•˜๋‚˜์˜ ์œ ์ €๊ฐ€ order์„œ๋น„์Šค์— ์ฃผ๋ฌธ ์š”์ฒญ์„ ๋„ฃ์œผ๋ฉด ๋ถ€ํ•˜๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์— ์˜ํ•ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์˜ DB์— ์ €์žฅ๋œ๋‹ค. *ํ•ด๊ฒฐ๋ฐฉ๋ฒ•* 1. ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ (๋™์‹œ์„ฑ, ํŠธ๋žœ์žญ์…˜ ๋ฌธ์ œ ๋ฐœ์ƒํ•˜๋‹ˆ ํ•ด๊ฒฐํ•ด์•ผํ•จ) 2. ๋‘ ๋ฐ..
[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section. 9 ์•”ํ˜ธ์ฐจ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Encryption๊ณผ Decryption Encryption types (์•”ํ˜ธํ™” ํƒ€์ž…) Symmetric Encryption (์•”๋ณตํ˜ธํ™” ๊ฐ™์€ ํ‚ค) Asymmetric Encryption (์•”๋ณตํ˜ธํ™” ๋‹ค๋ฅธ ํ‚ค)[private - public key] ์•”.๋ณตํ˜ธํ™” ๊ตฌ์„ฑ๋„ ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์•”.๋ณตํ˜ธํ™” ์‚ฌ์šฉํ•ด๋ณด๊ธฐ config-server์— 'ecrypt.key' ๊ฐ’์„ bootstrap.yml์— ์„ค์ •ํ•ด๋‘”๋‹ค. ์„œ๋ฒ„๋ฅผ ์žฌ์‹คํ–‰ํ•˜์—ฌ 'POST /encrypt'๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋ฅผ 'POST /decrypt'๋ฅผ ํ†ตํ•ด ๋ณตํ˜ธํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ์ •๋ณด ์•”๋ณตํ˜ธํ™” ์ ์šฉ user๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์žˆ๋˜ datasource์„ค์ • ์ •๋ณด๋ฅผ password ์•”ํ˜ธํ™”ํ•˜์—ฌ config-server์˜ user-service.y..
[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section. 8 Spring Cloud Bus๋ฅผ ์ด์šฉํ•œ ์„ค์ •์ •๋ณด ๋ณ€๊ฒฝ Spring Cloud Bus ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ Actuator Refresh๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์ˆ˜๋ฐฑ๊ฐœ๋ผ๊ณ  ํ•˜๋ฉด config์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— refresh๋ฅผ ๋ชจ๋‘ ์š”์ฒญํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Spring Cloud Bus๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž. AMQP (๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ”„๋กœํ† ์ฝœ) - ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ, ํ์ž‰, ๋ผ์šฐํŒ…(Publisher-Subscriber), ์‹ ๋ขฐ์„ฑ, ๋ณด์•ˆ - Erlang, RabbitMQ์—์„œ ์‚ฌ์šฉ Kafkaํ”„๋กœ์ ํŠธ (์˜คํ”ˆ์†Œ์Šค๋ฉ”์‹œ์ง€๋ธŒ๋กœ์ปคํ”„๋กœ์ ํŠธ) - ๋ถ„์‚ฐํ˜• ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ - ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ RabbitMQ vs. Kafka Spring Cloud Bus ์‚ฌ์šฉํ•˜๊ธฐ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ Cloud Bus์— ์•Œ๋ฆฌ๊ณ  Cloud Bus๊ฐ€ Con..
[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค]Section.7 Configuration Service application๋‚ด๋ถ€์—์„œ ๊ตฌ์„ฑ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด์„œ ๊ตฌ์„ฑ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•จ. Spring Cloud Config ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ๊ด€๋ฆฌ ํ•˜๋‚˜์˜ ์ค‘์•™ํ™” ๋œ ์ €์žฅ์†Œ์—์„œ ๊ตฌ์„ฑ์š”์†Œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ์ ์‘ ๊ฐ€๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด DEV-UAT-PRODํ™˜๊ฒฝ์— ๋งž๋Š” ๊ตฌ์„ฑ ์ •๋ณด ์‚ฌ์šฉ ํ˜•์ƒ๊ด€๋ฆฌ, ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ, ํŒŒ์ผ์ €์žฅ์†Œ ๊ฐ๊ฐ์— ์„ค์ • ์ •๋ณด๋ฅผ ํ•œ๋ฐ ๋ชจ์•„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ชจ์•„์ง„ ์„ค์ • ์ •๋ณด๋ฅผ DEV, PROD ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (application-dev.yml, application-prod.yml) Changed configuration values (๋ณ€๊ฒฝ๋œ C..

๋ฐ˜์‘ํ˜•