본문 바로가기

분류 전체보기

(129)
운영체제, 리눅스 기초 운영체제 개요 1. 운영체제의 정의 및 목적 역할 정의 - 사용자와 하드웨어간 상호작용을 위한 사용자 인터페이스 user interface를 제공하는 시스템 소프트웨어 - CPU 중앙처리장치, 메모리 및 주변장치 등 하드웨어를 관리 - 응용프로그램이 동작할수 있는 환경, 프로그래밍 인터페이스를 제공. 목적 - 일의 처리능력 Throughput 향상을 목적으로 함. - 결과가 얻어질때까지 응답시간 Turnaround 최소화를 목적으로 함. - 주어진 문제를 정확하게 처리하는 신뢰도의 향상 - 이용할 수 있는 시스템 자원이 어느정도인지 사용가능도의 향상. - 사용자의 활동에 간섭하지 않는 비간섭. 역할 - 하드웨어 접근이 용의하도록 제어, 입력, 출력 등의 관리를 수행 - 한정된 하드웨어 자원을 다수의 이용..
Chapter 16 CompletableFuture : 안정적 비동기 프로그래밍 병렬을 구현하는 두가지 방식 - 병렬 스트림과 포크/조인 기법을 이용해 컬렉션을 반복 - 분할, 정복 알고리즘을 활용하는 프로그램에서 높은 수준의 병렬을 적용 자바8, 자바9 에서는 CompletableFuture와 리액티브 프로그래밍 패러다임 두가지 API를 제공한다. 자바8에서 제공하는 Future의 구현 CompatableFuture이 비동기 프로그램에 도움을 준다. 16.1 Future의 단순 활용 비동기 계산을 모델링하는데 Future를 이용할 수 있고 Future는 계산이 끝났을때 결과에 접근할 수 있는 참조를 제공한다. 시간이 걸리는 작업을 Future 내부로 설정하면 호출자 스레드가 결과를 기다리는 동안 다른 유용한 작업을 수행할 수 있다. 오래걸리는 작업을 Callable 객체 내부로 감..
Chapter 05 나쁜상황에 대비한 스프링 클라우드와 넷플릭스 히스트릭스의 클라이언트 회복성 패턴 서비스하나가 충돌할때 그것을 감지하기는 쉽지만 느려질때 성능 저하를 감지하고 우회하는 것이 어려운 이유 서비스 저하는 간헐적으로 발생 확산 가능 원격서비스 호출은 대개 동기식이며 오래 걸리는 호출을 중단하지 않음 애플리케이션은 대개 부분적 저하가 아닌 원격 자원의 완전한 장애를 처리하도록 설계됨 (서비스가 완전히 실패하지 않으나 기능이 저하된채로 동작하게 됨) 5.1 클라이언트 회복성 패턴이란? -> 원격 서비스가 에러를 던지거나 제대로 동작하지 못해 원격 자원의 접근 실패시, 원격자원을 호출하는 클라이언트의 충돌을 막는데 초점을 맞춘다. 회복성 패턴의 네가지 1 - 클라이언트 측 부하분산 client-side load balancing -> 클라이언트가 넷플릭스 유레카 같은 서비스 디스커버리 에이전트를..
Chapter 04 서비스 디스커버리 4.1 서비스 위치 찾기 클라우드가 아닌 환경에서 서비스 위치 확인은 대개 DNS와 네트워크 로드 밸런서로 해결하였다. 정적서버 그룹에서 실행되는 소수 서비스의 경우 - 서비스 소비자에게 요청 - 로드밸런서는 액서스 경로를 기반으로 라우팅 테이블에서 물리적 주소 찾음 - 해당 서비스를 호스팅하는 서버목록에서 하나를 선택해 요청 전달 - 보조 밸런서가 유휴상태로 대기. 주 로드 밸랜서가 정상인지 핑으로 확인 - 정상이 아니면 보조 로드밸런서가 활성화. 두 로드 밸런서의 IP 주소를 인수해 요청을 처리. 클라우드 기반의 마이크로서비스 앱에서 잘 작동하지 못하는 이유 단일 장애 지점 - 하나의 로드밸런서에 의존, 병목지점이 될 가능성 수평 확장의 제약성 - 하드웨어 제약으로 수평확장 제약 정적관리 - 신속히 ..
Chapter 15 CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 최근 개발방법을 획기적으로 변화하게 만든 두가지 추세가 있다. 하나는 병렬실행 두번째는 마이크로서비스 아키텍처 이다. 멀티코어 프로세서가 발전하면서 애플리케이션 속도는 멀티코어 프로세서를 활용할 수 있도록 소프트웨어를 개발하는가에 따라 달라질 수 있다. 한개의 큰 태스크를 개별 하위태스크로 분리해 병렬로 실행할 수 있고, 포크/조인 프레임워크 나 병렬스트림으로 병렬실행을 달성할 수 있다. 마이크로서비스로 인해 서비스가 작아진 대신 네트워크 통신이 증가했다. 공개 API를 통해 더 많은 인터넷 서비스를 접할수 있게 되었고, 독립적으로 동작하는 웹사이트나 네트워크 애플리케이션을 찾아보기 힘들다. 앞으로는 다양한 소스의 콘텐츠를 가져와 합쳐서 만드는 메시업 mashup 형태의 웹 애플리케이션이 많이 등장할 것..
Chapter 14 자바 모듈 시스템 자바9에서 가장 많이 거론되는 새로운 기능이다. 모듈시스템은 Jigsaw 프로젝트 내부에서 개발된 십년이 걸린 기능. 14.1 압력: 소프트웨어 유추 1 - 관심사 분리 Separation of Concern 은 컴퓨터 프로그램을 고유의 기능으로 나누는 동작을 권장하는 원칙 만약 회계프로그램을 작성한다고 하면, SoC를 적용하여 파싱, 분석, 레포트 기능을 모듈 각각으로 서로 겹치지 않는 코드그룹으로 분리 가능하다. 클래스를 그룹화한 모듈을 이용해 어플리케이션의 클래스간의 관계를 시각적으로 보여줄 수 있다. 개별 기능을 따로 작업할 수 있고 팀이 쉽게 협업한다 개별 부분을 재사용하기 쉽다 전체 시스템을 쉽게 유지보수 할 수 있다. 2 - 정보 은닉 세부구현을 숨기도록 장려하는 원칙 이 원칙이 중요한 이유..
Chapter 03 스프링 클라우드 컨피그 서버로 구성 관리 구성정보를 저장하기 위해 저수준의 프로퍼티 파일 (YAML, JSON, XML)을 이용한다. 대부분 구성파일을 소스 관리 시스템에 넣거나 애플리케이션 일부로 배포하는 일 외에는 애플리케이션 구성을 위한 운영작업은 하지 않는다. 하지만 많은 마이크로서비스가 운영되는 상황에서는 어떤 구성파일을 어디에 배치할지가 중요한 문제가 된다. 배포되는 실제 코드에서 애플리케이션 구성을 완전히 분리 서버 및 애플리케이션을 빌드하고 배포환경에 따라 바뀌지 않는 불변이미지를 빌드 서버를 시작할 때 환경변수나 애플리케이션의 마이크로서비스가 읽어 올 수 있는 중앙저장소를 이용해 애플리케이션 구성정보를 주입 3.1 구성(그리고 복잡성) 관리 마이크로서비스 인스턴스는 사람이 최소한으로 개입해 신속하게 시작해야 한다. 따라서 사람이..
Chapter 13 디폴트 메서드 인터페이스 메서드 추가 해야한다면 그것을 구현하는 모든 클래스도 수정해야 하는데 자바8 에서 새로 추가된 기능이 이 문제를 간단히 해결가능하게 한다. 인터페이스 내부 정적 메서드를 사용하거나 기본구현을 제공할 수 있도록 디폴트 메서드를 사용하는 것이다. 이렇게 하면 기존의 코드 구현을 바꾸도록 강요하지 않고 인터페이스를 바꿀 수 있다. 그렇다면 인터페이스와 추상클래스의 차이가 무엇인가? 디폴트 메서드는 주로 라이브러리 설계자 들이 사용한다. 이것은 다중상속 동작이라는 유연성을 제공하면서 프로그램 구성에 도움을 준다. 정적 메서드와 인터페이스 보통 자바는 인터페이스 그리고 인터페이스의 인스턴스를 활용할 수 있는 다양한 정적메서드를 정의하는 유틸리티 클래스를 활용한다. ex) Collections는 Coll..