Computer Science

동기와 비동기, 블로킹과 논블로킹
동기와 비동기, 블로킹과 논블로킹을 처음 접할 때는 서로가 비슷하다고 생각한다. 결론부터 말하면 동기와 비동기, 블로킹과 논블로킹은 바라보는 관점 자체가 다르다. 동기와 비동기가 바라보는 관점은 결과값을 기다리는 지 여부이다. 결과값의 기다림 : 함수 호출자와 피호출자가 있을 때 함수 호출자가 피호출자가 주는 결과를 전달 받기 전까지 기다리는 것을 의미한다. 블로킹과 논블로킹의 관점은 제어권의 여부이다. 제어권 : 코드를 실행하는 권리와 비슷하다. 제어권을 가진 함수는 자신의 코드를 실행할 수 있다. 동기 (Synchronous) 동기의 키포인트는 결과값을 기다린다는 것이다. 따라서, 호출자는 피호출자가 로직을 처리하고 결과값을 전달해줄 때 까지 기다린다. 비동기 (Asynchronous) 비동기의 키포..

인덱스(Index)
인덱스(Index)의 사전적 의미는 “색인, 책 속에 다루어진 중요한 단어나 용어를 독자가 쉽게 찾을 수 있도록 페이지를 밝혀 벌여 놓은 것.” 이란 뜻이다. 데이터베이스에서도 Index의 의미는 동일하게 이용된다. 대용량 데이터베이스 내에서 우리가 원하는 데이터를 빠르게 조회하기 위해 사용하는 것이 인덱스이다. 이는 Select 쿼리의 성능 향상이 인덱스의 목적이라고 할 수 있다. 인덱스는 데이터베이스의 테이블 내의 객체가 아닌 데이터베이스의 또다른 객체이다. 이는 인덱스를 사용하는 경우 테이블외에 추가적인 공간이 필요하다는 의미이다. 따라서, 인덱스는 조회 쿼리의 성능 향상을 가져오지만, 인덱스 정보에 관한 연산이 추가적으로 이뤄줘야 하기 때문에 DML(Insert, Update, Delete)에 있..

프로세스, 스레드
프로세스 (Process) 프로그램은 실행중이지 않은 정적인 상태의 코드 파일이다. 운영체제는 프로그램을 실행 시키고 메모리에 올리는데 이를 프로세스라고 한다. 즉, 프로세스는 메모리에서 실행중인 프로그램의 작업이다. 프로세스는 프로그램이 메모리에 올라갈 때 독립된 메모리 영역을 할당(Code, Data, Heap, Stack) 받고 PCB라는 프로세스를 정보를 담는 블록을 받는다. 메모리 Code : 프로그램의 명령을 구성하는 코드 자체 메모리 영역 Data : static과 같은 정적 변수, 전역 변수, 배열 등을 갖는 영역 Heap : new 키워드 같은 동적으로 할당 되는 메모리 영역 Stack : 지역 변수, 파라미터, 리턴 값을 관리하는 메모리 영역 스레드 (Thread) 스레드는 프로세스의 ..

TCP, UDP
IP 프로토콜은 서버간 데이터 통신을 할 때 패킷과 IP 주소를 이용한다. IP 프로토콜은 몇 가지 한계를 갖고 있다. 출발지 IP에서 보낸 패킷을 받을 대상이 없거나 목적지 IP 서버가 현재 패킷을 받을 수없는 상태이더라도 출발지 IP 서버는 패킷을 보내버린다. 또한, 하나의 데이터는 여러 개의 패킷으로 쪼개질 수 있고, 이 패킷들은 인터넷 내의 많은 노드들을 거쳐 목적지 IP에 도달하는데 거쳐가는 노드가 패킷을 보낼 수 있는 상태가 아니거나, 설령 목적지 IP에 도착하더라도 여러개로 쪼개진 패킷이 순서대로 들어온다는 보장이 없다. 마지막으로, 동일 IP에서 여러가지 애플리케이션을 사용한다면 전송되는 패킷이 어떤 애플리케이션 것인지 구분하는 것이 어렵다. 전송 계층은 이러한 IP 프로토콜의 비연결성, ..

CORS (Cross Origin Resource Sharing)
프론트엔드와 백엔드 간 API 통신을 하다보면 CORS 에러가 발생하는 것을 심심찮게 확인할 수 있다. CORS는 무엇일까? CORS를 이해하려면 SOP (Single Origin Policy)에 대한 이해가 선행되어야 한다. SOP (Single Origin Policy) 영어를 그대로 직역하면 하나의 출처 정책, 즉 하나의 출처에서 온 리소스만 허용하고, 다른 출처의 리소스를 사용하는 것을 제한하는 보안 정책이다. 여기서 출처란 URL에서 프로토콜, 호스트, 포트를 합친 것을 의미한다. 예를 들어, https://localhost:443/test라는 URL에서 https://localhost:443이 출처가 된다. 만약 http://localhost/test라는 URL 요청이 들어오는 경우 https..