Computer Science
080821 MSA_SpringCloud
Micro Service의 분산 추적 Zipkin - 타이밍 데이터 수집, 추적 시스템 - Google의 Drapper에서 발전 - 분산환경에서 시스템 병목현상 파악 - Collector, Query Service, Database, Web ui로 구성 - Span 하나의 요청에 사용되는 단위 64bit UniqID - Trace 트리구조로 이루어진 Span Set 하나의 요청에 대한 같은 TraceID 발급 SpringCloud Sleuth - Spring Boot APP과 Zipkin과 연동 - 요청 값에 따른 Span ID,Trace ID 부여 - Trace, Span ID를 로그에 추가 가능 Servlet filter, REST Template, Scheduled Actions, Message C..
080721 MSA_SpringCloud
주문이 들어오면 Kafka Message 만들어서 전달하자. Message구성 = Schema, Field(DB 정보), Payload(DB 값) --> 만드는 방식에 대해 코드로 올려보자 Service가 Kafka topic에 Message 전달 Kafka Sink Connect가 해당 Message를 쿼리로 DB(MariaDB)에 전달하여 저장하는 형식 MSA 운영중에 다른 Service가 오류가 발생해도 현재 사용하는 Service에서는 문제가 없는 것처럼 보여야한다. CircuitBreaker -> 장애가 발생한 서비스에 반복적인 호출이 되지 않게 장애가 발생시 차단시킴. 장애가 발생한 서비스를 계속 호출하면 서비스가 느려지거나 다른 기능으로 대체수행 되도록 해야함 = 장애회피 CircuitBre..
080621 MSA SpringCloud
Order Service에 Kafka 설정 Controller에 kafka Message Producer 작업 두개의 Order Service를 실행 -> Postman으로 주문 API를 전송하여 저장한 뒤 조회하면 두개 Order Service의 DB(MariaDB)에 분산되어 주문이 저장됨 = 각 OrderService가 독립적인 DB를 가지고 있어서 그런것 DB에 바로 저장하는게 아니라 kafka Topic으로 주문 내용을 전송 -> Kafka Sink Connect에서 mariaDB로 전달하도록 수정해서 단일 DB에 저장하도록 수정
080521 SpringCloud_MSA 공부
kafka Source Connect추가 localhost:8083/connectors (Postman으로 Post로 전송 아래내용을 JSON형식으로) { "name" : "my-source-connect", "config" : { "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url":"jdbc:mysql://localhost:3307/mydb", "connection.user":"root", "connection.password":"${password}", "mode": "incrementing", "incrementing.column.name" : "id", "table.whitelist":"users..
Window 특정 포트 PID 확인, 프로세스 Kill 명령어
공부중에 윈도우에서 파워쉘만 종료하면 프로세스가 살아있어 다음에 다시 구동하려하면 포트가 바인딩 되어있어 켜지지않는 문제가 자주 발생해 남긴다. 포트 번호를 검색해서 PID를 찾아 해당 Process를 Kill하는 명령어 netstat -nao | findstr ${port} taskkill /f /pid ${port}
JPA(Entity, 영속성, 플러시, DB스키마 자동생성)
JPA를 사용하면 업데이트 쿼리를 commit 전에 알아서 날려줌 EntityManager는 쓰레드간 공유가 되지 않음, JPA의 모든 수정은 트랜잭션안에서 실행됨 JPQL: 객체를 대상으로한 객체지향쿼리, 설정에 따라 각 방언(MySql, MariaDB 등..) 변경해서 검색함 Table이 아닌 Entity 대상으로 검색 (JPQL: Entity 대상 Query, SQL: DBTable 대상 Query) persistence.xml이 있어야 함 JPA 가장 중요한 2가지 1. 객체와 관계형 DB의 맵핑 2. 영속성 컨텍스트(Entity를 영구저장하는 환경, 논리적 개념, Entity Manager를 통해 영속성 Context에 접근) Entity의 생명주기 -비영속 : 객체를 생성, 셋팅한 상태 -영속..
080421 Spring Cloud MSA 공부 기록
kafka Windows 사용법 kafka를 다운받아 CLI(Shell)로 실행한다. Window로 실행시 bin\windows의 배치파일을 사용한다. (Window로 실행 할 때 경로가 길다고 안되는 경우가 있다.. C드라이브나 전체 경로가 짧은 곳으로 옮겨주면 실행된다. ) 기본경로는 kafak 폴더 Zookeeper server 실행 명령어 bin\windows\zookeeper-server-start.bat config\zookeeper.properties kafka-server 실행 명령어 bin\windows\kafka-server-start.bat confg\server.properties Topic 등록 명령어 bin\windows\kafka-topics.bat --create --topi..
080321 Spring Cloud MSA 기록
MSA내 서비스간의 통신 Feign Decoder interface 구현 데이터 동기화 - 하나의 DB를 사용 - 여러 DB 사용시 메시지 큐(RabbitMq, kafka등)를 사용하여 동기화 - Kafka Connect + DB Kafka Producer와 Consumer 기반의 메시지큐 메시지를 여러 Consumer에게 높은처리량을 위해 메시지 최적화 eco-system에 연동가능함 Zookeeper와 연동해서 사용하며 3개이상의 Broker Cluster를 구성하여 사용 Broker중 하나는 Controller역할을 수행 -broker 정상동작 모니터링 - 다양한 3rd-party지원 Zookeeper, Kafka 서버 실행-> Topic 생성(Consumer사 Topic에 관심이 있다고 신청, T..
Go in Action. Chapter 5 요약.
Chapter 5 5.1 사용자 정의 타입 Go에서 사용자 정의 타입을 선언하는 방법은 크게 2가지 1. struct */ type user struct { name string email string phone_num int } /* var로 선언하면 변수가 제로 값이라는 묵시적이라고 함 */ var tom user /* 값을 줘서 초기화 하려면 구조체 리터럴을 사용해서 초기화 */ elsa := user{ name: "Elsa", email: "elsa@gmail.com", phone_num: 01011112222, } /* 아래 방법도 가능 */ elsa2 := user{"Elsa", "else@gmail.com", 01011112222} /* 구조체 타입 내포 */ type admin{ perso..
leetcode 5.Longest Palindromic Substring
난이도 Medium 사용언어 python3 나의 풀이는BruteForce라고 생각됨 주어지는 문자열에서 가장 긴 회문을 찾는 문제 구조를 잘 세우면 잘해보면 아주 쉽게 풀리는 문제인데 처음에 어떻게 찾아야하나 헤매다 답을 보고 깨달아 풀은문제 class Solution: def longestPalindrome(self, s: str) -> str: res = "" for i in range(len(s)): odd = self.palinSearch(s, i, i) //문자열의 글자가 홀수일 경우 even = self.palinSearch(s, i, i+1) //문자열의 글자가 짝수일 경우 res = max(odd, even, res, key=len) //max의 key 관련해서 몰랐다가 검색을 통해 알아냄..