본문 바로가기

CS

(93)
sync / async & blocking / non-blocking sync & asyncsynchronous라는 표현은 "동시에 실행된다"는 의미를 가지고 있다. 작업이 "동시에 실행된다"라고 해석하는 경우 동시성(Concurrent)이나 병렬(Parallelism)이 되는데, 이는 프로그래밍 언어에서 말하는 동기/비동기와는 다른 개념이다. sync나 async는 작업의 동시 실행이 아니라, 작업의 동기화(synchronization) 개념에 가깝다.synchronous: 한 작업의 끝이 다른 작업의 시작과 동기화되어, 작업이 순서대로 실행된다.asynchronous: 한 작업의 끝이 다른 작업의 시작과 동기화되지 않는다. 각 작업은 시스템 흐름(실행)과 독립적이다.SYNCHRONOUS |--------A--------| |---..
[운영체제] 뮤텍스, 세마포어, 튜링 동치 경쟁 상태(Race Condition)둘 이상의 프로세스가 읽거나 쓸 때 타이밍이나 순서에 따라 결과 값이 달라질 수 있는 상태임계 구역(Critical Section)여러 프로세스가 공유하는 자원에 대해 한번에 둘 이상의 프로세스가 접근해서는 안되는 영역. 한번에 여러 스레드가 접근하여 값을 변경하면 데이터의 일관성이 깨지는 race condition이 발생할 수 있다. 상호 배제(mutual exclusion): 특정 프로세스가 크리티컬 섹션에서 실행되면 다른 프로세스는 크리티컬 섹션에서 실행 불가진행(progress): 자기 크리티컬 섹션에서 실행되는 프로세스 없고 해당 크리티컬 섹션에 진입하려고 하는 다른 프로세스들 있으면 나머지 구역에서 실행중이지 않은 프로세스들만 다음 누가 그 임계구역에 진입..
[프로그래머스 SQL] 오랜 기간 보호한 동물(2) / TIMESTAMPDIFF / TO_SECONDS 모 시험에서 시간 차이를 계산하는 문제가 나왔다. 이전에 SQL로 시간을 다루는 문제를 풀어본 적이 없어서 해당 문제는 풀지 못했다. 프로그래머스에 시간을 계산하는 비슷한 문제가 있어서 제시한다.https://school.programmers.co.kr/learn/courses/30/lessons/59411 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 입양 간 동물들을 보호한 시간 (나간 시간 - 들어온 시간)을 기준으로 내림차순 정렬하는 문제다. 시간을 계산하는 함수만 알고 있다면 정말 쉽게 풀리지만, 모르면 못푼다.이때, MYSQL에서 시간 관련 타입은..
[백준] 2292 벌집 수학적 풀이 https://www.acmicpc.net/problem/2292입력: N(1 ≤ N ≤ 1,000,000,000)출력: 주어진 방까지 이동할 때 최소 방의 수최소로 이동하는 방의 수는 다음과 같은 규칙을 가지고 있다.방 번호(N)이동하는 수(K)112 ~ 728 ~ 19320 ~ 374위 숫자에는 어느 정도 규칙성이 있다. 범위 내 마지막 번호(E) - 1 => 6의 배수이다.방 번호(S ~ E)(E - 1) / 6이동하는 수(K)1(1 - 1) / 6 = 012 ~ 7(7 - 1) / 6 = 128 ~ 19(19 - 1) / 6 = 3320 ~ 37(37 - 1) / 6 = 64(E - 1) / 6 값은 1 ~ 이동하는 수 K에 대해 1 ~ (K - 1) 까지의 등차수열 = (k - 1) * k / ..
AOP AOP(Aspect Oriented Programming) 소프트웨어에서 공통적인 관심사를 모듈화하고 분리하는 프로그래밍 방식. 개발을 하다 보면 특정 서비스나 도메인에 종속되지 않고, 여러 서비스에서 공통적으로 사용되는 기능이 존재한다. 예를 들어 트랜잭션, 로깅, API 사용자 권한 검증 같은 작업은 특정 서비스의 핵심 내용과 관련이 없으며, 프로그램 전역에서 공통적으로 사용된다. 이들은 핵심적인 서비스를 구현하기 위해 필요한 부수적인 기능을 수행한다. 이처럼 특정 모듈에 종속되는 대신 여러 모듈에서 공통적으로 사용될 수 있는 프로그램 상 특정 측면(Aspect)을 횡단 관심사(Cross-cutting concern)라고 부른다. 전통적인 객체지향 프로그래밍 방식에서는 서비스의 핵심과 횡단 관심사가 ..
객체 지향 프로그래밍의 배경 도입 현재 널리 사용되는 프로그래밍 패러다임에는 절차적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍이 있다. 이 중 가장 많이 사용되고, 중요하다고 생각하는 프로그래밍 패러다임을 하나 고른다면 대부분의 사람들은 객체지향 프로그래밍을 선택할 것이다. 많은 언어들이 클래스를 시작으로 상속, 인터페이스 등의 객체지향과 관련된 기능을 포함하고 있으며, 실제로 이를 이용하여 개발하는 경우가 많기 때문이다. 그렇다면, 객체지향 프로그래밍 방식은 왜 널리 사용되고, 중요한 패러다임으로 자리 잡았을까? 이번 글에서는 객체지향이 왜 등장한 배경을 다뤄보고자 한다. 소프트웨어의 복잡함 객체지향을 논하기에 앞서, 개발을 통해 달성하고자 하는 목표인 소프트웨어에 대해 생각해 보자. 세상에는 정말 다양한 요구사항이 있으..
[데이터베이스] 트랜잭션 https://en.wikipedia.org/wiki/Isolation_(database_systems) 트랜잭션 하나의 논리적 동작을 정상적으로 수행하는데 필요한 DB 연산들을 모아놓은 데이터베이스 시스템 작업의 기본 단위 ACID 원칙 트랜잭션이 가진 4가지 특성 특성 설명 달성 방법 Atomicity (원자성) 트랜잭션 구성 연산은 모두 실행되거나, 하나도 실행되지 않아야 한다. 장애로 인해 연산이 중단되면 트랜잭션 수행 이전으로 작업을 되돌릴 수 있어야 한다. All or Nothing Commit / Rollback Consistency (일관성) 트랜잭션 성공 전·후에 대한 일관성을 유지해야 한다 (완료 시점에 일관된 상태). ex) 계좌 이체 시 총 금액은 일치해야 함 무결성 제약조건 동시성..
[CS] DIP / IoC / DI Dependency Inversion Principle: 의존의 역전 원칙. SOLID 원칙 중 하나로, 구체적인 것이 추상화에 의존하는 것을 의미한다. 인터페이스에 의존하는 경우, 이를 구현한 클래스 상에 변동이 발생하더라도 구체적 객체와는 결합도가 낮아 변화가 전파되지 않는다. 추상에 의존 부분에 주목! Inversion of Control: 제어 수준을 역전한다는 의미로, 사용자가 객체의 생명 주기나 코드의 흐름을 직접 관리하는 대신 프레임워크에 제어권을 넘기는 패턴. 프레임워크에 정의된 생명 주기와 동작 방식에 따라 적합한 함수를 프레임워크 수준에서 실행한다. ex) Get / Post 데코레이터를 적용한 controller 메서드 제어 권한이 프로그래머가 아닌 프레임워크에게 있다는 점에 주목! ..