#STUDY

개발 역량 향상을 위한 공부 글입니다.

목록으로 돌아가기

[혼공네] 7-3. 무선 네트워크

전파와 주파수 전파는 약 3kHz부터 3THz 사이의 진동수를 갖는 전자기파다. 이는 ‘눈에 보이지 않는 전자기파의 일종’ 정도로 정의할 수 있다. 통신에 사용되는 전파는 ‘주파수 대역’이 정해져있어, 이를 통해 통신을 한다. 와이파이와 802.11 IEEE 802.11 표준은 대부분 2.4GHz, 5GHz를 이용한다. IEEE 802.11 표...

[혼공네] 7-2. 안전성을 위한 기술

암호와 인증서 대칭 키 암호화 방식과 공개 키 암호화 방식 키와 원문 데이터에 수학적 연산 과정을 거치면 암호문이 생성된다. 이러한 과정을 암호화 알고리즘이라고 한다. 대칭 키 암호화 방식은 암호화와 복호화에 동일한 키를 사용한다. 두 호스트가 같은 키를 가지고 암호화 및 복호화를 진행하는 것이다. 이러한 방법은 상대방에게 안전하게 키를 전달하기...

[혼공네] 7-1. 안정성을 위한 기술

실습 완료 사진으로 해당 내용을 대체합니다. 💡 와이어샤크는 ‘통신망의 상어’라는 뜻으로 피 한 방울만 떨어져도 감지해내는 상어처럼 통신망을 감시한다는 취지의 컨셉을 가지고 있다. 💡 TLS로 암호화되지 않았다면 도청에 조심해야한다. 개인정보 탈취가 가능하기 때문이다. 비밀번호 등! 조심하자! 문제 1. 와이어샤크란? → 네트...

[혼공네] 6. 실습으로 복습하는 네트워크

실습 완료 사진으로 해당 내용을 대체합니다. 💡 와이어샤크는 ‘통신망의 상어’라는 뜻으로 피 한 방울만 떨어져도 감지해내는 상어처럼 통신망을 감시한다는 취지의 컨셉을 가지고 있다. 💡 TLS로 암호화되지 않았다면 도청에 조심해야한다. 개인정보 탈취가 가능하기 때문이다. 비밀번호 등! 조심하자! 문제 1. 와이어샤크란? → 네트...

[혼공네] 5-3. HTTP 헤더와 HTTP 기반 기술

HTTP 헤더 요청 시 활용되는 HTTP 헤더 Host - 요청을 보낼 호스트를 나타내는 헤더 User-Agent - HTTP 요청을 시작하는 클라이언트 측의 프로그램을 의미 Referer - 클라이언트가 요청을 보낼 때 머무르고 있던 URL이 명시. Authorization - 클라이언트 인증 정보를 담는 헤더. 타입의 종류는 기...

[혼공네] 5-2. HTTP

HTTP의 특성 응용 계층에서 정보를 주고받는 데 사용되는 프로토콜. 요청-응답 기반 프로토콜 ‘클라이언트-서버 구조 기반의 요청-응답 프로토콜’ 미디어 독립적 프로토콜 ‘HTTP가 요청하는 대상을 자원이라고 한다. HTTP는 자원의 특성을 제한하지 않으며, 단지 자원과 상호 작용하는 데 사용할 수 있는 인터페이스를 정의한다. 대부분의 자원은...

[혼공네] 5-1. DNS와 자원

도메인 네임과 네임 서버 일반적으로 사용자는 상대 호스트를 특정하기 위해 도메인 네임을 사용한다. www.example.com과 같은 형태다. 이러한 도메인 네임과 IP 주소는 네임 서버에서 관리하며, 이를 DNS 서버라고 부른다. 도메인 네임은 .(점)을 기준으로 계층적으로 분류되는데, www.example.com 기준으로 .이 루트 도메인, c...

[혼공네] 4-3. TCP의 오류, 흐름, 혼잡 제어

이번 장에서는 TCP 통신 3단계 (연결 수립 - 데이터 송수신 - 연결 종료) 중 데이터 송수신에서 사용하는 기법을 배운다. 오류 제어: 재전송 기법 TCP는 신뢰성을 보장하기 위해서 오류를 제어한다. 그 중 재전송 기반 오류 제어가 어떻게 이루어지는지 확인해보자. 오류 검출과 재전송 체크섬은 세그먼트 훼손 여부만 나타내기 때문에 송신 호스트...

[혼공네] 4-2. TCP와 UDP

TCP 통신 단계와 세그먼트 구조 TCP 통신 단계 연결 수립 데이터 송수신 - 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공. 연결 종료 MSS(Maximum Segment Size) - TCP로 전송할 수 있는 최대 페이로드 크기. MSS를 고려할 때 TCP 헤더 크기는 제외한다. TCP 헤더...

[혼공네] 4-1. 전송 계층 개요: IP의 한계와 포트

신뢰할 수 없는 통신과 비연결형 통신 IP 즉, 인터넷 프로토콜은 신뢰할 수 없는 프로토콜이자 비연결형 프로토콜이다. 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않는 특징이 있으며 (최선형 전달), 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않는 특징이 있다. → 이는 성능적인 이유가 있다. 대부분의 경우 빠른 송수신이 필요한 데이터...

[혼공네] 3-3. 라우팅

라우터와 L3 스위치는 네트워크 계층의 핵심 장치이다. 하지만 두 장치가 기능상 상당 부분 유사하므로 엄밀히 구분하지 않는 경우가 많다. 패킷이 목적지까지 도달할 때 까지 라우터를 거쳐가는데, 이를 점프하듯이 건너는 것으로 표현하여 ‘홉’이라고 표현한다. 라우팅 테이블은 특정 수신지까지 도달하기 위한 정보를 명시한 일종의 표와 같은 정보다. 라우터...

[혼공네] 3-2. IP 주소

네트워크 주소와 호스트 주소 네트워크 주소는 네트워크 ID, 네트워크 식별자라고도 불린다. 호스트 주소는 호스트 ID, 호스트 식별자라고도 불린다. IP 주소에 네트워크 주소와 호스트 주소가 할당되어있다. 할당 비율을 해결하기 위해 IP 주소의 클래스를 이용한다. 클래스풀 주...

[혼공네] 3-1. LAN을 넘어서는 네트워크 계층

데이터 링크 계층의 한계 물리 계층과 데이터 링크 계층만으로 다른 네트워크까지의 도달 경로를 파악하기 어렵다. 통신을 빠르게 주고받기 위하여 최적의 경로를 결정하는 라우팅 기법을 사용한다. 이 때 물리 계층과 데이터 링크 계층의 장비로는 라우팅이 불가능하며, 라우터라는 장비를 사용한다. MAC 주소 만으로는 모든...

[혼공네] 2-4. 스위치

스위치 데이터 링크 계층의 네트워크 장비, 2 계층에서 사용한다고 하여 L2 스위치라고도 한다. 여러 포트에 호스트를 연결할 수 있는데, 이는 허브와 유사하나 허브와 달리 MAC 주소를 학습하여 특정 MAC 주소를 가진 호스트에만 프레임을 전달하며, 전이중 모드 통신을 지원한다. CSMA/CD 프로토콜을 ...

[혼공네] 2-3. 허브

물리 계층에는 주소 개념이 없다. 그러므로 물리 계층의 네트워크 장비는 송수신되는 정보에 대한 어떠한 조작이나 판단을 하지 않는다. 반면 데이터 링크 계층에는 주소 개념이 있다. MAC이 여기에 속하며, 데이터 링크 이상 계층의 장비는 송수신지를 특정할 수 있고, 주소를 바탕으로 송수신되는 정보에 대한 조작과 판단을 할 수 있다. 허브 ...

[혼공네] 2-2. NIC와 케이블

NIC(Network Interface Controller)는 호스트와 통신 매체를 연결하고, MAC 주소가 부여되는 네트워크 장비다. 호스트를 네트워크에 연결하기 위한 하드웨어라고도 표현한다. 네트워크 인터페이스 카드, 네트워크 어댑터, LAN 카드, 네트워크 카드, 이더넷 카드 등의 명칭도 있다. US...

[혼공네] 2-1. 이더넷

이더넷은 현대 LAN 환경에서 가장 대중적으로 사용되는 기술로, 다양한 통신 매체의 규격들과 송수신되는 프레임의 형태 및 프레임을 주고 받는 방법 등이 정의된 네트워크 기술이다. 이더넷 관련 기술은 전기전자공학자협회에서 IEEE 802.3의 이름으로 표준화하였다. 이더넷 표준 규격에 따라 구현된 통신 매체는 한눈에 파악하기 쉽도록 일정...

[혼공네] 1-3. 네트워크 미시적으로 살펴보기

프로토콜이란 통신 과정에서 정보를 올바르게 주고 받기 위해 합의된 규칙이나 방법을 의미한다. 현대는 주로 패킷 교환 방식을 사용하는데, 페이로드를 상자에 담아 헤더를 작성하여 첨부하면 네트워크 장비를 통해 페이로드가 발송된다. 이 때 페이로드를 옮겨주는 장비가 정보를 이해하고 주고 받기 위해 합의된 규칙이나 방법이 프로토콜이다...

[혼공네] 1-2. 네트워크를 거시적으로 살펴보기

통신망은 그래프의 형태를 띄고 있다. 그래프란 노드와 그를 연결하는 간선으로 이루어진 자료구조다. 자료구조란 정보를 표현하고 다루는 방법을 의미한다. 네트워크의 기본 구조 - 모든 네트워크는 노드와 이를 연결하는 간선, 주고받는 메시지로 구성된다. ‘호스트’는 가장자리에 위치한 노드로, 네트워크를 통해 흐르는 정보를 최초...

[혼공네] 1-1. 컴퓨터 네트워크를 알아야 하는 이유

네트워크 : 여러 개의 장치가 마치 그물처럼 서로 연결되어 정보를 주고 받을 수 있는 통신망 인터넷 : 여러 네트워크를 연결한 ‘네트워크의 네트워크’ 개발자가 컴퓨터 네트워크를 알아야 하는 이유 - 네트워크 지식은 프로그램을 만드는 업무와 유지보수하는 업무에 도움을 줄 수 있다. 웹사이트를 배포할 때 DNS. HTT...

[클린코드] 14장 점진적인 개선

프로그램을 짜면 명령행 인수의 구문을 분석해야할 때가 종종 있다. 이 때 편리한 유틸리티가 없다면 main 함수로 넘어오는 문자열을 직접 분석해야한다. ‘클린코드’ 책에서 새로 짜는 유틸리티를 Args라고 칭하겠다. 간단한 Args 사용법 Args 생성자에 입력으로 들어온 인수 문자열 및 형식 문자열을 넘겨서 Args 인스턴스를 생선한다. 이후...

[클린코드] 13장 : 동시성

동시성이란 - 동시에 실행되는 것처럼 보이는 성질 싱글 코어에서 멀티 스레드를 동작시키는 방식이다. 이를 채택하는 이유는 무엇과 언제를 분리하여 어플리케이션 구조와 효율을 극적으로 높이기 위해서다. 구조적 관점에서 프로그램이 작은 프로그램들로 쪼개어져 보인다. 효율적 관점에서 응답 시간 및 작업 처리량이 개선된...

[클린코드] 12장 : 창발성

창발성 : 불시에 솟아나는 특성으로, 단순한 결합들이 복잡한 결과를 나타내는 것. 창발적 설계 : 규칙과 원칙을 지켜 설계를 하면 그것들이 모여 좋은 거시적 설계가 된다. 창발적 설계로 클린 코드를 구현하자 켄트 벡에 의하면 네 가지 규칙을 따른 설계는 단순한 설계라고 칭한다. 모든 테스트를 실행한다. ...

[클린코드] 11장 : 시스템

소프트웨어어에 시스템을 설계한다고 생각해보자. → 각 분야별로 시스템을 모듈화 할 것이며, 서로 이를 공유해야한다. 이 때 시스템들이 비슷한 수준의 추상화를 이룬다면 협업이 더 수월해질 것이다. 코드를 깨끗이 유지한다면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다. 시스템의 생성과 사용을 분리하라 시스템 제작, 즉 생성은...

[클린코드] 10장 : 클래스

클래스를 정의하는 표준 자바 관례에 따르면, 하나의 클래스 안에서 순서는 다음과 같다. 모든 상수 및 변수, 메소드는 public → protected → package → private 순서로 적는다. static 상수 → static 변수 → instance 변수 → 메서드 ⇒ 테스트 등을 위해...

[클린코드] 9장 : 단위 테스트

단위테스트란 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트다. 하나의 모듈이란 하나의 기능 또는 클래스가 될 수 있다. 오랜 기간 단위테스트는 단순히 자기 프로그램이 돌아가는 것에 대한 확인에 불과했다. 현재는 애자일 방법론과 TDD로 인해 단위 테스트를 자동화하여 개발을 ...

[클린코드] 8장 : 경계

이번에 다룰 경계는 개발자가 직접 짠 코드와 외부에서 가져오는 코드 사이의 호출 로직 상 부분이다. 나아가 아는 코드와 모르는 코드를 분리하는 부분도 다룰 예정이다. 외부 코드와 개발자 코드 사이의 경계 외부 코드는 범용성 및 적용성을 생각해 최대한 많은 케이스에 대응하여 코드를 작성한다. 내부(개발자) 코드는 자...

[클린코드] 7장 : 오류 처리

코드의 많은 부분은 오류를 처리하는 코드가 차지하고 있으므로, 오류 처리와 깨끗한 코드는 연관성이 있다. 그러한 이유로 오류 처리를 현명하게 하여 깨끗한 코드를 유지해야한다 오류 코드보다 예외를 사용하라 오류 플래그를 사용하여 오류를 반환하는 것보다 오류 발생 시 예외를 던지게 하면 호출자 코드가 깔끔해진다. ...

[클린코드] 6장 : 객체와 자료 구조

비공개로 정의한 변수를 왜 조회 및 설정 함수로 공개하는 지에 대한 의문 및 이야기 자료 추상화 구현을 감추기 위해서는 추상화를 해야한다. 비공개로 정의한 변수의 조회 및 설정 함수 등을 공개한다면, 이는 구현을 외부로 노출하는 것이다. 추상 인터페이스를 제공하여 사용자에게 구현을 노출하지 않고 자료를 ...

[클린코드] 5장 : 형식 맞추기

왜 코드 형식을 맞춰야하는가 코드의 가독성을 높이기 위해 유지보수를 원활하게 및 일관성 있게 이번 장에서는 코드를 작성할 때 주의해야 할 형식적인 요소들에 대해 다룹니다. 코드를 작성할 때는 가독성을 높이고 유지보수를 쉽게 하기 위해 일관성 있게 형식을 맞춰야 합니다. 세로 형식 ...

[클린코드] 4장 : 주석

주석은 왜 사용하는가 몇몇 주석은 설명 혹은 기타 정보 전달을 위해 작성한다. 하지만 정말 코드를 잘 작성한다면 주석은 필요하지 않다. 주석은 나쁜 코드를 보완하지 못한다. 일반적으로 코드가 명확히 설계되지 않았을 때 주석을 사용한다. 하지만 이는 주석을 달기보다 더욱 코드를 ...

[클린코드] 3장 : 함수

함수를 읽기 쉽고 이해하기 쉽게 짜는 방법. 의도를 분명히 표현하는 방법 등 함수를 짜는 방법론 소개 함수는 짧고 간결하게 만들어야한다. 예전 프로그래머는 짧게 만드는 것이 필수였음. 한 화면 안에서 짜야했기 때문. 반드시 한 화면에 들어가게 짜자. 또한 함수는 최대한 짧게 (20줄 이내)로 만드는 것을 지향하자. ...

[클린코드] 1장 : 깨끗한 코드

코드가 사라질까? 코드는 사라질 가망이 전혀 없다. 코드는 요구사항을 상세히 표현하는 수단이다. 코드는 점점 추상화된다. 좋은 일이지만, 이는 코드가 사라질 것이라는 근거가 되지 않는다. 결국 낮은 단계의, 기술을 명세하는 코드가 필요하기 때문이다. 나쁜 코드가 초래하는 일 나...