전체 글

전체 글

    3. 도커 이미지

    이미지란 서비스에 필요한 소스코드, 라이브러리, 여러 툴들을 묶은 파일을 의미한다. 이러한 이미지는 여러 컨테이너에서 사용될 수 있다. 프로그램이 메모리에 적재되어 실행되면 프로세스라고 하듯, 이미지가 실행되면 컨테이너라고 할 수 있다. 우리는 동료가 이미 생성해놓은 이미지나 매우 흔히 사용되는 공식적인 pre-built 이미지 등등 이미 존재하는 이미지를 가져다 사용할 수 있다. Docker Hub는 공식적으로 이미지를 얻어올 수 있는 가장 좋은 source이다. 간단한 명령어를 통해 Docker Hub에서 제공하고 있는 이미지를 가져다 실행시킬 수 있다. 예를들어, docker run node 명령어를 입력하면 node 팀에서 공식적으로 제공하는 node 이미지를 Docker Hub에서 받아와 컨테이..

    2. Docker로 간단하게 서버 띄우기(MacOS)

    시작 전 Docker로 서버를 구축하기 전 먼저 Docker가 설치되어 있어야 한다. https://www.docker.com/ { res.send('Hi there!'); }); app.listen(3000); Dockerfile 서버를 컨테이너에서 띄우기 위해선 Dockerfile을 작성해야 한다. 루트 패키지에 Dockerfile이라는 이름의 파일을 생성해 다음과 같이 작성하자. FROM node:14 //node version WORKDIR /app //directory COPY package.json . //package.json을 복사한다. RUN npm install //필요한 패키지를 다운받는다. COPY . . //나머지 코드들을 복사한다. EXPOSE 3000 //3000번 포트를 개방..

    1. Docker란?

    도커란? 도커는 컨테이너를 생성하고 관리하는 도구이다. 컨테이너는 표준화된 소프트웨어의 단위이다. 즉, 코드와 그 코드를 실행하기 위한 의존성들의 묶음이다. 예를 들어, NodeJS 애플리케이션을 구축하려고 한다고 해보자. NodeJS란 Javascript Runtime으로 서버에서 Javascript를 실행할 수 있게끔 해준다. 만약 도커로 NodeJS 컨테이너를 구축한다면 그 컨테이너 안에는 NodeJS를 구동할 수 있는 환경이 갖춰져 있어 즉시 사용자가 작성한 코드를 실행시킬 수 있다. 또한, 표준화된 소프트웨어의 단위이기 때문에 같은 컨테이너는 어디서 누가 실행시키든 같은 결과를 보장한다. 도커를 왜 사용할까? 이 질문은 결국 독립적이고 표준화된 애플리케이션 묶음(컨테이너)이 왜 중요한 것일까? ..

    Real MongoDB - (1)

    1. MongoDB 데이터베이스 트렌드 기존의 데이터베이스 관리 시스템은 RDBMS가 중심, but 구글이나 페이스북과 같은 글로벌 서비스를 제공하는 회사가 늘어나면서 방대한 양의 데이터를 충분히 빠른 속도로 처리할 수 있는 데이터베이스에 대한 필요성이 생김. HBase, 카산드라 등장 -> 자바 언어로 개발되어 GC가 부담, 또한 클러스터 구축을 위한 컴포넌트가 너무 많아 관리 및 트러블 슈팅이 상대적으로 어려움. MongoDB는 온라인 서비스에 필요한 블록 캐시, 보조 인덱스, 동시성 처리를 위한 스킵리스트, 하자드 포인터 등의 특성을 가지고 있음. WiredTiger 스토리지 엔진을 주로 사용 (아직 무슨말인지 잘 모르겠네요 ㅠ) MongoDB vs RDBMS MongoDB는 쿼리 결과로 커서를 반..

    MySQL의 격리수준

    일반적으로 database를 공부하다 보면 아래와 같은 표의 형식으로 4가지 격리수준을 공부하게 된다. 보통, Repeatable Read 수준에선 Phantom Read가 발생하는 것으로 알려져있다. 하지만 MySQL의 스토리지 엔진으로 InnoDB Engine을 사용하게 되면 Phantom Read가 발생하지 않는다. 이를 이해하기 위해선 MySQL의 InnoDB 스토리지 엔진의 Lock과 MVCC(Multi Version Concurrency Control)이라는 개념을 이해해야 한다. InnoDB Lock InnoDB는 Lock을 인덱스에 거는 특징이 있다. 인덱스가 없는 테이블이어도 내부적으로 생성한 인덱스를 사용해 잠금을 설정한다. InnoDB에선 다음과 같이 3가지 종류의 인덱스 락이 있다...

    Array, LinkedList, HashTable, Stack & Queue 시간 복잡도

    1. Arrays - Accessing a value at a given index : O(1) - Updating a value at a given index : O(1) - Inserting a value at the beginning : O(n) - Inserting a value in the middle : O(n) - Inserting a value at the end : O(1) - dynamic array, O(n) - static array - Removing a value at the beginning : O(n) - Removing a value in the middle : O(n) - Removing a value at the end : O(1) - Copying the array :..

    OAuth 2.0

    OAuth란? 회원가입 혹은 로그인 하실 때 아래와 같은 버튼을 통해 진행하신 경험이 있으신가요? 아마 다들 경험 해보셨을거라고 생각합니다. 그렇다면 여러분들은 이미 OAuth를 사용하고 있습니다! OAuth 2.0 공식 문서인 RFC 6749에는 다음과 같이 OAuth를 정의하고 있습니다. The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP..

    스프링은 왜 쓸까? (feat. 끝장토론)

    브리의 명강의 끝자락에 갑자기 끝장토론이 개최됐다. 생각조차 안 해본 주제였다. 아직 스프링 입문 단계라 사용법을 익히느라 급급했는데 정작 중요한 부분을 놓치고 있었다. '그래서 스프링을 왜 써야 할까? 쓰면 뭐가 좋을까?' 저 위의 질문은 결국 스프링을 사용해야 하는 이유를 풀어서 해석한 것과 같다고 느껴졌다. 브리께서 나같이 스프링 사용의 목적도 모르고 따라가기 급급한 스린이들에게 가장 중요한 내용을 환기시켜 주고자 이런 질문을 던진 것 같다. 체스 미션에서 어떤 객체를 스프링 빈으로 만들었나요? 이번 미션에서 @Repository, @Service, @Controller를 사용해 DAO, Service, Controller 클래스를 Spring Bean으로 등록했다. 추가로, jdbc와 securi..