1. 오늘 학습 키워드
- 마이크로서비스 아키텍처(MSA)
- 서비스 디스커버리 (Service Discovery) & Spring Cloud Eureka
- 클라이언트 사이드 로드 밸런싱 (Ribbon)
- 선언적 HTTP 클라이언트 (Spring Cloud OpenFeign)
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
서비스 디스커버리(Service Discovery)와 Eureka
- 개념: MSA 환경에서 수많은 마이크로서비스들의 IP와 포트 번호를 중앙에서 동적으로 등록하고 관리해 주는 '전화번호부' 역할을 합니다.
- 주요 기능: 서비스 인스턴스가 켜질 때 자신의 주소를 등록하는 서비스 등록/조회, 서버의 생존 여부를 주기적으로 체크하는 헬스 체크(/actuator/health), 문제가 생긴 서버를 제거하는 장애 처리 등이 있습니다.
로드 밸런싱(Load Balancing)과 FeignClient
- 개념: 트래픽이 한 곳으로 몰려 서버가 터지는 것을 막기 위해 여러 대의 서버로 부하를 공평하게 나누어 분산해 주는 기술입니다.
- Ribbon: 넷플릭스가 만든 클라이언트 사이드 로드 밸런서로, 순차적으로 요청을 배분하는 라운드 로빈이나 성능 기반의 가중치 기반 등의 알고리즘을 수행합니다.
- OpenFeign: 인터페이스와 어노테이션(@FeignClient)만 정의하면 유레카 서버와 연동하여 알아서 상대방 마이크로서비스를 원격 호출하고 자동 로드 밸런싱까지 수행해 주는 편리한 HTTP 클라이언트입니다.
MSA 서비스 간 호출 실행 순서 (6단계)
- 1단계 (OrderController): http://localhost:19091/order/1 요청이 들어오면 orderId=1을 추출해 orderService.getOrder("1")을 호출합니다.
- 2단계 (OrderService): orderId가 "1"인 것을 확인하고, 내부적으로 productId="2"를 지정해 getProductInfo("2")를 호출합니다.
- 3단계 (ProductClient): FeignClient가 유레카 서버(19090)에 product-service가 몇 번 포트(19092)에서 돌고 있는지 주소를 조회합니다.
- 4단계 (OpenFeign): 유레카가 알려준 주소를 바탕으로 http://localhost:19092/product/2로 동적 HTTP 요청을 전송합니다.
- 5단계 (ProductController): Product 서비스(19092)가 요청을 받아 상품 ID("2")와 자신의 포트 번호("19092")를 문자열로 응답합니다.
- 6단계 (데이터 조립): 받아온 상품 정보와 기존 주문 정보를 하나로 묶어 브라우저 화면에 최종 출력합니다.
3. 학습하며 겪었던 문제점 & 에러
문제 1: Eureka Client의 서버 연결 실패 (Cannot execute request on any known server)
- 문제&에러에 대한 정의: 클라이언트 실행 시 유레카 서버를 찾지 못하고 기본 포트(8761)로 접속하려다 에러 발생.
- 내가 한 시도: application.yml 오타 검사, 들여쓰기 확인, .properties 포맷 변환 테스트.
- 해결 방법: 인텔리제이가 yml 파일을 일반 텍스트로 인식해 설정을 씹고 있었음. File Types 설정에서 .yml 확장자를 정상 등록하고, 파일 위치를 resources 바로 밑으로 이동시켜 해결.
- 새롭게 알게 된 점: 설정 파일 아이콘이 스프링/YML 모양이 아니면 프레임워크가 설정을 읽지 못하고 내장 기본값으로 돌아감.
- 이 문제&에러를 다시 만나게 되었다면? 툴에서 파일 자동완성이 먹히는지 먼저 보고, 설정 인식이 안 되면 디렉터리 경로와 인텔리제이 파일 지정부터 검증하겠음.
문제 2: 깃 통합 푸시 거절 ([rejected]) 및 하위 코드 누락
- 문제&에러에 대한 정의: 여러 프로젝트를 상위 폴더(MSA)로 묶어 올릴 때, 푸시가 거절되거나 하위 폴더가 빈 껍데기로 올라감.
- 내가 한 시도: 터미널에서 --force 푸시 주입, 인텔리제이 UI로 Pull/Push 반복했으나 Everything up-to-date만 뜨고 소스 누락.
- 해결 방법: 하위 프로젝트 폴더마다 숨어있던 독자적인 .git 폴더들을 강제 삭제. 이후 최상위에서 git rm --cached -r .로 캐시를 비우고 다시 git add .을 해 한 몸으로 강제 푸시 성공.
- 새롭게 알게 된 점: 상위 폴더 아래에 독립된 .git이 중첩 존재하면 코드가 꼬여 파일이 유실되므로, 하위 .git 삭제와 캐시 리셋이 필수임.
- 이 문제&에러를 다시 만나게 되었다면? 멀티 모듈 구조를 짤 때 하위 폴더에 자동 git init이 들어가지 않도록 주의하고, 중첩 깃 경고가 뜨면 즉시 하위 .git부터 지우고 시작하겠음.
4. 내일 학습 할 것은 무엇인지
- MSA 강의 듣기
- 요약본 정리하기
- 코드카타
- TIL작성
'심화_AI를 활용한 백엔드 아키텍처 심화 과정' 카테고리의 다른 글
| [내일배움캠프 사전캠프] 7회차 TIL(6/30 화) - MSA (0) | 2026.06.30 |
|---|---|
| [내일배움캠프 사전캠프] 6회차 TIL(6/29 월) - Spring Cloud 핵심 인프라 구축 (Config, 분산추적(Zipkin), 이벤트 드리븐) (0) | 2026.06.29 |
| [내일배움캠프 사전캠프] 4회차 TIL(6/25 목) - Global 예외처리, Error 메시지 관리, 용어 정리 (0) | 2026.06.25 |
| [내일배움캠프 사전캠프] 3회차 TIL(6/24 수) - 카카오 로그인 구현 & 각종 테스트 종류 알아보기 (0) | 2026.06.24 |
| [내일배움캠프 사전캠프] 2회차 TIL(6/23 화) - 다대다 관계 매핑과 권한별 트러블슈팅(폴더 기능 추가) (0) | 2026.06.23 |