분류 전체보기 194

블로킹/논블로킹과 동기/비동기 처리 방식

블로킹(Blocking) / 논블로킹(Non-Blocking) 블로킹(Blocking)과 논블로킹(Non-Blocking)은 I/O 작업을 처리하는 방법이다. 블로킹: I/O 작업을 요청한 스레드는 I/O 작업이 완료될 때까지 봉쇄 상태가 되어 대기한다. 논블로킹: I/O 작업을 요청한 스레드는 I/O 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다. 즉, 운영체제 관점에서 살펴보면 다음 블로그(https://olsohee.tistory.com/150)에서 설명하는 동기식 입출력 방식이 블로킹 방식이고, 비동기식 입출력 방식이 논블로킹 방식이다. 그리고 주의할 점은 블로킹 방식에서 I/O 작업을 요청한 스레드가 봉쇄 상태가 되었더라도, 그동안 CPU는 다른 스레드를 실행한다는 것이다. 네트워크 ..

CS/Operating System 2024.04.01

링크 계층

링크 계층 링크 계층은 네트워크 계층의 한 단계 아래 계층으로, 링크 계층의 전송 단위는 프레임이다. 링크 계층을 이해함으로써 패킷이 라우터로 이동하는 그 과정을 좀 더 구체화시켜 이해할 수 있을 것이다. 이더넷(Ethernet) 이더넷은 링크 계층에서 같은 네트워크 간에 통신을 할 때 사용되는 프로토콜로, 컴퓨터, 서버, 라우터, 스위치 등의 네트워크 장치들을 연결하여 데이터를 전송하고 네트워크를 구성한다. 따라서 이더넷을 사용하여 연결된 장치들은 같은 네트워크 내에 속해야 한다(LAN(Local Area Network)). LAN에서 이더넷을 사용하면 데이터는 주로 이더넷 스위치나 허브를 통해 전송된다. 이더넷 프레임 Destination Address: 도착지 MAC 주소 Source Address..

CS/Network 2024.03.30

네트워크 계층: IP

네트워크 계층, IP 프로토콜 네트워크 계층의 대표적인 프로토콜은 IP(Internet Protocol)이고, 전송 단위는 패킷이다. 패킷의 데이터 부분에 전송 계층의 세그먼트가 담기게 된다. 즉 패킷의 구성은 "IP 헤더(20바이트) + TCP 헤더(20바이트) + 애플리케이션 메시지"라고 할 수 있다. 즉, IP 패킷의 최소 크기는 애플리케이션 메시지를 제외한 40바이트이다. 실제로 네트워크 상에 돌아다니는 IP 패킷을 보면 40바이트 크기의 패킷을 발견할 수 있는데, 그 예로 데이터를 잘 받았다는 피드백의 ACK 용도인 패킷이 있다. IP 프로토콜의 특징은 다음과 같다. 상위 계층에서 전송받은 데이터에 헤더를 붙여 패킷을 만든다. 비연결형 프로토콜로 패킷을 수신지까지 전송하지만 전송 완료를 보장하지..

CS/Network 2024.03.28

전송 계층: UDP, TCP

전송 계층전송 계층은 어플리케이션 계층 바로 아래에 위치하며, 좀 더 구체화된 개념이다. 전송 계층에서의 전송 단위는 세그먼트이며, 세그먼트는 데이터와 헤더 부분으로 나뉜다. 애플리케이션 계층으로부터 받은 메시지가 데이터 부분에 들어가고, 부가 정보가 헤더 부분에 들어간다. 전송 계층의 대표적인 프로토콜로 TCP와 UDP가 있다. UDPUDP는 비연결형 통신 방법으로, TCP와 달리 신뢰성을 보장하지 않는다. 이때 비연결형이라는 것은 다음 사진과 같이 소켓과 소켓 간의 일대일 매핑이 이뤄지지 않는 것은 말한다.즉, 송신지 소켓과 수신지 소켓이 연결되었는지 확인하지 않고 보낸다(connectionless). 그리고 TCP와 달리 전송된 세그먼트에 대한 ACK 응답을 받는 과정이 없다. 따라서 데이터가 제대..

CS/Network 2024.03.26

소켓(Socket)

소켓(Socket) 소켓은 네트워크에서 프로세스 간 통신을 가능하게 하는 연결부라고 할 수 있다. 서로 다른 머신에 존재하는 프로세스 간 통신을 위해서는 연결을 위한 인터페이스가 필요하다. 이때 각 머신의 운영체제가 제공하는 네트워크 연결과 관련된 시스템 콜을 소켓 api라고 한다. 네트워크에 연결하기 위한 소켓은 통신 프로토콜에 맞게 만들어져야 한다. 따라서 소켓의 종류는 다음 두가지로 나뉜다. TCP 소켓: TCP 상에서 동작하는 소켓 (소켓 스트림) UDP 소켓: UDP 상에서 동작하는 소켓 (소켓 데이터그램) TCP 소켓을 통한 통신 흐름(소켓 api) 서버 소켓 socket() 소켓을 생성한다. 이때 인자로 소켓의 종류를 지정할 수 있다. TCP 소켓을 위해서는 SOCK_STREAM, UDP 소..

CS/Network 2024.03.26

애플리케이션 계층: DNS

DNS, 네임서버 DNS는 Domain Name System의 약자로 도메인 이름과 IP 주소를 변환하는 역할을 하는 시스템이다. DNS가 필요한 이유는 무엇일까? 사용자가 복잡한 IP 주소를 기억하는 것은 어렵기 때문이다. 따라서 사용자가 도메인 이름을 입력하면, DNS를 통해 그에 해당하는 IP 주소를 알아오는 것이다. 네임서버는 도메인 이름과 그에 상응하는 IP 주소 간의 매핑 정보를 저장하고 관리하는 서버이다. 네임서버는 DNS를 통해 인터넷 상에서 사용된다. 도메인 네임 스페이스 그런데 만약 DNS를 운영하는 네임서버가 1개라면? 모든 트래픽이 하나의 서버로 몰려 IP 주소 반환 과정이 느릴 것이고, 이 서버가 다운되면 전세계 사람들이 이용하지 못하게 될 것이다. 따라서 DNS를 운영하는 네임서..

CS/Network 2024.03.26

애플리케이션 계층: HTTP

HTTP(Hypertext Transfer Protocol) 전 세계의 웹브라우저, 서버, 웹 애플리케이션은 모두 HTTP(Hypertext Transfer Protocol)를 통해 서로 통신한다. HTTP는 전 세계의 웹 서버로부터 대량의 정보를 사람들의 PC에 설치된 웹브라우저로 옮겨준다. HTTP는 Hypertext Transfer Protocol의 약자이다. 이때 하이퍼텍스트란, 텍스트인데 링크들을 포함한 텍스트를 의미한다(ex, 이미지 참조 링크, 동영상 참조 링크). 따라서 HTTP는 여러 링크들이 포함된 하이퍼텍스트를 전송하는 프로토콜이다. HTTP의 특징 TCP/IP 따라서 신뢰성 있는 데이터 전송이 보장된다. 클라이언트-서버 구조 클라이언트는 서버에게 필요한 데이터를 요청하고, 서버는 요..

CS/Network 2024.03.26

소수인지 판단할 때 시간 복잡도 줄이기

https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위 문제를 풀 때 소수인지 판단하는 메소드를 다음과 같이 구현했었다. 그런데 시간 초과가 났다. public boolean isPrime(long num) { for (int i = 2; i < num; i++) { if (num % i == 0) { return false; } } return true; } 만약 100이 소수인지 판단한다고 가정하자. 100의 약수는 [1, 2, 4, 5, 10..

CS/Algorism 2024.03.21

[Real MySQL] 9. 옵티마이저와 힌트

옵티마이저 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진이다. MySQL 서버로 요청된 쿼리는 결과는 동일하지만 내부적으로 그 결과를 만들어내는 방법은 매우 다양하다. MySQL의 옵티마이저는 쿼리를 최적으로 실행하기 위한 실행 계획을 수립하는 작업을 진행한다. EXPLAIN이라는 명령으로 쿼리의 실행 계획을 확인할 수 있다. 그리고 실행 계획을 제대로 이해하려면 MySQL 서버 옵티마이저가 실행하는 최적화에 대해 어느 정도 지식을 갖추고 있어야 한다. 쿼리 실행 절차 MySQL 서버에서 쿼리가 실행되는 과정은 다음과 같다. SQL 파싱: 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있도록 파싱하여 트리 형태(파스 트..

CS/Database 2024.03.19

[Real MySQL] 8. 인덱스 - 클러스터링 인덱스

클러스터링 인덱스(클러스터링 테이블) 클러스터링 인덱스는 테이블의 PK에 대해서 적용되는 내용이다. 즉 PK 값이 비슷한 레코드끼리 묶어서 저장하는 것을 클러스터링 인덱스라고 표현한다. 참고로 MySQL에서 클러스터링 인덱스는 InnoDB 스토리지 엔진에서 디폴트로 설정된다. 클러스터링 인덱스, 즉 PK 값에 의해 레코드의 저장 위치가 결정된다. 따라서 PK 값이 바뀌면 그 레코드의 물리적 저장 위치가 바뀌어야 한다. 즉, PK 값으로 클러스터링된 테이블은 PK 값에 대한 의존도가 크기 때문에 신중히 PK 값을 설정해야 한다. 클러스터링 인덱스는 PK 값에 의해 레코드의 저장 위치가 결정되므로 사실 인덱스 알고리즘이라기보다 테이블 레코드의 저장 방식이라고 볼 수 있다. 그래서 "클러스터링 인덱스"와 "클..

카테고리 없음 2024.03.19