보통 단위 테스트는 빠르게 실행되며 불편하지 않습니다. 하지만 프로젝트가 커지면 통합테스트가 많은 시간을 잡아먹는 경우가 있습니다. 그래서 통합테스트와 단위테스트를 분리하는 것이 좋습니다. 기본 Java 프로젝트 구조 build.gradle plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id 'java' } group = 'gradle' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { developmentOnly runtimeClasspath { ex..
SSL의 의미 SSL은 보안 소켓 계층의 약자로, (Secure Socket Layer) 입니다. 1990년대 중반 넷스케이프가 처음 개발한 것으로 데이터를 안전하게 정송하기 위한 인터넷 통신 규약 프로토콜입니다. SSL 1.0은 일반에게 공개되지는 않았다가, SSL 2.0에 심각한 결함이 있었고, 마침내 이런 결점들을 극복하고 SSL 3.0은 1996년 이후 생겨난 프로토콜들을 위한 기반을 닦았습니다. TLS와 SSL의 관계 1999년, SSL 프로토콜의 차세데 버전인 TLS(Transport Layer Security)가 등장 했습니다. TLS 프로토콜은 IETF에 의해 표준화됐으며, SSL 3.0 사이에 극적인 차이가 없습니다. 두 프로토콜은 지속적으로 업데이트되는 일련의 프로토콜들을 형성하며 SS..
10:35 어려움에 직면 했을 때, "내가 더 열심히 해야겠다. 더 열심히 하자!"
00:45 "누군가의 의견은 자네의 현실이 되지 않는다네"
프로세스간 커뮤니케이션 프로세스들이 서로의 공간을 쉽게 접근할 수 있다면? 프로세스 데이터/코드가 바뀔 수 있으니 얼마나 위험할까? 프로세스는 다른 프로세스의 공간을 접근할 수 없다. IPC(Inter Process Communication) 프로세스간에 커뮤니케이션을 해야한다면 어떻게 해야할까? IPC를 이용한 프로세스간 통신방법을 제공함\ 프로세스간 통신이 필요할까? 성능을 높이기 위해 여러 프로세스를 만들어 동시 실행 이 때 프로세스간 상태 확인 데이터 송수신이 필요 Fork() 시스템콜 fork() 함수로 프로세스 자신을 복사해서 새로운 프로세스로 만들 수 있음 부모 프로세스, 자식 프로세스 프로세스를 fork()해서, 여러 프로세스를 동시에 실행시킬 수 있음 보통은 CPU가 한개 일때만 생각하지..
프로세스 구조 개요 프로세스(process)는 일반적으로 어떻게 구성되어 있을까? Text(CODE) 프로그램의 코드 Data 변수 / 초기화된 데이터 BSS Segment / Data Segement 로 분리된다. BSS 초기화되지 않은 Global, Static 변수 Data 초기화 된 Global, Static 변수 Stack 임시 데이터(함수 호출, 로컬변수 등) Heap 코드에서 동적으로 만들어지는 데이터 출처: https://www.drdobbs.com/security/anatomy-of-a-stack-smashing-attack-and-h/240001832?pgno=1 PCB Process Control Block(PCB), Process Context Block(PCB) 이라고 함 프로세스..
패스트캠프 강의를 듣고 정리했습니다. 인터럽트 개요 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술 어느 한순간 CPU가 실행하는 명령은 하나! 다른 장치와 어떻게 커뮤니케이션을 할까? 인터럽트를 사용하면 된다. 인터럽트 필요한 이유 선점형 스케쥴러 구현 프로세스 running중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스 실행을 중단시킴 그러려면, 스케쥴러 코드가 실행이 되서, 현 프로세스 실행을 중지시켜야 함. IO Device와의 커뮤니케이션 저장매체에서 데이터 처리 완료시, 프로세스를 깨워야함 (block state → ready state) 예외 상황 핸들링 CPU가 ..
패스트캠프 강의를 듣고 정리했습니다. 프로세스 상태와 스케쥴링 멀티 프로그래밍과 Wait 멀티프로그래밍 CPU 활용도를 극대화 하는 스케쥴링 알고리즘 Wait 간단히 저장매체로부터 파일 읽기를 기다리는 시간으로 가정 프로세스 상태 running state: 현재 CPU에서 실행 상태 ready state: CPU에서 실행 가능한 상태(실행 대기 상태) block state: 특정 이벤트 발생 대기 상태(예: 프린팅 다 되었다!) 프로세스 상태간 관계 Process block for input.[blocking] CPU자원이 필요없는 I/O wait, Lock, Idle, event wait Scheduler picks another process.[dispatch] Scheduler picks this ..
페스트 캠퍼스 강의를 듣고 정리했습니다. 프로세스 스케쥴링 알고리즘 프로세스(Process) 란? 실행중인 프로그램은 프로세스라고 한다. 프로세스 - 메모리에 올려져서, 실행 중인 프로그램이다. 코드 이미지(바이너리) - 실행파일, Ex) ELF format 프로세스라는 용어는 작업, task, job이라는 용어와 혼용된다. 응용 프로그램 ≠ 프로세스 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있다. 하나의 응용 프로그램은 여러개의 프로세스(프로그램)가 상호작용을 하면서 실행될 수도 있다.(IPC 기법) 스케쥴링 알고리즘 어느 순서대로 프로세스를 실행시킬까? 프로세스 응답시간을 가능한 짧게 하자!(시분할 시스템) CPU 활용도를 최대로 높혀서, 프로세스를 빨리 실행하자!(멀티 프로그래밍) FIFO..
페스트 캠퍼스 강의를 듣고 정리합니다. 프로그램 처리 방법들 배치처리 시스템 일괄 처리, 배치 처리, batch processing이라고 부른다. 컴퓨터 프로그램 실행 요청 순서에 따라 순차적으로 프로그램을 실행하는 방식이다. 한번에 등록된 여러 프로그램을 순차적으로 실행이 가능하다. 배치처리 시스템의 문제 어떤 프로그램은 실행시간이 너무 길어서, 다른 프로그램이 실행되는데 너무 많이 기달려야한다. 음악을 들으면서, 문서도 작성하고 싶다.(동시에 여러 응용프로그램 실행) 여러 사용자가 동시에 하나의 컴퓨터를 사용하려면 어떻게 해야하나?(다중 사용자 지원) 시분할 시스템 다중 사용자를 지원하기 위해 컴퓨터 응답시간을 최소화하는 시스템이다. 컴퓨터 자원을 시간적으로 분할하여 사용할 수 있게 해준다. CPU ..
패스트 캠퍼스 강의를 듣고 정리합니다. 운영체제 큰 그림 응용프로그램, 운영체제, 컴퓨터하드웨어 관계 운영체제는 응용프로그램이 요청하는 메모리를 허가하고, 분배한다. 운영체제는 응용프로그램이 요청하는 CPU시간을 제공한다. 운영체제는 응용 프로그램이 요청하는 IO Devices 사용을 허가/제어 한다. 쉘(Shell) - 사용자 인터페이스 사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램이다. 쉘은 터미널 환경(CLI)과, GUI 환경 두 종류로 분류된다. 시스템 콜 - 응용프로그램을 위한 인터페이스 시스템 콜 또는 시스템 호출 인터페이스라고 불린다. 운영체제의 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수를 제공한다. 보통 시스템 콜을 직접 사용하기 보다는..
5. 책임과 메시지 명확한 책임과 역할을 지닌 참가자들이 협력에 참여해야 한다. 자율적인 책임 설계의 품질을 좌우하는 책임 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체다. 자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 객체지향 설계의 아름다움은 적절한 객체에게 할당하는 과정 속에서 드러난다. 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 너무 추상적인 책임 포괄적이고 추상적인 책임을 선택한다고 해서 무조건 좋은 것은 아니다. 수행 방법을 제한할 정도로 너무 구체적인 것도 문제지만 협력의 의도를 명확하게 표..
4. 역할, 책임, 협력 우리 모두를 합친 것보다 더 현명한 사람은 없다. 중요한 것은 개별 객체가 아니라 객체들 사이에 이뤄지는 협력이다. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답속에서 창발하는 협력에 초점을 맞춰 애플리케이션을 설계한다. 협력이 자리를 잡으면 저절로 객체 행동이 드러나고 뒤이어 적절한 상태가 결정된다. 협력 협력은 한사람이 다른 사람에게 도움을 요청할 때 시작된다. 자신에게 할당된 일이나 업무를 처리하던 중에 스스로 해결하기 어려운 문제에 부딪히게 되면 문제를 해결하는데 필요한 지식을 알고 있거나 도움을 받을 수 있는 누군가에게 도움을 요청하게 된다. 요청을 받은 사람은 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다. 결과적으로 협력..
3. 타입과 추상화 일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 훌륭한 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다. 추상화를 통한 복잡성 극복 현실은 복잡하며 예측 불가능한 혼돈의 덩어리다. 현실에 존재하는 다양한 현상 및 사물과 상호작용하기 위해서는 우선 현실을 이해해야 한다. 불필요한 정보를 제거함으로써 단순함을 달성한것이 훌륭한 추상화다. 추상화란 현실에서 출발하되 불필요한 부분을 도려내려가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다. 어떤 추상화도 의도된 목적이 아닌 다른 목적으로 사용된다면 오도될 수 있다. 추상화를 하는 방법 구체적인 사물들 간의 공..
2. 이상한 나라의 객체 행동이 상태를 결정한다. 객체지향에 갓 입문한 사람들이 가장 쉽게 빠지는 함정은 상태를 중심으로 객체를 바라보는 것이다. 상태를 먼저 결정할 경우 캡슐화가 저해된다. 상태에 초점을 맞출 경우 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노출되버릴 확률이 높아진다. 객체를 협력자가 아닌 고립된 섬으로 만든다. 객체가 필요한 이유는 어플리케이션의 문맥 내에서 다른 객체와 협력하기 위해서이다. 상태를 먼저 고려하면, 협력이라는 문맥에서 멀리 벗어난 객체를 설계하게 함으로써 자연스럽게 협력에 적합하지 못한 객체를 창조하게 된다. 객체의 재사용성이 저해된다. 재사용성은 다양한 협력에 참여할 수 있는 능력에서 나온다. 상태에 초점을 맞춘 객체는 다양한 협력에 참여..