💡 Spring Boot Batch 대량의 데이터를 처리하는 작업을 자동화하여 시스템의 부하를 줄이고 효율적인 데이터 처리를 가능하게 하는 프레임워크 💡 배치 프로그램(Batch Program) 대량의 데이터를 처리하는 작업을 자동화하는 프로그램 Job과 Step을 이용한 배치 프로세스 구현 배치 처리의 단위 작업(Job)과 작은 단위 작업(Step)을 이용하여 배치 프로세스를 구현하는 기능을 제공 Chunk 지향 처리 방식을 통한 대용량 데이터 처리 Chunk 단위로 데이터를 처리하여 대용량 데이터 처리 기능을 제공 전체 프로세스 1. Job Launcher로 Job을 실행 (Job Launcher -> Job) 2. Job은 Step을 통해 실제 배치처리를 수행 (Job → Step) 3. Step에..
이동봉사 공고마다 하나의 신청만을 허용하는 프로젝트에서, 여러 요청이 동시에 들어왔을 때 처음 들어온 요청만 허용하도록 하기 위한 과정을 거쳤다! 여러 가지 해결책 중 프로젝트에 가장 적합하다고 생각하는 해결책을 적용해 보았다. 1. synchronized 사용 - (X) Java의 synchronized는 모니터 방식으로 구현되어, 메서드가 실행되는 시점에 모니터를 소유하고, 실행이 끝난 후 release하는 방식으로 진행된다. 하지만 이 방법은 멀티 스레드에서 트랜잭션이 시작되는 시점이 동일할 때, 모니터를 소유하고 비즈니스 로직을 수행한 후 release를 하더라도 Transaction Commit이 진행되기 이전에 공고에 접근하여 신청한다면 한 공고에 여러 개의 신청이 들어갈 수 있어 문제가 될 ..
JVM (Java Virtual Machine) 자바 가상 머신 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와줌 가비지 컬렉터를 사용한 자동적인 메모리 관리, 스택 기반으로 동작 JVM 동작 방식 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일 Class Loader를 통해 JVM Runtime Data Area로 로딩 Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Ex..
2.1 네트워크의 기초 2.1.1 처리량과 지연 시간 네트워크 - 노드와 링크가 서로 연결되어 있으며 리소스를 공유하는 집합 노드: 서버, 라우터, 스위치 등 네트워크 장치 링크: 유선 또는 무선 좋은 네트워크 - 많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크 처리량: 링크 내에서 성공적으로 전달된 데이터의 양 (얼만큼의 트래픽을 처리했는지) 트래픽: 특정 시점에 링크 내에 흐르는 데이터의 양 대역폭 - 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수 지연 시간 - 요청이 처리되는 시간. 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간 매체 타입, 패킷 크기, 라우터의 패킷 처리 시간에 영향을 받음 2.1.2 네트워크 토폴로지와 ..
1. Counter from collections import Counter list = [1, 1, 2, 3, 3, 4] print(Counter(list)) # 출력 Counter({1: 2, 3: 2, 2: 1, 4: 1}) 동일한 자료가 몇 개인지 확인하기 위해 사용되는 함수 문자열, 리스트 등에서 element의 개수를 파악하기 쉬움 Counter의 반환값은 dictionary 형태 most_common(n) 입력된 값의 요소들 중 빈도수(최빈값)을 n개 반환 most_common() # 요소 전체를 반환 most_common(2) # 최빈값 상위 2개 반환 most_common(n) # 최빈값 상위 1개 반환 2. bisect 이진탐색을 쉽게 구현할 수 있는 라이브러리 정렬된 리스트에서 값이 ..
백트래킹 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘 임의의 집합에서 주어진 기준대로 원소의 순서를 선택하는 문제를 푸는 데 적합 모든 경우의 수를 탐색하는 대신 조건을 걸어서 유망(promising)하지 않은 경우에는 탐색을 중지하고 이전 노드로 돌아가서 다른 경우를 탐색 DFS와의 차이점 DFS: 완전 탐색 백트래킹: 아닐 때 더이상 진행하지 않음 (모든 경우를 탐색하지 않음) def backtracking(): if 정답: 정답 출력 or 저장 return for 모든 자식 노드에 대해: if 정답으로 선택 가능하다면: 자식 노드로 이동 backtracking() 부모노드로 이동 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그..
이전 프로젝트를 진행했을 때 배포 작업을 수행하는 동안 서버가 다운되는 문제가 있어 이를 해결하고자 Blue/Green 배포를 도입하고자 했다! 이 과정에서 고민한 점은 다음과 같다. Github Actions VS Jenkins Github Actions : Github에서 직접 제공해주는 CI/CD 도구로, Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있음. Jenkins : 거의 모든 언어의 조합과 소스코드 리포지토리(Repository)에 대한 지속적인 통합(CI)과 지속적인 배포(CD)를 제공함. 다른 일상적인 개발 작업을 자동화할 뿐 아니라 파이프라인(Pipeline)을 ..
가중 그래프 가중 그래프(weighted graph): 각 간선이 무게(weight)라 부르는 수치값을 가지는 그래프 무게: 거리, 비용, 시간 등 ex) 오른편 철도 그래프에서, 간선의 무게는 양끝점 역간의 여행거리(km)를 표현 최소 신장 트리 신장 부그래프(spanning subgraph) 그래프 G의 모든 정점들을 포함하는 부그래프 신장 트리(spanning tree) (자유) 트리인 신장 부그래프 최소 신장 트리(minimum spanning tree, MST) 가중 그래프의 총 간선 무게가 최소인 신장트리 응용 통신망 교통망 속성 싸이클 속성 분할 속성 최소신장트리 알고리즘의 정확성 검증에 이용 싸이클 속성 싸이클 속성 T를 가중그래프 G의 최소신장트리라 하자 e를 T에 존재하지 않는 G의 간..
방향그래프 방향그래프(digraph): 모든 간선이 방향간선인 그래프 “directed graph”의 준말 응용 일방통행 도로 항공노선 작업스케줄링 방향그래프 속성 모든 간선이 한 방향으로 진행하는 그래프 G = (V, E)에서, 간선 (a, b)는 a에서 b로 가지만 b에서 a로 가지는 않는다 G가 단순하다면(임의의 정점 두 개에서 동일한 방향으로 진행하는 다른 간선이 없을 경우), m ≤ n(n – 1) 진입간선들(in-edges)과 진출간선들(out-edges)을 각각 별도의 인접리스트로 보관한다면, 진입간선들의 집합과 진출간선들의 집합을 각각의 크기에 비례한 시간에 조사 가능 방향 DFS 간선들을 주어진 방향만을 따라 순회하도록 하면, DFS 및 BFS 순회 알고리즘들을 방향그래프에 특화 가능 방..
그래프 순회 순회(traversal): 모든 정점과 간선을 검사함으로써 그래프를 탐험하는 체계적인 절차 예시 수도권 전철망의 모든 역(정점)의 위치를 출력 항공사의 모든 항공편(간선)에 대한 노선 정보를 수집 웹 검색엔진의 데이터 수집 부문은 웹의 하이퍼텍스트 문서(정점)와 문서 내 링크(간선)를 검사함으로써 써핑 주요 전략 깊이 우선 탐색 너비 우선 탐색 깊이 우선 탐색 깊이우선탐색(depth-first search, DFS): 그래프를 순회하기 위한 일반적 기법 그래프 G에 대한 DFS 순회로 가능한 것들 G의 모든 정점과 간선을 방문 G가 연결그래프인지 결정 G의 연결요소들을 계산 G의 신장숲을 계산 n개의 정점과 m개의 간선을 가진 그래프에 대한 DFS는 O(n + m) 시간 소요 DFS를 확장하..