본문 바로가기

프로그래밍 놀이터1979

[책 정리] 6장. 함수형 프로그래밍 - Clean Architecture 정수를 제곱하기 -함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 -경합 조건(race condition), 교착 상태(dealock) 조건, 동시 업데이트(concurrent update) 문제가 모두 가변 변수로 인해 발생한다.우리가 동시성 앱에서 마주치는 모든 문제, 즉 다수의 스레드와 프로세스를 사용하는 앱에서 마주치는 모든 문제는 가변 변수가 없다면 절대로 생기지 않는다. -아키텍트라면 동시성(concurrency)문제에 지대한 관심을 가져야만 한다.우리는 스레드와 프로세스가 여러 개인 상황에서도 설계한 시스템이 여전히 강건하기를 바란다. 가변성의 분리 -불변성과 관련하여 가장 주요한 타협 중 하나는 앱 또는 앱 내부의 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리하는 일이다.상태 변.. 2020. 4. 10.
[책 정리] 5장. 객체 지향 프로그래밍 - Clean Architecture -좋은 아키텍처를 만드는 일은 객체 지향(Object-oriented) 설계 원칙을 이해하고 응용하는 데서 출발한다. 캡슐화? -OO 프로그래밍은 프로그래머가 충분히 올바르게 행동함으로써 캡슐화된 데이터를 우회해서 사용하지 않을 거라는 믿음을 기반으로 한다.OO 를 제공한다고 주장한 언어들이 실제로는 C언어에서 누렸던 완벽한 캡슐화를 약화시켜 온 것은 틀림없다. 상속? -OO 언어가 더 나은 캡슐화를 제공하지는 못했지만, 상속만큼은 OO 언어가 확실히 제공했다.하지만 상속이란 단순히 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의하는 일에 불과하다.OO 언어가 완전히 새로운 개념을 만들지는 못했지만, 데이터 구조에 가면을 씌우는 일을 상당히 편리한 방식으로 제공했다고 볼 수는 있다. 다형성? -함수.. 2020. 4. 9.
[책 정리] 4장. 구조적 프로그래밍 - Clean Architecture 증명 -goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는 사실을 발견했다.만약 모듈을 분해할 수 없다면, 합리적으로 증명할 때 필수적인 기법인 분할 정복 접근법을 사용할 수 없게 된다. -모든 프로그램을 순차(sequence), 분기(selection), 반복(iteration)이라는 세 가지 구조만으로 표현할 수 있다. 해로운 성명서 기능적 분해 -구조적 프로그래밍을 통해 모듈을 증명 가능한 더 작은 단위로 재귀적으로 분해할 수 있게 되었고, 이는 결국 모듈을 기능적으로 분해할 수 있음을 뜻했다.프로그래머는 대규모 시스템을 모듈과 컴포넌트로 나눌 수 있고, 더 나아가 모듈과 컴포넌트는 입증할 수 있는 아주 작은 기능들로 세분화될 수 있다. 엄밀한 증명은 없었다.. 2020. 4. 8.
[책 정리] 3장. 패러다임 개요 - Clean Architecture 구조적 프로그래밍 -구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍 -객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. 함수형 프로그래밍 -함수형 프로그래밍은 할당문에 대해 규칙을 부과한다. 생각할 거리 -각 패러다임은 프로그래머에게서 권한을 박탈한다.어느 패러다임도 새로운 권한을 부여하지 않는다.각 패러다임은 부정적인 의도를 가지는 일종의 추가적인 규칙을 부과한다.즉, 패러다임은 무엇을 해야 할지를 말하기보다는 무엇을 해서는 안 되는지를 말해준다. -프로그래밍 패러다임은 앞으로도 딱 세 가지밖에 없을 것이다.최소한 부정적인 의도를 가진 패러다임으로는 이 세 가지가 전부일 것이다. 결론 -세 가지 페러다임과 아키텍처의 세 가지 큰 관심사(.. 2020. 4. 7.
[책 정리] 2장. 두 가지 가치에 대한 이야기 - Clean Architecture -모든 소프트웨어 시스템은 이해관계자에게 서로 다른 두 가지 가치를 제공한다.행위(behavior)와 구조(structure)가 바로 그것이다.소프트웨어 개발자는 두 가치를 모두 반드시 높게 유지해야 하는 책임을 진다. 행위 아키텍처 -소프트웨어는 '부드러움을 지니도록' 만들어졌다.소프트웨어는 기계의 행위를 쉽게 변경할 수 있어야 한다.만약 기계의 행위를 바꾸는 일을 어렵게 만들고자 했다면, 우리는 소프트웨어가 아니라 하드웨어라 불렀을 것이다. -소프트웨어가 가진 본연의 목적을 추구하려면 소프트웨어는 반드시 '부드러워'야 한다.다시 말해 변경하기 쉬워야 한다.이해관계자가 기능에 대한 생각을 바꾸면, 이러한 변경사항을 간단하고 쉽게 적용할 수 있어야 한다.이러한 변경사항을 적용하는 데 드는 어려움은 변경되.. 2020. 4. 6.
[책 정리] 1장. 설계와 아키텍처란? - Clean Architecture -프로그램을 동작하게 만들기는 그리 어려운 일이 아니다.하지만 프로그램을 제대로 만드는 일은 전혀 다르다. 올바르게 만드는 일은 어렵다. -설계와 아키텍처의 차이는 무엇인가? 둘 사이에는 아무런 차이가 없다.아키텍처는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용되는 반면, (비유 : 집의 형태, 외관, 입면도, 공간, 방의 배치)설계는 저수준의 구조 또는 결정사항 등을 의미할 때가 많다. (비유 : 콘센트, 전등 스위치, 전등, 보일러, 온수기와 배출 펌프의 크기와 위치 등)하지만 결국은 무의미하다. 둘은 같다. 목표는? -소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다.설계 품질을 재는 척도는 고객의 요구를 만족시키는 데 드.. 2020. 4. 5.
[Docker] 클라우드를 사용한 Docker 실행 환경의 운용 관리 [Docker] 클라우드를 사용한 Docker 실행 환경의 운용 관리 10.1. 시스템 운용의 기초 지식 * 가용성 관리 - 가용성이란 시스템을 계속해서 가동시킬 수 있는 능력을 말한다. 가용성이 높은 시스템을 만들기 위한 대표적인 기술 요소로 다중화가 있다. 다중화랑 만일 장애가 발생해도 시스템 전체가 정지되지 않도록 하는 기술 요소를 말한다. - 콜드 스탠바이 방식 구성이나 설정이 똑같은 서버나 네트워크 기기를 미리 백업 기기로 마련해 두고, 실제 환경과 가까운 장소에 설치하여 전원을 꺼 둔다. 실 기기에 장애가 발생하면 백업 기기에 전원을 넣고, 실제 환경의 기기와 통째로 교체한다. 소규모 온프레이스 환경 등에서 자주 택하는 방식이다. 중요한 것은 실제 환경 기기와 백업 기기는 완전히 똑같이 설정해.. 2020. 3. 29.
[Docker] 클라우드를 사용한 Docker 실행 환경 구축 [Docker] 클라우드를 사용한 Docker 실행 환경 구축 -Docker 는 이미지만 있으면 동일한 인프라 환경에서 작동하는 앱을 가동시킬 수 있다.Docker 를 사용하면 온프레미스부터 프라이빗 클라우드, 퍼블릭 클라우드, 하이브리드 클라우드에 이르기까지 실행 환경을 요구사항에 맞춰 자유롭게 선택할 수 있다.앱에 대한 이러한 높은 이식성이 Docker 의 최대 매력이라고 할 수 있다. 9.1. 클라우드 환경에서 Docker 오케스트레이션 하기 * 분산 환경에서의 컨테이너 운용 관리 -멀티호스트로 구성된 실제 환경을 클러스터 구성으로 가동시키려면 컨테이너의 시작 및 정지와 같은 조작뿐만 아니라 호스트 간의 네트워크 연결이나 스토리지 관리, 컨테이너를 어떤 호스트에서 가동시킬지와 같은 스케줄링 기능이 .. 2020. 3. 28.
[Docker] 멀티호스트 환경에서 Docker 실행 환경 구축 [Docker] 멀티호스트 환경에서 Docker 실행 환경 구축 -Docker 에서 작동하는 웹 앱을 제품 환경에서 운용할 때는 앱이 사양대로 올바르게 작동할 뿐만 아니라 서비스 이용자가 항상 이용할 수 있도록 운용 관리를 해야 한다.이러한 컨테이너 기반은 보통 멀티호스트 환경으로 구축한다. 8.1. 멀티호스트 환경에서 컨테이너 관리의 개요 -웹 시스템의 실행 환경은 웹 서버, 프록시 서버, 데이터 스토어 등 역할이 다른 여러 개의 서버 기능이 연계되어 작동한다. * 멀티호스트 환경과 클러스터링 -시스템의 일부에서 장애가 발생해도 서비스가 정지되지 않도록 만드는 장치가 필요하다.이를 구현하는 기술 중 하나로 클러스터링이 있다.클러스터링은 여러 대의 서버나 하드웨어를 모아서 한 대처럼 보이게 하는 기술이다.. 2020. 3. 27.