분류 전체보기

    [네트워크] HTTP와 HTTPS

    ✔️ HTTP란? HTTP는 HyperText Transfer Protocol의 약자로, 클라이언트/서버 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. 인터넷 상에서 자원을 주고 받을 때 사용하는 통신 규약으로, 80번 포트를 사용한다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다. HTTP의 구조 HTTP은 애플리케이션 레벨(OSI 7계층)의 프로토콜로, TCP/IP 위에서 작동한다. 또한, HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다. 그러나 HTTP는 평문 데이터(텍스트)를 전송하는 프로토콜이므로, 누군가 네트워크에서 신호를 ..

    [네트워크] 대칭키와 공개키

    암호화와 복호화에 사용하는 암호키가 같은 지 다른 지에 따라, 암호화 기법이 대칭키 기법과 비대칭키 기법으로 나뉘어진다. ✔️ 대칭키(Symmetric Cryptography) 대칭키 암호는 암호화와 복호화에 동일한 대칭키(암호키)를 사용하는 알고리즘이다. 송신자가 키를 통해 평문을 암호화(Encryption)하여 암호문을 보내면, 수신자는 동일한 키를 이용하여 암호문을 복호화(Decryption)하여 평문을 만드는 원리이다. 대표적인 알고리즘 : DES, 3DES, AES, SEED, ARIA, MASK 등 장점 공개키 암호화 방식에 비해 암호화 및 복호화 속도가 빠르다. 키 크기가 상대적으로 작다. 암호 알고리즘 내부구조가 간단하여 시스템 개발 환경에 용이하다. 대용량 Data 암호화에 적합하다. 단..

    [네트워크] TCP/IP 흐름제어 & 혼잡제어

    📌Index TCP 통신이란? 흐름 제어 Stop and Wait Sliding Window 혼잡 제어 AIMD (Additive Increase/Multiplicative Decrease) Slow Start(느린 시작) Fast Retransmit(빠른 재전송) Fast Recovery(빠른 회복) 기술질문/예상질문 ✔️ TCP 통신이란? 흐름제어와 혼잡제어에 대해 알아보기 앞서, TCP 통신를 보고 넘어가자. TCP 통신이란 네트워크 통신에서 신뢰적인 연결 방식을 의미한다. TCP는 기본적으로 reliable network를 보장할 수 있도록 하는 프로토콜로, network congestion avoidance algorithm을 사용한다. 🔎 Unreliable vs Reliable Unrelia..

    [네트워크] UDP(User Datagram Protocol)

    ✔️ UDP란? User Datagram Protocol의 약자로, 데이터를 데이터그램(Datagram) 단위로 처리하는 프로토콜이다. TCP와는 다르게 데이터를 패킷으로 나누고 반대편에서 재조립하는 과정을 거치지 않으며, 수신지에서 제대로 받든 받지 않든 상관하지 않고 데이터를 보내기만 한다. 즉, 비연결형, 신뢰성 없는 전송 프로토콜로, 데이터그램 단위로 쪼개면서 전송을 해야하기 때문에 전송 계층에 속한다. 또한 목적지에 도달하려고 하지만 에러가 날 수도 있고, 재전송이나 순서 뒤바뀜에 대한 대처는 애플리케이션에서 처리해주어야 한다. 그러나 UDP는 속도가 빠르다. 별도의 연결도 필요하지 않고, TCP 처럼 ACK 메세지를 통해 확인을 받거나 하는 작업이 없기 때문에 TCP보다 빠르며, 이러한 속도의..

    [네트워크] TCP 3 way handshake & 4 way handshake

    ✔️ TCP(Transmission Control Protocol)란 TCP는 네트워크 계층 중 전송 계층(4계층)에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다. TCP의 특징 인터넷 상에서 데이터를 메세지의 형태(세그먼트라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다. 연결형 서비스로, 가상 회선 방식을 제공한다. 3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다. (데이터를 전송하기 전에 논리적 연결이 설정되는데, 이를 가상회선이라고 한다, UDP는 데이터그램 교환 방식) 흐름제어 및 혼잡제어를 제공한다. 흐름 제어 ..

    [네트워크] TCP/IP 4계층 모델

    네트워크 전송 시 데이터 표준을 정리한 것이 OSI 7계층이었다면, 이 이론을 실제로 사용하는 인터넷 표준으로, 각종 기능을 계층화하고 복수의 프로토콜을 조합하여 실현시킨 것이 TCP/IP 4계층이다. TCP/IP 모형은 현재의 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 통신 규약(프로토콜)의 모음으로, 각 계층은 담당하는 위치마다 처리 역할을 구분해 진행함으로 서로 간의 간섭을 최소화하여 사용의 편리성을 높인다. 상위 계층인 TCP는 메세지나 파일들을 좀 더 작은 패킷으로 나누어 인터넷을 통해 전송하는 일과, 수신된 패킷들을 원래의 메세지로 재조립하는 일을 담당한다. 반면, 하위 계층의 IP는 각 패킷의 주소 부분을 처리하며 패킷들이 목적지에 정확하게 도달할 수 있게 한다. TCP/IP 4계층..

    [네트워크] OSI 7계층

    통신 기술의 도입과 통신 기능의 확장을 쉽게 하기 위해 프로토콜을 몇 개의 계층으로 나누는 것을 계층화라고 하며, 통신 기능을 7 계층으로 분류하여 각 계층마다 프로토콜을 규정한 규격을 OSI 모델이라 한다. OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 그렇다면 이와 같이 7 계층으로 나누는 이유는 무엇일까? 통신이 일어나는 과정을 단계 별로 알 수 있으며, 특정한 곳에서 이상이 생기면 해당 단계만 수정할 수 있기 때문이다. PC방에서 오버워치를 하는데 연결이 끊겼다. 어디에 문제가 있는지 확인해 보자. 모든 PC에 문제가 있다면, 라우터의 문제(3계층 네트워크 계층)이거나 광랜을 제공하는 회사의 회선 문제(1계층 물리 계층)일 가능성이 높다. 한 PC만 문제가 있다..

    [NCP] 네이버 클라우드에 k8s HA(고가용성) 클러스터 구축하기

    📌Index 프로젝트 목표 VPC 및 Subnet 생성하기 Init Script 작성하기 Server 생성하기 Server 세팅하기 Kubernetes 초기화 및 노드 조인 CNI(Container Network Interface) 설치 마무리 ✔️ 프로젝트 목표 NCP(네이버 클라우드)에서 고가용성(HA) 쿠버네티스 토플로지 : stacked etcd를 구성한다. stacked etcd(중첩된 토플로지)는 etcd에서 제공하는 분산 데이터 스토리지 클러스터를, 컨트롤 플레인 구성 요소를 실행하는 kubeadm으로 관리되는 노드에 의해서 형성된 클러스터 상단에 중첩하는 토플로지이다. 고가용성 쿠버네티스 토플로지에 대한 더 자세한 설명은 다음에서 확인할 수 있다. [Kubernetes] k8s HA(고가용..

    [운영체제] 가상 메모리(Virtual Memory)와 메모리 관리 : 메모리, 스와핑, 단편화

    📌 Index 메모리 주기억장치와 보조기억장치 메모리 관리 ✔️ 메모리 메인 메모리(Main Memory, Physical Memory, 주기억장치) CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리에 적재해두어야 한다. 그러나 만약 프로그램 용량이 메인 메모리 보다 크다면, 어떻게 될까? 가상 메모리(Virtual Memory) 가상 메모리(Virtual Memory)는 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 즉, 물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다. 예를 들어, 100MB 메모리 크기에서 200MB 크기의 프로세스를 수행할 수 있도록 하는 것이다. 필요한 부분만 메모리에 적재하고, 프로세스를 실행 시 실행..

    [Go] Functions 기초

    📌Index Function 정의하기 Multiple Value를 반환하는 Function 만들기 여러개의 Argument를 가질 수 있는 Function 만들기 Naked Return Defer 🔎 VScode에서 실습을 진행합니다. ✔️ Function 정의하기 곱셈 연산을 수행하는, multiply function을 정의해보자. main.go func mutiply(a int, b int) int { return a*b } 파라미터의 타입, 리턴 타입을 위와 같이 작성해준다. 만약 여기서 더 간단하게 작성하고 싶고, a와 b의 타입이 같다면, 다음과 같이 작성하는 것도 가능하다. func multiply(a , b int) int { return a * b } ✔️ Multiple Value를 반환..

    [NCP] VPC와 서브넷 생성하기

    📌Index VPC 생성하기 서브넷 생성하기 ✔️ VPC 생성하기 NCP 콘솔에 접속해서 VPC를 생성한다. 다음과 같이 VPC 이름과 IP 주소 범위를 작성한다. 생성 후 시간이 조금 지나면 운영중 상태가 되는 것을 확인할 수 있다. ✔️ 서브넷 생성하기 다음으로 서브넷(Subnet)을 생성한다. [Subnet Management]을 클릭하여 Subnet을 생성한다. 다음과 같이 Subnet 이름과 앞서 생성한 VPC를 선택한다. 여기서는 Public 서브넷을 생성한다. 생성 후 시간이 조금 지나면 Subnet이 운영중 상태가 된 것을 확인할 수 있다. 지금까지 간단하게 VPC와 서브넷을 생성해보았다. 더 다양한 VPC 구성들은 다음에서 확인해볼 수 있다. https://www.ncloud.com/pr..

    [Go] Packages and Imports

    📌Index Package Import 🔎 VScode에서 실습을 진행합니다. ✔️ Package 모든 Go 프로그램은 package로 구성되고, package를 통해서 모듈화 및 코드의 재사용 기능을 제공한다. Go의 많은 Package들이 표준 라이브러리로 제공하며, 이러한 표준 라이브러리는 환경변수 GOROOT/pkg 경로에 설치되어 있다. Main Package 일반적으로 Package는 라이브러리 형태로 사용되지만 main 이라고 명시된 package는 라이브러리가 아닌, 실행 프로그램으로 만들게 된다. main.go 로 이름을 지정한다는 것은, 해당 프로젝트를 컴파일 하고 싶다는 뜻이고, 그것을 사용할 것이란 뜻이다. 컴파일 하지 않을 것이라면 다름 파일명 test.go, learning.go..

728x90