목록Computer Science (29)
without haste but without rest
파이썬 클린코드 SRP - Single Reponsibility Principle 소프트웨어 컴포넌트가 단 하나의 책임을 져야한다는 원칙이다. 즉 클래스는 하나의 구체적인 일만을 담당한다. 따라서 도메인의 문제가 변경되면 클래스를 변경하게 되며 그 이외의 이유로 클래스를 수정해야한다면 추상화가 잘못 되어서 클래스에 너무 많은 책임이 있다는 것을 뜻한다. SRP를 지키지 않은 예 class SystemMoniter: def load_activity(self): """ 소스에서 처리할 이벤트를 가져오기""" def identify_events(self): """ 가져온 데이터를 파싱해서 도메인""" def stream_events(self): """파싱한 이벤트를 외부 에이전트로 전송""" 이 클래스의 문제..
https://cs.uwaterloo.ca/~m2nagapp/courses/CS446/1195/Arch_Design_Activity/Layered.pdf Presentation Layer 인터페이스로, 요청에만 집중하고 내부 비지니스 로직은 신경쓰지 않는다. Business Layer 로직 처리에 집중한다. 이때 변경 및 추가사항의 일관성(받는 요청의 형태와 리턴하는 결과의 형태의 일관성)이 필요하다. Persistent Layer business layer로부터 전달 받은 결과를 저장하는 것에 집중한다.
중단 배포 서비스를 완전히 내린 뒤 신규 버전으로 다시 올리는 방법 무중단 배포 블루/그린: 이전 버전과 신규 버전을 동시에 띄워두고 트래픽을 전환하는 방법 롤링: 파티션을 하나씩 바꿔가는 방법으로 규모가 크면 리밸런스에 시간이 오래 소요된다. 카나리: 파티션 개수가 많을 때 소수의 파티션만 먼저 수행한 뒤 나머지 파티션은 블루/그린 or 롤링 방법으로 배포한다. 100개의 파티션이 존재하면 1개의 파티션을 테스트하고 문제가 없으면 나머지를 배포한다.
https://stackoverflow.com/questions/69192/how-to-implement-a-queue-using-two-stacks How to implement a queue using two stacks? Suppose we have two stacks and no other temporary variable. Is to possible to "construct" a queue data structure using only the two stacks? stackoverflow.com class Queue: def __init__(self): self.inbox = [] self.outbox = [] def enqueue(self, value): self.inbox.append(val..
1. 프로토콜 서로 다른 기기간 통신을 하기 위해 정한 통신규약 2. 네트워크 컴퓨터들이 통신망을 통해 서로 그물처럼 연결된 체계. LAN과 WAN 등이 있다. 3. LAN 멸 킬로미터 내의 네트워크를 연결하는 망 4. WAN 서로 다른 LAN들을 연결하여 하나의 네트워크로 만든 것으로, LAN 사이에 통신을 위한 프토콜이 IP다. 5. 프로토콜 스택 애플리케이션 계층: 사용자가 사용하는 애플리케이션 단 - HTTP, SMTP 등이 해당 트랜스포트 계층: 클라이언트와 서버 간 메시지를 전송하는 서비스 제공 - TCP, UDP가 이에 해당 네트워크 계층: 트랜스포트 계층의 세그먼트를 목적지로 전송하는 역할 - 네트워크상에서 IP 하나만 존재한다. 링크 계층 물리 계층 6. UDP(User Datagram ..
1. 운영체제 하드웨어는 스스로 작동할 수가 없어서, 하드웨어를 다루는 소프트웨어가 필요한데 이것이 운영체제이고 펌웨어라고도 한다. 따라서 운영체제의 목적은 하드웨어 리소스를 효율적으로 활용할 수 있도록 돕는 소프트웨어다. 크게 커널과 인터페이스로 구성되어 있다. 2. 커널과 인터페이스 커널: 운영체제의 핵심 기능들을 모아둔 것 인터페이스: 커널에 명령을 전달하고 실행 결과를 돌려주는 기능을 제공한다. 커널과 인터페이스로 구분이 되는 이유는 유저가 커널을 보호하기 위해서 직접 접근하는 것을 차단하고 시스템콜 같이 미리 정의된 형태로만 사용하게 했다. 프로그래밍 랭귀지의 open이나 print 함수도 인터페이스로 시스템콜에 해당한다. (하드웨어의 인터페이스는 드라이버) 3. 프로그램과 프로세스 프로그램은 ..
1. 배치처리 시스템 - 프로세스 순차 실행 2. 시분할 시스템 - 어플리케이션이 CPU를 점유하는 시간을 잘개 쪼개어 실행될 수 있도록 하는 시스템 3. 멀티 태스킹 - 단일 CPU에서 여러 응용프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템 멀티 태스킹과 멀티 프로세싱 1. 멀티 태스킹 - 단일CPU 2. 멀티 프로세싱 - 다중 CPU에 하나의 프로그램을 병렬로 실행해서 실행 속도를 극대화함 프로세스 스케쥴링 멀티 프로그래밍 - 최대한 CPU를 많이 활용하도록 하는 시스템 목적 (1). 시간 대비 CPU 활용도를 높이자 (2). 응용 프로그램을 짧으느 시간 안에 실행 완료시킬 수 있다. 멀티 프로그래밍이 굳이 필요한 이유? - 응용 프로그램은 온전히 CPU를 전부 사용하기 보다는 다른 작업을 ..
운영체제는 사용자 인터페이스를 제공한다. -> 쉘 쉘은 CLI, GUI 환경이 있다. 시스템 콜(시스템 호출 인터페이스) (요청서) 운영체제가 운영체제 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수 API 내부에는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분이다. 시스템콜의 복잡성을 완화하기 위해 각 언어는 API, Library형태로 시스템콜을 사용할 수 있도록 제공한다. 해당 API, Library를 활용하여 응용 프로그램을 개발한다. 핵심 운영체제 (커널) 운영체제를 만든다면? 1. 운영체제 개발 (kernel) 2. 시스템 콜 개발 3. C API (Library) 4. Shell 프로그램 표준적인 시스템콜을 정의하는 문서가 있다. - POSIX API (유닉스 계열은 해당 ..