목록전체 글 (114)
suyeonme
Redis란? Redis란 Remote Dictionary Server, REDIS의 약자로, In-memory 기반의 데이터베이스이다. key-value 쌍으로 데이터를 저장하는 NoSQL 데이터베이스이며 메모리에 데이터를 저장하기 때문에 빠른 속도를 보장한다. Redis는 메모리에 데이터를 저장하기 때문에 휘발성 데이터베이스이다. 따라서 주로 빠른 응답을 위해 RDBMS에 있는 데이터를 캐시하는 용도로 사용한다. 리스트형 데이터의 입력/삭제가 RDBMS에 비해 10배정도 빠르다. Redis의 데이터 타입 String Lists Sets (유니크한 값만 취급하는 배열) Sorted sets Hashs (중첩이 허용되지 않는) Redis의 command redis-cli에서 나가고 싶은 경우, quit을..
docker-compose.yml docker-compose.yml 파일의 volumns에 ./init.sql:/docker-entrypoint-initdb.d/init.sql와 같이 추가하면 컨테이너가 시작할 때init.sql 파일이 실행된다. version: '3.8' services: db: image: mysql:8.0 restart: always environment: MYSQL_DATABASE: ${DB_NAME} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} ports: - '3306:3306' volumes: # 데이터 베이스 초기화(init.sql) - ./init.sql:/docker-entrypoint-initdb.d/init.sql volumes: db: drive..
.env docker-compose와 같은 위치에 .env파일을 생성한다. DB_USER=admin DB_PASSWORD=example DB_NAME=mysql-db docker-compose.yml .env파일이 존재한다면 기본으로 해당 env파일의 환경변수로 치환한다. String의 경우, "webapp: ${TAG}"와 같이 작성한다. version: '3.8' services: db: image: mysql:8.0 restart: always environment: MYSQL_DATABASE: ${DB_NAME} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} ports: //... 치환된 결과 확인 아래 커맨드를 입력하여 환경변수가 제대로 설정되었는지 확인할 수 있다. $ doc..
입력 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다. 출력 첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다. 해결 손익분기점 = 고정비용 / (제품 가격 - 가변 비용) C-B가 0 이하면 손익분기점은 존재하지않으므로 -1을 반환한다. 반복문을 사용하여 해결하려고 했으나, 반복문이 필요없는 문제였다. => 21억 이하의 자연수 [A, B, C] = price.split(' ').map(p => +p); const margin = Math.floor(A / (C - B)) + 1; console.log(margin < 0 ? -1 : margin);
vi vs vim 리눅스에는 vim 에디터만 설치되어있다. 따라서 vi, vim 명령어 둘다 동일하게 vim 에디터를 사용한다. vi: 유닉스의 기본 텍스트 에디터 vim: vi 에디터의 향상된 버전으로 vi imporved의 약자이다. 자주 사용하는 명령어 정리 명령어 설명 vim [FILE_NAME] vim 에디터로 파일 열기 insert mode i, a, o visual mode v h 커서 이동: left j 커서 이동: bottom k 커서 이동: top l 커서 이동: right w 커서 이동: 다음 단어 시작 e 커서 이동: 다음 단어 끝 b 커서 이동: 이전 단어 시작 ctrl + f 페이지 다운 ctrl + b 페이지 업 x 글자 삭제 u undo ctrl + r redo yy 행복사 ..
CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 일을 한다. 스케줄링의 단계 CPU 스케줄링은 규모에 따라 고수준 스케줄링, 중간 수준 스케줄링, 저수준 스케줄링으로 구분된다. 고수준 스케일링 전체 시스템의 부하를 고려하여 프로세스를 활성화할지 말지를 결정하여 전체 프로세스의 수를 조절한다. 시스템의 전체 프로세스수가 결정되는데 이를 멀티프로그래밍 정도(Degree of multiprogramming)이라고 한다. 작업 요청이 오면 승인할지 거부할지를 결정하므로 승인 스케줄링(Admission scheduling)이라고도 한다. 저수준 스케일링 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 결정한다. 프로세스 상태에 관한 내용은 대부분 저수준 스케..
스레드(Thread)란? 스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업을 요청하는 실행단위이다. 프로세스의 작업 과정 운영체제는 코드와 데이터를 메모리에 가져온다. 프로세스 제어블록을 생성한다. 작업에 필요한 메모리 영역을 확보한다. 준비된 프로세스를 준비큐에 삽입한다. 프로세스가 생성되면 CPU스케줄러는 프로세스가 해야할 일을 CPU에 전달하고 CPU가 작업을 수행한다. CPU 스케줄러가 CPU에 전달하는 일 하나가 스레드이다. CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 스레드이다. 운영체제 입장에서 작업단위는 프로세스이고 CPU 입장에서 작업단위는 스레드이다. 스레드 관련 용어 멀티스레드 프로세스 내 작업을 여러개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영기..
동적 계획법(Dynamic Programming, DP)이란? 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 이것은 부분 문제 반복과 최적 부분 구조를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. -- 위키피디아 동적 계획법의 특징 주어진 문제를 풀기 위해서, 문제를 여러 개의 하위 문제(subproblem)로 나누어 푼 다음, 그것을 결합하여 최종적인 목적에 도달하는 것이다. 각 하위 문제의 해결을 계산한 뒤, 그 해결책을 저장(memoization)하여 후에 같은 하위 문제가 나왔을 경우 그것을 간단하게 해결할 수 있다. 이러한 방법으로 동적 계획법은 계산 횟수를 줄일 수 있다. 특히 이 방법은 하위 문제의 수가 기하급수적으로 증가할 때 유..