2016년 7월 15일 금요일

JDK 1.4 튜토리얼 - 2장 고급 NIO(New Input/Output) : Charset

CHAPTER 2 - 고급 NIO(New Input/Output) : Charset

2.3 Charset을 이용한 인코딩과 디코딩

Charset는 ByteBuffer <-> CharBuffer에 대한 encoding 와 decoding를 제공 한다.
encoding 과 decoding (** 의미가 반대 느껴 질 수 있음)
  • decoding : 바이트들을 캐릭터로 변환하는 것
  • encoding : 캐릭터을 바이트들로 변환하는 것  
모든 Java 버젼에서 사용 가능한 Charset
이름
정의
US-ASCII
7비트 아스키
ISO-8859-1
ISO 라틴 알파벳, latin-1
UTF-8
8비트 UCS 변환 포맷
UTF-16BE
16비트 UCS 변환 포맷(big-endian)
UTF-16LE
16비트 UCS 변환 포맷(little-endian)
UTF-16
16비트 UCS 변환 포맷(바이트 순서 byte-order 마크 옵션에 의해 결정)
EUC-KR
한글 완성형 인코딩


// 시스템에 가용한 Charset 집합 가져오기
Charset.availableCharsets();
// 별명 집합 가져오기
charset.aliases();
// Charset 객체 생성
Charset charset = Charset.forName("EUC-KR");
인코더 와 디코더 이용
  • CharsetEncoder, CharsetDecoder 클래스 사용
    • newEncoder() , newDecoder() 메소도 호출하여 생성
    • encode(), decode() 사용하여 변환 (ByteBuffer <-> CharBuffer)
  • 다른 charset에서 다른 charset으로도 변환 가능 함.
Charset charset = Charset.forName("EUC-KR");
//디코더 생성
CharsetDecoder decoder = charset.newDecoder();
//ByteBuffer -> CharBuffer (디코딩)
CharBuffer charBuffer = decoder.decode(byteBuffer);
//인코더 생성
CharsetEncoder encoder = charset.newEncoder();
//CharBuffer -> ByteBuffer (인코딩)
ByteBuffer byteBuffer = encoder.encode(charBuffer);
출처 : 인포북 JDK 1.4 Tutorial

2016년 7월 14일 목요일

디자인 패턴 - #5 Integration Tier Patterns

#5 Integration Tier Patterns

  • Data Access Object
  • Service Activator


Data Access Object

  • 패턴명 : Data Access Object
  • 적용 문제
    • 일반적으로 Data자원이라고 하면 RDBMS, Flat 파일, 레거시 시스템등과 같은 다양한 자원을 포함
    • 다양한 자원을 접근하기 위한 방법은 벤더마다 다르다 이것을 사용하는 자원 종류에 따라 코드에 영향을 줄 수 있음
  • 해결방안
    • 데이터를 사용하는 코드의 변화에 영향을 덜 받게 하기 위해 데이터 접근 메커니즘을 분리
    • DB 벤더 중립적
  • 적용 결과
    • 쉬운 마이그레션이 가능
    • 비지니스 객체를 접근하는 코드 복잡성 감소
    • 모든 데이터 접근의 일원화

Service Activator

  • 패턴명 : Service Activator
  • 적용 문제
    • EJB 2.0의 비동기 통신 방법으로 MessageDrivenDean이 제공된다. 하지만 Stateful
      세션빈과 EntityBean은 여전히 사용되어질 수 있다.
  • 해결방안
    • 클라이언트의 비동기 통신을 지원
  • 적용 결과
    • 모든 Enterprise beans의 비동기 처리 가능

출처 - OJTKOREA(링크)

2016년 7월 12일 화요일

디자인 패턴 - #4 Business Tier Patterns

#4 Business Tier Patterns

  • Business Delegate
  • Value Object ( Transfer Object )
  • Session Facade
  • Aggregate Entity ( Composite Entity )
  • Value Object Assembler
  • Value List Handler
  • Service Locator


Business Delegate

  • 패턴명 : Business Delegate
  • 적용 문제
    • 분산 app에서 원격의 component들을 presentation 층에서 직접 접근 할 수 있 수 있는데, 이때
      원격 component들이 수정되면 프리젠테이션 층도 반영 되어야 한다.
  • 해결방안
    • 프리젠테이션 층에서 비즈니스 컴포넌트들을 분리하여 중재자 역할 수행
    • Business Delegate은 분산컴포넌트를 찾고, 예외처리 , View를 선택
  • 적용 결과
    • 의존성 감소
    • 유지보수 증대
    • UI가 간단 정형화

Value Object

  • 패턴명 : Value Object ( Transfer Object )
  • 적용 문제
    • 분산 애플리케이션 환경하에서는 Data 전송을 위한 네트워크 사용이 빈번하게 발생됨
    • 하나의 attribute 값을 전송하기 위해서 다수의 메소드 호출이 발생이 될 수 있음
  • 해결방안
    • 전송해야 하는 attribute들을 저장할 수 있는 Object를 이용
  • 적용 결과
    • 네트워크 Traffic 감소

Session Facade

  • 패턴명 : Session Facade
  • 적용 문제
  • 해결방안
  • 적용 결과
세션 Facade 사용하지 X
세션 Facade 사용함

Aggregate Entity ( Composite Entity )

  • 패턴명 : Aggregate Entity ( Composite Entity )
  • 적용 문제
    • EntityBean는 데이터 베이스의 하나인 record를 표현함. 이때 일반적인 데이터 접근 방법은
      fine-grained
  • 해결방안
    • 종속관계가 있는 비지니스 엔티티를 coarse-grained로 해결
    • 클라이언트에 대한 인터페이스는 coarse-grained로 유지하고, 종속적인 내부관계 에서는 fine-grained로 상호작용한다.
    • EJB1.1 에서는 종속객체는 일반적인 자바클래스로 구현 했으나 EJB2.0 스펙에서는 로컬 EntityBean으로 구현
  • 적용 결과
    • 응답속도 개선
    • 프로그래밍 모델을 단순화
    • EJB 클래스와 코드 감소

Value Object Assembler

  • 패턴명 : Value Object Assembler
  • 적용 문제
    • J2EE의 분산환경에서 client가 server상의 value object를 접근하고자 하면 client는 모든 원격의
      value object를 개별적으로 접근해야 한다.
    • 위 경우 성능 저하, 복잡성 증가, 의존도 증가의 문제가 발생
  • 해결방안
    • 복잡한 데이터를 표현하는 value objet를 포함하는 value object assember를 이용하여 coarse-grained로 동작
  • 적용 결과
    • 비지니스 로직 분리
    • Client와 비즈니스 모델과의 의존도 감소
    • 네트워크 성능 향상
    • Client 복잡성 감소

Value List Handler

  • 패턴명 : Value List Handler
  • 적용 문제
    • J2EE는 일반적으로 검색기능을 포함하며 대량의 데이터를 검색하고 결과를 보여 줌
    • 이 때 대량의 결과를 데이터를 클라이언트에게 리턴하면 클라이언트는 데이터를 추출하는데
      많은 시간이 필요
  • 해결방안
    • 클라이언트에게 대량의 데이터를 한번에 리턴하기 보다는 적은양의 데이트를 여러 번에 걸쳐
      반복적으로 리턴해주는 효율적인 방법을 제공.
    • DAO를 통해 추출된 데이터의 리스트를 캐싱하고 클라이언트에게 데이터를 리턴한다.
      클라이언트는 한페이지만의 리스트 데이터를 볼 수 있다.
  • 적용 결과
    • EJB의 finder 메소드의 overhead를 감소
    • 네트워크 성능 향상

Service Locator

  • 패턴명 : Service Locator
  • 적용 문제
    • JNDI의 자원을 다수의 클라이언트가 접근하고자 할 때 lookup코드가 중복되고 성능도 저하
  • 해결방안
    • 서비스 객체를 찾고, 제어의 포인트를 집중화 시켜서 코드 중복 및 성능 향상
  • 적용 결과
    • 코드 중복 감소
    • 일관된 접근법 제공
    • 성능 향상

출처 - OJTKOREA(링크)