티스토리 뷰


개요

저번 시간에 말씀드린 것 처럼 이번 시간에는 Kafka Connect를 활용해, 단일 DB에 데이터를 적재하는 과정을 거치려 합니다. MariaBD Order Kafka Topic, Order Kafka Producer를 조금 수정해야 합니다!


#MariaDB

가장 먼저 일단 MariaDB에 접속해줍니다. Windows환경 기준으로 저는 다음과 같이 접속했습니다. 

// MariaDB 설치 폴더 Bin으로 이동
cd D:\mariadb-10.6.7-winx64\bin
// mysql 서버 실행 및 유저 정보 입력
mysql -uroot -p
// EnterPassword 출력 시 test1357 입력 or 본인이 설정한 root password로 접속
Enter password: ********

정상 접속 시 MariaDB[None]으로 나올 텐데 use mydb를 커맨드를 통해 mydb로 이동해줍니다.

MySql [(none)] > use mydb

#정상접속 시

다음으로는 Query문을 통해 orders Table을 생성해줍니다.

create table orders (
  id int auto_increment primary key,
  user_id varchar(50) not null,
  product_id varchar(20) not null,
  order_id varchar(50) not null,
  qty int default 0,
  unit_price int default 0,
  total_price int default 0,
  created_at datetime default now()
)

Query 실행 후 show tables 명령어를 통해서 정상 생성됐는지 확인해주세요.

해당 Table을 만드는 이유는 이제 단일 DB를 이용해 주문 정보를 저장할 예정이기 때문입니다. 그럼 저번에 말씀드렸던 주문 조회 시 동기화 이슈가 해당 DB에서 모든 주문정보가 저장되기에 문제가 해결 됩니다.


#application.yml ( Order - Servcie )

다음으로는 이제 참조할 DB를 바꿔야하기 때문에 Order-Service에서 application.yml을 수정하려합니다.

#전체코드

server:
   port: 0

spring:
   application:
      name: order-service
   h2:
      console:
         enabled: true
         settings:
            web-allow-others: true
         path: /h2-console
   jpa:
      hibernate:
         ddl-auto: update
   datasource:
#      driver-class-name: org.h2.Driver
#      url: jdbc:h2:mem:testdb
      url: jdbc:mysql://localhost:3307/mydb
      driver-class-name: org.mariadb.jdbc.Driver
      username: root
      password: test1357

eureka:
   instance:
      instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
   client:
      register-with-eureka: true
      fetch-registry: true
      service-url:
         defalutZone: http://127.0.0.1:8761/eureka

 

바뀐 부분은 datasource: 부분입니다. 따로 설명드릴 부분이 없네요... DB접속정보와 계정정보를 입력 하시면 DB연동은 완료가 됩니다.

   datasource:
#      driver-class-name: org.h2.Driver
#      url: jdbc:h2:mem:testdb
      url: jdbc:mysql://localhost:3307/mydb
      driver-class-name: org.mariadb.jdbc.Driver
      username: root
      password: test1357

#TEST 

 (구동 서비스 : 워크스페이스 내부 서비스를 모두 실행해주세요.)

Post-Man에서 테스트하는 법을 복습할겸 유저등록부터 하겠습니다.

#유저등록

userId를 복사해서 메모장에 적어둡시다!

#로그인

토큰값 복사를 진행해주세요.

 아 진행하기에 앞서서 한가지 부분을 고치려합니다.

 


#OrderServiceClient.java

예전에 테스트목적으로 오류코드를 작성한것을 까먹고 그대로 뒀었습니다. 

orders_trap으로 되어있는 부분을 orders로 다시 바꿔줍니다!

아래코드가 정상작동 코드입니다!

package com.example.userservice.client;

import com.example.userservice.vo.ResponseOrder;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/* 사용할 Service name 으로 등록해줍니다. */
@FeignClient(name="order-service")
public interface OrderServiceClient {

    /* getOrders 를 만들어주고 해당경로값을 Mapping 해줍니다.
     * userId는 가변값이기 때문에 PathVariable 으로 등록해줍니다.
     */
    @GetMapping("/order-service/{userId}/orders")
    List<ResponseOrder> getOrders(@PathVariable String userId);


}

#회원정보 조회

user/[userId] 로 접속할 것인데, 인증을 해야하기 때문에 Bearer Token에 아까 복사해둔 토큰을 넣은 뒤 Send를 진행합니다.

orders가 비어있다면 정상적으로 DB연동 성공

#카테고리 확인

http://localhost:8000/catalog-service/catalogs 로 접속해 상품정보 먼저 확인해줍니다.

#주문 등록

 POST 타입으로 

localhost:8000/[userID]/orders 요청을 보냅니다.

Body안에 주문 정보를 담는 것도 잊지 말아주세요.

아래와 같이 주문 성공 응답이 오면 성공입니다.


#에러가 나는 경우

저같은 경우는 Insert에서 오류가 자꾸 나서 어디서 문제가 나는지 체크 해봤습니다. 시도 해본 것으로는

 

1.주소 정보 잘못 기입 ( 첫번째 오류, Mysql로 접속해야하는데 mariadb로 잘 못 기입 ) 해결

2. 해결 후 Sql문 문제 발생 Table 문제여서 그냥 Drop 후 재생성

 

아마 주문 등록중 에러가 나시면 둘 중 하나 일 거에요. 혹시 몰라서 Kafka도 다시 실행시켰는데,

해당 부분은 문제가 아닌걸로 확인이 됐습니다.


#다시 회원정보 조회

다시 조회를 하게되면 다음과 같이, 아까는 공란이었던 주문정보가 추가된 것을 알 수 있습니다.


자 이제, 단일 DB로 설정했고 여러포트에서 같은 서비스가 실행되도 해당 DB에 저장되도록 셋팅을 바꿨습니다. 다음 포스팅 부터는, 본격적으로 Kafka와 연동을 통해서 저장할 수 있도록 바꿔보려 합니다. 

감사합니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함