약 한달 전(11월 15일)에 졸업 프로젝트인 '채삐'(ios 앱 채식비서)를 진행하면서 디스커버리 서버인 유레카를 적용해보았던 과정을 적어보고자 한다. 유레카 서버 부분은 다른 팀원이 했지만, 한번에 적어보도록 하겠다.
첫번째는 유레카 서버 프로젝트를 생성해야 한다.
Spring initializr 사이트에 들어가서 Gradle Project, Java 11, 스프링부트 버전은 2.7.5로 생성해준다.
생성한 유레카 서버 프로젝트의 build.gradle에 다음과 같이 의존성을 추가해준다.
org.springframework.cloud:spring-cloud-starter-netflix-eureka-server
다음은 application.yml 파일에 유레카 서버로서 동작할 수 있도록 코드를 작성해준다.
spring:
application:
name: eureka_server
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
waitTimeInMsWhenSyncEmpty: 0
response-cache-update-interval-ms: 5000
management.endpoints.web.exposure.include: "*"
유레카 서버로 동작하게끔 메인 애플리케이션에 애노테이션인 @EnableEurekaServer를 추가해준다.
프로젝트를 실행하고 나서, 잘 동작하는지 확인해 보기 위해 localhost:8761로 접속해 본다. 정상적으로 뜬다면 유레카 서버가 동작하고 있는 것이다!
https://spring.io/blog/2022/05/27/spring-cloud-2021-0-3-is-available-compatible-with-spring-boot-2-7-0
안정적인 버전을 사용하기 위하여 spring cloud는 2021.03으로 낮추고
spring boot 버전은 처음 지정했던 2.7.5가 아닌 2.7.0으로 낮춰준다.
참고 블로그 : https://wonit.tistory.com/495
클라이언트로 동작할 서비스인 ae_SpringServer의 build.gradle에 다음 코드를 추가하여 의존성을 추가해 준다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
ae_SpringServer(식단 관련 서비스) 프로젝트에 application.yml을 추가해서 다음과 같은 코드를 작성한다. 해당 코드로 인해 유레카 클라이언트로서 동작할 수 있도록 설정된다.
spring:
application:
name: ae_SpringServer
server:
port: 64412
eureka:
instance:
instance-id: spring-server-instance
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
ae_SpringServer 메인 애플리케이션에 @EnableDiscoveryClient 애노테이션을 추가하여 유레카 클라이언트로 동작하게끔 한다.
프로젝트를 실행하고 나서, 잘 동작하는지 확인해 보기 위해 localhost:8761로 접속해 본다. 해당 사이트에 Application 목록에 AE_SPRINGSERVER instance가 뜬다면 유레카 클라이언트로 잘 동작되고 있는 것이다!
ae_SpringServer의 서버 로그를 확인했을 때도 정상적으로 detect됨을 알 수 있다.
클라이언트로 동작할 서비스인 ae_communityServer의 build.gradle에 다음 코드를 추가하여 의존성을 추가해 준다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
ae_communityServer(커뮤니티 관련 서비스) 프로젝트에 application.yml을 추가해서 다음과 같은 코드를 작성한다. 해당 코드로 인해 유레카 클라이언트로서 동작할 수 있도록 설정된다.
spring:
application:
name: ae_communityServer
server:
port: 54412
eureka:
instance:
instance-id: community-server-instance
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
ae_SpringServer 메인 애플리케이션에 @EnableDiscoveryClient 애노테이션을 추가하여 유레카 클라이언트로 동작하게끔 한다.
프로젝트를 실행하고 나서, 잘 동작하는지 확인해 보기 위해 localhost:8761로 접속해 본다. 해당 사이트에 Application 목록에 AE_COMMUNITYSERVER instance가 뜬다면 유레카 클라이언트로 잘 동작되고 있는 것이다! ae_communityServer의 서버 로그를 확인했을 때도 정상적으로 detect됨을 알 수 있다.
이상으로 유레카 적용을 마치도록 하겠다. 스터디로 진행할 때는 이론은 이해가 가지만 어딘가 어렵다는 생각이 들었는데 직접 진행중인 프로젝트에 스스로 적용을 하여 실습을 해보니 더 정확하게 와닿는 것 같다.