큐(Queue)
·
컴퓨터 과학/자료구조
큐(Queue) - FIFO(First In First Out) 으로 데이터를 저장하는 구조입니다. - 먼저 들어온 데이터가 먼저 나갑니다. - 주요 동작 : enqueue, dequeue, peekFront - enqueue(데이터) : 큐에 데이터 추가 - dequeue( ) : 큐의 가장 앞에 있는 데이터 제거 후 반환 - peekFront : 큐의 가장 앞에 있는 데이터 반환 JavaScript 로 Queue 구현(feat.Linked List) dequeue 메서드 구현 시 array 가 제공하는 shift() 메서드를 사용하면 간단하게 구현 가능하겠지만, shift() 메서드는 시간 복잡도가 O(n) 이므로 Queue 구현에 적합하지 않습니다. 시간 복잡도를 O(1)으로 하기 위해 연결 리스트..
스택(Stack)
·
컴퓨터 과학/자료구조
스택(Stack) - LIFO(Last In First Out) 으로 데이터를 저장하는 구조입니다. - 나중에 들어온 데이터가 먼저 나갑니다. - 주요 동작으로는 push, pop, peek 등이 있습니다. - push(데이터) : 스택에 데이터 추가 - pop() : 스택으로부터 최상단에 있는 데이터 제거 - peek() : 스택 최상단에 있는 데이터 값 반환 JavaScript 로 스택 구현(feat. Array) class Stack { constructor() { // item들을 받을 배열 생성 this.stack = []; } isEmpty() { return this.stack.length == 0; } push(item) { this.stack.push(item); } pop() { ret..
ADT 와 Data Structure 의 차이
·
컴퓨터 과학/자료구조
ADT - Abstract Data Type 의 약자로 추상화된 데이터 타입이라는 의미를 가지고 있습니다. - 가령 이 데이터 타입은 어떤 속성과 어떤 메서드를 가지고 있는지, 그리고 이 메서드는 무엇을 하는 건지 정의만 합니다. - 실제로 이 데이터 타입이 내부적으로 어떤 자료 구조로 구현되어 있고 어떻게 동작하는지에 대해서는 논의하지 않습니다. - 정의, 구현을 분리하면 사용자는 굳이 어떻게 구현되어 있는지 알 필요 없이 데이터 타입을 사용하는데 아무런 문제가 없습니다. - 그저 사용자는 ADT에서 정의된 기능을 사용하기만 하면 되고 구현은 개발자가 알아서 하면 됩니다. - 설사 데이터 타입의 구현 방법이 바뀌더라도 정의만 그대로라면 기존 사용자는 아무런 변경 없이 동일하게 데이터 타입을 사용할 수 ..
도커 컨테이너 환경변수 주입
·
Docker
들어가며 현재 예전에 진행했었던 프로젝트 시스템 구성을 도커 컨테이너 환경으로 전환하는 과정에 있는데요. express 서버 구성용 도커 이미지를 생성하는 과정에서 분명 환경 변수 파일이 저장되어 있는 디렉토리(envs) 또한 복사해 가도록 명령 구성을 했습니다. express 서버 컨테이너의 bash 창에 접근해 ls 명령을 실행해 현재 위치에 존재하는 디렉토리 및 파일 목록을 확인했는데요. envs 디렉토리가 존재하는 것이 확인되었으나, cd envs 명령과 ls 명령을 실행한 결과 envs 디렉토리 안에는 아무 파일도 존재하지 않는 걸 확인했습니다. 왜 환경변수 파일만 복사되지 않는지 그 이유를 찾지 못했습니다. 계속 헤매는 대신 환경변수 파일을 express 서버 컨테이너에게 전달해줄 다른 방법을..
계속해서 restart 상태인 컨테이너 디버깅하기
·
Docker
상황 docker-compose up -d --build 명령을 실행해 nginx 웹서버, express 서버, mysql 서버 컨테이너를 띄웠습니다. docker ps -a 명령을 실행해 현재 실행되고 있는 도커 컨테이너 목록을 체크했습니다. 체크한 결과, express 서버 컨테이너는 계속 restarting 상태인 것이 확인되었습니다. 왜 restarting 이 계속 되고 있는지 도대체 어떤 게 문제가 있는지 전혀 알지 못해 답답했습니다. restarting 상태인 컨테이너 로그는 어떻게 볼 수 있을까? 찾아보니 아래와 같이 명령을 실행하면 된다는 것을 알게 되었습니다. 같은 상황이 이후 발생했을 때 잊지 않고자 이렇게 기록을 남깁니다. 해결책 로그 확인할 도커 컨테이너 ID 확인 docker ps..
[Error] unable to start container process: exec: "bash"
·
Docker
상황 컨테이너 접속 node 컨테이너에 주입된 env 변수 목록을 확인하기 위해 node 컨테이너의 bash 창에 접근하려고 했으나, 위와 같은 오류가 발생했습니다. 해결 Docker 이미지가 Alpine 이라면 bash 를 지원하지 않을 수도 있다고 합니다. 대신 /bin/sh 로 컨테이너에 접속하면 된다고 합니다. /bin/sh 로 컨테이너에 접속 env 명령어 실행 결과 다음과 같이 node 컨테이너에 주입된 env 변수 목록을 확인하실 수 있습니다.