쿠버네티스를 사용하는 이유 기존 대부분의 애플리케이션은 모놀리스(monolith) 형태로 이루어져있었다. 모놀리스 애플리케이션을 운영할 때 장애가 나거나 서버를 확장할 때는 새로운 서버에 동일한 환경을 직접 구성하여 마이그레이션했다. 이런 부분을 개선하기 위해 마이크로서비스 형태로 개발하고 있지만 애플리케이션을 구성하는 요소의 수가 많아지고 규모가 커지면 시스템을 원활하게 구성, 관리, 유지하기가 어려워진다. 쿠버네티스를 사용하면 마이크로서비스의 구성, 관리, 장애 처리를 자동화할 수 있고 서버 배포를 자동으로 스케줄링할 수 있다. 쿠버네티스를 사용하면 하드웨어 인프라를 추상화하여 데이터 센터 전체를 하나의 컴퓨팅 리소스로 제공한다. 따라서 사용하는 서버의 정보를 자세히 알 필요 없이 애플리케이션 구성요..
MongoDB 설치는 mongodb.com 참고하여 알아서 설치하자 MongoDB의 컬렉션에 데이터를 작성하기 위해선 데이터베이스 서버를 실행해야한다. # macos 기준 brew services start mongodb-community 몽고디비에 접속한다. 기본 포트는 27017이다. users 컬렉션에 데이터를 간단히 쓰고 읽어보자. $ mongo > show dbs admin 0.000GB config 0.000GB local 0.000GB > use users switched to db users > db.users.insertOne({ "name": "ABC", "age": 22 }) { "acknowledged" : true, "insertedId" : ObjectId("60fbd4a9bb1..
MongoDB는 NoSQL 중 하나로 MySQL 같은 관계형 데이터베이스에 비해 유연한 구조를 가지고 있다. 관계형 데이터베이스와 비교했을 때 아래의 구조를 가지고 있다. Database: 동일하게 Database Collection: Table Document: Row MongoDB는 Collection에 스키마가 없고, Document에 json 형태의 중첩된 데이터를 저장할 수 있다. 이 때문에 유연한 구조가 된 것이다. Document는 아래와 같이 저장된다. { "name": "Kook", "address": "Seoul ...", "hobbies": [ { "name": "game", "when": "after work" }, { "name": "travel", "when": "vacation..
리눅스 계열 OS를 사용하다보면 여러가지 bin 폴더가 존재한다. 이번 글은 각각의 용도가 무엇인지 정리한다. /bin 멀티 사용자 운영체제에서 단일 사용자 모드로 실행할 수 있는 필수 명령어들이 집합되어있다. 관리자를 포함한 모든 사용자를 위한 공통 명령어가 이 폴더에 저장돼있다. 이 폴더에 있는 명령어는 다른 파일 시스템이 마운트되지 않아도 사용 가능하다. /sbin /bin 폴더와 같지만 루트 권한이 있어야만 실행할 수 있는 명령어가 저장돼있다. /usr/bin 단일 사용자 모드에 필요한 명령어를 제외한 명령어들이 저장돼있다. /usr 폴더 (파일 시스템의 두번째 메이저 섹션) 가 마운트 돼야만 사용할 수 있고, 모든 사용자가 공통으로 사용할 수 있는 명령어가 저장돼있다. /usr/sbin /usr..
Ubuntu 16.04에서 시작 서비스를 등록하는 방법을 알아보자 스크립트 작성 /etc/init.d 경로에 시작할 스크립트의 경로를 작성한다. 서비스를 시작할 때 이 스크립트로 프로세스를 실행한다. 아래는 예시다. ### BEGIN INIT INFO # Provides: scriptname # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO..
Express는 nodejs http 모듈에 추가 기능을 부여한 웹 서버 프레임워크다. 기능이 많지 않고 라우팅과 미들웨어 관리, 호출 정도만 해준다. 설치하기 npm으로 express 패키지를 설치해보자. 아래와 같은 명령어를 입력하면 설치된다. $ npm install express --save express로 간단한 예제를 만들어보자. const express = require('express') const app = express() const port = 5000 // 라우트 메소드 app.get('/', function(req, res) { res.send('Express Test') }) // 요청 받기 시작 app.listen(port, () => console.log(`listen on ..
NodeJS는 크롬의 V8 엔진을 기반으로 만들어진 자바스크립트 런타임이다. NodeJS의 특징을 간단히 정리해둔다. 비동기 작업에 특화 NodeJS는 싱글 스레드 기반으로 동작한다. 그럼에도 불구하고 NodeJS가 좋은 이유는 비동기 작업에 특화되어 있기 때문이다. 비동기 작업에 특화돼있다는 것은 네트워크나 데이터베이스 요청, IO 작업 등을 처리하기 좋다는 말이다. 자바스크립트의 비동기 코드만 이해하고 있다면 비동기 작업을 노드에서 쉽게 처리할 수 있다. 다만 계산 집약적인 작업을 처리하기엔 노드가 싱글 스레드 기반으로 동작하기 때문에 좋지 않다고 한다. 이벤트 루프 노드에서 함수를 호출하면 다른 언어나 환경과 마찬가지로 Call Stack에 함수가 쌓인 뒤 호출된다. 다만 비동기 작업을 호출했을 경..
클로저 클로저는 생명주기가 끝난 외부함수의 컨텍스트에 접근하는 함수를 뜻한다. 아래 예제를 통해 살펴보자. function outer() { // 자유 변수 let num = 1; // 클로저 return function() { // 외부 함수의 변수 접근 console.log(num); } } let inner = outer(); // 외부 함수의 생명주기가 끝난 상태에서 호출 inner(); // 1 위 예제를 보면 외부함수의 생명주기가 끝났음에도 정상적으로 num이 출력됨을 볼 수 있다. 이 때 외부함수의 변수를 자유 변수라고 하고, 자유 변수에 접근하는 함수를 클로저라고 한다. 이전 글에서 함수는 생성 당시의 컨텍스트를 [[scope]] 프로퍼티에 가지고 있는다고 말하였다. 아래 그림 1처럼 외부..
- Total
- Today
- Yesterday
- JavaScript
- @Component
- thymeleaf 변수 인식
- Bean
- Express
- Tasklet
- mybatis
- Check point within polygon
- MySQL
- nodejs
- unity
- spring
- @Bean
- 클로저
- chunk
- Barycentric coordinates
- Bin
- npm
- @Autowired
- Linux
- spring batch
- Closure
- @Qualifier
- thymeleaf cannot resolve
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |