전체 글 101

Unicast, Broadcast, Mulitcast, Anycast

각 통신 방식에 대한 다이어그램 Unicast one-to-one 통신(소스와 타켓이 1:1로 통신) 출발지와 목적지가 명확히 하나로 정해져 있는 1:1 통신 방식 대부분의 통신은 Unicast 방식임 TCP, UDP 모두 지원 Broadcast one-to-all 통신 동일 네트워크에 존재하는 모든 호스트가 목적지 브로드케스트는 목적지 주소가 모든으로 표기되어 있는 통신 방식임 로컬 네트워크 내에서 모든 호스트에 패킷을 전달해야할 때 사용 유니케스트로 통신하기 전, 주로 상대방의 목적지를 알기 위해 사용됨 UDP 지원 Multicast one-to-many (혹은 one-to-group) 통신 멀티케스트 그룹 주소를 이용해 해당 그룹에 속한 다수의 목적지로 패킷을 전송하기 위한 통신 방식 주로 IPTV..

Back To The Basic 2021.11.24

ARP Request

ARP Request란? 아래의 표를 보면 OSI 7 Layer를 4계층으로 간략히 표현했다. 아래의 표는 소스(Source)에서 목적지(Destination)에 Packet(패킷)을 보내기 위해 하위 계층으로 어떻게 프레임을 만드는지 보여주고 있다. ARP Request란 아래 표에서 빨간색으로 표시되어 있는 상대방 Mac Address를 찾는 것을 의미한다. [소스 어플리케이션에서 목적지 어플리케이션을 찾아가기 위한 Layer별 패킷 구성] OSI Layer Example Packet Application HTTP APP Header + Data Transfort TCP Source Port + Dest Port + Syn + (APP Header+Data) Network IP Source IP + ..

Back To The Basic 2021.11.23

Salesforce 란

요즘 Cloud에 대해 개인적인 관심이 폭발하고 있다. SI에서 아키텍트로 일하고 있는 나에게 Application Modernization 분야를 제외하고는 Cloud는 단지 또다른 형태의 인프라, 그 이상도 이하도 아니였는데 최근들어 내가 얼마나 무지하고 나태한 생활을 해왔었는지 뼈져리게 느끼고 있다. 이 포스팅에서는 SaaS(Software As A Service)의 대표주자인 Salesforce를 알아봄으로써 CRM의 대표주자인 Salesforce가 Cloud를 통해 기존과 다른 어떤 그림을 그리고 있는지 알아보고자 한다. Salesforce(세일즈포스)란? Salesforce는 CRM(Customer Relationship Management) 및 다른 시스템과의 통합을 위한 클라우드 기반 CR..

클라우드 마이그레이션: 리호스팅, 리플랫포밍, 리팩토링

클라우드 마이그레이션을 위해서는 보통 7가지가 있는데 일반적으로는 3가지 방법론인 리호스팅(Rehosting), 리플랫포밍(Reflatforming) 그리고 리팩토링(Refactoring)이 많이 사용되고 있다. 이번 포스팅에서는 클라우드 마이그레이션의 방법론으로 가장 많이 사용되는 리호스팅, 리플랫포밍, 리팩토링에 대해 간단히 그 정의를 알아보고자 한다. 리호스팅(Rehosting) 기존 온프레미스 인프라 환경을 그대로 옮기는 방법 흔히 리프트&시프트(Lift & Shift) 라고도 불림 비록 리호스트라 하더라도 기존 어플리케이션의 환경, 구성 정보 등은 변경됨 리플랫포밍(Reflatforming) 기존 온프레미스에 맞게 구성되어 있던 OS, WEB, DB등과 같은 소프트웨어 환경을 변경해 옮기는 방법..

Cloud Service 2021.11.13

TCP vs UDP

[ TCP 특징 ] - Transmission Control Protocol 연결형 서비스로 가상 회선 방식을 제공한다. 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. 흐름 제어 및 혼잡 제어. 높은 신뢰성을 보장한다. UDP보다 속도가 느리다. 전이중(Full-Duplex), 점대점(Point to Point) 방식. [ UDP 특징 ] - User Diagram Protocol 비연결형 서비스로 데이터그램 방식을 제공한다 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다. UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다. 신뢰성이 낮다 TCP보다 속도가 빠르다 TCP vs UDP 비교 TCP UDP ..

Back To The Basic 2021.11.08

RAID

정의 RAID(Redundant Array of Inexpensive Disks)는 다수의 디스크를 구성해 성능 및 장해 대응을 위해 구성하는 디스크(HDD) 셋을 의미 다양한 RAID 구성 방식이 존재하나 여기에서는 RAID 0, 1, 01, 10, 5을 주로 다룸 예제용 논리 파일 구성 이 예제에서는 아래의 논리 파일 블럭을 예로 들어 각 RAID(0,1,10,01,5)에서 어떻게 파일이 구성되는지 확인해 보도록 한다. RAID 0 (Striping) 여러개의 디스크에 논리파일을 분할해 적재 디스크 I/O 장치가 여러개가 병렬로 작동 가능하기 때문에 성능 향상이 된다. 데이터의 안전한 저장 보다는 속도 향상이 주 목적 RAID 1(Mirroring) 디스크에 파일 적재시 동일한 내용을 다른 디스크에 ..

Back To The Basic 2021.11.03

Blocking vs Non-Blocking

시스템의 Blocking과 Non-Blocking을 이해하기 전에 우선 OS의 System Call Interface에 대한 이해가 필요하다. System Call Interface 시스템 콜 인터페이스는 프로세스나 스레드로부터 명령을 받는 인터페이스로써 다음과 같은 역할을 담당한다. 운영체제는 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동된다. 운영체제에서 프로그램이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많은 부분이 커널 모드를 사용한다. 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해준다. Blocking I/O Model..

Back To The Basic 2021.11.03

Load Balancer

Load Balancer란 다양한 요청 트래픽에 대해 장치(장비)나 서비스의 앞단에 존재하여 분산처리를 통해 장치(장비) 혹은 서비스로의 로드율 증가, 부하량, 속도저하 등을 적절히 분산처리하여 해결해주는 서비스 보통 Switch 라고도 한다 Load Balancer의 종류 종류 설명 L2 Switch - Mac주소를 바탕으로 Load Balancing 수행 - Mac 기반 통신이기 때문에 Broadcast가 발생할수 밖에 없으며 그로인해 성능 저하 현상 발생 - 저가의 더미 허브가 이 기능을 수행하는 대표적인 장비임 L3 Switch - L2가 Mac Addr에 따른 스위칭이 주 업무라면 L3는 IP에 의한 라우팅(Routing)이 주 업무 - L2 스위치 위에 IP에 의한 라우팅 기능이 추가되었기 때..

Back To The Basic 2021.11.02

인프라 용어 정리

Server HBA(Host Bus Adaptor) 서버와 장비 사이의 통신을 위해 서버에 장착하는 카드 즉, 인터페이스 카드를 꼽기 위한 카드 FC(Fibre Channel) FC HBA 기반의 Disk Array System과 직접 연결 또는 SAN(Storage Network Area) 환경(SAN Switch기반) 에서 연결을 하여 호스트와 Disk Array간에 인터페이스를 할 수 있도록 하는 Host Bus Adapter OS Kernel OS Kernel(커널)은 OS의 본질 그 자체이며 개발자는 OS의 커널을 통해 하드웨어나 다른 애플리케이션에 어떤 영향을 끼치는 지를 고려하지 않고도 응용 프로그램을 개발할 수 있다. OS 커널의 역할은 다음의 6가지 역할로 나눌 수 있음 System Ca..

Back To The Basic 2021.11.02

현재 OS에 열린 포트 확인

Mac OS 쉘에서 다음과 같이 치면 현재 열린 포트 목록을 확인할 수 있다. sudo lsof -PiTCP -sTCP:LISTEN 특정 포트를 찾아 포트를 닫고 싶으면 다음과 같이 쳐서 PID를 알아낸다. sudo lsof -i :3000 여기서 3000이 포트번호이다. 위에서 나온 PID를 다음 명령어에 넣으면 포트가 닫힌다. sudo kill -9 PID Linux 쉘에서 다음과 같이 치면 현재 열린 포트 목록을 확인 할 수 있다. sudo netstat -antup 위에 나온 PID를 죽이고 싶이면 다음과 같이 한다. sudo kill -9 PID Windows 커맨트 콘솔상에서 다음과 같이 치면 확인할 수 있다. netstat -ano | findstr LISTEN 이 특정 포트를 닫고 싶으면 ..

Kubernetes Ingress

Minikube(미니큐브)에 ingress 설치 ingress Controller 동작 확인 curl -I http://sharplee7.io/healthz 호출을 통한 ingress controller health check apiVersion: v1 kind: Service metadata: name: hello-minikube3 namespace: default labels: app: hello-minikube3 spec: selector: app: hello-minikube3 ports: - protocol: TCP port: 8080 targetPort: 8080 type: NodePort ingress ip 확인 DNS에 HOST명과 IP 등록(예제에선 로컬 PC로 접속하기 때문에 시스템의 h..

EKS, Ingress, AWS API Gateway

Kubernetes with AWS API gateway Docker container + AWS API gateway로 개발환경이 구성되어 있는 상태에서 Kubernetes 도입을 검토하게 되었다. Image build나 배포를 위해 Jenkins와 Ansible을 이용하고 있기는 했지만 원래의 구성이라면 배포나 배포 후의 작업들이 번거롭기도 하고 배포의 편의성이나 유연함과는 거리가 멀다고 느껴졌기 때문이다. 예를 들어 같은 기능을 갖는 backend service가 가용성을 위해 여러개 떠있다고 가정했을 때 update를 진행한다 생각하면 기존의 방식으로는 머리가 아플 것이 분명하다. AWS API gateway의 특징 Kubernetes를 도입하기 전에 AWS API gateway을 살펴보지 않을 ..

NodePort vs LoadBalancer vs Ingress

이번 포스팅은 구글 클라우드의 Kubernetes Service 비교 글을 참조 했으며 참조한 원본 글을 아래의 링크에서 확인 할 수 있다. Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what? Recently, someone asked me what the difference between NodePorts, LoadBalancers, and Ingress were. They are all different ways to get… medium.com Kubernetes 서비스 Kubernetes 서비스는 Pod(파드) 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 방법을 의미한다. Kubernetes는 Pod에게 고..

Spring Boot로 만든 Hello Minikube 예제

이번 포스팅에서는 spring boot 기반의 hello 애플리케이션을 지난번 포스팅에서 설치했었던 minikube(미니큐브) 시스템에 배포하고 호출하는 예제를 실행해 보고자 한다. (*PC에 minikube가 이미 설치되어있다면 이전 포스팅을 참조하지 않아도 된다.) 예제에 사용될 앱은 http://[ip:port]/hello/[이름]의 형식으로 호출되며 이름을 넘기면 리턴해주는 심플한 앱이다. 예제에 사용된 환경 JDK 11 Spring Boot 2.6.0 gradle git Docker for mac(windows라도 상관없다) 및 Docker hub 계정 Minikube Hello Minikube2 앱 작성 https://start.spring.io/에 방문해 아래와 같은 옵션으로 앱을 만들어 다..

Minikube(미니큐브)

이 포스팅은 2020년 네이버 블로그에 게시 했던 글을 리 포스팅한 글입니다. Minikube(미니큐브)란? 쿠버네티스는 마스터 노드(Master Node)와 하나 이상의 워커 노드(Worker Node)로 구성되어 있습니다. 그러나 단순 개발 테스트를 위해 개인이 이 정도의 플랫폼(Platform)을 구성하는 것은 쉽지 않습니다. Minikube(미니큐브)는 마스터 노드의 일부 기능과 개발 및 배포를 위한 단일 워커 노드를 제공해 간단한 쿠버네티스 플랫폼 환경 개인 PC에서 만들어 볼 수 있게 만들어 줍니다.(이런 개인용 Kubernetes 개발 테스트 환경으론 Kind라는 제품도 있습니다.) Minikube에 대한 원본 기사는 아래의 링크를 통해 확인 가능합니다. Minikube를 사용해서 클러스터 ..

Kubernetes (쿠버네티스) 란?

본 포스팅 자료는 2019년 네이버 블로그에 포스팅 했던 내용을 리 포스팅한 글입니다. 개인적으로 2019년 한해 가장 뜨거웠던 IT 키워드는 쿠버네티스(Kubernetes: 첫 자인 K와 마지막 자인 S사이에 8개의 단어가 있다고 해서 K8S로 줄여 부른다) 였던 걸로 생각됩니다. 쿠버네티스는 다수의 컨테이너들을 관리해 주는 오케스트레이션(Orchestration) 플랫폼입니다. 즉, 도커(Docker)와 같은 컨테이너들이 한 두대의 서버에 몇 개로만 구성되어 운영될 때는 필요 없는 개념이지만 컨테이너들이 엔터프라이즈(Enterprise)급의 구성을 통해 수십, 수백개로 늘어나게 되면 그 관리를 위해 꼭 필요한 플랫폼입니다. 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확..

Docker Image Repository

이번 포스팅에서는 Public 망에 있는 Docker-Hub(https://hub.docker.com/) 에 개인용 컨테이너(Container) 이미지(Image) 레지스트리 (Registry)를 만들어 보도록 하겠습니다. 이번 포스팅은 다음의 지식이나 환경이 필요합니다. - Windows, Linux 혹은 Mac 환경에 설치된 Docker Engine - Docker에 대한 기본 개념 - Docker 기본 명령어 Hands on은 다음과 같은 순서로 진행 가능합니다. 1. hub.docker.com에 계정 생성(혹은 로그인) - 웹 브라우저를 통해 http://hub.docker.com 에 접속 - sign in 메뉴를 찾아 클릭 - 계정 생성(Google ID 등과 연동 가능) - 로그인 2. Reg..

Docker Private Container Registry 만들기

이 포스팅은 2020년 네이버 블로그에 올렸던 내용을 리 포스팅했습니다. 지금까지의 포스팅에서 도커(docker) 이미지(혹은 컨테이너 이미지)는 도커 허브(https://hub.docker.com/)로부터 공개된 이미지를 끌어와(pull) 만들었습니다. 이렇게 컨테이너 이미지를 등록, 보관 관리하는 곳을 container registry라고 하는데 Network의 Public 망이 엄격히 금지되는 곳에서는 네트워크 망 내에 별도의 registry를 만들어야 될 필요가 있습니다.(maven repository를 위해 nexus repository를 별도로 구축하는 것과 같습니다.) 이번 포스팅에서는 docker registry 이미지를 이용해 Private Container Registry 만드는 것을 ..

Spring Boot, MySQL, JPA 그리고 docker-compose 예제 ... 2/2

Spring Boot, MySQL, JPA 그리고 docker-compose 예제 ... 1/2 에 이어서 계속 진행 build.gradle 파일 수정 SimpleBoard에서는 Lombok, Swagger, JPA등과 관련된 라이브러리를 사용할 예정이다. 비록 Spring Initializr를 통해 필요한 dependency를 자동으로 생성했다고 할지라도 Lombok, Swagger등은 아래와 같이 별도로 build.gradle 파일에 추가가 필요하다. *아래의 파일 내용을 전체 카피해서 붙여 넣기 해도 된다. plugins { id 'org.springframework.boot' version '2.1.9.RELEASE' id 'io.spring.dependency-management' version..

반응형