[Project] netflix- eureka

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

netflix- eureka

์˜ค๋Š˜ MSA ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ  ํšŒ์˜ ํ›„์— ๊ฐ์ž ์ฃผ๋ง ๋™์•ˆ MSA์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด์˜ค๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ง€๊ธˆ ํ•œ์ฐธ ์ด๋ ฅ์„œ๋ž‘ ํฌํŠธํด๋ฆฌ์˜ค ๋‚ธ๋‹ค๊ณ  ๋‹ค๋“ค ๋ฐ”๋น ์„œ ํ”„๋กœ์ ํŠธ์— ์˜คํžˆ๋ ค ์ง‘์ค‘ ๋ชปํ•˜๊ณ  ์žˆ๋Š”๋ฐ

๊ทธ๋ž˜๋„ ๋งˆ์ง€๋ง‰ ํ”„๋กœ์ ํŠธ ์—„์ฒญ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ, ํ”„๋กœ์ ํŠธ ์ž˜ ๋‚˜์™€์„œ ๋‹ค๋“ค ๋„์›€์ด ๋˜๋ฉด ์ข‹์œผ๋‹ˆ๊นŒ ๊ณต๋ถ€ํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

Netflix Eureka

  1. Netflix Eureka๋ž€?
    • Netflix Eureka๋Š” ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(Server-side Discovery)๋กœ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ
    • ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์ž์‹ ์„ Eureka Server์— ๋“ฑ๋กํ•˜๊ณ , ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ Eureka Client๋กœ์„œ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ Eureka๋Š” Eureka Server์™€ Eureka Client๋กœ ๋‚˜๋‰˜์–ด ๋™์ž‘ํ•˜๋ฉฐ, Eureka Server๋Š” ์„œ๋น„์Šค์˜ ๋“ฑ๋ก๊ณผ ์กฐํšŒ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , Eureka Client๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ณ , ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  2. Eureka์˜ ๊ตฌ์„ฑ ์š”์†Œ
    • Eureka Server
      • Eureka Server๋Š” ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๋“ฑ๋ก๋˜๋Š” ์ค‘์•™ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์—ญํ• ์„ gํ•œ๋‹ค.
      • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์‹œ์ž‘ํ•  ๋•Œ Eureka Server์— ์ž์‹ ์˜ ์œ„์น˜(IP, ํฌํŠธ ๋“ฑ)๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•˜ํŠธ๋น„ํŠธ(Heartbeat)๋ฅผ ๋ณด๋‚ด์„œ ์‚ด์•„ ์žˆ์Œ์„ ํ™•์ธ
      • Eureka Server๋Š” ๊ฐ ์„œ๋น„์Šค์˜ ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜๋ฉด ์ด ์ •๋ณด๋ฅผ ์ œ๊ฑฐ
    • Eureka Client
      • Eureka Client๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด Eureka Server๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์กฐํšŒํ•ด.
      • ์„œ๋น„์Šค ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— Eureka Server์—์„œ ์„œ๋น„์Šค๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ์„œ๋น„์Šค์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•ด ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ํด๋ผ์ด์–ธํŠธ๋Š” ๋˜ํ•œ Eureka Server์— ์ž์‹ ์„ ๋“ฑ๋กํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  3. Eureka ๋™์ž‘ ๋ฐฉ์‹
    • ์„œ๋น„์Šค ๋“ฑ๋ก
      • ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜๋ฉด Eureka Client๋Š” Eureka Server์— HTTP ์š”์ฒญ์„ ํ†ตํ•ด ์ž์‹ ์˜ ์ •๋ณด(IP, ํฌํŠธ, ์ƒํƒœ)๋ฅผ ๋“ฑ๋ก
      • ์ด๋•Œ ์„œ๋น„์Šค๋Š” ํ•˜ํŠธ๋น„ํŠธ(Heartbeat)๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๋‚ด์„œ ์„œ๋น„์Šค๊ฐ€ ์—ฌ์ „ํžˆ ์‚ด์•„ ์žˆ์Œ์„ ํ™•์ธํ•œ๋‹ค.
    • ์„œ๋น„์Šค ์กฐํšŒ
      • ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์—, Eureka Client๋Š” Eureka Server์—์„œ ์š”์ฒญํ•  ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ๋‹ค.
      • Eureka Server๋Š” ๋“ฑ๋ก๋œ ์„œ๋น„์Šค์˜ IP์™€ ํฌํŠธ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์„œ๋น„์Šค๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜ํŠธ๋น„ํŠธ ๋ฐ ์„œ๋น„์Šค ์ œ๊ฑฐ
      • Eureka Client๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ๋ณด๋‚ด ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ ๋™์ž‘ ์ค‘์ž„์„ Eureka Server์— ์•Œ๋ฆผ.
      • Eureka Server๋Š” ์ผ์ • ๊ธฐ๊ฐ„ ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ ์—†์œผ๋ฉด, ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋ก ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ๋” ์ด์ƒ ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์—†๊ฒŒ ํ•œ๋‹ค.
  4. Netflix Eureka์˜ ์ฃผ์š” ๊ธฐ๋Šฅ
  • ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ด€๋ฆฌ
    • Eureka Server๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ชจ๋“  ์„œ๋น„์Šค์˜ IP ์ฃผ์†Œ, ํฌํŠธ, ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๊ณ  ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Eureka๋Š” ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋ฅผ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•œ๋‹ค.
  • ๊ณ ๊ฐ€์šฉ์„ฑ ์ง€์›
    • Eureka๋Š” Failover ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ, ๋งŒ์•ฝ ํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ์ž๋™์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability)์„ ๋ณด์žฅํ•˜๊ณ , ์„œ๋น„์Šค ์žฅ์•  ์‹œ์—๋„ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
    • Eureka๋Š” ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ Eureka Server์—์„œ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๋Š” Ribbon ๊ฐ™์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • Self-Preservation Mode
    • Eureka๋Š” Self-Preservation Mode๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต
    • ๋„คํŠธ์›Œํฌ ์žฅ์• ๋‚˜ ์„ฑ๋Šฅ ์ด์Šˆ๋กœ ์ธํ•ด ์ผ๋ถ€ ์„œ๋น„์Šค์˜ ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ Eureka Server์— ๋„๋‹ฌํ•˜์ง€ ์•Š๋”๋ผ๋„, ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๊ณง๋ฐ”๋กœ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ , ์ผ์ • ๊ธฐ๊ฐ„ ์œ ์ง€ํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ธ๋‹ค.
      1. Netflix Eureka์˜ ์ž‘๋™ ํ๋ฆ„
    • ์„œ๋น„์Šค ๋“ฑ๋ก
      • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜๋ฉด Eureka Client๋Š” ์ž์‹ ์˜ IP์™€ ํฌํŠธ ์ •๋ณด๋ฅผ Eureka Server์— ๋“ฑ๋ก.
      • ์„œ๋น„์Šค๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ Eureka Server์— ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ๋ณด๋‚ด์„œ, ์„œ๋น„์Šค๊ฐ€ ์•„์ง ๋™์ž‘ ์ค‘์ž„์„ ์•Œ๋ฆผ.
    • ์„œ๋น„์Šค ์กฐํšŒ
      • ์„œ๋น„์Šค A๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค B์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด, Eureka Client๋Š” ๋จผ์ € Eureka Server์—์„œ ์„œ๋น„์Šค B์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์กฐํšŒ.
      • Eureka Server๋Š” ์„œ๋น„์Šค B์˜ IP์™€ ํฌํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์„œ๋น„์Šค A๋Š” ๊ทธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„œ๋น„์Šค B๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ„.
    • Self-Preservation ๋ชจ๋“œ
      • ๋งŒ์•ฝ ์„œ๋น„์Šค B์˜ ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ˆ˜์‹ ๋˜์ง€ ์•Š์œผ๋ฉด, Eureka Server๋Š” Self-Preservation ๋ชจ๋“œ๋กœ ์ „ํ™˜
      • ์ด ๋ชจ๋“œ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€ ์ผ์‹œ์ ์ธ ์žฅ์• ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋น„์Šค B๋ฅผ ๊ณง๋ฐ”๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์œ ํšจ์„ฑ์„ ์œ ์ง€ํ•จ.
      • ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ณต๊ตฌ๋˜๋ฉด, ์„œ๋น„์Šค B๋Š” ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ์žฌ๊ฐœํ•˜๊ณ  ๋‹ค์‹œ ์ •์ƒ ์ƒํƒœ๋กœ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๋‹ค.

Netflix Eureka ์‹ค์Šต

  1. https://start.spring.io/

    ์ฒ˜์Œ์— https://start.spring.io/ ์—ฌ๊ธฐ์„œ ์ƒ์„ฑํ•ด๋„ ๋˜๊ณ 

  2. ๊ธฐ์กด์— ํ”„๋กœ์ ํŠธ์—์„œ ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๐Ÿ”—Eureka Server

  1. build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
     plugins {
     	id 'org.springframework.boot' version '2.7.0'
     	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
     	id 'java'
     }
        
     javadoc.options.encoding = 'UTF-8'
        
     tasks.withType(JavaCompile) {
     	options.encoding = 'UTF-8'
     }
        
     //์ถ”๊ฐ€ํ•ด ์ค€ ๋ถ€๋ถ„ > ์Šคํ”„๋ง๋ถ€ํŠธ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ„.
     ext {
     	set('springCloudVersion', "2021.0.4")
     }
        
     configurations {
     	compileOnly {
     		extendsFrom annotationProcessor
     	}
     }
        
     repositories {
     	mavenCentral()
     }
        
     dependencies {
     	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     	implementation 'org.springframework.boot:spring-boot-starter-validation'
     	implementation 'org.springframework.boot:spring-boot-starter-web'
     	compileOnly 'org.projectlombok:lombok'
     	runtimeOnly 'com.h2database:h2'
     	annotationProcessor 'org.projectlombok:lombok'
     	testImplementation 'org.springframework.boot:spring-boot-starter-test'
     	implementation 'org.mapstruct:mapstruct:1.5.1.Final'
     	annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.1.Final'
        	
     	// ์˜์กด์„ฑ ์ถ”๊ฐ€ : ๋„ทํ”Œ๋ฆญ์Šค ์œ ๋ ˆ์นด ์„œ๋ฒ„
     	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
     }
        
     tasks.named('javadoc') {
     	source = sourceSets.main.allJava
     	options.memberLevel = JavadocMemberLevel.PRIVATE
     	destinationDir = file("build/docs/javadoc")
     }
        
     //์˜์กด์„ฑ ๊ด€๋ฆฌ ์ถ”๊ฐ€
     dependencyManagement {
     	imports {
     		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
     	}
     }
    
  • ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ ๋ฒ„์ „์ด ๋งž์•„์•ผ ํ•œ๋‹ค. > ์ด๊ฑฐ ์•ˆ ๋งž์•„์„œ ์ฒ˜์Œ์— ์—๋Ÿฌ ์—„์ฒญ ๋‚ฌ์—ˆ๋‹คโ€ฆใ… ใ… ใ… 

    1
    2
    3
    4
    
      //์ถ”๊ฐ€ํ•ด ์ค€ ๋ถ€๋ถ„ > ์Šคํ”„๋ง๋ถ€ํŠธ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ„.
      ext {
      	set('springCloudVersion', "2021.0.4")
        
    
  • ์˜์กด์„ฑ ์ถ”๊ฐ€

    1
    2
    
      // ์˜์กด์„ฑ ์ถ”๊ฐ€ : ๋„ทํ”Œ๋ฆญ์Šค ์œ ๋ ˆ์นด ์„œ๋ฒ„
      	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
    
  • Spring Cloud ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ dependencyManagement ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ

    1
    2
    3
    4
    5
    6
    
      // Spring Cloud์˜ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋“ค์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
       dependencyManagement {
          imports {
              mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
          }
      }
    
  1. yaml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
     spring:
       h2:
         console:
           enabled: true
           path: /h2
       datasource:
         url: jdbc:h2:mem:test
       jpa:
         hibernate:
           ddl-auto: create  # (1) ์Šคํ‚ค๋งˆ ์ž๋™ ์ƒ์„ฑ
         show-sql: true      # (2) SQL ์ฟผ๋ฆฌ ์ถœ๋ ฅ
           
     # ์ถ”๊ฐ€
     server:
       port: 8761
     eureka:
       client:
         register-with-eureka: false
         service-url:
           default-zone: http://${eureka.instance.hostname}:${server.port}/eureka
         fetch-registry: false
       instance:
         hostname: localhost
    
  2. SpringStratApplication

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
     package com.springboot;
        
     import org.springframework.boot.SpringApplication;
     import org.springframework.boot.autoconfigure.SpringBootApplication;
     import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
        
     @SpringBootApplication
     @EnableEurekaServer //์ถ”๊ฐ€
     public class SpringStartApplication {
       public static void main(String[] args) {
         SpringApplication.run(SpringStartApplication.class, args);
       }
     }
        
    
  3. localhost:8761 ๋กœ ์ ‘์†ํ•˜๋ฉด ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค.

๐Ÿ”— Eureka Client

  1. build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
     plugins {
     	id 'org.springframework.boot' version '2.7.0'
     	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
     	id 'java'
     }
        
     javadoc.options.encoding = 'UTF-8'
        
     tasks.withType(JavaCompile) {
     	options.encoding = 'UTF-8'
     }
        
     	//์ถ”๊ฐ€
     ext {
     	set('springCloudVersion', "2021.0.4")
     }
        
     configurations {
     	compileOnly {
     		extendsFrom annotationProcessor
     	}
     }
        
     repositories {
     	mavenCentral()
     }
        
     dependencies {
     	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     	implementation 'org.springframework.boot:spring-boot-starter-validation'
     	implementation 'org.springframework.boot:spring-boot-starter-web'
     	compileOnly 'org.projectlombok:lombok'
     	runtimeOnly 'com.h2database:h2'
     	annotationProcessor 'org.projectlombok:lombok'
     	testImplementation 'org.springframework.boot:spring-boot-starter-test'
     	implementation 'org.mapstruct:mapstruct:1.5.1.Final'
     	annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.1.Final'
        	
     	//client ์ถ”๊ฐ€
     	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
     }
        
     tasks.named('javadoc') {
     	source = sourceSets.main.allJava
     	options.memberLevel = JavadocMemberLevel.PRIVATE
     	destinationDir = file("build/docs/javadoc")
     }
        
     dependencyManagement {
     	imports {
     		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
     	}
     }
        
    
    • server์™€ ๋™์ผํ•˜์ง€๋งŒ dependency๋Š” client ๋กœ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
  2. yaml

    1
    2
    3
    4
    5
    6
    7
    8
    
     server:
       port: 9001
     eureka:
       client:
         register-with-eureka: true
         fetch-registry: true
         service-url:
           defaultZone: http://127.0.0.1:8761/eureka
    
  3. SpringStratApplication

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
     package com.springboot;
        
     import org.springframework.boot.SpringApplication;
     import org.springframework.boot.autoconfigure.SpringBootApplication;
     import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
        
     @EnableDiscoveryClient //์ถ”๊ฐ€
     @SpringBootApplication
     public class SpringStartApplication {
       public static void main(String[] args) {
         SpringApplication.run(SpringStartApplication.class, args);
       }
     }
        
    
  4. ์ฃผ์˜์„œ๋ฒ„ ์•ˆํ‚ค๊ณ  ํด๋ผ์ด์–ธํŠธ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ˆ์™ธ ๋ฐœ์ƒ ํ•œ๋‹ค.

  5. localhost:8761 ๋กœ ์ ‘์†ํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ถ”๊ฐ€ ๋˜์–ด ์žˆ๋‹ค (port : 9001)


์—„์ฒญ ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค, ๊ฐ•์˜๋ฅผ ์ฃผ๊ณ  ์‚ฌ๋ ค๋‹ˆ๊นŒ ๊ฝค ์–‘์ด ๋งŽ๊ณ  ์–ธ์ œ ๋‹ค ๋ณผ ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๊ทธ๋ƒฅ ๋ธ”๋กœ๊ทธ ๊ธ€๋งŒ ์ฐธ๊ณ  ํ–ˆ๋Š”๋ฐ ๋‹ค๋“ค start.spring.io์—์„œ ํŒŒ์ผ์„ ๋งŽ์ด ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•ด์„œ ์‹œ์ž‘ํ–ˆ๋Š”์ง€ build.gradle์€ ์ฐธ๊ณ ํ•  ์ˆ˜ ๊ฐ€์—†์—ˆ๋‹คโ€ฆ ๊ทธ๋ž˜์„œ ๊ธฐ์กด ํŒŒ์ผ์—์„œ build.gradle ๋งŒ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์—๋Ÿฌ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒ๋˜์—ˆ๋Š”๋ฐ ๊ทธ๋ž˜๋„ ํ•˜๋‹ค๋ณด๋‹ˆ ํ•ด๊ฒฐ! ๊ตฟ๊ตฟ

์—ฌ๊ธฐ์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ์ง€ ๋กœ์ปฌ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ณ  ์™€์•ผ๊ฒ ๋‹ค.







Project ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment