2016년 10월 23일 일요일

Facade Pattern (퍼사드 패턴)

의도
  • 인터페이스 집합에 대해 하나의 인터페이스를 제공하는 패턴
이럴 때 사용하자.
  • 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때
  • 추상 개념에 대한 구현 클래스와 사용자 사이에 너무 많은 종속성이 존재할 때
  • 서브시스템을 계층화시킬 때
장점은?
  • 클라이언트와 서브 시스템의 연결을 느슨하게 만듦
  • 서브시스템에 접근하는 인터페이스를 제공
  • 단순한 인터페이스로 복잡한 서브시스템을 감쌈
단점은?
  • 다른 구성요소에 대한 메소드 호출을 처리하기 위해 "래퍼"클래스를 많이 만들어야 할 수 있음
  • 시스템이 더 복잡해지고, 개발시간도 늘어나면서 성능의 저하도 있을 수 있음
코드
CExec 클래스
class CExec
{
public:
   CExec(string str) { m_str = str; };
   void Print() { cout << m_str.c_str() << endl; }
private:
   string m_str;
};

CSubClassOne, CSubClassTwoCSubClassThree 클래스
class CSubClassOne
{
public:
   void Exec() {
      auto_ptr<CExec> pExec(new CExec("Sub Class One"));
      pExec->Print();
   };
};

class CSubClassTwo
{
public:
   void Exec() {
      auto_ptr<CExec> pExec(new CExec("Sub Class Two"));
      pExec->Print();
   };
};

class CSubClassThree
{
public:
   void Exec() {
      auto_ptr<CExec> pExec(new CExec("Sub Class Three"));
      pExec->Print();
   };
};

CFacade 클래스
class CFacade
{
public:
   CFacade() {
      m_pSubClassOne = new CSubClassOne();
      m_pSubClassTwo = new CSubClassTwo();
      m_pSubClassThree = new CSubClassThree();
   };

   ~CFacade() {
      delete m_pSubClassOne;
      delete m_pSubClassTwo;
      delete m_pSubClassThree;
   };

   
   void ExecOne() {
      m_pSubClassOne->Exec();
      m_pSubClassTwo->Exec();
   };

   void ExecTwo() {
      m_pSubClassThree->Exec();
   }

private:
   CSubClassOne* m_pSubClassOne;
   CSubClassTwo* m_pSubClassTwo;
   CSubClassThree* m_pSubClassThree;
};

실행부분
void main()
{
   auto_ptr<CFacade> pFacade(new CFacade());
   pFacade->ExecOne();
   pFacade->ExecTwo();
}

UML - class 다이어그램

참고
  • GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
  • http://wooriworld2006.tistory.com/336
  • http://blog.naver.com/ruly2001/70072957308

2016년 10월 21일 금요일

Public, Protected, Private 차이 설명

  • 접근 제어자
구분제어자설명
접근권한public모든 클래스에서 접근이 가능함
protected동일 패키지에 속하는 클래스와 하위 클래스 관계의 클래스에 의해 접근이 가능함
private클래스 내에서만 접근이 가능함

  • 접근 권한
종류클래스하위 클래스동일 클래스모든 클래스
(default)OXOX
publicOOOO
protectedOOOX
privateOXXX
  • 출처
    • http://hyeonstorage.tistory.com/176

2016년 9월 12일 월요일

Spring Security ( PasswordEncoder )

PasswordEncoder 인터페이스 설명
  • org.springframework.security.authentication.encoding.PasswordEncoder
    •  메소드
      • String encodePassword(String rawPass, Object salt)
      • boolean isPasswordValid(String encPass, String rawPass, Object salt)
    • Spring Security 3.1 이후 넘어가면서 deprecated 됨
  • org.springframework.security.crypto.password.PasswordEncoder
    • 메소드
      • String encode(CharSequence rawPass)
      • boolean matches(CharSequence rawPassword, String encodedPassword)
    • 해킹소지가 있는 salt 노출을 방지하기 위해 제거된 듯 보임
    • 기존 인터페이스와 혼동하지 않기 위해 메소드명도 바뀐 듯보임

org.springframework.security.crypto.password.PasswordEncoder 설명
  • org.springframework.security.crypto.bcrypt.BCrytPasswordEncoder
    • bcryto 해시 알고르즘을 이용한 암호화
    • 신규 시스템이면 권장
  • org.springframework.security.crypto.password.NoOpPasswordEncoder
    • 암호화하지 않는 클래스
    • 테스트 용도로만 사용하길 바람
  • org.springframework.security.crypto.password.StandardPasswordEncoder 
    • sha해시 알고르즘을 이용한 암호화 
    • 기존 sha를 사용하고 있었다면 이것을 사용하길 바람
참고
  • http://zgundam.tistory.com/54

2016년 9월 7일 수요일

Spring Security OAuth2 ( TokenStore 설명 )

  • InMemoryTokenStore : 메모리에 저장하는 방식
    • 단일 서버에 사용하기 좋음
    • Low traffic
    • 실패시 hot swap되지 않음
    • 개발시 사용하시 좋음
  • JdbcTokenStore : DB에 저장하는 방식
    • 관계형 DB에 토큰 을 저장
    • 서버확장시 InMemoryTokenStore보다 좋음
  • JwtTokenStore : 토큰에 JSON정보를 인코딩해서 이용하는 방식
    • 토큰을 back end에 저장하지 않음
    • 단점은 access_token 파기가 어려움, 정보가 많으면 토큰길이가 길어짐

2016년 9월 2일 금요일

홍콩&마카오 여행 (2016년8월25일-2016년8월29일)


여행기간(2016.08.25 ~ 2016.08.29) 여행비용(총 비용: 1,000,140원)
  • 해외여행보험자: 14,890원
  • 항공비 (인천~홍콩, 홍콩~인천): 270,000원
  • 환전: 453,370원 (HK$ 3100)
  • 숙박비: 51,523원(Rainbow Lodge 도미토리  - 1박), 84,528원(IBIS Hotel - 1박), 101,142원(에어비엔비 개인실 - 1박), 286,554원(Venetian Hotel - 1박) ==>> 261,880원 / 1명
1일차
  • 공항
  • 유심 80
  • 옥스퍼드 150
  • 버스이동 A35 (15)
  • 시티게이트 아침 24.5
  • 통총 케이블240
  • 불상 입장료 38
  • 버스이동 DB01R (10)
  • 디스커버리배이페리 (40)
  • 옥스퍼드 100 충전
  • 지하철 (9.7)
2일차
  • 아침 58
  • 스타벅스 44
  • 맥주 24
  • 물 9
  • 빅토리아파크 83
  • 엽서 30
  • 맥주 152
  • 물 7.5

3일차
  • 마카오 페리 177
  • 버스 8.5
  • 에그타르트 18
  • 저녁 108
4일차
  • 마카오타워
  • 저녁
5일차 
  • 마카오 페리 153
  • 선물 
  • 점심
  • 간식