분류 전체보기
[Kubernetes] #1 쿠버네티스란?
쿠버네티스의 공식적인 정의 오픈소스 컨테이너 오케스트레이션 도구 구글이 개발함 각기 다른 배포 환경으로 컨테이너화 된 애플리케이션을 관리하는데 도움을 줌 오케스트레이션 도구가 필요한 이유 모놀리식에서 마이크로서비스로의 트렌드 변화 컨테이너 사용의 증가 마이크로서비스는 기술적으로 수백, 수천 개의 컨테이너를 만들어야 하는 결과를 초래할 수 있다. 각각의 컨테이너를 관리하기 위해서 컨테이너에 맞는 스크립트 파일을 개별적으로 만든다면 정말 복잡하고 불가능할지도 모른다. 그래서 많은 컨테이너들을 편리하게 관리하기 위해서 오케트스트레이션 도구가 필요한 것이다. 그래서 오케스트레이션 도구가 제공하는건? 높은 가용성 애플리케이션이 언제나 사용 가능함을 의미한다. 높은 확장성 퍼포먼스가 중요한 애플리케이션일수록 빠르게..
[프로그래머스 level2] 프렌즈4블록 (C++)
카카오 코딩테스트 [1차] 문제 2차원 배열의 원소가 떨어지는걸 구현하는게 핵심인 구현 문제이다. 문제에서 구현할 부분이 확실하게 나눠져 있음을 확인했다. 2x2 블록을 모두 찾아서 지우기 지워진 블록 떨어뜨리기 2x2블록을 찾아서 삭제하는 부분이다. bool deleteBoard(){ int del = 0; for(int r = 0; r < N; r++){ for(int c = 0; c < M; c++){ if(!board_records[r][c]) continue; del += delete2x2(nboard[r][c], r, c); } } for(int r = 0; r < N; r++){ for(int c = 0; c < M; c++){ if(board_records[r][c] == 2){ board..
[프로그래머스 level2] 피로도 (C++)
현재 피로도에 따라서 최대로 탐험할 수 있는 던전의 수를 구하는 문제이다. 던전 탐험에 필요한 피로도가 2차원 배열로 주어지고, 던전 탐험 순서에 따라서 탐험할 수 있는 던전의 개수가 달라질 수 있으므로 백트래킹을 사용한 완전 탐색으로 구현했다. 매 dfs 호출마다 지금까지 탐험한 던전의 최대 갯수를 갱신해준다. (cnt는 매개변수로 가지고 있다.) answer = max(answer, cnt); 현재 던전에서 다음 던전으로 이동하는 부분이다. 주의할 점은 다음 던전으로 이동하기 위해서 현재 피로도가 다음 던전에 필요한 피로도보다 많아야 한다는 점이다. for(int i = 0; i < dungeons.size(); i++){ if(visited[i]) continue; if(nowHp < dungeon..
[프로그래머스 level2] H-index (C++)
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 위 말을 이해하기가 어려울 수 있다. h번 이상 인용된 논문이 h편 이상이다 -> 이 문장의 뜻은 h는 과학자가 발표한 논문의 개수 이하가 될 것이다. 예시를 보면서 이해해 보자. 논문의 인용 횟수 [3, 0, 6, 1, 5] 가 주어진다. 먼저 논문을 오름차순 정렬한다. [0, 1, 3, 5, 6] 여기서 2회 이상 인용된 논문은 3, 5, 6 논문이 되고, 2회 이하 인용된 논문은 0, 1 논문이 된다. 3회 이상 인용된 논문은 3, 5, 6 논문이 되고, 3회 이하 인용된 논문은 0, 1, 3 논문이 된다. 배열이 정렬 되었기 때문에 lo..
[운영체제] Ch6. 동기화 도구들
공룡책(운영체제)을 읽고 정리한 글입니다. 서론 지금까지 공부하면서 프로세스가 병행하게 또는 병렬로 실행될 수 있다는 것을 알 수 있었다. CPU 스케줄러는 프로세스 사이에서 빠르게 오가며 각 프로세스를 병행 실행시킨다. 이는 현재 프로세스는 다른 프로세스가 스케줄링 되기 전까지만 CPU에서 실행됨을 의미한다. 프로세스의 실행중에 언제든지 인터럽트가 발생할 수 있으며, CPU코어는 언제든지 다른 프로세스의 명령어를 받아들일 수 있다. 이러한 병행, 병렬성 때문에 데이터 무결성에 문제가 생기게 된다. 그래서 이 챕터에서는 어떤 문제가 발생하는지 알아볼 것이다. 간단한 예를 먼저 알아보자 프로세스 사이의 메모리 공유를 1차원 배열의 유한 버퍼를 이용해 구현했던 코드이다. 생산자는 버퍼의 크기가 count와 ..
[운영체제] Ch5. CPU 스케줄링
공룡책(운영체제)을 읽고 정리한 글입니다. 실질적으로 운영체제는 프로세스가 아니라 커널 수준 스레드를 스케줄한다. 그러나 '프로세스 스케줄링'과 '스레드 스케줄링' 용어는 상호 교환적으로 사용된다. 일반적인 스케줄링 개념이면 '프로세스 스케줄링'을 사용하고, 스레드에 국한된 개념이면 '스레드 스케줄링' 이라는 용어를 사용할 것이다. CPU 스케줄링 기본 개념 하나의 프로세스가 I/O요청이 완료되기를 기다리고 있다. 만약 프로세스가 I/O응답을 받기 전까지 다른 프로세스를 실행하지 못하고 기다린다면 시간을 매우 비효율적으로 사용하게 된다. 따라서 어느 프로세스가 대기해야 할 경우, 운영체제는 CPU를 회수해 다른 프로세스에게 할당해야 할 것이다. 결국 CPU는 항상 바빠야 한다는게 중요한 원칙이 된다. 그..
git 원격 레포지토리 파일 삭제
git 원격 레포지토리에 원하지 않는 파일을 잘못 올렸을 때 해결방법 잘못된 해결 방법 실제로 .idea 폴더를 로컬에서 삭제하고, git add . 와 git commit -m "..." 을 통해 파일 삭제 커밋을 올린다. 이때 같이 작업하는 사람이 브랜치의 변경 사항을 합치기 위해서 git pull 명령어를 수행한다면, 커밋이 동기화 되면서 .idea같은 폴더가 삭제되고 IntelliJ의 개인 설정이 모두 날아갈 수 있다. 올바른 해결 방법 파일 단위 해결 git rm --cached 파일이름 폴더 단위 해결 git rm --cached -r 폴더이름 git rm : 원격 저장소와 로컬 저장소에 있는 파일을 삭제한다. git rm --cached : 원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에..
[운영체제] Ch4. 스레드와 병행성
공룡책(운영체제)을 읽고 정리한 글입니다. 스레드가 필요한 이유 예를 들어, 웹 서버는 클라이언트로부터 웹 페이지나 이미지, 소리 등에 대한 요청을 받는다. 하나의 웹 서버는 여러 개의 클라이언트들의 병행하게 접근할 수 있다. 만약 웹 서버가 단일 스레드 프로세스로 작동한다면, 자신의 단일 프로세스로 한 번에 하나의 클라이언트만 서비스할 수 있게 되어 클라이언트는 자신이 요청이 서비스되기까지 매우 긴 시간을 기다려야 할 것이다. 하지만 멀티 스레드 환경에서는 아래와 같은 구조로 요청-응답구조가 바뀐다. 요청이 들어오면 새로운 프로세스를 생성하지 않고, 요청을 서비스 할 스레드를 생성하고 추가적인 요청을 받기위한 작업을 재개한다. 멀티 스레드 프로세스의 장점 응답성 실시간 애플리케이션을 멀티 스레드화 하면..
[운영체제] Ch3. 프로세스
공룡책(운영체제)을 읽고 정리한 글입니다. 프로세스가 무엇인지, 운영체제에서 어떻게 표현되는지, 어떻게 작동하는지에 대해 알아보자 프로세스 개념 1. 프로세스 비공식적으로, 프로세스는 실행 중인 프로그램을 의미한다. 프로세스의 현재 활동 상태는 프로그램 카운터 값과 레지스터의 내용으로 나타낸다. 프로세스의 메모리 배치는 아래 그림과 같다. text : 실행 코드 data : 전역 변수 heap : 런타임중에 동적으로 할당되는 메모리 stack : 지역변수 주의할 점은 스택과 힙 영역이 서로의 방향으로 커지더라도 운영체제는 서로 영역을 침범하지 못하도록 해야한다. 프로그램 자체는 프로세스가 아니다. 프로그램은 명령어 리스트를 내용으로 하는디스크에 저장된 실행파일에 불과하다(수동적). 이와 반대로 프로세스는..
[운영체제] Ch2. 운영체제 구조
공룡책(운영체제)을 읽고 정리한 글입니다. 운영체제를 이해하는 관점 운영체제가 제공하는 서비스에 초점 운영체제가 사용자와 프로그래머에게 제공하는 인터페이스에 초점 시스템의 구성요소와 그들의 상호 연결에 초점 운영체제 서비스 위 그림은 운영체제의 서비스에 대한 관점에서 본 운영체제의 구성요소들과 그들의 상호관계를 보여준다. 1. 사용자에 도움을 주는 것이 목적인 운영체제의 기능 사용자 인터페이스 말 그대로 사용자가 I/O를 지시하고, 메뉴에서 작업을 선택하고, 화면을 선택할 수 있게 해주는 역할의 인터페이스를 제공한다. PC에서 주로 사용하는 그래픽 사용자 인터페이스(GUI)가 있고, 휴대폰이나 태블릿에서 사용하는 터치 스크린 인터페이스가 있고, 터미널과 같은 명령어 라인 인터페이스(CLI)가 있다. 프로..