파이썬 내장함수 bit_length, 이진수 길이, bit_count, 이진수 1의 개수
·
Python
bit_length 이진수로 정수를 나타내는 데 필요한 비트 수 반환 (버전 3.1에 추가) n = -37 bin(n) # -0b100101 n.bit_length() # 6 x 가 0이 아니면, x.bit_length() 는 2**(k-1)
[Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
·
Spring
2024.06.10 - [CS/OS] - 동기 VS 비동기, 블로킹 VS 논블로킹 동기 VS 비동기, 블로킹 VS 논블로킹동기(Synchronous) vs 비동기(Asynchronous)Synchronous작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함Thread1이 작업을 시작시키고, Task1이 끝날때까지 기다렸다 Task2를 시작작업 요청을karla.tistory.com  본사에서 클라이언트로부터 도서 정보 조회 요청을 받으면 지점으로 도서 정보 조회 API 요청 보내는 예시코드(클라이언트 ↔️ 본사 ↔️ 지점) Spring MVCBlocking 방식: 스레드가 차단됨다섯개의 책을 조회하는 API호출 지연시간 : 약 25초 정도(호출당 5초 지연)// 본사 API Server: R..
[CDC] kafka Connect, Debezium, JDBC Sink Connector
·
Kafka
Confluent 사의 JDBC Sink Connector 통해 구축 Source DB : MySQL Source Connector: kafka Connect (Source Connector, Debezium) Target DB : Mysql, Oracle Sink Connector : kafka Connect (JDBC Sink Connector) 1. Docker Container 주키퍼, 카프카 docker-compose.yml version: "3" services: zookeeper: container_name: zookeeper image: wurstmeister/zookeeper ports: - "2181:2181" kafka: container_name: kafka image: wurstm..
[JPA] @Lock 비관적 락, PESSIMISTIC_WRITE, 타임아웃, 트랜잭션
·
JPA
낙관적 락 @Version을 사용 트랜잭션을 커밋하는 시점에 충돌을 알 수 있음 비관적 락 선점 잠금 데이터베이스 트랜잭션 락 메커니즘에 의존하는 방식 SQL 쿼리에 select for update 구문을 사용하면서 시작 버전 정보는 사용하지 않음 JPA 락 옵션 낙관적 락 OPTIMISTIC 낙관적 락을 사용한다. 낙관적 락 OPTIMISTIC_FORCE_INCREMENT 낙관적 락 + 버전정보를 강제로 증가한다. 비관적 락 PESSIMISTIC_READ 비관적 락, 읽기 락을 사용한다. (공유 잠금) 비관적 락 PESSIMISTIC_WRITE 비관적 락, 쓰기 락을 사용한다.(배타적 잠금) 비관적 락 PESSIMISTIC_FORCE_INCREMENT 비관적 락 + 버전 정보를 강제로 증가한다. 기타 ..
ProcessBuilder Java 쉘 명령어, 스크립트 실행
·
Java
쉘 스크립트 실행 1. ProcessBuilder 객체 생성 ProcessBuilder builder = new ProcessBuilder(); ProcessBuilder객체를 사용하여 Linux 또는 Window의 커맨드라인의 커맨드입력을 실행할 수 있다. 2. directory(new File(“파일경로”)) : 해당 커맨드를 실행할 경로 String homeDirectory = System.getProperty("user.home"); builder.directory(new File(homeDirectory)); 3. command(“커맨드”) : 커맨드 입력메서드 builder.command("sh", "-c", "ls -l | grep P"); 4. ProcuessBuilder.start() :..
Spring Batch, 배치와 스케줄러의 차이, Job, Tasklet, Chunk
·
Spring
배치 배치는 실시간으로 처리하는것이 아닌 처리할 작업물들을 모아 한번에 처리하는 것 예를들어 1년간 접속하지않은 모든 회원들을 휴먼계정으로 처리하는 등 일반적인 비즈니스로직이 아닌 상황에 대해서 처리해주는 프로세스 배치와 스케줄러의 차이 배치 스캐쥴러 일괄 처리 정해진 시간에 자동으로 실행 사용자의 명령이 있을 때 실행 주기적으로 실행 Batch Job을 관리(Job을 구동하거나 실행시키는 기능 X ) Job, Tasklet, Chunk Job 배치 처리 과정을 하나의 단위로 만든 객체 배치 처리 과정에 있어 전체 계층의 최상단에 위치 1개 이상의 Step을 가짐 Job 안에는 여러 개의 Step이 존재하고, Step 안에는 Tasklet 또는 {Reader, Processor, Writer} 묶음이 존..
Spring Jsch SSH Private Key, Dockerfile 복사, Jsch kubernetes pod
·
Spring
Spring Jsch java ssh 접속private Session session; private ChannelExec channelExec; connect public void connectSSH() throws JSchException { JSch jsch = new JSch(); session = jsch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyCheckikarla.tistory.com SSH Authentication 동작 방식Client → Server : SSH connection을 요청Server → Client : Random message 전송Client..
Spring @Async 비동기 처리
·
Spring
@EnableAsync @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args);} } @Service public class MessageService { @Async public void print(String message) { System.out.println(message); } } @RequiredArgsConstructor @RestController public class MessageController { private final MessageService messageService; @..
Spring websocket 웹소켓, java 채팅 프로그램
·
Spring
웹 소켓 1. WebSocketConfig 생성 MessageBrokerRegistry enableSimpleBroker("/topic"); // 메시지 브로커를 활성화하고 subscribe 메시지 접두사를 설정합니다. setApplicationDestinationPrefixes("/app"); // 클라이언트에서 발송한 메시지중 Destination이 해당 경로(/app)로 시작하는 메시지를 메시지 브로커에서 처리하게합니다. StompEndpointRegistry addEndpoint("/chatting") // 웹소켓 엔드포인트를 지정합니다. 추후 클라이언트에서 해당 경로로 서버와 handshake 하게 됩니다. withSockJS(); // SockJS를 사용하여 브라우저에서 websocket을 지..
마이크로서비스 분산 트랜잭션 관리, 보상 트랜잭션, MSA Transaction | Two Phase Commit, Saga Pattern
·
MSA
2PC (Two Phase Commit) 분산 시스템에서 트랜잭션을 변경할 수 있는 기능을 제공하는 방식 Transaction Coordinator가 각 서비스의 Commit. Rollback 을 제어하는 형태로 트랜잭션을 관리함 2PC는 서비스가 증가할수록 시스템의 대기 시간이 길어지며, 이는 응답시간의 증가를 초래함 Lock을 잡아야 하는 Row의 범위가 크거나 트랜잭션 기간이 긴 경우 시스템에 엄청난 대기시간을 발생하므로 수명이 매우 짧은 작업에만 사용하는 것을 권장 마이크로서비스 전체에서 상태 변경을 조정하기 위해 2PC와 같은 분산 트랜잭션을 사용하지 않는 것이 좋음 2PC는 결국 Coordinator를 기반으로 강력한 결합을 유도하고, 데이터에 직접적인 Lock을 잡고 처리하기 때문에 서비스간..
멀티 스레드 환경, 동시성 이슈, 해결방법 | 스레드 안전성 (Thread-safe)
·
Java
동시성 이슈멀티스레드 방식은 한 코어에서 여러 스레드를 이용해서 번갈아 작업을 처리하는 방식공유하는 영역이 많아 프로세스방식보다 context switcing 오버헤드가 작아, 메모리 리소스가 상대적으로 적다는 장점멀티스레드 프로세스의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 줌여러 스레드가 동시에 하나의 자원을 공유하고 있기 때문에 같은 자원을 두고 경쟁상태(raceCondition) 같은 문제가 발생2023.05.11 - [CS/OS] - [Process & Thread] 스레드, 멀티 스레드 [Process & Thread] 스레드, 멀티 스레드1. 스레드 1) 스레드 하나의 프로세스 내에서 실행되는 동작의 단위 각 스레드는 프로세스의 스택 메모리..
[Elasticsearch] 설치 및 Index, Document 생성
·
DB
1. 설치1.접속하여 다운로드https://www.elastic.co/kr/downloads/past-releases#elasticsearch Past Releases of Elastic Stack SoftwareLooking for a past release of Elasticsearch, Logstash, Kibana, es-hadoop, Shield, Marvel, or our language clients? You're in the right place.www.elastic.co 2. 다운로드 경로에서 실행cd elasticsearch-8.9.1./bin/elasticsearch 3. 접속curl -XGET http://localhost:9200 [에러] Received plaintext http..
[프로그래머스] 등대 (트리, DP)
·
programmers
https://school.programmers.co.kr/learn/courses/30/lessons/133500 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분석 트리 DP : DFS 풀이 dp[i][j] : i는 노드번호, j는 등대를 켠 경우와 아닌 경우로 1이면 켠 경우 현재 노드가 안켜져 있다면 자식 노드가 켜져있어야 함 현재 노드가 켜져 있다면 자식 노드의 값은 상관 없으므로 최솟값을 취함 더보기 유사문제 : https://www.acmicpc.net/problem/2533 2533번: 사회망 서비스(SNS) 첫 번째 줄에는 친구 관계 트리..
[프로그래머스] 우박수열 정적분 (평행사변형 넓이)
·
programmers
https://school.programmers.co.kr/learn/courses/30/lessons/134239 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분석 k =5 ranges = [0,0],[0,-1],[2,-3],[3,-3]] 5 라면 5 ⇒ 16 ⇒ 8 ⇒ 4 ⇒2 ⇒ 1 이되어 총 5번만에 1 tmp = [5.0, 16, 8.0, 4.0, 2.0, 1.0] 평행사변형의 넓이 = (변+변)*높이/2 x :0~1 ➔ (5+16)*1/2 = 10.5 x :1~2 ➔ (16+8)*1/2 = 12.0 x :2~3 ➔ (8+4)*1/2 = 6.0..
달리기 경주 (딕셔너리)
·
programmers
def solution(players, callings): callings p={x:i+1 for i,x in enumerate(players)} r={i+1:x for i,x in enumerate(players)} for x in callings: pre=r[p[x]-1] p[x]-=1 rank=p[x] p[pre]+=1 r[rank]=x r[rank+1]=pre return list(r.values())
[1700] 멀티탭 스케줄링 (플러그 교체 최소 횟수)
·
Geedy
1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 분석 사용 순서대로 진행 이미 꽂은 경우 넘김 플러그 자리 체크 꽃을 수 있는 경우 플러그에 append 꽉찬 경우 앞으로 꽂을 거 중에 가장 대기 멀리 있는거 찾아서 뽑고 cnt +1하고 현재 플러그 append cnt 출력 풀이 """ 3구 멀티탭을 쓸 때, 전기용품의 사용 순서가 아래와 같이 주어진다면, 1. 키보드 2. 헤어드라이기 3. 핸드폰 충전기 4. 디지털 카메라 충전기 5. 키보드 6. 헤어드라이기 키보드, 헤어드라이기, 핸드폰 충전기의 플러그를..
[14565] 역원(Inverse) 구하기 (확장 유클리드 호제법)
·
Math
14565번: 역원(Inverse) 구하기 집합 Zn을 0부터 n-1까지의 정수 집합이라고 하자. Zn ∋ a, b, c 일 때, (a+b) mod n = 0이면 b는 a의 덧셈역이라고 하고 (a*c) mod n = 1이면 c는 a의 곱셈역이라고 한다. 정수 N, A가 주어졌을 때 Zn에서의 A의 www.acmicpc.net 분석 덧셈역 n-a (11 + 15) mod 26 = 0 곱셈역 xgcd(11﹡X, 26) = 1이 되는 X를 찾는 것 ➔ 11 * 𝒔 + 26 * 𝒕 = 1일 때 𝑆 값(곱셈역) (11 * 19) mod 26 = 1 확장 유클리드 알고리즘 확장 유클리드 호제법 유클리드 호제법 : 두 수의 최대 공약수 구하기 확장 유클리드 호제법 : 방정식의 해 구하기 베주 항등식 (Bezout's..
응급실 (큐, 덱)
·
Data Structure
문제 메디컬 병원 응급실에는 의사가 한 명밖에 없습니다. 응급실은 환자가 도착한 순서대로 진료를 합니다. 하지만 위험도가 높은 환자는 빨리 응급조 치를 의사가 해야 합니다. 이런 문제를 보완하기 위해 응급실은 다음과 같은 방법으로 환자의 진료순서를 정합니다. • 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼냅니다. • 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로다시 넣습니다. 그렇지 않으면 진료를 받습니다. N명의 환자가 대기목록에 있습니다. N명의 대기목록 순서의 환자 위험도가 주어지면, 대기목록상의 M번째 환자는 몇 번째로 진료 를 받는지 출력 5 2 60 50 70 80 90 풀이 from collections import deque n,..
공주 구하기 (큐, 덱)
·
Data Structure
문제 왕은 왕자들을 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다. 그리고 1번 왕자부터 N 번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시 계방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정숫자)를 외치면 그 왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시 1부터 시작하여 번호를 외친다. 이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다. 예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외된다고 하자. 처음에는 3번 왕자가 3 을 외쳐 제외된다. 이어 6, 1, 5, 2, 8, 4번 왕자가 차례대로 제외되고 마지막까지 남게 된 7 번 왕자에게 공주를 구하러갑니다. N과..
[TCP/IP] OSI 7계층, TCP/IP 4계층
·
Network
1. OSI 7계층 OSI(Open System Interconnection) 7계층은 국제표준화기구(ISO)에서 개발한 모델로, 네트워크 프로토콜 디자인과 데이터 통신을 계층으로 나눠 표준화한 것이다. 이렇게 계층을 나눈 이유는, 통신이 일어나는 과정을 단계별로 서술할 수 있으며, 특정 계층에서 문제가 발생할 시 해당 계층만 핸들하면 되기 때문이다. 1) 물리 계층 1계층 Physical Layer 시스템의 전기적, 물리적 표현을 나타낸다. 단지 데이터 전달 역할만을 하고, 알고리즘이나 오류 제어 기능은 존재하지 않는다. 허브, 케이블, 라우터, 전원 스위치 전선, 전파, 광섬유, 동축케이블, 모뎀(Modem), CSU 등이있다. 신호로 변환하여 전송하는 계층 전송 단위는 Bit를 사용한다. 2) 데이..
[Redis] Spring Boot 연동, 객체 캐싱, MSA에서 사용 시 주의점 Serialize
·
Spring
개발환경 macOS Ventura 13.2 Spring Boot 3.0.1 RELEASE JAVA 17 1. Build.gradle Dependency 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2. application.yml 파일 수정 로컬 레디스 spring: redis: # Local Redis lettuce: pool: max-active: 10 max-idle: 10 min-idle: 2 port: 6379 host: 127.0.0.1 password: 쿠버네티스 레디스 spring: data: # K8s Redis Custer redis: cluster: nodes: - redis-cluster.re..
[RabbitMQ] rabbitMQ Spring Boot Producer, Consumer 생성, MultipleConsumer, prefetch
·
RabbitMQ
0. RabbitMq 설치 및 설정 [RabbitMQ] rabbitmq 설치 및 설정, rabbitmq spring 3.0이상 연동 1. docker로 Rabbit MQ 설치 컨테이너 이름 : rabbitmq 백그라운드로 실행 docker run -d --name rabbitmq -p 5672:5672 -p 8080:15672 --restart=unless-stopped rabbitmq:management 2. management url 접속 # default username, password는 둘다 gue karla.tistory.com 1. RabbitMqProducer 파일 생성 yml 값 변수 매핑 RabbitTemplate 선언 @Service @Log4j2 public class RabbitM..
JVM (Java Virtual Machine) 개념, JDK, JRE
·
Java
1. 정의 및 특징자바코드로 작성된 프로그램이 CPU나 운영체제 등의 환경에 상관없이 독립적으로 동일하게 동작될 수 있게 만들어진 프로그램자바코드로 작성된 프로그램은 컴파일될 때, 컴파일러(javac)에 의해 바이너리 코드로 변환된 .class 파일로 변환되는 것을 볼 수 있는데 이 파일을 JVM으로 실행시키기 때문에 동일하게 동작될 수 있음때문에 JVM이 구동될 수 있는 환경이라면 모두 실행이 가능하기 때문에 높은 이식성을 보인다. 2. JVM의 실행과정JVM은 Class Loader, Execution Engine, Runtime Data Area, Garbage Collector 4가지의 구성으로 나눌 수 있다.정리부터 하자면 컴파일된 소스코드(.class)를 Class Loader를 통해 Runt..
[Spring Webflux] WebClient (HTTP 클라이언트)
·
Spring
WebClientRestTemplate를 대체하는 HTTP 클라이언트기존의 동기 API를 제공할 뿐만 아니라, 논블로킹 및 비동기 접근 방식을 지원해서 효율적인 통신이 가능요청을 나타내고 전송하게 해주는 빌더 방식의 인터페이스를 사용외부 API로 요청을 할 때 리액티브 타입의 전송과 수신(Mono, Flux)싱글 스레드 방식을 사용 Non-Blocking & Synchronouse2024.06.13 - [Spring] - [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe2024.06.10 - [CS/OS] - 동기 VS 비동기, 블로킹 V..
[Spring WebFlux] 2. 리액티브 스트림즈(Reactive Streams)
·
Spring
리액티브 스트림즈 (Reactive Streams)리액티브 라이브로리를 어떻게 구현할지 정의해 놓은 별도의 표준 사양데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하깊 위한 리액티브 라이브러리의 표준 사양RxJava, Reactor(Spring Framework와 가장 궁합이 잘맞음), Akka Streams, Java 9 Flow API 등 리액티브 스트림즈 구성요소컴포넌트설명Publisher 데이터를 생성하고 통지(발행, 게시, 방출)하는 역할Subscriber구독한 Publisher로부터 통지(발행, 게시, 방출)된 데이터를 전달받아서 처리하는 역할SubscriptionPublisher에 요청할 데이터의 개수를 지정하고, 데이터의 구독을 취소하는 역할ProcessorPublis..
[Spring WebFlux] 1. 리액티브 프로그래밍
·
Spring
리액티브 프로그래밍(Reactive Programming)리액티브 시스템을 구축하는데 필요한 프로그래밍 모델리액티브 시스템은 비동기 메시지 통신을 기반으로 한다리액티브 시스템에서의 비동기 메시지 통신은 Blocking I/O 방식이 아닌, Non-Blocking I/O  방식의 통신선언적 프로그래밍, 실행할 동작을 구체적으로 명시하지 않고 목표만 선언데이터 소스의 변경이 있을 때마다 데이터 전파리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍 방식의 코드 형태의 파라미터를 가짐 명령형 프로그래밍 VS 선언형프로그래밍명령형 프로그래밍// 6보다 더 크고 홀수인 숫자들의 합계를 구하는 것public c..
동기 VS 비동기, 블로킹 VS 논블로킹
·
OS
동기(Synchronous) vs 비동기(Asynchronous)Synchronous작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함Thread1이 작업을 시작시키고, Task1이 끝날때까지 기다렸다 Task2를 시작작업 요청을 했을 때 요청의 결과값(return)을 직접 받음요청의 결과값이 return값과 동일호출한 함수가 작업 완료를 신경 씀Asynchronous시작, 종료가 일치하지 않으며 끝나는 동시에 시작을 하지 않음Thread1이 작업을 시작 시키고, 완료를 기다리지 않고, Thread1은 다른 일을 처리할 수 있음작업 요청을 했을 때 요청의 결과값(return)을 간접적으로 받음요청의 결과값이 return값과 다를 수 있음해당 요청 작업은 별도의 스레드에서 실행하게 됨콜백을 ..
클러스터 인덱스, 넌클러스터 인덱스 (Clustered Index)
·
DB
인덱스 인덱스는 DB의 테이블에 데이터가 많을 때, 검색 속도를 향상시켜주기위해 사용하는 객체 컬럼을 정렬한 후에 데이터를 빠르게 찾을 수 있도록 도와주는 역할 클러스터 인덱스 테이블에 클러스터 인덱스를 적용할 때마다 그 테이블에 정렬 작업이 수반됨 클러스터 인덱스는 Primary Key처럼 한 테이블에 한 개만 생성할 수 있음 클러스터 인덱스는 데이터를 가리키는 포인터가 아닌 데이터를 저장한 블록의 포인터를 저장 넌클러스터 인덱스 비 클러스터 인덱스는 책의 색인(Index)과 같은 역할 데이터와 인덱스는 각각 다른 장소에 저장되므로 한 테이블에 여러 개의 비 클러스터 인덱스를 생성할 수 있음 데이터를 가리키는 포인터를 저장 예시 id를 PK로 지정하여 id의 순서에 따라 정렬됨 email에 넌클러스트인..