프로그램 오류 1. 컴파일 에러 컴파일 시에 발생하는 에러 📌 자바 컴파일러 1. 구문체크 2. 번역 3. 최저화 4. 생략된 구문 추가(ex. extens Object) 2. 런타임 에러 실행 시에 발생하는 에러 💡 Exception클래스들 : Exception클래스 + 자식 클래스 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 💡 RuntimeException클래스들 :RuntimeException클래스 + 자식 클래스 프로그래머의 실수로 발생하는 예외 💡 체크드예외/언체크드예외 - 컴파일러로 체크된다. ● 체크드예외(checked) try-catch 필수 ● 언체크드예외(unchecked) try-catch 선택 ❓ 왜 언체크드예외는 try-catch가 선택인가? 개발자의 실수로 발생할 수..
공부
"implements"는 인터페이스를 구현하는 데 사용되고, "extends"는 클래스 간의 상속 관계를 정의하는 데 사용된다. 클래스가 인터페이스를 구현할 때는 "implements"를 사용하고, 클래스가 다른 클래스를 확장할 때는 "extends"를 사용합니다. implements 클래스가 인터페이스를 구현할 때 사용된다. 인터페이스를 구현하는 클래스는 인터페이스에서 선언된 모든 메서드를 구현해야 한다. 자바와 같은 언어에서는 클래스가 여러 인터페이스를 구현할 수 있다. interface Animal { void makeSound(); } class Dog implements Animal { public void makeSound() { System.out.println("Woof"); } } ext..
💡 Zipkin 홈페이지 링크 분산 추적을 하기 위해서 추적 정보 즉 트레이싱 정보를 저장하기 위한 서비스가 Zipkin이다. - Twitter에서 사용하는 분산 환경의 Timing 데이터 수집, 추적 시스템 (오픈소스) - Google Drapper에서 발전하였으며, 분산 환경에서의 시스템 병목 현상 파악 - collerctor, Query Service, databaem WebUI로 구성 Span - 하나의 요청에 사용되는 작업 단위 - 64 bit unique ID Trace - 트리 구조로 이루어진 Span set - 하나의 요청에 대한 같은 Trace ID 발급 💡 Spring Cloud Sleuth 홈페이지 링크 마이크로 서비스가 여녈되어 있는 상태 값을 추적해서 누가 누구를 호출했고 시간이 ..
목록 CicuitBreaker Resilience4j Distributed Tracing Trace ID and Span ID Zipkin server 활용 MicroService간의 통신인식, 발생할 수 있는 대표적인 오류의 해결 방법 해결 방법 : CicuitBreaker 500번 에러를 보여주는 것이 아니라 200번(성공)을 보여주고 데이터가 없는 형태처럼 보여준다. 비록 OrderService를 통해 정상적인 주문 내역이 보이지는 않지만, User Service가 가지고 있었던 원래 사용자의 정보 목로을 보는 부분에서는 문제없이 정상적인 처리가 된다. 이렇게 문제가 생겼던 service나 fuction을 더 이상 사용하지 않도록 막고, 정상적으로 복구가 되면 이전처럼 정상적인 흐름으로 바꿔주는 장..
52회 SQLD 후기 3월 9일 52회 SQLD 시험을 보고 왔습니다. 24년도에 시험범위와 주관식이 사라진 첫 시험이었습니다. SQL을 주로 GPT에서 물어가며 해오고 당장 필요했던 구문만 검색해가며 사용했기 때문에 기본 지식과 모르는 내용이 많아 준비하는데 고생을 좀 했습니다. 하지만 다양한 함수와 관련 이론을 알 수 있어서 좋았습니다. 이번에 배웠던 내용을 실전에서 바로 활용하는 데에는 어려움이 있겠지만, 어떤 것이 있는지 알고 있기 때문에 나중에 검색하면서 활용할 수 있을 것 같아 도움이 많이 되었습니다. 2과목 문제도 실제 회사에서 활용할 것 같은 급여나 부서관련 내용이 많아서 함수를 어떻게 사용하는지 배울 수 있어서 좋았습니다. 또한, 비슷한 삭제기능이지만 DELETE보다 TRUNCATE가 더..
👀 Connect와 Connector 차이 Apache Kafka에서는 Kafka Connect라는 이름으로 데이터 이동을 위한 도구를 제공합니다. 이 도구의 핵심 구성 요소는 Connectors(커넥터)입니다. 👀 Kafka 와 Kafka Connector 차이 Kafka 목적: 데이터를 안전하게 저장하고, 실시간으로 처리하며, 다양한 애플리케이션 간에 데이터를 전송하는 플랫폼입니다. 데이터의 Pub/Sub(발행/구독)을 중심으로 데이터를 관리합니다. 역할: 메시지 큐나 데이터 파이프라인의 역할을 수행하여 데이터를 안전하게 저장하고, 다양한 소비자에게 실시간으로 전달합니다. 사용 사례: 대규모 데이터 스트리밍, 로그 처리, 이벤트 기반 마이크로서비스 아키텍처, 데이터 수집 및 분석 등에 사용됩니다. 구..
Orders Service에 요청된 주문 정보를 DB가 아니라 Kafka Topic으로 전송 Kafka Topic에 설정된 Kafka Sink Connect를 사용해 단일 DB에 저장 → 데이터 동기화 H2 DB → MariaDB 변경 step 1. Orders Service의 JPA데이터베이스 교체 (H2 DB → MariaDB) - MariaDB에서 table 생성 show databases; use mydb; //사용하고자 하는 database명 입력 show tables; orders 테이블 생성(mariaDB에서 테이블 생성해두기) 매번 실행할 때 생성하지 말고 그냥 하나 생성해둠.. create table orders ( id int auto_increment primary key, user_..
Order-service 요청된 주문의 수량 정보를 Catalog-service에 반영 Order-service에서 kafka Topic으로 메시지 전송 → Producer Catalog-service에서 kafaka topic에 전송된 메시지 취득 → Consumer Concurrent kafkaListenerContainerFactory : 토픽에 변경 사항이 있는지 계속 리스닝하고 있고 이벤트가 발생했을 때 그걸 캐치할 수 있는 리스너 데이터를 지정해 줄 때 토픽에 저장되는 값이 어떤 형태로 저장될지 지정할 수 있다. 그 중 하나가 key-value값이다. 그래서 key-value값으로 저장되었을 때, 역으로 해석해서 사용해야 한다. 그때 Deserializer 라는 타입을 지정하게 된다. 데이터를..
Kafka 자신들이 전송하는 데이터가 어떤 시스템에 저장되는지 관계하지 않고 무조건 Kafka 하나만 상대하면 된다. 카프카에 쌓였던 데이터 메시지들도 하둡이라던가 모니터링 시스템, 서치 엔진, 다른 어플리케이션, 이메일 쪽으로 데이터를 전달해줄 때도 카프카로부터 받아오면 되기 때문에 단일 포맷을 사용할 수 있다. 그럼 보내는 쪽과 받는 쪽이 누가 보냈고 누가 받았는지 전혀 신경쓰지 않는 상태에서 메시지를 주고 받는게 가능해진다. 메시지 보내는 쪽을 Producer 메시지 받는 쪽을 Concumer라고 한다. 특징 프로듀서, 컨슈머 분리해서 작업한다. 하나의 메시지에 여러 컨슈머 가능 다양한 형태의 여러 컨슈머에 전달할 수 있다. 높은 처리량을 위한 메시지 최적화 시켜서 내부적으로 보관하고 있다 카프카 ..
동기화 문제 order-service를 2개 기동 후, 한 User로 5번의 주문을 해보았다. 2개의 order 서버에서 돌아가면서 각자의 DB에 저장된 것을 확인했다. 같은 order-service니까 하나의 DB를 사용하게 할 수는 없을까? 해결 1) 하나의 Database 사용 하나의 DB를 사용하기 위해서는 트랜잭션 관리 동시성 관리를 잘 해줘야 한다. 해결 2) Database간의 동기화 Kafka, RabbitMQ를 사용하여 해결 3) DB(해결방법 1) + Kafka Connector(해결방법 2) 하나의 DB + 큐잉메시지