전체 글 149

[OS] 동기화(Synchronization)란?

동기화(Synchronization) 1. 멀티 프로세스, 멀티 스레드 환경에서 자원에 한 프로세스만이 접근가능하도록 하는 것 2. 멀티 프로세스, 멀티 스레드 환경에서 여러 프로세스가 공유 자원에 동시에 접근하는 것을 조절하는 메커니즘 멀티 프로세스, 멀티 스레드 환경에서 프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재한다. 동기화를 통해 공유 자원을 안전하게 사용하고, 예측 가능한 방식으로 프로세스 간 상호작용을 관리하기 위해 필요하다. Race Condition(경쟁 상태): 여러 프로세스나 스레드가 동기화 메커니즘 없이 자원에 접근하려는 상태. 공유된 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황을 의미한다. Race Condi..

CS 2023.10.06

[OS] Thread-safe란? 의미 및 설계하는 법

Thread-safe 1. 다중 스레드 환경에서 여러 스레드가 동시에 공유하는 데이터나 자원을 안전하게 사용할 수 있는 상태 2. 여러 스레드가 동시에 동작할 때 발생할 수 있는 경쟁 조건(race condition)이나 데이터 불일치 문제를 방지하는 것 설계하는 법 1. Mutual Exclusion(상호배제) 방식을 이용한 Critical Section(임계 영역) 공유 자원을 사용할 경우, 해당 자원에 대한 접근을 프로세스 동기화로 통제 상호 배제(Mutual Exclusion): 한번에 한개의 프로세스만이 공유 자원을 사용하도록 함 임계 영역(Critical Section): 여러 스레드가 공유 자원에 접근하는 코드 영역 락 (Lock): 스레드가 임계 영역에 진입하기 전에 획득하고, 나올 때 해..

CS 2023.10.06

[OS]멀티스레드 프로그래밍이란? 장점 및 사용환경, 주의점

멀티스레드 프로그래밍: 하나의 프로그램이 동시에 여러 작업을 수행할 수 있게 하는 프로그래밍 기법 단일 스레드 프로그래밍과 비교했을 때의 이점 1.성능 향상: 일반적으로 단일 스레드보다 빠르게 작업을 수행할 수 있다. 2.자원 활용: 하나의 스레드가 대기 중일 때, 다른 스레드 작업을 수행할 수 있어 CPU, 메모리 등 자원을 효과적으로 활용할 수 있다 3. 응답성 향상: 여러 작업을 병렬로 처리할 수 있으므로, 프로그램이 빠르게 응답할 수 있다. 멀티스레드 프로그래밍을 사용하는 환경 1.다중 사용자 환경: 여러 사용자가 동시에 시스템을 사용할 때 각각의 요청을 동시에 처리하기 위해 사용. 2.GUI 애플리케이션: 그래픽 사용자 인터페이스(GUI)를 가진 애플리케이션에서는 사용자의 입력, 화면 업데이트,..

CS 2023.10.05

[OS] 블로킹 논블로킹(Blocking / Non-Blocking), 동기 비동기( Sync / Async)

동기와 블로킹은 단지 조합하여 사용되는 것 뿐 전혀 다른 개념 Blocking / Non-Blocking 블로킹, 논블로킹 : 제어권(함수실행권)을 언제 넘겨주느냐의 차이 블로킹 : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것 A함수가 B함수를 호출하면 B에게 제어권을 넘긴다. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다. 논블로킹 : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것 A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다. A함수는 계속 제어권을 ..

CS 2023.10.05

[OS] Context Switching

Context Switching CPU는 한번에 하나의 프로세스만 실행 가능하다. OS(프로세서 스케줄러)에 의해 CPU가 할당되는 프로세스 변경 될 때를 문맥교환(Context Switching)이라 한다. 프로세스에 CPU 할당을 위해 현재 CPU가 할당된 프로세스의 상태 정보를 PCB에 저장 새로운 프로세스의 상태 정보를 설정 후 CPU를 할당하여 실행 PCB(Process Control Block, 프로세스 제어블록) : 프로세스의 중요한 정보를 저장해 놓는 곳 각 프로세스가 생성될 때 마다 고유의 PCB가 생성, 프로세스가 완료되면 PCB는 제거됨 PCB 정보 프로세스의 현재 상태 : 준비, 대기, 실행 등의 프로세스 상태 프로세스 고유 식별자 : 프로세스를 구분할 수 있는 고유의 번호 스케줄링..

CS 2023.10.05

[OS] 멀티 프로세스와 멀티스레드의 장단점

- 프로세스(process): 프로세서(처리기, CPU)에 의해 처리되는 프로그램(실행중인 프로그램)을 의미 - 스레드(Thread) : 프로세스 내의 작업단위, 여러 자원을 할당받아 실행하는 프로그램의 단위 멀티 스레드 vs 멀티 프로세스 멀티 스레드: 하나의 프로세스 안에서 여러개의 스레드를 병렬적으로 사용하는 것. 장점 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠르다. 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다. 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간 통신의 부담이 줄어든다. (처리비용 감소. 프로세스는 독립구조이기 때문) ..

CS 2023.10.05

[Network] 웹 통신의 큰 흐름

계층별 설명 응용 계층 (Application Layer) 사용자가 브라우저를 통해 "https://www.google.com/"을 입력하면, 1. 브라우저가 URL에 적힌 값을 파싱해서 HTTP Request Message를 만든 후, OS에 전송 요청 2. 브라우저는 DNS 서버에 "www.google.com"이라는 도메인 이름의 IP 주소를 요청(DNS Lookup) DNS Lookup 과정: 크롬의 경우 브라우저 → hosts파일 → DNS Cache의 순서로 도메인에 매칭되는 ip를 찾는다. (루트 도메인 서버 -> 서브도메인 서버순으로 찾음) 3. 브라우저는 IP 주소로 HTTPS 요청을 전송한다. 표현 계층 (Presentation Layer) 요청된 데이터를 표현하고 압축, 암호화 등의 변..

CS 2023.10.05

Java Sort Algorithm

Java에서 정렬을 수행하는 두 가지 주요 방법은 Arrays.sort()와 Collections.sort()이다. Arrays.sort()는 배열을 정렬할 때, Collections.sort()은 자료구조의 정렬 시 사용한다. 이 두개는 다른 정렬방식으로 구현된다. Arrays.sort() Arrays.sort의 코드는 듀얼피봇 퀵정렬(Dual-Pivot QuickSort)을 사용한다. 아래는 Arrays.sort의 주석과 코드이다. /** * Sorts the specified array into ascending numerical order. * * Implementation note: The sorting algorithm is a Dual-Pivot Quicksort * by Vladimir Y..

CS 2023.09.30

JPA delete 후 insert가 안될 때(duplicate entry error)

문제 우선 user와 userImage가 OneToOne 관계를 가지고 있었다. user의 이미지 수정 요청 시, delete 후 insert 하기 위해 코드를 구현하는 와중에 duplicate entry error가 발생했다. unique 조건이 있는 데이터인데 삭제가 되지 않은 채로 추가를 하려 해서 발생하는 에러였다. 로그를 확인해도 delete코드가 먼저 적혀있음에도 불구하고 insert를 먼저 실행하는 것을 확인할 수 있다. 찾아보니 hibernate에서 동작하는 SQL 순서가 정해져 있었다. 시도 entityManager의 flush 메서드를 사용하여 손쉽게 영속성 컨텍스트의 변경내용(delete)을 DB에 동기화할 수 있었다. 하지만 하나의 요청을 위해 entityManager를 호출하는 것..

TroubleShooting 2023.09.03

[WIL] week 11

Fact 이번 프로젝트 담당 업무 물품 및 Rating API, 캐싱, 스케줄링 주요 내용 유저 간 등록한 물품을 교환 또는 경매에 등록하여 입찰할 수 있는 서비스 물품교환: 상대방이 등록한 물건을 선택 후, 내 물건을 선택하여 거래요청을 하는 서비스 레이팅: 물품 등록 시 자신의 물건 값어치를 작성하여 다른 유저들이 해당 물품의 가격을 맞추는 유사 게임 시스템 해당 서비스를 통해 경매 하한가를 설정 물품 등록 시 설정한 값어치는 게임의 정답 용도로만 사용 물건 평가가 3개일 시, 평가 받은 평균가가 물건의 가격으로 설정 경매: 경매 기간 만료 시, 입찰받은 물건 중 마음에 드는 물품을 골라 거래하는 서비스 등록하는 유저가 경매기간을 설정할 수 있음. 레이팅 평가가 끝나지 않은 상품은 등록 및 입찰을 할..

TIL, WIL 2023.08.28