Total
[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..
[Spring WebFlux] 2. 리액티브 스트림즈(Reactive Streams)
리액티브 스트림즈 (Reactive Streams)리액티브 라이브로리를 어떻게 구현할지 정의해 놓은 별도의 표준 사양데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하깊 위한 리액티브 라이브러리의 표준 사양RxJava, Reactor(Spring Framework와 가장 궁합이 잘맞음), Akka Streams, Java 9 Flow API 등 리액티브 스트림즈 구성요소컴포넌트설명Publisher 데이터를 생성하고 통지(발행, 게시, 방출)하는 역할Subscriber구독한 Publisher로부터 통지(발행, 게시, 방출)된 데이터를 전달받아서 처리하는 역할SubscriptionPublisher에 요청할 데이터의 개수를 지정하고, 데이터의 구독을 취소하는 역할ProcessorPublis..
[Spring WebFlux] 1. 리액티브 프로그래밍
리액티브 프로그래밍(Reactive Programming)리액티브 시스템을 구축하는데 필요한 프로그래밍 모델리액티브 시스템은 비동기 메시지 통신을 기반으로 한다리액티브 시스템에서의 비동기 메시지 통신은 Blocking I/O 방식이 아닌, Non-Blocking I/O 방식의 통신선언적 프로그래밍, 실행할 동작을 구체적으로 명시하지 않고 목표만 선언데이터 소스의 변경이 있을 때마다 데이터 전파리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍 방식의 코드 형태의 파라미터를 가짐 명령형 프로그래밍 VS 선언형프로그래밍명령형 프로그래밍// 6보다 더 크고 홀수인 숫자들의 합계를 구하는 것public c..
동기 VS 비동기, 블로킹 VS 논블로킹
동기(Synchronous) vs 비동기(Asynchronous)Synchronous작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함Thread1이 작업을 시작시키고, Task1이 끝날때까지 기다렸다 Task2를 시작작업 요청을 했을 때 요청의 결과값(return)을 직접 받음요청의 결과값이 return값과 동일호출한 함수가 작업 완료를 신경 씀Asynchronous시작, 종료가 일치하지 않으며 끝나는 동시에 시작을 하지 않음Thread1이 작업을 시작 시키고, 완료를 기다리지 않고, Thread1은 다른 일을 처리할 수 있음작업 요청을 했을 때 요청의 결과값(return)을 간접적으로 받음요청의 결과값이 return값과 다를 수 있음해당 요청 작업은 별도의 스레드에서 실행하게 됨콜백을 ..
클러스터 인덱스, 넌클러스터 인덱스 (Clustered Index)
인덱스 인덱스는 DB의 테이블에 데이터가 많을 때, 검색 속도를 향상시켜주기위해 사용하는 객체 컬럼을 정렬한 후에 데이터를 빠르게 찾을 수 있도록 도와주는 역할 클러스터 인덱스 테이블에 클러스터 인덱스를 적용할 때마다 그 테이블에 정렬 작업이 수반됨 클러스터 인덱스는 Primary Key처럼 한 테이블에 한 개만 생성할 수 있음 클러스터 인덱스는 데이터를 가리키는 포인터가 아닌 데이터를 저장한 블록의 포인터를 저장 넌클러스터 인덱스 비 클러스터 인덱스는 책의 색인(Index)과 같은 역할 데이터와 인덱스는 각각 다른 장소에 저장되므로 한 테이블에 여러 개의 비 클러스터 인덱스를 생성할 수 있음 데이터를 가리키는 포인터를 저장 예시 id를 PK로 지정하여 id의 순서에 따라 정렬됨 email에 넌클러스트인..
[graphDB] 그래프 DB, Neo4j , Amazon Neptune
graphDB데이터를 노드와 엣지로 표현하는 데이터베이스높은 성능, 복잡한 쿼리 처리 가능대규모의 데이터와 복잡한 관계를 가진 데이터 처리에 적합그래프 데이터 셋의 예시 : 소셜 네트워크 (친구, 좋아요, 댓글 ➡️ 연결되고 그래프를 만듬)노드 및 엣지는 그래프로 구성노드 : 개체엣지: 노드 간의 관계 종류Neo4jAmazon NeptureApache TinkerPopAmazon Nepture완전 관리형 그래프 데이터베이스최대 15개의 읽기 전용 복제본으로 복제고도로 연결된 데이터 셋을 사용하는 애플리케이션 구축, 실행하는데 사용복잡하고 어려운 어려운 쿼리를 실행하기에 최적화최대 수십억 개의 관계를 저장할 수 있고, 그래프 쿼리할 때 지연시간은 밀리초여러 가용 영역에 걸친 애플리케이션에서도 가용성이 높음..
[Java] 다리를 지나는 트럭 (큐)
2023.07.11 - [Coding Test/programmers] - 다리를 지나는 트럭 (다리 큐, 대기 큐) 다리를 지나는 트럭 (다리 큐, 대기 큐)from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 w=0 # 다리에 올라간 트럭들 무게 wq=deque(truck_weights) # 대기트럭 큐 bq=deque([0 for _ in range(bridge_length)]) # 다리 큐 time=0 while len(wq)karla.tistory.com import java.util.*;class Solution { public int solution(int bridge_leng..
[Java] 네트워크(DFS, 스택)
2023.07.05 - [Coding Test/programmers] - 네트워크 (BFS) 네트워크 (BFS)def solution(n, computers): answer = 0 visited=[False]*n def BFS(v): queue=[] visited[v]=True queue.append(v) while queue: now=queue.pop(0) visited[now]=True for i in range(n): if i!=now and not visited[i] and computers[now][i]==1: queue.append(i) for x inkarla.tistory.com import java.util.*;class Solution { public int solution(int..
[Java] 기능 개발 (큐)
2023.07.05 - [Coding Test/programmers] - 기능 개발 (큐)0: if progresses[0] + day*speeds[0] >= 100: # 완료 progresses.pop(0) speeds.pop(0) cnt+=1 else: # 미완 if cnt>0: # 지금까지 완료한 기능 배포하고 초기화 " data-og-host="karla.tistory.com" data-og-source-url="https://karla.tistory.com/320" data-og-url="https://karla.tistory.com/320" data-og-image="https://scrap.kakaocdn.net/dn/iZn27/hyVABYc69T/9ypkzWLjRms8pKzTv8jOwk/i..
[Java] 카펫(완전탐색)
2023.07.15 - [Coding Test/programmers] - 카펫 카펫프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solutiokarla.tistory.com class Solution { public int[] solution(int brown, int yellow) { // 갈색 = w*2 + (h-2)*2 = (w+h-2)*2 // 노란색 = w*h-(w+h-2)*2 for (int w=3; w