반응형

1. 개요

마이크로서비스 아키텍처와 같이 작은 서비스들로 이루어진 환경에서 복잡한 트랜잭션과 데이터 일관성을 효과적으로 관리하기 위해 SAGA 패턴이 사용됩니다. 이 패턴은 여러 서비스 간의 트랜잭션을 조율하고 데이터 일관성을 유지하기 위한 강력한 도구로 활용됩니다.

 

분해된 큰 트랜잭션:

SAGA 패턴은 큰 트랜잭션을 작은 단위의 작업으로 분해합니다. 각 작업은 개별적인 서비스로 구현되며, 작은 범위의 트랜잭션을 조율하는 것이 가능해집니다.

 

단위 작업의 트랜잭션:

각 단위 작업은 자체적인 트랜잭션을 가집니다. 이러한 작은 트랜잭션은 각 서비스 내에서 안전하게 수행

될 수 있습니다.

 

SAGA 관리 로직:

SAGA 패턴은 전체 트랜잭션의 흐름을 관리하는 로직을 필요로 합니다. 이 로직은 각 단계의 작업이 순차적으로 진행될 수 있도록 조율하며, 작업의 완료 여부를 확인합니다.

 

복잡한 트랜잭션의 관리:

다중 서비스 간의 복잡한 트랜잭션을 분해하고 조율함으로써 전체 시스템의 확장성과 견고성을 높일 수 있습니다.

 

구현의 복잡성과 주의사항:

SAGA 패턴은 구현이 복잡하며, 각 작업이 성공적으로 완료되지 않을 경우 컴펜세이팅 트랜잭션을 관리해야 합니다. 따라서 신중한 계획과 테스트가 필요합니다.

 

2. 종류 

 

추가/수정 패턴 (Compensating Transaction Pattern): 

이 방식은 특정 작업에 대한 성공적인 완료가 보장되지 않을 경우, 이전 작업을 취소하는 로직을 구현합니다. 이전 작업을 취소하는 로직을 "보상 트랜잭션" 또는 "컴펜세이팅 트랜잭션"이라고 합니다. 이러한 컴펜세이팅 트랜잭션들이 순차적으로 실행되며, 일련의 작업들의 트랜잭션을 조율하게 됩니다.

 

사가 로깅 패턴 (Saga Logging Pattern): 

이 방식은 각 단계의 트랜잭션 상태와 진행 여부를 기록하는 로깅 메커니즘을 사용하여 트랜잭션의 상태를 추적합니다. 각 작업이 시작되고 완료될 때 로그를 남기고, 다음 작업으로 진행 여부를 확인할 수 있도록 합니다.

 

3. 장단점

 

장점

분산 시스템에서 트랜잭션 조율: 마이크로서비스 아키텍처와 같은 분산 시스템에서 여러 서비스 간의 트랜잭션을 조율하는데 유용합니다. 각 서비스의 트랜잭션을 분리하여 더 작은 범위에서 관리하고, 전체 시스템의 유연성과 확장성을 향상시킵니다.

부분 실패에 대한 대응: 일부 서비스에서 오류가 발생하여 트랜잭션이 실패할 경우, 해당 작업만 롤백하고 다른 작업은 계속 진행할 수 있습니다. 이로써 전체 트랜잭션을 망가뜨리지 않고 일부 실패를 처리할 수 있습니다.

변경의 용이성: 각 단위 작업은 개별적인 서비스로 구현되므로, 각 서비스의 변경이 다른 서비스에 영향을 덜 주며 유지보수가 용이합니다.

 

단점

구현 복잡성: SAGA 패턴은 복잡한 구조를 가지며, 작은 단위의 트랜잭션과 그에 따른 컴펜세이팅 트랜잭션을 구현해야 합니다. 이로 인해 개발과 유지보수가 어려울 수 있습니다.

컴펜세이팅 트랜잭션 처리의 어려움: 각 작업이 성공적으로 완료된 후 다음 작업으로 진행하는 것이 아니라, 중간에 실패할 경우 이전 작업을 롤백하고 컴펜세이팅 트랜잭션을 실행해야 합니다. 이런 컴펜세이팅 트랜잭션의 구현은 복잡하고 예외 처리가 중요합니다.

장애 복구 어려움: 트랜잭션 조율 중에 실패가 발생하거나 일부 서비스가 다운되면 전체 SAGA 트랜잭션이 실패할 수 있습니다. 이러한 상황에서의 복구 작업은 복잡하고 신중한 처리가 필요합니다.

응답 시간 지연: 각 작업이 별도의 트랜잭션으로 실행되기 때문에 전체 SAGA 트랜잭션이 완료될 때까지 시간이 걸릴 수 있습니다. 이로 인해 응답 시간이 지연될 수 있습니다.

 

 

SAGA 패턴은 복잡한 분산 시스템에서 효과적인 데이터 일관성과 트랜잭션 관리를 위한 방법이지만, 그 구현과 관리가 쉽지 않을 수 있습니다. 사용 시에는 장점과 단점을 고려하여 상황에 맞게 적용해야 합니다.

반응형

'이론 정리' 카테고리의 다른 글

Blocking/Non-blocking, Sync와 Async: 개념과 예시  (0) 2023.08.17
[OOP] 객체지향 프로그래밍  (0) 2021.02.27
한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
반응형

Blocking/Non-blocking, Sync와 Async: 개념과 예시

 

 

자바 프로그래밍에서는 동시성 처리와 작업의 순서에 따라 다양한 작업 처리 방식이 사용됩니다. 이러한 작업 처리 방식을 이해하고 활용하는 것은 프로그램의 효율성과 성능에 큰 영향을 미칩니다. 이번 포스팅에서는 Blocking과 Non-blocking, 그리고 Sync와 Async에 대한 개념과 자바에서 사용되는 라이브러리 예시를 살펴보겠습니다.

Blocking(블로킹)과 Non-blocking(논블로킹)

 

Blocking (블로킹): 

정의
블로킹은 특정 작업을 요청한 함수나 쓰레드가 그 작업이 완료될 때까지 대기해야 하는 상태를 말합니다.
예시
예를 들어, 레스토랑에서 주문을 하면 주문한 음식이 나올 때까지 계속 기다려야 하는 것과 유사합니다. 이러한 상태에서는 주문을 한 사람이 다른 일을 하지 못하고 음식이 나올 때까지 기다려야 합니다.

 

 

Non-blocking (논블로킹): 

정의
논블로킹은 특정 작업을 요청한 후, 그 작업의 완료 여부와 상관 없이 다른 작업을 계속 수행할 수 있는 상태를 의미합니다.
예시
논블로킹 상황에서는 레스토랑 주문을 예로 들면, 주문을 하고 나서 다른 일을 계속 할 수 있습니다. 주문이 처리되는 동안에도 다른 고객이 주문을 할 수 있습니다.

 

Sync(동기)와 Async(비동기)

 

Sync(동기): 
정의
동기는 요청한 작업이 완료될 때까지 다음 작업을 수행하지 않는 방식을 의미합니다. 즉, 한 작업이 끝나야 다음 작업이 시작됩니다.
예시
주문을 처리하는 동안 다른 작업을 처리하지 않고, 그 주문이 끝난 후에 다음 주문을 받는 상황과 유사합니다.

 

 

Async(비동기):

정의
비동기는 하나의 작업이 끝나지 않았더라도 다음 작업을 병렬적으로 처리할 수 있는 방식을 의미합니다.
예시
주문을 비동기 방식으로 처리하면서 다른 요청도 병렬적으로 처리하는 상황과 유사합니다.


 

이렇게 보면, 'Blocking'과 'Sync', 그리고 'Non-blocking'과 'Async'가 서로 비슷한 개념처럼 보이지만, 사실은 각각 다른 측면을 다루고 있습니다. 'Blocking'과 'Non-blocking'은 작업을 어떻게 대기하는지, 'Sync'와 'Async' 는 작업을 어떻게 처리하는지에 초점을 맞춥니다.

 

즉, 'Blocking'과 'Sync'는 대기하는 방식과 작업 처리 방식에서 차이가 나지만, 결국에는 둘 다 '대기'를 의미합니다. 반면, 'Non-blocking'과 'Async'는 각각 대기하지 않고 다른 작업을 병렬로 처리할 수 있는 방식을 나타냅니다.

 

자바 사용 예시

1. Blocking

java.io 패키지: InputStream 및 OutputStream 클래스는 블로킹 방식으로 입출력 작업을 처리합니다.

 

2. Non-blocking

java.nio 패키지: ByteBuffer, Channel, Selector 등을 통해 비동기 입출력 작업을 처리합니다.

 

3. Blocking Sync
java.util.concurrent 패키지: Semaphore, CountDownLatch, CyclicBarrier 등을 사용하여 동기화 기능을 구현할 수 있습니다.

 

4. Non-blocking Async
CompletableFuture: 자바 8부터 제공되는 CompletableFuture를 활용하여 비동기 작업을 처리합니다.

java.util.concurrent 패키지: ExecutorService, ScheduledExecutorService 등을 통해 비동기 작업을 처리하는 방식을 구현할 수 있습니다.

 

실제 예시로 살펴보기

1. 블로킹 동기 (Blocking Sync): 식당에서 주문을 받을 때 주문이 완료될 때까지 주문한 사람은 대기합니다.

2. 논블로킹 동기 (Non-blocking Sync): 식당에서 주문이 처리되는 동안에도 다른 손님이 주문을 할 수 있습니다.

3. 블로킹 비동기 (Blocking Async): 웹 서버에서 클라이언트의 요청을 처리하는 동안 다른 요청을 처리하지 않습니다.

4. 논블로킹 비동기 (Non-blocking Async): 웹 서버에서 클라이언트의 요청이 처리되는 동안에도 다른 요청을 처리할 수 있습니다.

 

자바에서는 위와 같은 라이브러리와 패키지를 활용하여 다양한 작업 처리 방식을 구현할 수 있습니다. 이를 통해 다양한 상황에 맞게 동작하는 프로그램을 개발할 수 있습니다.

 

 

반응형

'이론 정리' 카테고리의 다른 글

SAGA 패턴  (0) 2023.08.22
[OOP] 객체지향 프로그래밍  (0) 2021.02.27
한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
반응형

작성일자 : 2021.02.27

 

객체지향 프로그래밍(Object-Oriented Programing)

 

객체지향 프로그래밍(Object-Oriented Programing)이란?

 

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 말 그대로 객체를 중심으로 프로그래밍을 하는 것.

 

객체란?
사물, 개념 등의 현실의 객체를 추상화 혹은 은유하여 소프트웨어 세상에서 재창조한 것
객체의 특징
OOP의 주요 개념은 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보며, 객체를 이용해 시스템을 분할하는 것이다. 여기서 자율적인 객체란 상태와 행위를 함께 지니고 스스로 자기 자신을 책임지는 객체를 의미한다. 어떠한 객체의 책임의 집합이 그 객체의 역할이 되며, 시스템의 행위를 구현하기 위해 객체는 다른 객체와 협력한다.

 

객체지향 프로그래밍의 장/단점

 

장점

  • 코드 재사용이 용이
  • 유지보수가 쉬움
  • 대형 프로젝트에 적합

 

단점

  • 처리속도가 상대적으로 느림
  • 객체가 많으면 용량이 커질 수 있음
  • 설계 시 많은 시간과 노력 소요

 

객체지향의 4대 특징

 

캡슐화 (Encapsulation)

  • 객체의 정보를 숨기고 외부에서 인터페이스를 통해서만 접근이 가능하도록 설계하는 것 (접근 제어 지시자, Access Specifiers)
  • 단순히 private으로 설정해놓고 getter, setter를 제공한다면 이는 캡슐화가 아니다. 변할 수 있는 어떤 것이라도 감추어 응집도는 높게, 결합도는 낮게하고 내부 구현의 변경이 있더라도 외부의 객체는 영향이 없도록 하는 것이 캡슐화이다.

상속성 (Inheritance)

  • 기존 객체를 재사용하여 조상과 자손 관계의 새로운 객체를 설계하는 것. 상속받은 자손 객체는 조상 객체의 모든 멤버를 사용할 수 있다. (extends, overriding)

추상화 (Absctraction)

  • 불필요한 부분은 빼고 필요한 핵심적인 개념 또는 기능만을 추려 표현하는 행위 (abstract, 객체 설계)

다형성 (Polymorphism)

  • 서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것. 즉 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 메시지를 처리할 수 있는 메커니즘 (overloading, List -> ArrayList 관계)

 

 

객체지향의 설계 

 

SOLID 원칙을 지키며 적절한 협력, 책임, 역할을 가지는 객체를 설계하여 OOP 패러다임을 올바르게 실현하는 것

 

 

객체지향 설계 주요 개념

 

SOLID(5대 원칙)

  • 단일 책임 원칙 ( Single Responsiblility Principle )
    • 객체는 단 하나의 책임 혹은 목적만 가져야 함
  • 개방/폐쇄 원칙 ( Open Closed Principle )
    • 객체가 확장에는 개방되어 있고, 변경에는 닫혀있어야 함.
    • > 새로운 기능을 제공하기 위해서 기존 클래스를 수정하는 것을 허용하거나 권장하지 말고 기존 클래스를 확장하는 방법을 찾아야 한다는 것을 의미
  • 리스코프 치환 원칙 ( Liskov Substitution Principle )
    • 한 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 치환이 가능해야 함.
    • > 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함을 의미
  • 인터페이스 분리 원칙 ( Interface Segregation Principle )
    • 클라이언트가 사용하지 않는 메서드에 대해서는 의존하지 않아야 함
    • > 범용 인터페이스 하나를 사용하기보다는, 특정 클라이언트에 특화되도록 인터페이스 여러 개로 분리해야 함을 의미
  • 의존 역전 원칙 ( Dependency Inversion Principle )
    • 상위 계층이 하위 계층에 의존하는 전통적인 의존 관계를 역전시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
    • > 의존관계를 맺을 때 변화하기 쉬운 것(구체적인 것)보다는 변화하기 어려운 것(추상적인 것)에 의존해야 함을 의미. Strategy 디자인 패턴 참고

객체 요소

  • 협력
    • 스스로 해결하기 어려운 문제를 해결하기 위해 다른 객체의 도움을 구하는 것. 객체는 메시지를 통해 또 다른 객체에게 도움을 요청하고, 요청을 받은 객체는 필요한 도움을 메시지의 형태로 응답한다. 이것이 협력의 과정이며 이때 두 객체는 협력의 관계에 있다고 표현한다. (객체 간 메시지 송수신 과정)
  • 책임
    • 어떤 협력에 참여하여 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 표현하다. (인터페이스 구현체, 객체의 메서드)
  • 역할
    • 어떤 협력안에서 책임의 집합을 역할이라고 한다. 한 역할 안에는 하나 이상의 책임이 존재한다. (인터페이스)

 

소프트웨어 설계에 법칙이란 존재하지 않는다. 법칙에는 예외가 없지만 원칙에는 예외가 넘쳐난다. 초보자는 원칙을 맹목적으로 추종한다. 심지어 적용하려는 원칙들이 서로 충돌하는 경우에도 원칙에 정당성을 부여하고 억지로 끼워맞추려고 노력한다. 원칙이 현재 부적합하다고 판단된다면 과감하게 원칙을 무시하라. 
- 오브젝트 中 -

 

Reference

객체지향의 사실과 오해 - 조영호

오브젝트 - 조영호

반응형

'이론 정리' 카테고리의 다른 글

SAGA 패턴  (0) 2023.08.22
Blocking/Non-blocking, Sync와 Async: 개념과 예시  (0) 2023.08.17
한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
반응형

한글 인코딩

 

한글 인코딩이란?

 한글을 기계가 이해할 수 있는 형태로 변환하는 것

 

종류

 

1. 조합형

  자음, 모음 등을 하나의 문자로 인식하여 초성, 중성, 종성에 코드를 부여한 후 조합하는 방법

  한글의 창제 원리를 잘 반영하나, 타 문자 체계와 호환이 안되는 등의 이유로 사용 X

  ex) (ㅈ+ㅗ) + (ㅎ+ㅏ+ㅂ) + (ㅎ+ㅕ+ㅇ) - 8개의 문자

  

 

2. 완성형

  각 글자를 독립된 문자로 인식하여 각 글자에 코드를 부여하는 방법

  ex) ‘’ + ‘’ + ‘’ - 3개의 문자

 

  2.1 완성형 인코딩 종류

    EUC-KR(Extend unix code)

    - 1 Byte 단위의 문자(한글, 한자의 경우 2 Byte) 인코딩으로 한글, 한자, 영문 표현 가능

 

    UTF-8(Unicode Transformation Format)

    - 유니코드를 위한 1~4 Byte 문자 인코딩, 전 세계 문자 표현 가능

 

----

 

유니코드 : 세계 문자 인코딩을 위한 기준 및 협약 ( 알파벳, 한글을 포함한 모든 언어 + 기타)

아스키코드 : 문자 인코딩을 위한 기준 ( 알파벳 + 아라비아 숫자 + 기타 )

 

반응형

'이론 정리' 카테고리의 다른 글

Blocking/Non-blocking, Sync와 Async: 개념과 예시  (0) 2023.08.17
[OOP] 객체지향 프로그래밍  (0) 2021.02.27
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
TCP/IP  (0) 2018.02.10
반응형

가상화 ( IO )


IBM에서는 IO 가상화를 서버 가상화의 한 카테고리로 넣고있으나 서버 가상화에 별개로 IO가상화 단어 자체를 사용하는 경우가 존재한다 따라서 가상화의 종류를 네트워크, 스토리지, 서버 + IO 가상화로도 표현하는 경우도 존재 ( 혼란주의 )


I/O 가상화란?

가상 머신과 논리적 분할만으로는 서버 내 가상화의 공유 및 절연 기능을 완벽하게 구현할 수는 없다. 이를 보완하기 위해 어댑터와 같은 I/O 자원들을 공유하거나 또는 가상 머신들 간에 혹은 논리적 파티션들간에 I/O 통신을 할 필요가 있다.


VIOS ( Virtual I/O Server )

I/O 가상화를 위한 IBM 솔루션. 특별한 목적의 가상 분할로서, 다른 파티션들에게 I/O 자원을 공급하는 역할을 한다. 가상 I/O 서버는 물리적 자원을 소유하면서 다른 파티션들에게 I/O 자원의 공유를 허용해준다. 



특 징


설 명

비용절감


물리적 어댑터 자원을 여러 개의 파티션에서 공유하여 사용


유연성 증가


추가 하드웨어 자원을 추가하지 않고도 즉석에서 추가적인 파티션 생성


높은 호환성


AIX, I 및 Linux 파티션 지원


독립성


특정 OS에 올라가면 타 App, Service가 같이 올라갈 수 없음




VIOS 종류

1. 가상 SCSI - 1개의 어댑터로 모든 파티션이 외장디스크 사용 가능

 



2. 가상 이더넷 - 네트워크 어댑터 없이 가상의 이더넷 사용 가능

 



3. 공유 이더넷 어댑터 - 물리적 어댑터를 버스처럼 공유 가능

 



참조

IBM社 가상화 기술 백서 中

반응형

'이론 정리' 카테고리의 다른 글

[OOP] 객체지향 프로그래밍  (0) 2021.02.27
한글 인코딩  (0) 2019.06.04
가상화 ( 서버 )  (0) 2018.02.11
TCP/IP  (0) 2018.02.10
DNS  (0) 2018.02.08
반응형

 

가상화

 

 

가상화 시스템(Virtual System)이란?

 가상화(Virtualization)는 컴퓨터에서 컴퓨터, 리소스의 추상화를 일컫는 광범위한 용어이다 ‘물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호 작용하는 방식으로부터 감추는 기술’로 정의할 수 있다 이것은 다중 논리 리소스로서의 기능을 하는 것처럼 보이는 서버, 운영 체제, 응용 프로그램, 또는 저장 장치와 같은 하나의 단일 물리 리소스를 만들어 내거나 단일 논리 리소스처럼 보이는 저장 장치나 서버와 같은 여러 개의 물리적 리소스를 만들어 낼 수 있다 이러한 개념을 가상화라 하며, 가상화의 개념이 적용된 체계를 가상화 시스템이라고 부른다 일반적으로 서버, 스토리지, 네트워크와 같은 전통적인 단위 하드웨어 자원에 많이 적용되어왔다 현재는 하드웨어 차원의 IT 리소스에만 한정되지 않고 애플리케이션, 미들웨어, 분산시스템 및 가상화 자원들 자체를 포함하여 비실체적인 자원들에 대해서도 적용 되고 있다 물리적 자원을 Sharing, Aggregation, Emulation, Insulation 하여 가상자원으로써 사용할 수 있다.

 

1) 공유(Sharing) : 

 가장 대표적인 가상화의 기능으로서 다수의 많은 가상자원들이 하나의 동일한 물리적자원과 연결되어있거나 가리키는것을 말한다. 물리적 자원의 일부분을 가상화 된 자원마다 할당하거나 혹은 물리적 자원에 대하여 타임쉐어링 기법으로 공유하는 방식이 주로 사용된다. 이러한 형태의 가상화는 가상화자원을 사용하는 여러사용자들(애플리케이션또는서비스)이 물리적자원을 공유하게 해주며, 이때 각 사용자는 마치 자기가 해당 자원을 혼자서만 사용하는것과 같은 착각을 하게된다. 대표적 사례로는 서버내의 논리적파티셔닝(LPARs), 가상머신(VM), 가상디스크, 가상LAN(VLANs)을들수있다.

 

2) 단일화(Aggregation) :

 공유의 반대되는 가상화 개념으로서, 가상자원은 여러개의 물리적자원들에 걸쳐서 만들어질 수 있으며, 이를통해 외견상 전체용량을 증가시키고 전체적인 관점에서 활용과 관리를 단순화 시켜줄 수 있다. 예를들어, 스토리지 가상화는여러개의 물리적디스크 시스템에 남아있는 각각의 유휴디스크들을 하나의 가상화 된 디스크로 만들어주는데, 이때 가상화된 디스크는 가상디스크를 만드는데 사용되어진 어떤 물리적 디스크보다도 더 커질수있다.

 

3) 에뮬레이션(Emulation) : 

 물리적자원 자체에는 원래부터 존재하지 않았지만 가상자원에는 어떤기능들이나 특성들을 마치 처음부터 존재했던것처럼 가질수 있다. 예를들어 IP 네트워크상에서 가상SCSI 버스를 구현하는 iSCSI 또는 물리적디스크 스토리지상에 구현된 가상테이프 스토리지 등이 여기에 속한다. 또 다른 형태의 에뮬레이션에는 여러개의 제각기 다른 물리적자원들을 표준 구성요소형태인것처럼 가상자원으로 표시하는것이 있다. 여러종류의 이더넷 인터페이스를 마치 하나의특정한 표준이더넷 인터페이스 모델로 나타내는것이 그 예이다.

 

4) 절연 (Insulation) : 

 가상화된 자원들과 물리적자원들간의 상호맵핑은 가상화자원들 또는 가상화자원들을 사용하는 사용자들에게 아무런 영향을 미치지 않으면서 물리적자원들이 교체될 수 있도록 해준다. 이것은 투명한변경(Transparent Change)이라고 불리우며, 투명한변경은 가상화에 있어서 하나의 부가적인 혜택이기도 하지만, 때때로 그 자체가 하나의 기술로서 중요한의미를 갖기도 한다. CPUgard 옵션처럼 어떤 가상 프로세서가 결함이 발생하였거나 혹은 곧 발생하려는 물리적 프로세서에서 다른 정상적인 물리적 프로세서로 자동적으로 옮겨간다거나, 디스크의 결함을 사용자들로부터 숨기기위해다중디스크(Redundant Disk)를사용하는 RAID 스토리지 컨트롤러가 대표적인 사례들이다. 달리말해 장애방지(Failure Proof)의 효과라고 볼 수 있다. 

 

가상화 종류 

- 서버 가상화

- 네트워크 가상화

- 스토리지 가상화

 

* 본문에서는 서버 가상화만을 다룬다.

 

서버 가상화 

1) Managed Runtime

2) 물리적파티셔닝(Physical Partitioning)

3) 가상머신(Virtual Machine)

4) 논리적파티셔닝(Logical Partitioning)

5) I/O 가상화

 

최근의 서버 가상화는 위의 기술이 각각 사용되는 것이 아니라 하나의 통합기술로서 적용되어진다. ( 물리적 파티셔닝은 제외. ex - IBM社 LPAR )

서버 가상화의 솔루션으로서 '하이퍼바이저'라는 키워드가 존재한다. 서버 가상화의 핵심은 하이퍼바이저라는 하나의 커맨더에 의해 모든 것들이 Managed되는 것이다. 리소스 관리는 물론, 논리적 파티셔닝을 하고 그 위에 VM을 올린다.

 

하이퍼바이저 종류

 

1) Native, Bard-metal Type( Host OS 없음)

Ex) ESXi, XenServer, Hyper-v

 

하드웨어에 직접 설치되어 여러 개의 OS를 돌린다 호스트OS가 없어 리소스를 따로 할당하지 않아도 되며 호스트형 가상화에 비해 오버헤드가 적고, 리소스 관리가 유연하다 자체적으로 관리기능을 가지고 있지 않아 별도의 관리 콘솔 혹은 관리컴퓨터가 필요하다

 

Type 1 하이퍼바이저는 다시한번 종류를 다음과 같이 나눌 수 있다

 

1 - 1) 전가상화

히드웨어를 모두 가상화(Full Virtualization)하여 호스팅되는 OS의 수정 없이 다양한 OS를 지원해줄수 있다 각 Guest(OS)의 동작 하나하나가  하이퍼바이저에 의해 관리 되도록 전체를 가상화하기 때문에 퍼포먼스 저하가 생김

 

1 - 2) 반가상화

하드웨어를 반가상화(Para Virtualization)하여 호스팅되는 Guest(OS)가 직접적으로 하드웨어 제어를 하이퍼 콜( Hyper Call )을 통해서 수행한다. 게스트 OS가 하이퍼바이저가 직접 하지 않고 하이퍼 콜을 통해서 하드웨어 동작이 수행되기 때문에 하이퍼바이저의 부하가 낮아진다 퍼포먼스가 좋은 편

 

 

2) Host Type( Host OS 존재 )

Ex) VMWare Workstation, Virtual Box

 

호스트 운영체제에서 실행되며 이것의 관리하에 운영체제가 관리된다 게스트 OS의 종류에 제약이 적고, 손쉽게 도입이 가능하다 그러나 네이티브 방식에 비해 오버헤드가 크다

 
가상화 장단점

장점 

단점 

높아진 자원 활용률

낮아진 관리 비용

사용의 유연성

향상된 보안

높아진 가용성

증가된 확장성 

 물리적 장애 발생시 가상화 서버 전체에 영향

직관적이지 않은 환경(가상)의 유지보수 어려움

병목현상 고려 필요

라이선스 관리 복잡

 

 

가상화 벤더/브랜드 종류 및 장단점

 

VMWare – VMWare workstation, vCenter

강력한 기능, 편리성, 성능, 높은 안정성

일부 기능 라이선스 필요

하이퍼바이저 - ESXi( ESX 업그레이드 ) = vSphere

 

Citrix – XenServer

효율적 자원 관리, 젠서버(Server)에서 구동, recovery 편리

32비트 환경 제공 X, 윈도우 화면 전환 느림

하이퍼바이저 - XenServer

 

Oracle – Virtual Box

무료(오픈소스), 작은 용량, 높은 호환성

기능 제한, 단순 작업 시 사용 용이

하이퍼바이저 - VM

 

IBM – PowerVM

프로세서 간 자유로운 자원이동 가능, 동작중인 AIX 및 Linux VM을 서버간 이동 가능

레퍼런스가 부족

하이퍼바이저 - z/VM

 

MS – Hyper-V

윈도우에 내장된 가상머신, 접근 용이, 빠른 속도

높은 요구사항, Hyper-V 설치 시 인텔 가상화 기술을 독점(Hyper-V 전용으로 고정)

하이퍼바이저 - Hyper-V

 

대부분 리눅스 커널 기반의 KVM ( Kernel-based Virtual Machine )이라는 하이퍼바이저 오픈소스 기반의 커스터마이징 하이퍼바이저이다. Citrix XenServer같은 경우는 Xen의 XenProject( Xen )을 사용

 

참조

IBM社 가상화 기술 백서 中

반응형

'이론 정리' 카테고리의 다른 글

한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
TCP/IP  (0) 2018.02.10
DNS  (0) 2018.02.08
Socket / Port  (0) 2018.02.05
반응형

TCP/IP


1. IP( Internet Protocol )란?

송신 호스트와 수신 호스트가 패킷 교환 네트워크에서 정보를 주고받는 데 사용하는 정보 위주의 규약이며, OSI 네트워크 계층에서 호스트의 주소지정과 패킷 분할 및 조립 기능을 담당합니다. IP는 ‘패킷’과 ‘데이터그램’이라는 단위로 나뉘어 전송되며 비신뢰성(Unreliability)과 비연결성(Connectionlessness)이라는 특징을 가지고 있습니다. 연결 세션을 구성하지 않고 흐름에 관여하지 않기 때문에 무결성을 보장할수 없습니다.


IP 주소 체계

각각의 Host들을 구분하기 위해 IP 주소라는 것을 사용합니다. IP 주소는 Host를 나타내는 고유의 IP가 되기에 중복되면 안됍니다. 단 반대로 여러 개의 IP가 하나의 Hos를 나타낼 수 있습니다. 


Ex) 192.168.0.1(10) – 11000000 . 10101000 . 00000000 . 00000001(2)

IPv4의 경우 위와 같이 32bit 2진 형태의 포맷을 가지고 있으며 표현시에는 8비트씩 구분하여 10진법으로 나타냅니다. 구분점은 점(.)으로 표시하고 각 부분을 옥텟(Octet)이라고 부릅니다. 4 옥텟의 IPv4 주소 체계는 각 옥텟이 0 ~ 255( 2^8 )범위로 나타낼 수 있습니다. 따라서 전체 IP 주소는 256 *256 *256 *256 = 약 42억개의 주소를 중복없이 나타낼 수 있습니다.


Class

원래 IPv4주소는 8비트 네트워크/ 나머지 호스트 주소로 단순하게 구분되어 있었으나 오늘날 기존에 비해 더욱 커지고 복잡해진 네트워크 영역 덕분에 각기 다른 크기의 네트워크 영역이 총 5개의 Class 단위로 정의 되었습니다.

* 각 Class의 처음과 마지막 주소는 각각 해당 네트워크 자체주소와 브로드캐스트용 주소로 예약되어 있습니다.  -> ( 일반목적 Class별 IP 표현개수 = 이론상 표현개수 – 2 )


A Class

Network ID = 0XXXXXXX.*.*.* = 2^7 – 2 ( 0.X.X.X ~ 127.X.X.X )

Host ID = *.XXXXXXXX.XXXXXXXX.XXXXXXXX = 2^8 * 2^8 * 2^8


B Class

Network ID = 10XXXXXX.XXXXXXXX.*.* = 2^6 * 2^8 – 2 ( 128.X.X.X ~ 191.X.X.X )

Host ID = *.*.XXXXXXXX.XXXXXXXX = 2^8 * 2^8


C Clsas

Network ID = 110XXXXX.XXXXXXXX.XXXXXXXX.* = 2^5 * 2^8 * 2^8 - 2 ( 192.X.X.X ~ 223.X.X.X )

Host ID = *.*.*.XXXXXXXX = 2^8 


D Class ( 멀티캐스트용 )

IP ID = 1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX = 2^4 * 2^8 * 2^8 * 2^8 ( 224.X.X.X ~ 239.X.X.X )


E Class ( 예비, 실험용 )

IP ID = 1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX = 2^4 * 2^8 * 2^8 * 2^8 ( 240.X.X.X ~ 255.X.X.X )


공인, 사설 IP

앞에서 언급한 IP는 전부 공인 IP입니다. 인터넷에 보급에 따라 이러한 공인 IP 주소 또한 고갈의 문제가 제시되었습니다. 그래서 나온 대책이 ‘사설 IP’ 주소의 도입입니다. 외부와 연결되지 않는 네트워크에서 굳이 공인 IP를 사용하지 말고 자체적인 사설 IP를 돌려 씀으로써 공인 IP의 소모를 줄이는 방법입니다. 사설 IP의 주소 범위는 클래스별로 다음과 같습니다.

A Class = 10.0.0.0 ~ 10.255.255.255(10.0.0.0/8)

B Class = 172.16.0.0 ~ 172.31.255.255(172.16.0.0/12)

C Class = 192.168.0.0 ~ 192.168.0.0/16  



2. TCP( Transfer Control Protocol )란?

네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있습니다. 네트워크 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC793에 기술되어 있습니다.



TCP 특징

데이터 송수신 시 Byte 단위로 처리

양방향 통신 허용

오류 검증가능

연결 지향

Congestion / Flow Control

Buffer 사용




TCP 연결 설정 과정


1. 클라이언트가 서버에게 SYN segment를 보냄

2. 서버에서 SYN를 받고 SYNACK로 응답

3. 클라이언트에서도 SYNACK에 대한 ACK를 다시 보냄. 이 단계부터 데이터가 포함될 수 있음


+ 이 과정을 Three way handshake라 부른다.



TCP 연결 해제 과정

1. 클라이언트 end-system은 FIN segment를 서버에 보냄

2. 서버는 FIN을 받고 ACK로 응답. 일정시간 대기 후에 FIN segment를 클라이언트에 보냄

3. 클라이언트는 FIN을 받고 ACK로 응답. 

4. 서버는 ACK를 받고 일정시간 대기 후에 연결 종료


+ 일정시간 대기하는 이유는 아직 못보낸 데이터가 존재할 수 있기 때문


Flow Control ( 흐름 제어 )란?

Sender는 Receiver의 Buffer가 overflow되지 않을만큼 적당한 속도와 양의 데이터그램을 보낸다. 송수신자 사이의 데이터 처리율 차이에 대한 해결방법


Congestion Control ( 혼잡 제어 )란?

Sender는 Network상의 Buffer(Router)가 overflow 되지 않을만큼 적당한 속도와 양의 데이터그램을 보내거나, 다른 경로를 찾는다. 송신자와 네트워크의 데이터 처리율 차이에 대한 해결방법


3. 결론

IP > 3L Protocol 

TCP > 4L Protocol

인터넷 통신에 가장 많이 사용하는 프로토콜인 IP의 신뢰성을 보장하기 위해 상위 프로토콜인 TCP가 같이 자주 쓰이며 이를 TCP/IP라고 부릅니다.


반응형

'이론 정리' 카테고리의 다른 글

한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
DNS  (0) 2018.02.08
Socket / Port  (0) 2018.02.05
반응형

DNS

 

DNS( Domain Name System )는 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었습니다. 특정 컴퓨터(또는 네트워크로 연결된 임의의 장치)의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해줍니다. 예를들어 www.test.com -> DNS -> 1.2.3.4와 같이 특정 URL에 매핑되어있는 IP 주소를 반환해 줍니다.

 

 

동작원리

 

 

특정 URL ( www.naver.com ) 접근

 

0. 가장 먼저 로컬의 hosts파일에 접근하여 해당 URL에 대한 정보가 있는지 확인. 이 호스트 파일은 DNS의 초기, 모든 URL에 대한 IP정보를 사용자가 직접 관리했어야 했는데 이때 사용하는 매핑 테이블이며 로컬 캐시보다도 이 파일에 먼저 접근하여 검색 시작. 값이 있으면 IP 반환, 없으면 1. 진행

 

1. 로컬 캐시에 접근하여 값을 검색. 검색 성공시 IP 반환, 실패 시 2. 진행

 

2. 로컬에 설정되어있는 DNS Server에 접근. 따로 설정하지 않았다면 세계에 13개 존재하는 Root DNS Server가 설정되어 있으며 위 예제에서는 Root DNS Server가 아닌 다른 DNS Server를 참조한다고 가정. DNS Server에서 재귀적 쿼리를 실행하며 검색 성공시 IP 반환, 실패시 3. 진행

 

3. (.)Root DNS에서 검색 실행. 성공시 IP 반환, 실패시 4.

 

4. www.naver.com의 URL에서 TLD ( Top Level Domain )인 com에 해당하는 DNS Server IP를 반환

 

5. 재귀적 쿼리가 지속적으로 실행되며 com DNS Server에 접근해 검색 실행. 검색 성공시 IP반환, 실패시 6.

 

6. next LeverlDomain인 naver에 해당하는 DNS Server IP를 반환

 

7. 재귀적 쿼리가 지속적으로 실행되며 naver DNS Server에 접근해 검색 실행. 검색 성공시 IP 반환, 실패시 8.

 

8. 검색 성공 시 104.74.171.196 주소가, 실패시 실패 메세지가 DNS Server로 반환.

 

9. 반환된 IP에 접근 or 실패

 

 

 

 

Record

 

DNS에 매핑되는 값은 여러 종류가 존재하며 이를 레코드라고 부릅니다. 일반적으로 브라우저상에서 사용되는 레코드는 A 레코드로 도메인에 대한 IP가 매핑 됩니다. 레코드는 다음과 같은 종류들이 있습니다.

 

 

확인 방법

cmd > nslookup > set type='record type' > 'URL'

 

 

* dns 캐시 확인 방법

windows : ipconfig /displaydns

 

* dns 캐시 초기화 방법

windows : ipconfig /flushdns

반응형

'이론 정리' 카테고리의 다른 글

한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
TCP/IP  (0) 2018.02.10
Socket / Port  (0) 2018.02.05
반응형

Socket / Port



Socket


엔드 포인트( End-Point )란 아이피 주소와 포트 번호의 조합( ex-127.0.0.1:80 )을 의미합니다. 모든 TCP 연결은 2개의 앤드 포인트로 유일하게 식별되어질 수 있습니다. 소켓이란 이러한 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 끝 부분인 엔드포인트를 의미합니다.

 



port


네트워크 관점 트래픽 분산을 위한 논리적인 할당

프로그램 관점 논리적인 접속장소

즉 포트란 논리적인 접속 공간입니다프로토콜에서는 포트를 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용이 됩니다. 대표적인 예로 HTTP의 웹 응용 프로그램 접속을 위해 클라이언트에서는 80 포트번호를 사용합니다. 



--



예로 http://www.naver.com:80으로 접근하면 DNS에 의해 202.43.54.222 IP가 반환되고 HTTP 프로토콜을 이용하여 반환된 203.43.54.222 IP의 80포트에 매핑된 웹 서비스에 접근을 시도하게 됩니다.


이때 


http://202.43.54.222:80 = Socket

80 = Port Number


즉 Socket은 TCP/IP에서 데이터를 통신하기 위해 필요한 것이고, Port는 데이터 패킷이 들어오는 / 나가는 곳이 됩니다.




+ WebSocket?


HTTP의 단점을 보완하기 위하여 등장한 기술. HTTP는 서버/클라이언트 간 접속을 유지하지 않으며, 한번에 한 방향으로만 통신이 가능한 half-duplex입니다. 또한 헤더에 지나치게 많은 데이터를 가지고 있어 성능저하를 피할 수 없었습니다. HTML5에 포함 되 있는 WebSocket은 이러한 단점을 보완하여 ActiveX를 사용하지 않고도 TCP/IP 소켓통신을 구현할 수 있고, 네트워크의 과부하를 줄일 수 있습니다. 통신의 처음, HTTP로 연결을 완료한 뒤에 HTTP가 내려가고 WebSocket이 올라가 통신을 수행하는 방식으로 동작하여 애플리케이션의 반응성을 높일 수 있게 됩니다.


+ Well-Known Port?


필요에 따라 자주 쓰이는 포트번호들은 IANA(Internet Assigned Numbers Authority)에 의해 약속으로 지정되어 있으며 잘 알려진 포트라고 하여 ‘Well-Known Port’라고 불립니다. Well-Known Port를 사용하지 않는 프로그램들은 매번 접속할 때마다 포트번호가 동적으로 부여됩니다Well-known port number는 0번부터 1023번까지 지정되어 있으며 공석 또한 존재합니다. 특수용도를 위한 지정포트이기 때문에 개인적인 테스트 진행 시 해당 범위의 포트는 사용하지 않는 것이 바람직합니다.

 

포트

TCP

UDP

설명

상태

0

 

UDP

예약됨; 사용하지 않음

공식

1

TCP

 

TCPMUX (TCP 포트 서비스 멀티플렉서)

공식

7

TCP

UDP

ECHO 프로토콜

공식

9

TCP

UDP

DISCARD 프로토콜

공식

13

TCP

UDP

DAYTIME 프로토콜

공식

17

TCP

 

QOTD (Quote of the Day) 프로토콜

공식

19

TCP

UDP

CHARGEN (Character Generator) 프로토콜 - 원격 오류 수정

공식

20

TCP

 

FTP (파일 전송 프로토콜) - 데이터 포트

공식

21

TCP

 

FTP - 제어 포트

공식

22

TCP

 

SSH (Secure Shell) - ssh scp, sftp같은 프로토콜 및 포트 포워딩

공식

23

TCP

 

텔넷 프로토콜 - 암호화되지 않은 텍스트 통신

공식

24

TCP

 

개인메일 시스템

공식

25

TCP

 

SMTP (Simple Mail Transfer Protocol)이메일 전송에 사용

공식

37

TCP

UDP

TIME 프로토콜

공식

49

 

UDP

TACACS 프로토콜

공식

53

TCP

UDP

DNS (Domain Name System)

공식

67

 

UDP

BOOTP (부트스트랩 프로토콜) 서버. DHCP로도 사용

공식

68

 

UDP

BOOTP (부트스트랩 프로토콜) 클라이언트DHCP로도 사용

공식

69

 

UDP

TFTP

공식

70

TCP

 

고퍼 프로토콜

공식

79

TCP

 

Finger 프로토콜

공식

80

TCP

UDP

HTTP (HyperText Transfer Protocol) - 웹 페이지 전송

공식

88

TCP

 

커베로스 - 인증 에이전트

공식

109

TCP

 

POP2 (Post Office Protocol version 2) 전자우편 가져오기에 사용

공식

110

TCP

 

POP3 (Post Office Protocol version 3) 전자우편 가져오기에 사용

공식

111

TCP

UDP

RPC (Remote Procedure Call)

공식

113

TCP

 

ident - 예전 서버 인증 시스템현재는 IRC 서버에서 사용자 인증에 사용

공식

119

TCP

 

NNTP (Network News Transfer Protocol) - 뉴스 그룹 메시지 가져오기에 사용

공식

123

 

UDP

NTP (Network Time Protocol) - 시간 동기화

공식

139

TCP

 

넷바이오스

공식

143

TCP

 

IMAP4 (인터넷 메시지 접근 프로토콜 4) 이메일 가져오기에 사용

공식

161

 

UDP

SNMP (Simple Network Management Protocol) - Agent 포트

공식

162

 

UDP

SNMP - Manager 포트

공식

179

TCP

 

BGP (Border Gateway Protocol)

공식

194

TCP

 

IRC (Internet Relay Chat)

공식

389

TCP

 

LDAP (Lightweight Directory Access Protocol)

공식

443

TCP

 

HTTPS - HTTP over SSL (암호화 전송)

공식

445

TCP

 

Microsoft-DS (액티브 디렉터리, 윈도 공유Sasser-worm, Agobot, Zobotworm)

공식

445

 

UDP

Microsoft-DS SMB 파일 공유

공식

465

TCP

 

SSL 위의 SMTP - Cisco 프로토콜과 충돌

비공식, 충돌

514

 

UDP

syslog 프로토콜 - 시스템 로그 작성

공식

515

TCP

 

LPD 프로토콜 - 라인 프린터 데몬 서비스

공식

540

TCP

 

UUCP (Unix-to-Unix Copy Protocol)

공식

542

TCP

UDP

상용 (Commerce Applications) (RFC maintained by: Randy Epstein [repstein at host.net])

공식

587

TCP

 

email message submission (SMTP) (RFC 2476)

공식

591

TCP

 

파일메이커 6.0 Web Sharing (HTTP Alternate, see port 80)

공식

636

TCP

 

SSL 위의 LDAP (암호화된 전송)

공식

666

TCP

 

id 소프트웨어의  멀티플레이어 게임

공식

873

TCP

 

rsync 파일 동기화 프로토콜

공식

981

TCP

 

SofaWare Technologies Checkpoint Firewall-1 소프트웨어 내장 방화벽의 원격 HTTPS 관리

비공식

990

TCP

 

SSL 위의 FTP (암호화 전송)

공식

993

TCP

 

SSL 위의 IMAP4 (암호화 전송)

공식

995

TCP

 

SSL 위의 POP3 (암호화 전송)

공식

 

출처 https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D



 



반응형

'이론 정리' 카테고리의 다른 글

한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11
TCP/IP  (0) 2018.02.10
DNS  (0) 2018.02.08

+ Recent posts