본문 바로가기

IT Book Summary

(80)
Singleton Pattern 싱글턴 패턴 인스턴스가 하나뿐인 특별한 객체를 만들 수 있게 해 주는 패턴. 특정 클래스에 대해서 객체 인스턴스가 하나만 만들어질 수 있도록 한다. 객체 중에 하나만 있어야 하는것이 있다. 예를들면 스레드 풀, 캐시, 대화상자, 레지스트리 설정을 처리하는 객체, 로그 기록용 객체, 디바이스를 위한 디바이스 드라이버 등. 인스턴스가 두개 이상 만들어지면 일관성이 없어지거나 자원을 불필요하게 잡아먹을수 있다. 어떻게 하면 한 클래스의 인스턴스가 두개 이상 만들어지지 않도록 할 수 있을까? 고전적인 싱글턴 패턴 구현법 public class Singleton { // Singletno 클래스의 인스턴스를 저장하기 위한 정적 변수. private static Singleton uniqueInstance; // 생성자를 pr..
데코레이터 패턴 객체 꾸미기 상속을 남용하는 전형적인 예를 살펴보고 객체 작성이라는 형식으로 실행중에 클래스를 꾸미는 (데코레이션) 방법 데코레이터 패턴을 알면 원래 클래스의 코드는 바꾸지 않고도 다른사람이 만든 객체에 새로운 임무를 부여할 수 있다. 스타버즈 커피샵. 다양한 음료들을 모두 포괄하는 주문 시스템. Beverage 클래스는 추상클래스이며 각 서브클래스에서 description 인스턴스 변수와 cost() 를 구현한다. 그러나 다양한 옵션이 추가될경우 가격이 변동되기 때문에 너무 많은 클래스를 만들어야 한다. 그래서 음료에 추가되는 여러 옵션 인스턴트 변수를 추가하자. 추가 요소에 해당하는 Boolean 변수 추가. cost() 를 구현해 기본음료값에 추가비용을 합친 총 가격을 리턴한다. 하지만 추가요소 가..
Observer Pattern 옵저버 패턴 중요한 일이 일어났을때 객체들에게 소식을 알려줄 수 있는 패턴 객체 쪽에서 계속해서 정보를 받을지 여부를 실행중에 결정가능. 일대다 관계와 느슨한 결합 JDK에서 가장 많이 쓰이는 패턴 가운데 하나 Weather-O-Rama 사의 기상 모니터링 애플리케이션 예제 - WeatherData 객체를 사용해 현재조건, 기상통계, 기상예측 세 항목을 디스플레이에 갱신해 보여주는 애플리케이션 기상정보를 수집하는 기상 스테이션과 WeatherData 객체, 기상조건을 보여주는 디스플레이 로 이루어진다. 확인할 수 있는 규격 WeatherData 클래스에는 온도, 습도, 기압 세가지 측정값을 알아내는 Getter 메소드가 있다. 새 기상데이터가 나올때마다 measurementsChanged() 메소드 호출 현재조건, ..
Strategy pattern 스트래티지 패턴 스트래티지 패턴 - 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있게 만든다 - 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 표준적인 객체지향 기법을 사용하여 Duck 수퍼클래스를 만든 후 확장해 여러종류의 오리를 만드는 경우 ->Duck에 메소드 하나가 추가되면 Duck을 상속받은 모든 클래스에 같은 기능을 구현해 주어야 한다. 인터페이스를 활용하자. 서브클래스에서 Flyable, Quaackable 을 구현하도록 할 수 있다. 디자인 원칙 - 애플리케이션에서 달라지는 부분을 찾아내고, 달라지는 부분으로부터 분리 시킨다. - 잘라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 캡슐화 한다. - 시스템의 유연성 향상. 바뀌는 부분과 그렇..
Chapter 10 마이크로서비스의 배포 빌드 및 파이프라인 구축은 실제로 마이크로서비스 아키텍처에서 핵심 부분 중 하나다. 코드를 빌드하고 배포하는데 사용할 메커니즘 자동화 automated 빌드와 배포 프로세스에서 사람이 개입하지 않아야 한다. 빌드 및 머신이미지 프로비저닝, 이후 서비스의 배포 프로세스가 모두 자동화되어야 하며, 소스 저장소에 코드를 커밋하는 동작에서 시작되어야 한다. 반복성 repeatability 빌드 배포 프로세스는 반복가능하고 동일한 작업으로 수행해야 한다. 완전성 complete 배포된 산출물 결과는 서비스를 위한 완전한 런타임 환경을 포함하는 가상머신 컨테이너 이미지 여야 한다. 불변성 immutability 서비스를 포함한 머신 이미지를 빌드하고 배포한 후 런타임 구성을 건드리거나 변경해서는 안됨. 변경이 필요..
Chapter 09 스프링 클라우드 슬루스와 집킨을 이용한 분산추적 분산 디버깅을 할 수 있는 방법 상관관계 ID를 사용해 여러 서비스 사이 트랜젝션 연결 여러 서비스 사이 로그 데이터를 검색가능한 단일소스로 수집 여러 서비스 사이 사용자 트랜잭션 흐름을 시각화 하고 특성을 이해 사용할 수 있는 세가지 기술 스프링 클라우드 슬루스 상관관계 ID 사용해 HTTP호출을 측정하는 스프링 클라우드 프로젝트 페이퍼트레일 여러 데이터소스 로그 데이터를 검색 가능항 단일 데이터서비스로 수집하는 freemium 서비스 집킨 여러 서비스 사이 트랜젝션 흐름 보여주는 오픈소스 기반 데이터 시각화 도구 9.1 스프링 클라우드 슬루스와 상관관계 ID 상관관계ID는 임의로 생성되는 고유한 숫자 또는 문자열로 트랜잭션을 시작할 때 주입됨. 6장에서 주울 필터를 사용해 유입되는 HTTP 요청을 검..
Chapter 08 스프링 클라우드 스트림을 사용한 이벤트 기반 아키텍처 이번에는 비동기 메시지를 사용해 다른 마이크로서비스와 통신하는 스프링기반 마이크로서비스를 설계하고 구현한다. 새로운 점은 메시지를 사용해 상태변화를 표현하는 이벤트로 통신한다는 개념. -> 이벤트 기반 아키텍처 EDA, 메시지 기반 아키텍처 MDA 8.1 메시지와 EDA, 마이크로서비스의 사례 두가지 서비스 라이선싱 서비스와 조직서비스중 운영환경에서 조직 정보를 조회하는 라이선싱 서비스 호출이 오래걸린다. 데이터베이스 액세스 하지않고 조직 데이터 읽기를 캐싱할 수 있으면 응답시간을 줄일 수 있음. 캐싱솔루션 구현 핵심 요구사항 캐싱된 데이터는 라이선싱 서비스의 모든 인스턴스에 일관성이 있어야 함 - 어떤 인스턴스에 접근하더라도 동일한 조직데이터 읽기가 보장되어야 한다 라이선싱 서비스를 호스팅하는 컨테이너..
Chapter 07 마이크로서비스의 보안 사용자를 적절히 통제해 사용자 본인 여부를 확인하고 작업에 대한 권한 여부를 검증. 서비스가 실행되는 인프라스트럭처를 꾸준히 패치하고 최신 상태로 유지해 취약점의 위험을 최소화 서비스는 명확히 정의된 포트로만 접근하고 소수의 인가된 서버만 접근할 수 있도록 네트워크 접근을 통제. 첫번째 항목 마이크로서비스를 호출하는 사용자가 본인인지 인증하는 방법. 특정 마이크로서비스에서 요청한 작업을 수행할 수 있는 권한을 부여받았는지 확인하는 방법. OAuth2는 토큰 기반 보안 프레임워크 스프링 부트와 스프링 클라우드 모두 OAuth2 서비스의 기본구현을 제공 7.1 OAuth2 소개 OAuth2를 구성하는 4개의 컴포넌트 보호자원 적절한 권한을 부여받은 인증된 사용자만 액세스 할 수 있는 자원(마이크로서비스) 자..