본문 바로가기

프로그래밍 놀이터1998

[책 정리] 01-2. 리눅스 쉘 시작하기, 리눅스 배포판 - 리눅스 커맨드라인 쉘 스크립트 바이블 -완전한 리눅스 시스템 패키지를 배포판(distribution)이라고 한다.대부분의 배포판은 비즈니스 사용자, 멀티미디어 마니아, 소프트웨어 개발자, 일반 가정 사용자와 같은 특정한 사용자 집단에 맞춰져 있다.이런 맞춤형 배포판은 특정한 기능을 지원하는 데 필요한 소프트웨어 패키지를 포함하고 있다. -리눅스 배포판은 크게 세 가지 범주로 구분된다.1. 완전한 코어 리눅스 배포판2. 전문화된 배포판3. LiveCD 테스트 배포판 코어 리눅스 배포판 -코어 리눅스 배포판은 커널, 하나 또는 그 이상의 그래픽 테스크톱 환경, 사용할 수 있는 거의 모든 리눅스 앱들을 그 커널에 맞게 컴파일하여 포함하고 있다. 슬랙웨어(Slackware) : 최초의 리눅스 배포판 중 하나로 리눅스 광들에게 인기가 좋다.레드 햇(.. 2020. 4. 20.
[책 정리] 01-1. 리눅스 쉘 시작하기, 리눅스란 무엇인가? - 리눅스 커맨드라인 쉘 스크립트 바이블 리눅스 커널 들여다보기 -커널은 네 가지 주요 기능에 대해 일차적인 책임이 있다. 시스템 메모리 관리 소프트웨어 프로그램 관리 하드웨어 관리 파일시스템 관리 * 시스템 메모리 관리 -물리적 메모리는 물론 가상 메모리도 만들고 관리한다.가상 메모리는 하드 디스크의 공간을 이용하며 이를 스왑 공간(Swap space)라고 한다.커널은 가상 메모리의 내용이 스왑 공간과 실제 물리적 메모리를 오가도록 옮기는 작업을 한다. -메모리의 장소는 페이지라고 하는 단위로 묶여 있다.커널은 물리적 메모리 또는 스왑 공간에 메모리의 각 페이지를 배치한다.커널은 어떤 페이지가 물리적 메모리에 있으며 어떤 페이지가 하드 디스크로 옮겨졌는지를 가리키는 메모리 페이지 테이블을 가지고 있다. -커널은 어떤 메모리 페이지가 사용되었는.. 2020. 4. 19.
[책 정리] 14장. 컴포넌트 결합 - Clean Architecture ADP : 의존성 비순환 원칙 -"컴포넌트 의존성 그래프에 순환(cycle)이 있어서는 안 된다." 개발자가 동일한 소스 파일을 수정하는 환경에서는 숙취 증후군(morning after syndrome)이 발생한다.잘 작동하던 코드가 다음날 작동하지 않는 것이다. 이에 대한 해결책은 두 가지가 있다.한 가지는 "주 단위 빌드(weekly build)"이며, 두 번째 해결책은 '의존성 비순환(Acyclic Dependencies Principle, ADP) 이다. * 주 단위 빌드 (Weekly Build) -개발자 모두 코드를 개인적으로 복사하여 작업하며, 전체적인 기준에서 작업을 어떻게 통합할지는 걱정하지 않는다.그런 후 금요일이 되면 변경된 코드를 모두 통합하여 시스템을 빌드한다.단점은 금요일에 통합.. 2020. 4. 18.
[책 정리] 13장. 컴포넌트 응집도 - Clean Architecture REP : 재사용/릴리스 등가 원칙 -"재사용 단위는 릴리스 단위와 같다."단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성되어야 함을 뜻한다.컴포넌트를 구성하는 모든 모듈은 서로 공유하는 중요한 테마나 목적이 있어야 한다. -하나의 컴포넌트로 묶인 클래스와 모듈은 반드시 함께 릴리스할 수 있어야 한다.하나의 컴포넌트로 묶인 클래스와 모듈은 버전 번호가 같아야 하며, 동일한 릴리스로 추적 관리되고, 동일한 릴리스 문서에 포함되어야 한다. CCP : 공통 폐쇄 원칙 -"동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶어라.서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 분리하라." 이 원칙은 단일 책임 원칙(SRP)을 컴포넌트 관점에서 다시 쓴 것이다.단일 컴포넌트는 변경.. 2020. 4. 17.
[책 정리] 12장. 컴포넌트 - Clean Architecture -SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 설명해준다.대규모 소프트웨어 시스템은 작은 컴포넌트들로 만들어진다. -컴포넌트는 배포 단위다.컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다.자바의 경우 jar 파일이 컴포넌트다. 루비에서는 gem, 닷넷에서는 DLL 이다.컴파일형 언어에서 컴포넌트는 바이너리 파일의 결합체다.인터프리터형 언어의 경우는 소스 파일의 결합체다. -컴포넌트가 마지막에 어떤 형태로 배포되든 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 재배치성 -과거 고정된 메모리 위치에만 라이브러리를 로드할 수 있었다.그래서 앱이 .. 2020. 4. 16.
[책 정리] 11장. DIP : 의존성 역전 원칙 - Clean Architecture -의존성 역전 원칙(DIP)에서 말하는 유연성이 극대화된 시스템이란 소스 코드 의존성이 추상(abstraction)에 의존하며 구체(concrete)에는 의존하지 않는 시스템이다.자바와 같은 정적 타입 언어에서 이 말은 use, import, include 구문은 오직 인터페이스나 추상 클래스 같은 추상적인 선언만을 참조해야 한다는 뜻이다.구체적인 대상에는 절대로 의존해서는 안 된다. DIP 를 논할 때 운영체제나 플랫폼 같이 안전성이 보장된 환경에 대해서는 이를 무시하는 편이다.이들 환경에 대한 의존성은 용납하는데, 변경되지 않는다면 의존할 수 있다는 사실을 이미 알고 있기 때문이다. -우리가 의존하지 않도록 피하고자 하는 것은 바로 변동성이 큰(volatile) 구체적인 요소다.그리고 이 구체적인 요.. 2020. 4. 15.
[책 정리] 10장. ISP : 인터페이스 분리 원칙 - Clean Architecture ISP 와 언어 -정적 타입 언어는 사용자가 import, user 또는 include 같은 타입 선언문을 사용하도록 강제한다.이처럼 소스 코드에 포함된 선언문으로 인해 소스 코드 의존성이 발생하고, 이로 인해 재컴파일 또는 재배포가 강제되는 상황이 무조건 초래된다. 루비나 파이썬 같은 동적 타입 언어에서는 소스 코드에 이러한 선언문이 존재하지 않는다. 대신 런타임 추론이 발생한다.동적 타입 언어를 사용하면 정적 타입 언어를 사용할 때보다 유연하며 결합도가 낮은 시스템을 만들 수 있는 이유가 이 때문이다. ISP 와 아키텍처 -일반적으로, 필요 이상으로 많은 걸 포함하는 모듈에 의존하는 것은 해로운 일이다.소스 코드 의존성의 경우 이는 분명한 사실인데, 불필요한 재컴파일과 재배포를 강제하기 때문이다. 결.. 2020. 4. 14.
[책 정리] 9장. LSP: 리스코프 치환 원칙 - Clean Architecture - 리스코프는 하위 타입(subtype)을 아래와 같이 정의했다. "여기에서 필요한 것은 다음과 같은 치환(substitution)원칙이다. S 타입의 객체 o1 각각에 대응하는 T타입 객체 o2 가 있고, T타입을 이용해서 정의한 모든 프로그램 P 에서 o2 의 자리에 o1 을 치환하더라도 P 의 행위가 변하지 않는다면, S는 T의 하위 타입이다." 상속을 사용하도록 가이드하기 - 사용자가 Interface 를 바라보면서 어떤 하위타입이 사용되는지에 의존하지 않는다면 이것은 LSP 를 준수한다고 볼 수 있다. 정사각형/직사각형 문제 - LSP 를 위반하는 전형적인 문제로는 유명한 정사각형/직사각형 문제가 있다. Squre 가 Rectangle 을 상속하는 경우.. Rectangle r = ... r.s.. 2020. 4. 13.
[책 정리] 8장. OCP: 개방-폐쇄 원칙 - Clean Architecture -개발-폐쇄 원칙(OCP) 는 다음과 같다."소프트웨어 개체(artifact)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.다시 말해 소프트웨어 개체의 행위를 확장할 수 있어야 하지만, 이 때 개체를 변경해서는 안 된다." 소프트웨어 아키텍처를 공부하는 가장 근본적인 이유가 바로 이 때문이다.요구사항을 살짝 확장하는 데 소프트웨어를 엄청나게 수정해야 하면 이는 실패한 아키텍처이다. 사고 실험 -재무제표를 웹 페이지로 보여주는 시스템이 있다고 하자.웹 페이지에 표시되는 데이터는 스크롤 할 수 있고, 음수는 빨간색으로 출력한다.이제 이해관계자가 동일한 정보를 보고서 형태로 변환해서 흑백 프린터로 출력해 달라는 요청이 왔다.이 보고서에는 페이지 번호가 있어야 하고, 페이지마다 저절한 머리글과 바닥.. 2020. 4. 12.