전체 글
[OS] 6.Deadlock
Deadlock Deadlock 이란 2개 이상의 Thread가 task를 수행하는 과정에서 특정 공유 Resource에 접근하기 위해 서로 circular하게 대기하고 있는 상황을 의미한다. 여기서 중요한 것은 `Circular`하게 대기한다는 점으로, 단순히 자원을 기다리는 것과는 차이가 있다. 아래는 간단한 예시 시나리오이다. Thread 1: 1. 리소스 A를 요청 2. 리소스 A 획득 대기 Thread 2: 1. 리소스 B를 요청 2. 리소스 B 획득 대기 (Thread 1과 Thread 2는 각자의 리소스를 대기하고 있음) Thread 1: 3. 리소스 B를 기다림 (리소스 B는 Thread 2가 가지고 있음) Thread 2: 3. 리소스 A를 기다림 (리소스 A는 Thread 1이 가지고 ..
[OS] 5. Synchronization(동기화)
Synchronization Synchronization은 여러 작업이나 프로세스가 존재하는 경우 수행 시점을 조절하여 예상하지 못한 결과가 일어나는 현상을 방지하는 것을 말한다. 한 번에 하나의 process, 하나의 thread만이 존재한다면 synchronization은 필요가 없을 것이다. 하지만 우리가 컴퓨터로 작업을 하는데 단 하나의 process, thread만 사용할 수 있다면? 웹 서핑을 하다가 문서 작업을 하고 싶으면 인터넷을 닫아야하는 등의 매우 불편한 상황들이 연출 될 것이다. 따라서 필연적으로 multi-thread를 도입할 수 밖에 없고, 이와 관련하여 발생하는 문제들을 해결하는 테크닉이 `synchronization` 인 것이다. Race Condition 우리가 multi t..
API란? + RESTful API
API API란 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)로, 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한다. 사실 이러한 정의가 크게 와 닿지 않을 수 있는데, 우리가 크롬을 켜서, naver.com을 입력하여 네이버로 이동하는 것 또한 API 요청의 일종이다. 우리가 naver.com을 입력하면, 크롬이 서버에 해당 주소에 해당하는 데이터를 리턴해달라는 요청을 보내고 해당하는 데이터를 리턴 받아 우리의 컴퓨터 화면에 네이버 메인 화면 페이지가 나타나는 것이다. REST REST란 Representational State Tranfer을 뜻하며, API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다. REST는 통신을..
[JavaScript] 이벤트 위임(Event delegation)
이벤트 위임이란? 우리가 DOM에서 특정한 이벤트를 바탕으로 원하는 동작을 실행시키기 위해서는 각 Element 마다 EventListener를 달아주어야 한다. 다만, 비슷한 구조가 연속적으로 존재하는 경우 모든 Element마다 EventListener를 달아주는 것을 번거롭기도 하고, 코드의 가독성을 떨어뜨린다. 게다가 리스너를 여러개 달아주어야하기 때문에 메모리 사용량에도 좋지 않은 영향을 미친다. 이를 해결하기 위해서 `이벤트 위임`을 사용할 수 있다. `이벤트 위임` 이란, DOM 이벤트 처리를 개선하고 성능을 향상시키는 방법 중 하나로, 상위 요소에 이벤트 리스너를 하나 달아 준 후 해당 이벤트의 타겟 요소를 확인하여 필요한 동작을 수행하는 방식이다. 사용 예시를 살펴보자 간단하게 버튼을 누..
[OS] 3. Thread
Thread Thread의 정의 Thread란 process 내부에서 실행되는 여러 흐름의 단위를 말한다. Thread의 주소 공간 Thread는 Process와 달리 Stack만을 고유하게 가지며, Code, Data, Heap 등을 공유한다. Thread의 장점 1. Responsiveness I/O interrupt에 의해 특정 실행이 Block되더라도, 다른 Thread가 Block된 작업과 무관한 다른 작업을 수행하여 사용자에게 빠른 응답을 제공한다. 2. Resource Sharing Process를 새로 생성하면 각 프로세스마다 메모리 공간을 전부 새롭게 할당해주어야 한다. Thread는 스택 영역을 제외한 데이터 공간을 공유하므로, 메모리 공간을 절약할 수 있다. 3. Economy 프로세..
[Database System] Modern SQL
CMU의 Intro to Database System / Fall 2022를 바탕으로 정리 한 것입니다. Modern SQL Relational Languages에는 DML, DDL, DCL 의 세 가지 Language가 존재하며, sets이 아닌 bags를 기반으로 작동한다. 즉, 중복되는 튜플이 존재한다는 것을 가정하고 작동되도록 구성되어있다. 앞으로 보여줄 예시에 대한 데이터베이스 구조는 아래와 같다. Aggregates `bags of tuples로 부터 하나의 value를 리턴하는 함수`에 해당한다. - AVG(col) => col value의 평균 값을 리턴한다. - MIN(col) => col value의 최소 값을 리턴한다. - MAX(col) => col value의 최대 값을 리턴한다...
MVC 패턴
MVC 패턴이란 MVC 패턴은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나를 의미한다. Model - View - Controller의 약자이며 기능 별로 코드를 분리하여 유지보수를 쉽게 하고 확장성과 재사용성을 강화할 수 있다는 장점을 가지고 있다. 각 모듈들의 상관관계를 그림으로 나타내면 아래와 같다. Model 모델은 `데이터를 저장, 검색, 업데이트`하고 변경 사항을 관리하는 역할을 한다. 일반적으로 `View나 Controller에 대한 직접적인 참조를 가지지 않아야` 한다. View `사용자의 인터페이스`를 담당하며, 데이터를 시작적으로 표현하는 기능을 한다. 사용자가 정보를 보고 상호작용을 하는 부분으로, 데이터를 `모델에서 가져와 표시`하는 역할을 한다. View는 `사용자가 입력한 ..
(Node.js) Express에서 cookie, session 사용 방법
사용자 로그인 구현 방식의 종류 사용자 로그인을 구현하는 방법에는 `세션과 쿠키`, `Token`, `OAuth` 등 다양한 방법이 있다. 이 게시글에서는 그 중 `세션과 쿠키`를 사용하는 방식을 활용하여 로그인 구현 과정을 설명하고자 한다. 쿠키란? 쿠키는 웹 브라우저에 저장되는 데이터로 클라이언트와 서버 간 상태를 유지하고 정보를 교환하는데 사용된다. 클라이언트 컴퓨터에 저장되며, 해당하는 도메인의 웹 사이트로 통신할 때마다 서버로 전송된다. 쿠키는 `Session Cookie`와 `Permanent Cookie`로 나뉘는데, Session Cookie는 웹 브라우저가 종료될 때 자동으로 삭제되며 Permanent 쿠키는 반대로 계속해서 유지되는 데이터에 해당한다. `Key-Value` 형태의 데이터..