MSA 12일차 : 쿠버네티스 - mysql 연동, Kafka 연동

parang·2025년 6월 12일

LG CNS AM Inspire Camp 2기

목록 보기
45/50
post-thumbnail

DB - mysql 연동

필요한 것

  1. (k8s) mysql service yaml
  2. (backend) 의존성, yml 등 추가

mysql을 연동하려면 현재 내가 사용하고 있는 ip를 확인해야한다. 와이파이 연결하고 있다는 전제 하에

cmd에 ipconfig를 입력해서 IPv4 주소를 확인해서 메모해둔다.

1. yaml 추가

apiVersion: v1
kind: Service
metadata:
  name: k8s-external-user-mysql-service
spec:
  ports:
    - port: 3306

---

apiVersion: v1
kind: Endpoints
metadata:
  name: k8s-external-user-mysql-service
subsets:
  - addresses:
      - ip: 각자의 ip 주소 값
    ports:
      - port: 13306

의존성 추가

build.gradle에서 밑의 두줄을 추가한다.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 
runtimeOnly 'com.mysql:mysql-connector-j:8.4.0'

dev, local.yml에 DB 접속 정보 입력


spring:
  datasource:
    url: jdbc:mysql://k8s-external-user-mysql-service:3306/user?serverTimezone=UTC&useSSL=true&autoReconnect=true&useUnicode=true&characterEncoding=utf-8
    username: user
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      connection-test-query: SELECT 1  
      validation-timeout: 5000

  jpa:
    hibernate:
      ddl-auto: create 
    generate-ddl: true (spring.jpa.generate-ddl)
    show-sql: true
    open-in-view: false

주의 사항 : 뎁스 잘 확인!

이 이후에는 스프링 클라우드 프로젝트와 마찬가지로 Entity, Repository 등을 추가했다.

백엔드 코드 작업을 마친 후, 버전 업 등을 업데이트 하고 커밋, 푸쉬, 젠킨스 빌드, 쿠버네티스에서 버전 업 까지 명시하면 작업은 끝난다.

Kafka 연동

mysql연동과 마찬가지로 1. yaml 2. 백엔드 코드 작업 순으로 진행한다.

주의 사항은 ip에 현재 자신이 사용하고 있는 ip를 넣어야 한다.

카프카 관련 의존성

implementation 'org.springframework.kafka:spring-kafka'
testImplementation 'org.springframework.kafka:spring-kafka-test'
(dev)
kafka: 
	bootstrap-servers: k8s-external-kafka-service:9092
    
(local)
kafka: 
	bootstrap-servers: 쓰고 있는 ip 주소:9092

비지니스 로직을 모두 작성 후, kafka docker compose yml도 자신의 ip주소로 수정해야 한다.

cf. 도커 버전 관리

docker compose down -v -> remove
docker compose up -d -> create

dev.yml 쓰는 이유

현재 쿠버네티스는 백엔드 코드의 dev.yml에 맞춰서 실행되고 있다.

        imagePullPolicy: Always
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: dev
        ports:
        - containerPort: 8080

트러블 슈팅

오늘 실습을 진행하면서 deployment가 오류가 나는 상황이 계속되어 해결하기 위해 사용한 방법이다.

오류 1. mysql 연동 오류

로컬에서 빌드 되는 것을 확인했고, sql 에디터에서 연결 오류가 나 db 오류라는 것을 짐작하고 있었다.

원인 : db가 떠있지 않았다.
해결 : docker compose up -d로 실행 완료 후 정상 동작 함을 확인했다.

오류 2: yaml 환경변수

원인 :

env:
-name: SPRING_PROFILES_ACTIVE 
value: dev

dev.yml에 jdbc설정하고 쿠버네티스 yaml에 dev명시를 하지 않음.
해결 : 쿠버네티스 yaml에 env를 보완하고 해결.

오류 3. 500번 오류

api 호출을 할 때 서버 오류가 자꾸 발생하여 한참 해맸다.

과정 1. 오류 파드 확인

kubectl get pods
kubectl logs -f 파드이름/id

쿠버네티스 오류가 아님을 확인하고 비지니스 로직을 확인.

원인 : yml의 kafka 코드 뎁스 오류
해결 : application과 kafka의 뎁스가 같아야 함을 확인하고 해결 완료.

profile
파랑입니다.

0개의 댓글