전체 글 793

[Reactive Programming] Blocking I/O와 Non-Blocking I/O

Blocking I/O   Blocking I/O의 설명을 위한 예시 그림이다. 본사 서버의 스레드가 지점 서버에 데이터를 요청하면 해당 데이터를 반환받을 때까지 스레드는 대기 상태가 되며 다른 작업을 처리하지 못한다. 이렇게 하나의 스레드가 I/O에 의해 차단되어 대기하는 것을 Blocking I/O라 한다. 이같은 Blocking I/O의 단점을 극복하기 위해 멀티스레딩 기법을 이용하여 추가 스레드들을 할당해  동시 작업이 가능하게끔 한다. 멀티스레딩 기법의 단점1. 컨텍스트 스위칭멀티스레딩의 작동 방식은 사실 하나의 프로세서가 여러 개의 스레드를 번갈아서 실행하는 것이다. 이때, 스레드를 전환하는 과정에서 오버헤드가 발생하게 되어 스레드가 많아질수록 CPU의 성능 저하가 일어날 수 있다. 2. 메모..

[🥇4 / 백준 16120 / 파이썬] PPAP

16120번: PPAP첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.www.acmicpc.net 문제bryan은 PPAP를 좋아한다. bryan은 어떻게 하면 사람들에게 PPAP를 전파할 수 있을까 고민하던 중 PPAP 문자열이라는 것을 고안하게 되었다.PPAP 문자열은 문자열 P에서 시작하여, 문자열 내의 P를 PPAP로 바꾸는 과정을 반복하여 만들 수 있는 문자열로 정의된다. 정확하게는 다음과 같이 정의된다.P는 PPAP 문자열이다.PPAP 문자열에서 P 하나를 PPAP로 바꾼 문자열은 PPAP 문자열이다.예를 들어 PPAP는 PPAP 문자열이다. 또한, PPAP의 두 번째 P를 PPAP로 바꾼 PPPAPAP..

[Lv.2 / 프로그래머스 / SQL] 연도 별 평균 미세먼지 농도 조회하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 수원 지역의 미세먼지 농도를 연도를 기준으로 묶어 평균값을 출력해야 한다.  DATE 타입의 데이터에 YEAR 함수를 이용해 연도를 구할 수 있다. AVG 함수를 통해 평균값을, 그리고 ROUND 함수를 통해 반올림을 수행할 수 있다. SELECT YEAR(YM) AS YEAR, ROUND(AVG(PM_VAL1), 2) AS PM10, ROUND(AVG(PM_VAL2), 2) AS 'PM2.5'FROM AIR_POLLUTIONWHERE LOCATION2 = '수원'GROUP BY ..

[Lv.1 / 프로그래머스 / SQL] 한 해에 잡은 물고기 수 구하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이 집계 함수인 COUNT를 이용하여 데이터의 개수를 조회할 수 있다. 그리고 YEAR 함수를 활용해 DATE 타입에서 연도를 구할 수 있다. SELECT COUNT(ID) AS FISH_COUNTFROM FISH_INFOWHERE YEAR(TIME) = '2021'

[Reactive Programming] 리액티브 스트림즈(Reactive Streams)

리액티브 스트림즈(Reactive Streams)란? 리액티브 스트림즈란 데이터 스트림을 Non-Blocking이면서 비동기적으로 처리하기 위한 리액티브 라이브러리의 표준 사양이다. 그 구현체로는 RxJava, Reactor, Akka Streams, Java 9 Flow API 등이 있다.  리액티브 스트림즈 구성요소 리액티브 스트림즈를 통해 구현해야 되는 API 컴포넌트는 아래와 같이 Publisher, Subscriber, Subscription, Processor 가 있다. 컴포넌트설명Publisher데이터를 생성하고 통지(발행, 게시, 방출)하는 역할을 한다.Subscriber구독한 Publisher로부터 통지(발행, 게시 방출)된 데이터를 전달받아서 처리하는 역할을 한다.Subscription..

[Reactive Programming] 리액티브 시스템과 리액티브 프로그래밍

리액티브 시스템(Reactive System) 리액티브란 사전적 의미로 어떤 이벤트나 상황이 발생했을 때, 적절하게 행동하는 것을 의미한다.  따라서 리액티브 시스템이란 반응을 잘 하는 시스템이라고 정의할 수 있고, 이는 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화하는 시스템이라고 할 수 있다.  리액티브 선언문(The Reactive Manifesto) 리액티브 선언문이란 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징이다. 이는 아래 그림 하나로 명확하게 설명할 수 있다. 방법(Means)주요 통신 수단으로 무엇을 사용할 것인지 표현한 것으로, 위 그림처럼 비동기 메시지 기반(Message Driven)의 통신을 사용할 것임을 뜻한다. 이는 구성요소들 간의 ..

[Lv.1 / 프로그래머스 / SQL] 가장 큰 물고기 10마리 구하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 조회 결과의 최대 개수를 제한하기 위해 LIMIT을 사용할 수 있다. SELECT ID, LENGTHFROM FISH_INFOORDER BY LENGTH DESC, ID ASCLIMIT 10

[Lv.2 / 프로그래머스 / SQL] 노선별 평균 역 사이 거리 조회하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 노선별로 총 거리와 평균 거리를 반환해야 한다. 주의해야 할 점은 총 누계 거리를 기준으로 내림차순 정렬을 해야 하는데, TOTAL_DISTANCE를 그대로 정렬 기준으로 삼는다면 문자열이기 때문에 정확한 크기 비교가 되지 않는다. 따라서 문자열 형태가 아니라 숫자 형태로 비교를 해야 한다. SELECT ROUTE, CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(D_BETWEEN_DIST), ..

[Lv.2 / 프로그래머스 / SQL] 특정 물고기를 잡은 총 수 구하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 BASS와 SNAPPER 를 잡은 총 수를 출력해야 한다. 각 물고기의 FISH_TYPE은 고정된 값이 아니므로 Join을 통해 해결해야 한다. SELECT COUNT(ID) AS FISH_COUNTFROM FISH_INFO AS FIINNER JOIN FISH_NAME_INFO AS FNION FI.FISH_TYPE = FNI.FISH_TYPEWHERE FNI.FISH_NAME = 'BASS' OR FNI.FISH_NAME = 'SNAPPER'

[Docker] 도커(Docker)란?

도커(Docker)란? 도커란?도커는 애플리케이션을 컨테이너라는 표준화된 유닛으로 패키징, 배포, 실행할 수 있게 해주는 오픈 소스 플랫폼이다. 컨테이너를 사용하여 개발자 및 고객에게 일관된 환경을 제공하며, 애플리케이션의 배포와 관리를 단순하게 한다. 도커는 동일한 컨테이너라면 항상 동일한 환경을 제공하기 때문에 사용자에게 일관된 경험을 제공할 수 있다. 따라서 애플리케이션을 실행하는 데 필요한 특정 버전의 라이브러리나 기타 도구를 직접 설치하지 않아도 된다. 컨테이너란?컨테이너는 애플리케이션을 실행하기 위한 코드와, 종속적인 도구가 모두 포함되어 있는 표준화된 소프트웨어 유닛을 의미한다. 만약 NodeJS 애플리케이션을 도커로 빌드하여 컨테이너화 한다면, 이 컨테이너엔 애플리케이션을 실행하기 위한 코..

Dev/CICD 2024.06.14
반응형