목록CS 지식 (87)
Taking baby-developer steps
데이터베이스(DB) 구조화된 데이터를 저장하고 관리하는 시스템. 논리적인 데이터 구조 및 데이저 조작을 담당한다. 효율적인 데이터 조작을 위한 쿼리 언어(SQL 등)를 지원하며, 데이터의 무결성을 유지하고 보안을 제공하는 등의 기능을 수행한다. ex> MySQL, PostgreSQL, Oracle 등 저장소(스토리지) 데이터의 물리적인 저장 공간. 데이터베이스에서 사용되는 실제 데이터 파일, 로그 파일 등을 저장하는 데 사용된다. 데이터베이스는 저장소를 효과적으로 활용해 데이터를 읽고 쓰고 관리한다. ex> 하드 디스크 드라이브(HDD), SSD, 클라우드 스토리지 등 현업에서는 데이터베이스 서버의 스토리지를 따로 두는 경우가 흔하다는 말을 들었다. 순간 DB와 스토리지의 차이를 내가 명확하게 알고 있지..
쿠버네티스는 마스터 노드와 워커노드라는 두 가지 유형의 노드로 구성된다. 마스터 노드와 워커노드로 구성된 쿠버네티스 시스템을 클러스터라고 한다. 클러스터는 사람이 개입하지 않아도 마스터 노드에 설정된 내용에 따라 워커 노드를 관리하며 자율적으로 동작한다. 마스터 노드 전체적인 제어를 담당한다. 마스터 노드에서는 컨테이너를 실행하지는 않는다. 워커 노드에서 실행되는 컨테이너를 관리한다. 마스터 노드의 초기 설정후 조정만 하면 관리자가 직접 워커 노드를 관리하지 않는다. 워커노드 실제 서버에 해당한다. 컨테이너가 실제 동작하는 서버이다. 설치 프로그램 쿠버네티스를 사용하려면 1. 쿠버네티스 소프트웨어 2. CNI(Container Networking Interface, 가상 네트워크 드라이버) 3. etcd..
역할(role)이 왜 필요할까 협력 안에서 어떤 객체가 "수행하는 책임의 집합"은 "수행하는 역할"을 의미한다. 역할과 객체 자체는 어떻게 다를까? 역할은 재사용성을 높이고 유연한 객체지향 설계를 돕는다. 맨 처음 손님이 카페에서 커피를 주문하는 협력과정을 다시 떠올려보자. 손님이 캐셔에게 음료 주문을 요청하고, 캐셔가 바리스타에게 음료 제조 요청을 보낸다. 바리스타는 음료를 제조함으로써 캐셔의 요청에 응답하고, 캐셔는 손님에게 음료가 완성되었음을 알림으로서 응답한다. 이때, 손님이 김철수일 때와 Elin일 때, 캐셔가 박고슴일때와 Nate일 때 이 협력의 과정이 다르지 않다. 모두 "캐셔", "바리스타", "손님"이라는 역할을 할 수 있다면 해당 자리를 어떤 객체라도 대신할 수 있다. 이는 협력을 추상..
쿠버네티스 컨테이너 오케스트레이션 도구의 일종이다. k8s라고 줄여쓰기도 한다.(k와 s 사이 8개 글자가 있다는 의미) 여러개의 컨테이너(=서버)를 관리하는 도구이기에 대규모 시스템에 적용되는 경우가 많다. 쿠버네티스로 관리되는 시스템은 이를 전제로 개발되어야한다. 쿠버네티스는 여러 대의 물리적 서버가 존재하는 것을 전제로 한다. 도커 컴포즈를 사용한다고 해도, 물리적 서버가 여러 대라면 반복 작업을 해야한다. 또 물리적 서버를 일일이 모니터링하는 것도 큰 수고가 따른다. 이런 상황에서 쿠버네티스는 컨테이너의 생성 및 관리를 편하게 하는 도구이다. 정의 파일(매니페스트 파일)만 작성하면 이 정의에 따라 모든 물리적 서버에 컨테이너를 생성하고, 생성한 컨테이너를 관리한다. 참고문헌 : 그림과 실습으로 배..
객체가 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우, 해당 객체는 책임을 가진다. 책임을 객체에 잘 할당하는 것은 객체지향 설계에서 중요하다. 책임 객체에 의해 정의되는 응집도 있는 행위의 집합이다. 객체의 책임은 "객체가 무엇을 알고 있는가(knowing)"와 무엇을 할 수 있는가(doing)"로 구성된다. 각 객체가 명확한 책임을 가지는 것이 좋다. 책임은 객체의 공용 인터페이스(public interface)를 구성하는데, 이는 객체 지향의 중요한 원리 중 하나인 캡슐화와 깊은 관련이 있다. 책임과 메시지 협력 내의 객체는 다른 객체로부터 요청이 전송됐을 경우에만 자신의 책임을 수행한다. 한 객체가 다른 객체에게 주어진 책임을 다하라고 요청 보내는 것을 메시지 전송(mes..
협력이라는 문맥(context)이 객체의 행동 방식을 결정한다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 객체 하나만 따로 떼어놓고 봤을 때 겉모습이 다소 비합리적이더라도, 조화를 이루고 적극적으로 협력하는 객체를 창조하는 것이 훨씬 중요하다. 객체 하나의 행동이나 상태가 아닌, 객체들 간의 협력에 집중하라. 협력 협력은 다수의 연쇄적 요청과 응답의 흐름으로 구성된다. 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 요청받은 사람은 일은 처리하고 요청한 사람에게 지식 혹은 서비스 제공하는 것으로 요청에 응답한다. 어떤 사람이 특정 요청을 받아들일 수 있는 이유는, 그 요청에 대한 적절한 방식으로 응답할 수 있는 지..
타입의 목적 왜 타입을 사용해야 할까? 객체가 시간에 따라 동적으로 변화할 때 요긴하게 쓰인다. 타입을 사용하면 동적으로 변하는 객체의 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 한다. 타입은 결국 추상화다 타입은 추상화로 볼 수 있다. 객체에서 불필요한 특정 시간, 상태 변화를 제거하고 정적인 관점에서 객체를 표현할 수 있게 된다. 예를 들어 객체 작가는 "글을 쓴다, 글을 퇴고한다, 글을 삭제한다, 밥을 먹는다"의 행동을 할 수 있다. 작가는 "허기짐"의 상태를 가진다. 앞에서 서술한 작가의 행동 및 상태만으로 객체를 표현할 수 있었다. 이는 시간에 따른 상태변경이 배제된 단순화된 효과적 방법이다. 동적 모델, 정적 모델 스냅샷(snapshot) -> 어떤 객체가 특정 시점에 구체적으로 어떤..
타입의 계층 강아지는 꼬리를 흔들고 물을 마시고 산책을 한다. 골든 리트리버는 강아지의 행동에 더해 물을 보면 돌진해 들어가고, 사람이라면 모두 반기고, 입에 무언가 물고 다닌다. (객체를 결정하는 것은 행동이므로 행동 위주로 썼다) 골든 리트리버는 강아지이기도 하다. 골든 리트리버 타입의 외연(집합)은 강아지의 외연의 부분집합인 셈이다. 골든 리트리버는 강아지 보다 좀 더 특화된 행동을 하는 특수한 개념이다. 일반화/특수화 관계(generalization / specialization) 일반화와 특수화는 동시에 일어난다. 이 때 중요한 것은 일반화/특수화 관계 역시 객체의 "행동"에 의해 결정 된다. 일반화/특수화 관계가 성립하려면 한 타입이 다른 타입보다 더 특수하게/일반적으로 행동해야한다. 일반적인..
스프링에서 중요한 콘셉트로는 제어의 역전(IoC)과 의존성 주입(DI)이 있다. IoC(Inversion of Control) 스프링 컨테이너가 객체를 관리할 때, 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다. DI(Dependency Injection) IoC를 구현하기 위해 사용하는 방법. 스프링 컨테이너에서 객체를 주입해서 사용한다. 일반적인 자바 코드는 클래스 내에서 어떤 객체를 쓰고 싶은 경우 직접 생성하지만, 스프링의 경우 스프링 컨테이너에서 객체를 주입받아 사용한다. 이것을 IoC/DI 개념이라고 하며 스프링의 핵심 개념이라고 할 만큼 중요하다. 스프링 컨테이너는 뭘까? 빈을 생성하고 관리하는 주체. 빈이 생성되고 소멸하기까지의 생명주기를 관리한다. 빈은 뭔데? 스프링 컨테이너가 생..
타입은 개념이다 어떤 객체에 타입을 적용할 수 있을 때 그 객체를 타입의 인스턴스라고 한다. 개념과 마찬가지로 심볼, 내연, 외연을 이용해 표현할 수 있다. 근본적으로는 개념과 동일 하지만 이를 컴퓨터로 옮기면서 다음과 같은 형태로 나타낸다. 데이터 타입 컴퓨터는 0, 1만으로 데이터를 저장한다. 이에 의미를 부여하기 위해 우리는 "타입 시스템(type system)"을 만들었다. 타입 시스템은 0과 1만으로 이루어진 데이터를 목적에 따라 분류하기 위해 만들었다. 이를 통해 메모리 안에 저장된 0과 1에 대해 '수행가능한 작업'과 '불가능한 작업'을 구분해 데이터가 잘못 사용되는 것을 방지한다. 데이터 타입은 "종류를 분류"하는데 사용하는 메타데이터이다. 데이터에 대한 분류는 어떤 종류의 연산을 수행 할..