-
[JPA] @Lock 비관적 락, PESSIMISTIC_WRITE, 타임아웃, 트랜잭션
낙관적 락 @Version을 사용 트랜잭션을 커밋하는 시점에 충돌을 알 수 있음 비관적 락 선점 잠금 데이터베이스 트랜잭션 락 메커니즘에 의존하는 방식 SQL 쿼리에 select for update 구문을 사용하면서 시작 버전 정보는 사용하지 않음 JPA 락 옵션 낙관적 락 OPTIMISTIC 낙관적 락을 사용한다. 낙관적 락 OPTIMISTIC_FORCE_INCREMENT 낙관적 락 + 버전정보를 강제로 증가한다. 비관적 락 PESSIMISTIC_READ 비관적 락, 읽기 락을 사용한다. (공유 잠금) 비관적 락 PESSIMISTIC_WRITE 비관적 락, 쓰기 락을 사용한다.(배타적 잠금) 비관적 락 PESSIMISTIC_FORCE_INCREMENT 비관적 락 + 버전 정보를 강제로 증가한다. 기타 ..
-
ProcessBuilder 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() :..
-
그래프의 표현 및 비교 (간선 리스트, 인접 행렬, 인접 리스트)
간선 리스트 인접 행렬 인접 리스트 중심 간선 노드 노드 시간복잡도 - 느림 빠름 구조 [] d[시작노드][종료노드] d[시작노드] 입력 (시작노드 ,도착노드, 가중치) 가중치 (도착노드, 가중치) 알고리즘 벨만-포드 MST 크루스칼 플로이드-워셜 다익스트라 간선 리스트 Edge list 에지 중심으로 그래프를 표현 리스트에 출발 노드, 도착 노드, 가중치 저장하여 가중치가 있는 에지 표현 벨만-포드, 최소 신장 트리 크루스칼 알고리즘 # 벨만 포드 graph = [] for i in range(m): u, v, w = map(int, input().split()) graph.append((u, v, w)) # 크루스칼 from queue import PriorityQueue q = PriorityQue..
-
[Keycloak] OAuth2 MSA에서 키클록 SSO Spring Security 연동 (1) dependency 추가, gateway/auth 서비스 설정
개발환경macOSSpring Boot 2.7.5 RELEASEJAVA 11 1. MSA 서비스 구조서비스 디스커버리 패턴으로 gateway 서비스(api gateway)를 통해 각 서비스의 api를 호출하는 형태입니다.auth 서비스를 통해 회원가입/로그인 등 계정 및 권한을 관리합니다. (키클록 토큰 발급) 2. gateway 서비스 설정0) 프로젝트 구조📦gatewayserver ┣ 📂src ┃┣ 📂main ┃ ┃ ┣ 📂java ┃ ┃ ┃ ┗ 📂com ┃ ┃ ┃ ┃ ┗ 📂cloud ┃ ┃ ┃ ┃ ┃ ┗ 📂gatewayserver ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜GatewayserverApplication.java ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SecurityConfig.java ┃ ┃ ┗ ?..
-
Spring Batch, 배치와 스케줄러의 차이, Job, Tasklet, Chunk
배치 배치는 실시간으로 처리하는것이 아닌 처리할 작업물들을 모아 한번에 처리하는 것 예를들어 1년간 접속하지않은 모든 회원들을 휴먼계정으로 처리하는 등 일반적인 비즈니스로직이 아닌 상황에 대해서 처리해주는 프로세스 배치와 스케줄러의 차이 배치 스캐쥴러 일괄 처리 정해진 시간에 자동으로 실행 사용자의 명령이 있을 때 실행 주기적으로 실행 Batch Job을 관리(Job을 구동하거나 실행시키는 기능 X ) Job, Tasklet, Chunk Job 배치 처리 과정을 하나의 단위로 만든 객체 배치 처리 과정에 있어 전체 계층의 최상단에 위치 1개 이상의 Step을 가짐 Job 안에는 여러 개의 Step이 존재하고, Step 안에는 Tasklet 또는 {Reader, Processor, Writer} 묶음이 존..
-
[Mac OS / Java] 맥 JDK 자바 버전 변경
현재 jdk 버전 확인 java -version 설치된 모든 jdk 버전들 확인 /usr/libexec/java_home -V 사용하는 shell 확인 echo $SHELL bash 혹은 zsh vi 를 통해 환경변수 수정 vi ~/.bash_profile #bash vi ~/.zshrc # zsh 사용하는 shell에 따라 파일 열기 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0) export JAVA_HOME=$(/usr/libexec/java_home -v 11) export JAVA_HOME=$(/usr/libexec/java_home -v 17) 변경하려는 버전 입력 i 키를 입력해 수정 :wq! 를 입력해 저장 후 편집기 닫기 source ~/.zs..
-
[gRPC] gRPC 개요, MSA 서비스간 통신, gRPC vs REST
마이크로 서비스간 통신 이슈 MSA에서는 여러 모듈로 분리되어있고 동일 머신에 존재하지 않을 수 있습니다. 따라서 일반적으로는 보편화된 방식인 REST 통신을 통해 메시지를 주고 받습니다. TTP 1.0은 요청/응답을 하기에 앞서 매번 Connection을 맺고 끊어야했기 때문에 연결 요청/해제 비용이 상당히 높았습니다. RPC Remote Procedure Calls 다른 컴퓨터의 프로그램의 프로시저를 실행하는 프로그램을 허용하는 프로토콜 개발자가 원격 상호 작용에 대한 세부 정보를 명시적으로 코딩하지 않아도 됨 프레임워크가 자동 핸들링 클라이언트 코드에서는 직접 서버 코드의 함수를 호출하는 것처럼 보임 gRPC google Remote Procedure Call 구글에서 만든 원격 프로시저 호출 프레..
-
[CDC] kafka Connect, Debezium, JDBC Sink Connector
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..
-
Spring Jsch SSH Private Key, Dockerfile 복사, Jsch kubernetes pod
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..
-
[1722번] 순열의 순서 구하기(수학, 구현)
1722번: 순열의 순서 첫째 줄에 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄의 첫 번째 수는 소문제 번호이다. 1인 경우 k(1 ≤ k ≤ N!)를 입력받고, 2인 경우 임의의 순열을 나타내는 N개의 수를 입력받는다. N개의 수에는 1부터 N www.acmicpc.net 분석 4! = 24 3! = 6 2! =2 1! =1 제일 앞 자리에 사용할 수 있는 숫자 경우의 수 4가지, 다음 3가지, 다음 2가지, 다음 1가지 ➔ N자리의 수로 만들 수 있는 순열의 모든 경우의 수 N! 1. K번째 순열 출력 1) 로직 1. 주어진 값(K)과 현재자리(N) -1에서 만들 수 있는 경우의 수를 비교 2. 1에서 K가 더 작아질 때까지 경우의 수를 배수(cnt)로 증가시킴(순열의 순서를 1씩 늘림) 3. K가..
-
[Keycloak] MSA에서 키클록 Spring Security 연동 (2) 토큰 발급, 토큰값 확인
[Keycloak] MSA에서 키클록 Spring Security 연동 (1) dependency 추가, gateway/auth 서비스 설정 개발환경 macOS Spring Boot 2.7.5 RELEASE JAVA 11 1. MSA 서비스 구조 서비스 디스커버리 패턴으로 gateway 서비스(api gateway)를 통해 각 서비스의 api를 호출하는 형태입니다. auth 서비스를 통해 회원가입/로그 karla.tistory.com 1. auth 서비스 - 회원가입 AuthController authService를 통해 keycloack DB에 사용자 생성 후, userService를 통해 부가적인 사용자 데이터를 user DB에 저장 // 회원가입 @PostMapping("/signup") publi..
-
[Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
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..
-
자바 순열, 조합 구하기 (파이썬 itertools 라이브러리)
자바는 파이썬의 itertools 라이브러리 같은 내장함수로 순열, 조합이 없어 직접 구현해야함 n개중에 r개 선택한다는 가정 Depth를 r만큼 재귀 변수 int n, r : n개 중 r개를 뽑음 int[] now : 현재 저장한 list값 인덱스 List result : 결과값 boolean[] visited : 순열 방문 여부 순열 public static void permutation(List list, int depth) { if (depth == r) { List temp = new ArrayList(); for (int i = 0; i < now.length; i++) { temp.add(list.get(now[i])); } result.add(temp); return; } for (int ..
-
Kubernetes 인그레스(Ingress), 로드밸런서 LoadBalancer, metallb
Ingress, Ingress Controller 인그레스를 사용하면 L7의 웹 요청을 해석해서 단일 IP, 단일 포트로 다수의 도메인과 서비스로 연결할 수 있음 쿠버네티스에서 기본적으로 지원하는 인그레스 오브젝트는 클라우드 환경이 아니면 사용할 수 없음 클라우드에서 인그레스를 생성하면 외부에 게이트웨이를 생성하고 각 기능에 맞게 서비스에 연결 쿠버네티스에서 Ingress를 사용하기 위해서는 두 가지가 필요 첫 번째는 YAML 파일에서 kind: Ingress 로 정의되는 Ingress 오브젝트 두 번째는 Ingress 규칙이 적용될 Ingress Controller YAML 파일로부터 Ingress를 생성해도 아무 일도 일어나지 않음 Ingress는 단지 Ingress 규칙을 정의하는 선언적인 오브젝트..
-
파이썬 내장함수 bit_length, 이진수 길이, bit_count, 이진수 1의 개수
bit_length 이진수로 정수를 나타내는 데 필요한 비트 수 반환 (버전 3.1에 추가) n = -37 bin(n) # -0b100101 n.bit_length() # 6 x 가 0이 아니면, x.bit_length() 는 2**(k-1)