기본 JDK 지원 버전 업데이트

  • Spring Framework 5.0 최소 요구 사항 : Java 8
  • 전체 Spring 프레임 워크 5.0 코드베이스는 Java 8에서 실행


Core Framework Revision

  • Java 8 reflection 기반으로 Spring Framework 5.0의 메소드 매개 변수에 효율적으로 액세스 가능
  • 코어 스프링 인터페이스는 이제 Java 8 기본 메소드를 기반으로 선택적 선언을 제공
  • @ Nullable 및 @ NotNull 주석은 nullable 인수 및 반환 값을 명시적으로 표시
    • 런타임에 NullPointerExceptions 대신 컴파일 타임에 Null 값을 처리  가능


Core Container Updates

  • 선택적 주입 포인트에 대한 지표로 @Nullable 어노테이션 지원
  • GenericApplicationContext/AnnotationConfigApplicationContext 함수형 스타일 형태
  • 인터페이스 메소드에서 트랜잭션, 캐싱, 비동기 어노테이션 감지
  • 버전 정보 없는 XML 설정 네임스페이스
  • classpath 스캐닝 대신에 후보 구성 요소 색인 지원


Reactive Programming Model

  • Reactive Stack Web Framework이 핵심
  • 완전히 반응적이고 논 블로킹
  • 소수의 스레드로 확장 할 수있는 이벤트 루프 스타일 처리에 적합
  • Reactive Streams : 
    • Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 및 Spray.io의 엔지니어가 개발 한 API 사양
    • 리액티브 프로그래밍 구현을 위한 공통 API 제공
    • Hibernate,  JPA와 유사. (JPA가 API이고, Hibernate가 구현)
  • Reactive Streams API는 공식적으로 Java 9의 일부
  • Java 8에서는 Reactive Streams API 사양에 대한 종속성을 포함
  • Spring Framework 5.0은 Reactive Streams API 사양을 구현 한 Project Reactor 기반


Spring-webflux - 서버 측 두 가지 프로그래밍 모델을 가짐

  • @Controller와 Spring MVC의 다른 Annotation으로 된 Annotation 기반
  • Java 8 lambda를 사용한 함수형 스타일 라우팅 및 처리


Spring Webflux를 사용하면 RestTemplate의 대안으로 반응적이고 non-blocking적인 WebClient를 만들 수 있음



Kotlin을 사용한 함수형 프로그래밍

  • JetBrains Kotlin 언어 지원
  • Kotlin은 JVM 상단에서 실행되지만 이에 국한되지 않음


테스팅 개선

  • Junit 5 Jupiter 완벽 지원
  • Jupiter 서브 프로젝트는 프로그래밍 및 확장 모델을 제공 할뿐만 아니라 Spring에서 Jupiter 기반 테스트를 실행하는 테스트 엔진을 제공
  • Spring Framework 5는 Spring TestContext Framework에서 병렬 테스트 실행을 지원
  • 리액티브 프로그래밍 모델의 경우 스프링 테스트에는 이제 Spring WebFlux에 대한 테스트 지원을 통합하기위한 WebTestClient가 포함


지원 중단 패키지

  • beans.factory.access
  • jdbc.support.nativejdbc
  • mock.staticmock
  • web.view. tiles2M
  • orm.hibernate3
  • orm.hibernate4


라이브러리 지원 중단

  • Portlet
  • Velocity
  • JasperReports
  • XMLBeans
  • JDO
  • Guava


라이브러리 지원

  • Jackson 2.6+
  • EhCache 2.10+ / 3.0 GA
  • Hibernate 5.0+
  • JDBC 4.0+
  • XmlUnit 2.x+
  • OkHttp 3.x+
  • Netty 4.1+


Summarry

  • 중요한 패러다임 전환 - 리액티브 프로그래밍
  • 스프링 데이터 팀은 이미 MongoDB 및 Redis에 대한 리액티브 프로그래밍을 대응함
  • JDBC 지원 불가(JDBC 스펙 자체가 차단중, 전통적인 JDBC 데이터베이스로 리액티브 프로그램을 보는 것은 현재로서는 불가)
  • Spring Framework 5는 Reactive Streams 표준 API의 구현체인 Reactor를 사용중


Reference

[1] What's new in Spring framework 5(https://springframework.guru/what-is-new-with-spring-framework-5/)

[2] Web on Reactive Stack (https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux)

[3] What's New in the Spring Framework (https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-the-Spring-Framework)

저작자 표시 비영리 변경 금지
신고

Leave a Comment

JVM 메모리 구조 (JVM Memory structure)



  • JAVA Source : 사용자가 작성한 JAVA 코드
  • JAVA Compiler : JAVA 코드를 Byte Code로 변환시켜주는 기능
  • Class Loader : Class파일을 메모리(Runtime Data Area)에 적재하는 기능
  • Execution Engine : Byte Code를 실행 가능하게 해석해주는 기능
  • Runtime Data Area : 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간


Runtime Data Area

Method Area

  • Method Area, Class Area, Code Area, Static Area 로 불리어짐
  • JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(Static 변수), 생성자와 메소드를 저장하는 공간
  • 클래스 파일의 바이트 코드가 로드되는 곳
  • 힙이 아닌 영역 (HotSpot JVM 구현에서)
  • 2개의 주요 공간으로 분리됨
    • Permanent Generation
      • 클래스 정의, 구조, 메소드, 필드, 메소드 (데이터 및 코드) 및 상수로부터 클래스 관련 데이터를 저장
      • -XX : PermSize 및 -XX : MaxPermSize를 사용하여 규제 될 수 있음
      • PermGen 공간이 부족하면 java.lang.OutOfMemoryError가 발생할 수 있음
    • Code Cache
      • 캐시 영역은 컴파일 된 코드를 저장하는 데 사용
      • 컴파일 된 코드는 원시 코드 (하드웨어 고유)일 뿐이며, Oracle HotSpot JVM에 고유 한 JIT (Just In Time) 컴파일러가 처리


Stack

  • Last In First Out (LIFO)
  • 메서드 호출 시마다 각각의 스택프레임(그 메서드만을 위한 공간)이 생성
  • 메서드 안에서 사용되어지는 값들 저장, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장
  • 메서드 수행이 끝나면 프레임별로 삭제


Heap

  • new 연산자로 생성된 객체와 배열을 저장하는 공간
  • 클래스 영역에 로드된 클래스만 생성가능
  • Garbage Collector를 통해 메모리 반환
  • Permanent Generation : 생성된 객체들의 정보의 주소 값이 저장된 공간
  • New Area
    • Eden : 객체들이 최초로 생성되는 공간
    • Survivor : Eden에서 참조되는 객체들이 저장되는 공간
  • Old Area : New Area에서 일정시간이상 참조되고 있는 객체들이 저장되는 공간


Native Method

  • JNI(Java Native Interface)를 통해 호출되는 C/C++ 등의 코드를 수행하기 위한 스택
  • 네이티브 메소드의 매개변수, 지역변수 등을 바이트 코드로 저장
  • 자바 외의 다른 언어에서 제공되는 메서드들이 저장되는 공간

PC Register

  • 현재 수행 중인 JVM 명령 주소를 갖음
  • 프로그램 실행은 CPU에서 인스트럭션(Instruction)을 수행.
  • CPU는 인스트럭션을 수행하는 동안 필요한 정보를 CPU 내 기억장치인 레지스터에 저장
  • 연산 결과값을 메모리에 전달하기 전 저장하는 CPU 내의 기억장치
  • Thread가 생성 될 때마다 생성되는 공간
  • Thread가 어떤 부분을 어떤 명령으로 실행할 지에 대한 기록
  • 현재 실행되는 부분의 명령과 주소를 저장


JAVA8에서 JVM 메모리 모델 변경사항

Perm 영역이 없어지고 Metaspace 공간으로 변경

PermGen 관련 JVM 옵션 (예 : -XX : PermSize 및 -XX : MaxPermSize)는 이제 무시됨

  • Metaspcae
    • 네이티브 힙 메모리의 일부
    • -XX를 사용하여 조정 가능 MetaspaceSize 및 -XX : MaxMetaspaceSize
    • java.lang.OutOfMemoryError : 네이티브 공간이 고갈되면 메타 데이터 공간이 수신



Reference

[1] JVM PergmGen - Where art thou? (https://www.javacodegeeks.com/2014/09/jvm-permgen-where-art-thou.html)

[2] Java Garbage Collection (http://d2.naver.com/helloworld/1329)

[3] RUNTIME DATA AREA - JABVA'S MEMORY MODEL (http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/)

[4] How Garbage Collection works in Java (http://javarevisited.blogspot.kr/2011/04/garbage-collection-in-java.html)

저작자 표시 비영리 변경 금지
신고

Leave a Comment

Transaction

  • 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위
  • 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미
  • 이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 영구성(Durability)을 보장
  • 어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, Logical Units of Work)로 부름


ACID

데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질

  • 원자성(Atomicity)

    • 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력

  • 일관성(Consistency)

    • 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미

  • 고립성(Isolation)

    • 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미

  • 지속성(Durability)

    • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함


BASE

ACID와 대조적으로 가용성과 성능을 중시하는 특성을 가진 분산 시스템의 특성

  • Basically Available
    • 가용성을 중시, Optimistic Locking 및 큐 사용
    • 다수의 실패에도 가용성을 보장, 다수의 스토리지에 복사본 저장
  • Soft-State
    • 노드의 상태는 외부에서 전송된 정보를 통해 결정됨
    • 분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신
  • Eventually Consistent
    • 일시적으로 비일관적인 상태가 되어도 최적으로는 일관성이 있는 상태가 되는 성질


BASE vs ACID

 속성

 BASE

 ACID

 적용분야

 NOSQL

 RDBMS

 범위

 시스템 전체에 대한 특성

 트랜잭션에 한정

 일관성측면

 약한 일관성

 강한 일관성

 중점사항

 Availability

 ‘Commit’에 집중

 시스템측면

 성능에 초점


 엄격한 데이터관리


 효율성

 쿼리디자인이 중요

 테이블 디자인이 중요


Reference

[1] 위키 (https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98)

[2] Ji-Dum (http://www.jidum.com/jidums/view.do?jidumId=906)


저작자 표시 비영리 변경 금지
신고

Leave a Comment

SOLID

  • 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것
  • 애자일 소프트웨어 개발 전반적 전략의 일부


 두문자 

 약어

 개념

 S

 SRP

 단일 책임 원칙 (Single responsibility principle)
 한 클래스는 하나의 책임만 가져야 한다.

 O

 OCP

 개방-폐쇄 원칙 (Open/closed principle)

 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

 L

 LSP

 리스코프 치환 원칙 (Liskov substitution principle)

 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

 I

 ISP

 인터페이스 분리 원칙 (Interface segregation principle)

 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

 D

 DIP

 의존관계 역전 원칙 (Dependency inversion principle)

 추상화에 의존해야지, 구체화에 의존하면 안된다

 의존성 주입은 이 원칙을 따르는 방법 중 하나



OOP 특성

추상화 (Abstraciton)

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것
  • 객체 지향적 관점에서 클래스를 정의하는 것
  • 추상화는 다른 객체들과 구분되는 핵심적인 특징들에만 집중함으로써, 복잡도를 관리할 수 있도록 함

캡슐화 (Encapsulation)

  • 실제로 구현되는 부분을 외부에 드러나지 않도록 캡슐로 감싸 이용방법만을 알려주는것
  • 데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것.
  • 변수와 함수를 하나로 묶는 것
  • 또한 데이터를 절대로 외부에서 직접 접근을 하면 안되고 오로지 함수를 통해서만 접근해야하는데 이를 가능하게 해주는 것
  • 내부를 숨김으로써 내부를 좀더 자유롭게 변경할 수 있게 함
  • 정보 은닉Information Hiding) : 내부의 데이터나 함수를 외부에서 참조하지 못하도록 차단하는 개념 (캡슐화 개념)


상속성, 재사용 (Inheritance)

  • 상위 개념의 특징을 하위 개념이 물려받는 것
  • 재사용으로 인해 코드가 줄어듬
  • 하위 클래스에서 속성이나 오퍼레이션을 다시 정의하지 않고 상속받아서 사용함으로써 코드가 줄어듬


다형성 (Polymorphism)

  • 부모클레스에서 물려받은 가상 함수를 자식 클래스 내에서 오버라이딩 되어 사용되는 것
  • 다형성의 일반적인 의미는 '다양한 형태로 나타날 수 있는 능력'
  • 객체지향에서의 다형성은 '여러 클래스들이 동일한 이름의 오퍼레이션을 서비스하도록 하는 것'
  • 메소드 오버라이딩(Method Overriding) : 상위 클래스에 있고 상속받았으나 하위 클래스에서 다시 정의하는 것 (다형성)
  • 메소드 오버로딩(Method Overloading) : 동일한 이름의 메소드가 여러개 정의되어 있는데 단지, 매개변수의 타입에 따라 서로 구분되는 것 (다형성)


DRY 원칙

  • Don't Repeat Yourself
  • 반복하지 말라는 원칙
  • 중복코드를 만들지 말라는 것





Reference

[1] 위키 (https://ko.wikipedia.org/wiki/SOLID)


저작자 표시 비영리 변경 금지
신고

Leave a Comment

여러가지 자료구조에 대한 비교를 해본다.


Array (배열)

  • 같은 데이터 타입에 대해 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용하는 것을 말한다. 
  • 1차원배열과 다차원 배열이 존재
  • 장점
    • 간단하게 사용 가능
    • 인덱스 통해 빠르게 데이터 접근 가능
  • 단점
    • 저장 공간이 제한적
    • 동적 할당을 통해 새롭게 정의 가능하지만 데이터 이동을 또 해야함





Iterable

  • 이름 그대로 반복할 수 있는지 확인하는 인터페이스
  • 다음과 같은 abstract method를 갖음

 

 boolean hasNext () // 요소가 더 많은 경우 true를 반환합니다.

 E next () // 제네릭 타입 E의 다음 원소를 반환합니다.

 void remove () // 반복자가 반환 한 마지막 요소를 제거합니다.



Collection

  • 모든 콜렉션의 상위 인터페이스
  • Collection이 갖는 핵심 메소드를 선언
  • ex) add, contatin, remove, size, isEmpty, iterator 등


List

  • Collection 인터페이스를 확장한 자료형
  • 순서가 있음
  • 인덱스가 존재
  • 중복을 허용

Vector

Java 1.0 에서 추가

동기화 기능 제공

ArrayList와 거의 동일하지만 동기화 기능에서만 차이를 보임

ArrayList의 구현 버전


ArrayList

  • Java 1.2 에서 추가
  • 동기화 제공되지 않음
  • 내부적으로 데이터를 배열에서 관리
  • 데이터의 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사 하는 방법을 사용
  • 패키지 : java.util
  • 장점 : 검색이 빠름(각 데이터에 대한 인덱스를 가지고 있으므로)
  • 단점 : 대량 데이터 추가/삭제시 느림 (배열의 복사가 빈번하게 발생)


CopyOnWriteArrayList

  • ArrayList와 동일하지만 동기화 지원
  • 동기화를 지원하므로 ArrayList에 비해서는 느림
  • JDK 1.5에서 추가
  • ArrayList는 CopyOnWriteArrayList가 수행 할 수없는 동안 ConcurrentModificationException을 발생
  • package : java.util.concurrent


LinkedList

  • Java 1.2 에서 추가
  • 링크 기반 (데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태를 알고 있는 형태)
  • 장점 : 대량 데이터 추가/삭제가 빠름(위치 정보의 수정만으로 가능)
  • 단점 : 데이터가 많은 경우 검색이 느림 (순차적으로 모든 노드를 조회해야 함)


Stack

LIFO(Last In First Out)구조로 구현된 리스트

스택


Set

  • 중복을 허용하지 않음

HashSet

  • 데이터를 해쉬 테이블에 담는 클래스
  • 순서가 없음


LinkedHashSet

  • 해쉬 테이블에 데이터를 담음
  • 순서가 있음 : 저장된 순서


TreeSet

  • red-black이라는 트리에 데이터를 담음
  • 순서가 있음 : 값에 따라서 정해짐
  • HashSet보다 성능상 느림


Queue

  • FIFO(Firsh In First Out)구조로 구현된 리스트


PrioriryQueue

  • 큐에 추가된 순서와 상관없이 먼저 생성한 객체가 먼저 나옴


LinkedBlockingQueue

  • 선택적으로 저장할 데이터의 크기를 정할 수도 있는 FIFO 기반의 링크 노드를 사용
  • 블로킹 큐


ArrayBlockingQueue

  • 저장되는 데이터의 크기가 정해져 있는 FIFO 기반
  • 블로킹 큐


PriorityBlockingQueue

  • 저장되는 데이터의 크기가 정해져 있지 않음
  • 객체의 생성 순서에 따라서 순서가 저장
  • 블로킹 큐


DelayQueue

  • 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐


SynchronousQueue

  • put() 메소드를 호출하면, 다른 스레드에서 take() 메소드가 호출될 때까지 대기하도록 되어 있는 큐
  • 저장되는 데이터가 없음
  • API에서 제공하는 대부분의 메소드는 0이나 null을 리턴



Blocking Queue

크기가 지정되어 있는 큐에 공간이 더 이상 없을 때, 공간이 생길 때까지 대기하도록 만들어진 큐




Map

Key와 Value 쌍으로 저장되는 자료구조


Hashtable

  • 데이터를 해쉬 테이블에 담는 클래스입니다. 
  • 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있음
  • null 값을 허용하지 않음


HashMap

  • 데이터를 해쉬 테이블에 담는 클래스
  • null 값을 허용
  • 동기화 되어 있지 않음


ConcurrentHashMap

  • HashMap과 동일하지만 동기화 지원
  • JDK 1.5에서 지원
  • 동기화시 hashtable을 절체에 대해 lock을 걸지 않고 조각을 쪼개어 부분 부분 lock을 걸어 성능을 높임
  • null 값을 허용하지 않음
    • 동시성 처리를 위해서 null을 수용할 수 없음

TreeMap

  • red-black 트리에 데이터를 담음
  • 순서가 있음 : 키 값에 따라 정해짐


LinkedHashMap

  • HashMap과 거의 동일
  • 이중 연결 리스트(doubly-linkedlist)를 사용하여 데이터를 담음
  • 순서가 있음 : 넣는 순서에 따라 정해짐





Reference

[1] The Collection Framework https://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html


저작자 표시 비영리 변경 금지
신고

Leave a Comment


TCP (Transmission Control Protocol)

  • 인터넷에서 많이 사용되는 socket 통신 방법
  • 보내야 하는 data를 네트워크가 허용하는 packet의 크기에 맞춰 자동으로 나눠서 보내는 것
  • 잘 보내졌는지 에러 없는지 체크하면서 packet을 잃어버리거나 잘못되지 않도록 검사함
  • 네트워크의 bandwidth에 부하가 생기지 않도록 자동으로 조절되면서 데이타가 보내지고, 주고 받는 데이타의 신뢰도를 보장
  • 전송 속도가 느림
  • 신뢰도 확보가 중요하거나 용량이 큰 데이타를 네트워크를 통해 전달해야 할 때, 실시간일 필요는 없을 때 활용하기 적합


  • UDP (User Datagram Protocol)

  • UDP는 data의 빠른 전송이 특징
  • packet이 잘 전달되었고 에러가 없는지를 매번 검사하지 않음
  • 오버헤드를 최소화한 매우 간단한 구조
  • 비연결형 (connectionless) IP 전달 서비스로 최소한의 신뢰성을 제공
  • 사용하는 경우
    • 단순한 요청-응답을 필요로 하는 프로세스
    • 내부적인 흐름 제어와 오류제어 메커니즘을 가지고 있는 프로세스
    • 멀티캐스팅과 브로드캐스팅을 위한 전송 프로토콜
    • SNMP(Simple Network Management Protocol)와 같은 관리 프로세스
    • 온라인게임이나 대량의 데이터를 신속하게 전달을 요하는 스트리밍 서비스 등



 

 TCP

 UDP 

 프로토콜 연결

 연결지향형 프로토콜

 Connection-oriented protocol


 전송 전에 연결을 해야 함

 비 연결지향형 프로토콜

 Connection-less protocol


 연결 수립 없이 데이터 송신

 애플리케이션 데이터

 입력 인터페이스

 바이트 스트림

 connection by byte stream


 특정한 구조 없이 데이터 송신

 메시지 스트림

 connection by message stream


 데이터를 별도의 패키지로 송신

 흐름제어

 혼잡제어, 흐름제어

 Congestion control, flow control

 혼잡제어, 흐름제어 지원하지 않음

 no congestoin control, flow control

 순서

 순서 보장

 ordered, lower speed

 순서 보장하지 않음
 not ordered, higher speed

 신뢰성, 승인

 메시지 전송을 신뢰함

 모든 데이터에 대한 승인

 신뢰성 없음

 승인 없는 최선 노력 전송 방식

 재전송

 모든 데이터 전송 관리

 손실 데이터 자동 재전송

 재전송 하지 않음

 애플리케이션은 손실 데이터를 탐지하고

 필요할 경우 재전송함

 부하

 낮지만 UDP 보다 높음

 매우 낮음

 전송 속도

 빠르지만 UDP 보다 느림

 매우 빠름

 적합 데이터 양

 소형에서 초대형

 소형에서 중형 (최대 수백 Byte)

 애플리케이션의 유형

 신뢰할 수 있는 방법으로 데이터를 송신

 완전성보다 전달 속도가 중요

 소량의 데이터를 송신

 멀티캐스트/브로트캐스트를 사용

 유명 애플리케이션,프로토콜

 FTP, Telnet, SMTP, DNS, HTTP, POP, IMAP

 DNS, BOOTP, DHCP, TFTP, SNMP, RIP

 패킷

 세그먼트 (Segment)

 데이터그램 (Datagram)







저작자 표시 비영리 변경 금지
신고

'Computer Science > 네트워크 (Network)' 카테고리의 다른 글

TCP vs UDP  (0) 2017.09.30
TCP 3 Way-Handshake & 4 Way-Handshake  (0) 2017.09.30

Leave a Comment


TCP 3-way hand shaking

TCP/IP프로토콜 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 세션을 수립하는 과정

  1. Client > Server : TCP SYN         Server : LISTEN, Client : SYN_SENT
  2. Server > Client : TCP SYN+ACK Server : SYN_RECEIVED
  3. Client > Server : TCP ACK         Server, Client : ESTABLISHED


     SYN : 'synchronize sequence numbers'

     ACK : 'acknowledgment'


출처 : [1] https://notes.shichao.io/unp/ch2/


TCP 4-way Handshaking

세션을 종류하기 위해 수행되는 절차 (FIN, ACK, FIN, ACK 주고받음)

  1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송
  2. 서버는 확인메시지를 보내고 자신의 통신이 끝날때까지 대기 (TIME_WAIT)
  3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 전송
  4. 클라이언트는 확인했다는 메시지 전송


출처 : [1] https://notes.shichao.io/unp/ch2/



TCP State

  • CLOSED 

    • 연결되지 않은 상태

    • 소켓의 초기 시작 상태

    • 연결이 종료됨 (연결 없음)


  • SYN-SENT

    • SYN 세그먼트를 보내고, ACK를 기다리는 상태


  • LISTEN
    • SYN 세그먼트를 기다리며, 대기중인 상태
    • 서버가 SYN 세그먼트를 수신하면, SYN+ACK 세그먼트를 송신하고는 이후, SYN-RECEIVED 상태로 전이됨


  • SYN-RECEIVED

    • SYN 세그먼트(연결 요청)을 받고, 자신의 SYN(즉, SYN+ACK 세그먼트)으로 응답한 상태 

    • 이때부터, 상대방에서 ACK 세그먼트를 기다리는 상태

    • 상대방의 ACK 세그먼트가 수신되면 ESTABLISHED 상태로 전이됨


  • ESTABLISHED

    • 연결 성립 상태

    • 두 종단 간에 양방향 데이터 전송이 가능

    • 종단 각각 자신 및 상대 ISN(초기순서번호)를 알게 됨

    • 양단 간에 TCP 옵션에 의해 부가적인 정보가 전달됨


  • CLOSE-WAIT

    • TCP가 어플리케이션 종료를 기다림

    • 이 상태에서 계속 데이터를 상대에게 보낼 수 있음


  • LAST-ACK

    • 서버는 자신이 송신한 FIN 세그먼트에 대한 ACK 세그먼트를 기다림


  • FIN-WAIT-1

    • 자신이 보낸 FIN 세그먼트에 대한 ACK를 기다리고, 또한 상대측 FIN을 기다림

    • 자신은 더이상 데이터를 보낼 수 없지만, 상대측으로부터 오는 데이터는 계속 가능 상태


  • FIN-WAIT-2

    • FIN 세그먼트를 송신하고, 상대측은 이에 대한 ACK를 송신


  • Closing

    • 상대로부터 FIN 세그먼트를 받고 ACK를 보냈지만, 자신의 FIN 세그먼트에 대한 ACK는 받지못함


  • TIME-WAIT

    • 최대 세그먼트 수명(MSL,Maximum Segment Lifetime)의 2배를 기다림

    • 지정된 시간이 지나면, Closed 상태로 전이됨

    • Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정






Reference

[1] https://notes.shichao.io/unp/ch2/

저작자 표시 비영리 변경 금지
신고

'Computer Science > 네트워크 (Network)' 카테고리의 다른 글

TCP vs UDP  (0) 2017.09.30
TCP 3 Way-Handshake & 4 Way-Handshake  (0) 2017.09.30

Leave a Comment



Open System Interconnection 7 Layer

  • 국제표준화기구(ISO :International Organization for Standardization)에서 개발한 모델
  • 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층을 나누어 설명
  • 더 이상 산업 표준으로 추천하지는 않음
  • OSI 모델이 현존하는 유일 네트워크 모델이 아님
  • 많은 사람들이 TCP/IP 모델로 알려진 미국방성 (DoD) 모델을 더 선호



(이미지 출처 : http://www.escotal.com/osilayer.html)


1계층 물리 계층(Physical Layer)

비트 스트림 (전기적 충격, 빛 또는 무선 신호)을 전기적 및 기계적 수준에서 네트워크를 통해 전달

케이블, 카드 및 물리적 측면 정의를 포함하여 캐리어에서 데이터를 송수신하는 하드웨어 수단을 제공


  • 역할 : 인코딩, 신호 처리, 물리적 데이터 전송, 하드웨어 명세, 토폴로지와 설계
  • 네트워크 지원 계층
  • 데이터 전송 단위 : 비트(bit)
  • 프로토콜 - RS-232, RS-449 등 케이블
  • 장비 - 허브, 리피터
  • 범위 : 로컬 장비 간에 전송된 전기 또는 광 신호


2계층 데이터링크 계층(Data Link Layer)

인접한 통신 장치간의 신뢰성 있는 정보 전송을 보장

데이터 패킷은 인코딩되고 비트로 디코딩

전송 프로토콜 지식 및 관리를 제공하고 물리 계층, 흐름 제어 및 프레임 동기화에서 오류를 처리

MAC (Media Access Control) 계층과 LLC (Logical Link Control) 계층의 두 하위 계층으로 구분

MAC 하위 계층 : 네트워크의 컴퓨터에서 데이터에 대한 액세스 권한과 전송 권한을 제어

LLC 계층 : 프레임 동기화, 흐름 제어 및 오류 검사를 제어


매체 접근 제어(MAC, Media Access Control)

논리적 연결 제어(LLC, Logical Link Control)

데이터 프레이밍(Data Framing)

주소지정 (하드웨어 주소 또는 MAC 주소라 부름)

에러 탐지와 처리


  • 역할 : 논리적 연결 제어, 매체 접근 제어, 데이터 프레이밍, 주소지정, 에러 탐지와 처리, 물리 계층 요구, 사항 정의
  • 네트워크 지원 계층
  • 데이터 전송 단위 : 프레임(frame)
  • 프로토콜 : IEEE 802.2 LLC, 이더넷 관련 프로토콜; 토큰링, FDDICDDI, IDDD 802.11(WLAN, 와이파이), HomePNA, HomeRF, ATM, SLIPPPP
  • 장비 : 브릿지, 스위치
  • 범위 : 로컬 장비 간에 전송된 하위 수준 데이터 메시지


3계층 네트워크 계층(Network Layer)

상위 레벨 데이터를 패킷 안으로 캡슐화하여 데이터 종류에 상관없이 한 호스트에서 다른 호스트로 그 패킷들을 라우팅

데이터는 패킷 안으로 캡슐화되며, 패킷 헤더는 패킷의 송신지와 수신지 주소들을 포함하는 필드를 가짐

노드간에 데이터를 전송하기 위해 가상 회로라고하는 논리 경로를 생성하여 스위칭 및 라우팅 기술을 제공


  • 역할 : 논리적 주소 시정, 라우팅, 데이터그램 캡슐화, 단편화와 재조합, 에러 처리와 진단
  • 네트워크 지원 계층
  • 데이터 전송 단위 - 패킷(packet)
  • 프로토콜 - IP, IPv6, IP NAT, IPsec, 모바일 IP, ICMP, IPX, DLC, PLP, RIPBGP 같은 라우팅 프로토콜
  • 장비 - 라우터
  • 범위 : 로컬 또는 원격 장비 간의 메시지


4계층 전송 계층(Transport Layer)

헤더에 송수신지 포트번호를 포함하여 올바르게 전달 될 수 있게 하는 계층

전체 메시지를 종단 대 종단간 제어와 에러를 관리

패킷의 전송이 유효한지 확인, 전송에 실패된 패킷을 재전송 하는 등 신뢰성 있는 통신을 보장

주소 설정, 오류 제어, 흐름제어, 다중화 수행


  • 역할 : 프로세스 수준 주소 지정, 다중화/역다중화, 연결, 분할과 재조합, 승인과 재전송, 흐름 재어
  • 전송 계층
  • 데이터 전송 단위 - TCP 일 때 Segment / UDP 일 때 Datagram
  • 프로토콜 - TCP, UDP
  • 장비 - 게이트 웨이
  • 범위 : 소프트웨어 프로세스 간의 통신


5계층 세션 계층(Session Layer)

양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공

통신 세션을 구성하며 포트 번호를 기반으로 연결


  • 역할 : 세션 수립, 유지, 종료
  • 사용자 지원 계층
  • 데이터 전송 단위 - 메시지(message)
  • 프로토콜 - NetBIOS, SSH, 소켓, 네임드 파이프(named pipes), RPC
  • 범위 : 로컬 또는 원격 장비 간의 세션


6계층 표현 계층(Presentation Layer)

응용 계층으로부터 받은 데이터를 하위 계층인 세션 계층에 보내기 전 통신에 적당한 형태로 변환

세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 역할을 수행

코드 변환, 구문 검색, 데이터 압축 및 암호화 등의 기능 수행


  • 유형 : 데이터 번역, 압축, 암호화
  • 사용자 지원 계층
  • 데이터 전송 단위 - 메시지(message)
  • 프로토콜 - JPG, MPEG, AFP, PAP
  • 범위 : 애플리케이션 데이터 표현


7계층 응용 계층(Application Layer)

컴퓨터 네트워크 프로그래밍에서 IP 컴퓨터 네트워크를 통하는 프로세스 간 통신 접속을 위해 설계되어 통신 프로토콜과 방식을 위해 보유된 추상 계층

응용 계층 프로토콜은 기반이 되는 전송 계층 프로토콜을 사용하여 호스트 간 연결을 확립

응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행

응용 프로세스 간의 정보 교환, 전자 메일, 파일 전송 등의 서비스를 제공


  • 역할 : 사용자 애플리케이션 서비스
  • 사용자 지원 계층
  • 데이터 전송 단위 - 메시지(message)
  • 프로토콜 : DNS, NFS, BOOTP, DHCP, SNMP, RMON, FTP, TFTP, SMTP, POP3, IMAP, NNTP, HTTP, Telnet  
  • 범위 : 애플리케이션 데이터


저작자 표시 비영리 변경 금지
신고

Leave a Comment


프로세스 (Process)

  • 개념 : 리눅스 등의 멀티 프로세싱 운영체제에서 실행 중인 프로그램에 대한 인스턴스
  • 자원 : 
    • 자신만의 고유 공간과 자원을 할당받아 사용
    • 코드, 데이터, 스택, 힙 영역을 고유하게 가짐

스레드 (Thread)

  • 개념 : 한 프로세스 내에서 동작되는 여러 실행의 흐름
  • 자원 : 
    • 다른 스레드와 공간과 자원을 공유하여 사용
    • 코드, 데이터, 힙 영역을 공유

  • 장점
    • 시스템의 throughput이 향상

    • 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.

      • 전역 변수를 이용하여 규현

    • 프로그램의 응답 시간이 단축

    • 시스템의 자원 소모가 줄어듬

  • 단점

    • 미묘한 시간 차나 잘못된 변수를 공유함으로써 오류가 발생할 수 있음

    • 프로그램 디버깅이 어려움

    • 단일 프로세서 시스템에서는 효과를 기대하기 어려움


컨텐스트 스위칭 (Context Switching)

  • A프로세스가 CPU를 사용 중인 상태에서 B프로세스가 CPU를 사용하기 위해, A프로세스의 상태를 보관하고 B프로세스의 상태를 적재하는 작업
  • Ready 상태인 B 프로세스가 존재하고, Running 상태인 A 프로세스가 존재하는데 인터럽트 요청에 의해 서로 상태가 전이되는 상황
  • CPU 내의 레지스터들(Register Set)에는 현재 실행중인 프로세스의 관련 데이터들이 들어가는데, B 프로세스가 Ready 상태가 되면 현재 레지스터에 저장된 A 프로세스의 데이터들을 메모리 공간에 저장해두고, B 프로세스의 레지스터 값을 메모리에서 CPU로 적재
  • 컨텍스트 스위칭이 일어나는 동안 CPU는 아무런 일을 하지 못하며, 컨텍스트 스위칭은 CPU에 많은 부하를 가져다 줌 (멀티 프로세스 운영체제의 단점)
  • 컨텍스트 스위칭의 시간은 레지스터의 수나 메모리의 속도 등에 좌우됨


스레드가 프로세스보다 빠른 이유

context-switching에는 느리고 시간이 걸리는데 동작중인 스레드가 전환될 때, 스레드는 프로세스와 마찬가지로 컨텍스트 스위칭을 수행한다.

그러나 스레드의 컨텍스트 정보는 프로세스보다 작기 때문에 스레드의 컨텍스트 스위칭은 프로세스의 컨텍스트 스위칭보다 빠르다.



Reference

[1] Process vs Thread (https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html)

[2] Context swithing (https://ko.wikipedia.org/wiki/%EB%AC%B8%EB%A7%A5_%EA%B5%90%ED%99%98)



저작자 표시 비영리 변경 금지
신고

Leave a Comment

64비트와 32비트의 차이


CPU가 사용하는 데이터인 레지스터의 크기 차이

32비트는 4 기가바이트까지

64비트는 16엑사바이트까지


32 Bit 컴퓨터 CPU 레지스터 처리값 32 Bit

64 Bit 컴퓨터 CPU 레지스터 처리값 64 Bit


  • 레지스터(Register)
    • CPU가 사용하는 데이터를 담는 그릇
    • CPU는 레지스터를 이용해서 데이터를 처리
    • 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소

    • 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용

    • 대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후
      그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용

    • 레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리

    • 최신 프로세서에서 레지스터는 대개 레지스터 파일로 구현되지만, 과거에는 플립플롭, 마그네틱 코어, 박막 필름 메모리 등으로 구현하였음


컴퓨터의 메모리나 레지스터가 2의 거듭제곱 크기의 비트로 이루어져 있으므로, 2의 (2의 거듭제곱) 제곱 형태의 수가 자주 나타남


21 = 2
22 = 4
24 = 16
28 = 256
216 = 65,536
232 = 4,294,967,296
264 = 18,446,744,073,709,551,616

    2128 = 340,282,366,920,938,463,463,374,607,431,768,211,456



그래서 32 Bit 컴퓨터는 2의 32승인 4 Giga Byte 까지 사용 가능
          64 Bit 컴퓨터는 2의 64승인 16 Exa Byte 까지 사용 가능



Reference

[1] Register (https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0)

[2] 2의 거듭제곱 (https://ko.wikipedia.org/wiki/2%EC%9D%98_%EA%B1%B0%EB%93%AD%EC%A0%9C%EA%B3%B1)



저작자 표시 비영리 변경 금지
신고

Leave a Comment


to Top