전체 글 37

[혼자공부하는네트워크] DNS, HTTP, TCP

DNS, HTTP, 그리고 TCP가 어떻게 상호작용하는지 순차적으로 설명해 드릴게요.1. DNS 요청사용자가 웹 브라우저에서 "www.example.com"에 접속하면, 먼저 해당 도메인에 대한 IP 주소를 알아내야 합니다. 이 과정에서 **DNS(Domain Name System)**가 사용됩니다.DNS 요청을 통해 **www.example.com**의 도메인 이름이 IP 주소로 변환됩니다. (예: 93.184.216.34)이렇게 얻은 IP 주소는 실제 웹 서버가 위치한 컴퓨터를 가리키며, 이 주소로 클라이언트가 요청을 보냅니다.2. TCP 연결 설정DNS를 통해 IP 주소를 알아냈으니 이제 HTTP 요청을 보내기 위해 서버와 TCP 연결을 설정합니다.TCP는 3-way handshake라는 과정을 통..

네트워크 2024.09.21

[혼자공부하는네트워크] DNS 계층적 구조

DNS에서 도메인을 계층적으로 나누는 이유는 다음과 같습니다:관리의 분산: 계층 구조를 사용하면 전 세계적으로 도메인 이름을 중앙에서 관리하지 않고, 각 계층에서 독립적으로 관리할 수 있습니다. 예를 들어, com 도메인은 한 기관에서 관리하고, example.com은 다른 기관이 관리할 수 있습니다. 이렇게 분산된 관리로 인해 DNS 시스템은 더 효율적으로 동작합니다.확장성: 계층 구조는 도메인 네임 시스템이 수많은 도메인 이름을 쉽게 관리할 수 있도록 합니다. 도메인이 하위 도메인으로 계속해서 확장될 수 있어, 도메인 네임 공간의 한계를 초월할 수 있습니다.충돌 방지: 도메인을 계층적으로 나누면, 서로 다른 관리 기관이 같은 이름을 사용하는 문제를 방지할 수 있습니다. 예를 들어, example.co..

네트워크 2024.09.21

[이것이 C#이다] Thread.sleep

중간중간 Thread.Sleep()을 사용하는 이유는 여러 가지가 있을 수 있습니다. Thread.Sleep()은 스레드가 일정 시간 동안 실행을 멈추고 CPU 자원을 다른 스레드에게 양보하게 만듭니다. 이를 사용하는 주요 이유는 다음과 같습니다:1. CPU 부하 감소 및 자원 관리프로그램이 자원을 과도하게 사용하는 것을 방지하기 위해서 Sleep()을 삽입합니다. 만약 스레드가 계속해서 작업을 반복적으로 수행하면 CPU 사용량이 높아질 수 있기 때문에, 불필요한 반복문이나 긴 대기 상태에서는 Sleep()으로 CPU 사용을 줄일 수 있습니다.2. 타이밍 제어 및 동기화특정 작업이 완료되기를 기다리거나 다른 스레드 또는 리소스가 준비될 때까지 일시적으로 대기해야 하는 경우가 있습니다. 예를 들어, 파일 ..

C# 2024.09.21

[이것이 C#이다] 멀티 프로세스 vs 멀티 스레드 관련 깨알지식ㅍ

GUI가 없는 프로세스, 즉 백그라운드 프로세스나 서버 프로세스와 같은 경우, 멀티프로세스 방식이 유용한 이유는 주로 다음과 같은 특성 때문입니다:1. 안정성 (Crash Isolation)멀티프로세스 방식에서는 각 작업이 별도의 프로세스에서 실행됩니다. 즉, 하나의 프로세스가 오류로 인해 종료되더라도 다른 프로세스에는 영향을 주지 않습니다. GUI가 없는 서버나 백그라운드 프로그램은 장기간 실행되는 경우가 많기 때문에, 하나의 프로세스가 실패할 때 전체 시스템에 영향을 주지 않는 것이 중요합니다. 멀티프로세스는 이러한 충돌 격리 기능을 제공합니다.2. 병렬성 (Concurrency)멀티프로세스 방식은 시스템의 다중 CPU 또는 코어를 효과적으로 활용할 수 있습니다. 각각의 프로세스는 다른 코어에서 병렬..

C# 2024.09.21

[용어정리] 정적메소드와 인스턴스 메소드

정적 메소드(static method)와 인스턴스 메소드(instance method)의 차이는 메소드가 호출되는 방식과 그 메소드가 접근할 수 있는 데이터에 있습니다. 두 가지의 주요 차이점을 아래에 설명합니다.1. 정적 메소드 (Static Method)클래스에 속함: 정적 메소드는 클래스 자체에 속해 있으며, 특정 객체(인스턴스)를 생성하지 않고도 호출할 수 있습니다.static 키워드 사용: 정적 메소드를 정의할 때 static 키워드를 사용합니다.인스턴스 데이터에 접근 불가: 정적 메소드는 클래스의 인스턴스 변수(객체의 필드)에 접근할 수 없습니다. 대신, 클래스 변수(정적 변수)에만 접근할 수 있습니다.사용 예시: 정적 메소드는 주로 공통적인 동작을 처리할 때 사용됩니다. 예를 들어, 유틸리티..

C# 2024.09.21

개발자가 되기 위해

훌륭한 사람이 되기 위해,  직업적으로는 훌륭한 개발자가 되기 위해  아니 되고 싶어서... 이 블로그를 만들었다. 비전공자가 개발자가 되기위해 처음에는 자바국비교육을 들으면 되는 줄 알았다.  그래도 나름 잘따라갔고, 시키는 건 잘해냈기에  괜찮은 줄 알았다.  하지만, 현실은 달랐다.  현실에 나와보니, 자바국비교육을 받은 뒤 나는 그냥  코딩이 뭔지만 아는 일반인이었다.  나름 훌륭하게 해냈다라고 생각한 학원에서 만든 포트폴리오는, 그냥 자동조립식으로 만들어낸 캠핑용 텐트와 다를바가 없었다. 만드는 것에만 집중했고, 그게 전부인 줄 알았다.    왜 텐트의 구조는 이래야만 하는지,  이 텐트의 특징은 무엇인지, 그안에 필요한 재료,소재는 어떻게 만들어진건지 아무것도 몰랐다.  텐트를 만드는  업으로..

개발일지 2024.09.07

[JAVA자료구조] 허프만 알고리즘 & 허프만트리 생성 구현

비트 시퀀스정의: 비트 시퀀스는 이진 코드로 표현된 데이터의 일련의 비트입니다. 컴퓨터에서 문자를 인코딩할 때 사용되는 이진 표현입니다.예: 문자 'A'가 01000001로 표현되는 경우, 이 8비트의 시퀀스가 'A'의 비트 시퀀스입니다.고정 길이 코드정의: 모든 문자가 동일한 길이의 비트 시퀀스로 인코딩됩니다.예: 아스키 코드에서 각 문자는 7비트(기본 아스키) 또는 8비트(확장 아스키)로 표현됩니다.장점: 구현이 간단하고 일관된 인코딩과 디코딩.단점: 빈도수에 따라 비트 길이를 조절할 수 없어 저장 공간 효율이 낮을 수 있음.가변 길이 코드정의: 각 문자가 빈도수에 따라 다른 길이의 비트 시퀀스로 인코딩됩니다. 빈도가 높은 문자는 짧은 비트 시퀀스, 빈도가 낮은 문자는 긴 비트 시퀀스를 가집니다.예:..

[혼자 공부하는 운영체제] 파티셔닝, 포매팅, 파일할당 방식

1. 파티셔닝 (Partitioning)파티셔닝은 하나의 저장 장치(예: 하드 디스크, SSD)를 여러 개의 독립적인 논리적 영역으로 나누는 작업을 의미합니다. 각 영역을 파티션이라고 부르며, 각 파티션은 독립적으로 운영될 수 있는 저장 공간을 제공합니다. 예를 들어, 한 디스크를 여러 파티션으로 나누어 각각 다른 운영체제를 설치하거나, 데이터를 분리 저장할 수 있습니다.기본 파티션 (Primary Partition): 주로 운영체제를 설치하는 데 사용되며, 디스크 하나에 최대 4개의 기본 파티션을 만들 수 있습니다.확장 파티션 (Extended Partition): 디스크에 하나만 만들 수 있으며, 이 안에 여러 개의 **논리 파티션 (Logical Partition)**을 생성할 수 있습니다.2. 포..

OS 2024.09.04