Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7c5dd07
2 모듈과 도구 키트 - 1 익스프레스(Express)
neverlish Sep 7, 2019
38e63f2
2 - 2 마이크로(Micro)
neverlish Sep 8, 2019
69f27e6
2 - 3 세네카(Seneca)
neverlish Sep 8, 2019
7dd2fe3
2 - 4 히드라(Hydra)
neverlish Sep 8, 2019
61c4ffb
3 마이크로서비스 구축 - 1 익스프레스 사용
neverlish Sep 8, 2019
8e51f0f
3 - 1 - 1 이미지 업로드
neverlish Sep 8, 2019
1ad8a93
3 - 1 - 2 폴더에 이미지가 있는지 확인
neverlish Sep 8, 2019
82bdaa7
3 - 1 - 3 이미지 다운로드
neverlish Sep 8, 2019
8969112
3 - 1 - 4 경로 매개변수 사용
neverlish Sep 8, 2019
218d16c
3 - 1 - 5 썸네일 생성
neverlish Sep 8, 2019
a0d48de
3 - 1 - 6 색을 이용한 간단한 작업
neverlish Sep 8, 2019
b2201ec
3 - 1 - 7 경로 리팩터링
neverlish Sep 8, 2019
30b51e8
3 - 1 - 8 이미지 조작
neverlish Sep 8, 2019
f27615d
3 - 2 히드라 사용
neverlish Sep 8, 2019
3479de1
3 - 3 세네카 사용
neverlish Sep 8, 2019
6e63af3
3 - 3 - 1 플러그인
neverlish Sep 8, 2019
cf033ea
4 상태와 보안 - 1 상태 - 2 MySQL
neverlish Sep 8, 2019
ef1ffad
4 - 1 - 3 RethinkDB
neverlish Sep 8, 2019
ea25ea6
4 - 1 - 4 레디스(Redis)
neverlish Sep 8, 2019
786a0ac
5 테스트
neverlish Sep 8, 2019
92c4493
5 - 2 프레임워크 사용
neverlish Sep 8, 2019
11c4e93
5 - 3 테스트 통합
neverlish Sep 8, 2019
633cb85
5 - 3 - 1 chai 사용
neverlish Sep 8, 2019
a4ef755
5 - 3 - 2 코드 커버리지 추가
neverlish Sep 8, 2019
e6500ce
5 - 3 - 3 모든 코드 커버
neverlish Sep 8, 2019
f0a521b
5 - 4 서비스 모의 객체 만들기
neverlish Sep 8, 2019
5944b1f
6 마이크로서비스 배포
neverlish Sep 8, 2019
0bf497e
6 - 3 도커를 사용한 배포 - 2 도커파일 정의
neverlish Sep 8, 2019
2984cb6
6 - 3 - 3 컨테이너 관리
neverlish Sep 8, 2019
e0cd0d7
6 - 3 - 4 컨테이너 정리
neverlish Sep 8, 2019
3555003
6 - 4 MySQL 배포
neverlish Sep 8, 2019
14fd67f
6 - 5 도커 컴포즈 사용
neverlish Sep 8, 2019
306c63d
6 - 5 - 1 도커 컴포즈 고급 활용
neverlish Sep 8, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions node/wikibooks-nodejs-microservice/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
package-lock.json
8 changes: 8 additions & 0 deletions node/wikibooks-nodejs-microservice/2/1-express/app1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
let express = require('express');
let app = express();

app.get('/', (req, res) => {
res.send('Hello World');
});

app.listen(3000);
34 changes: 34 additions & 0 deletions node/wikibooks-nodejs-microservice/2/1-express/app2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
let express = require('express');
let app = express();
let stack = [];

app.post('/stack', (req, res, next) => {
let buffer = '';

req.on('data', (data) => {
buffer += data;
});

req.on('end', () => {
stack.push(buffer);
return next();
});
});

app.delete('/stack', (req, res, next) => {
stack.pop();
return next();
});

app.get('/stack/:index', (req, res) => {
if (req.params.index >= 0 && req.params.index < stack.length) {
return res.end('' + stack[req.params.index]);
}
res.status(404).end();
});

app.use('/stack', (req, res) => {
res.send(stack);
});

app.listen(3000);
33 changes: 33 additions & 0 deletions node/wikibooks-nodejs-microservice/2/1-express/app3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
let express = require('express');
let body = require('body-parser');
let route = express.Router();
let app = express();
let stack = [];

app.use(body.text({ type: '*/*' }));

route.post('/', (req, res, next) => {
stack.push(req.body);

return next();
});

route.delete('/', (req, res, next) => {
stack.pop();
return next();
});

route.get('/:index', (req, res) => {
if (req.params.index >= 0 && req.params.index < stack.length) {
return res.end('' + stack[req.params.index]);
}
res.status(404).end();
});

route.use('/', (req, res) => {
res.send(stack);
});

app.use('/stack', route);

app.listen(3000);
6 changes: 6 additions & 0 deletions node/wikibooks-nodejs-microservice/2/1-express/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1"
}
}
3 changes: 3 additions & 0 deletions node/wikibooks-nodejs-microservice/2/2-micro/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = (req, res) => {
res.end('Hello World');
};
8 changes: 8 additions & 0 deletions node/wikibooks-nodejs-microservice/2/2-micro/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"dependencies": {
"micro": "^9.3.4"
},
"scripts": {
"start": "micro app"
}
}
1 change: 1 addition & 0 deletions node/wikibooks-nodejs-microservice/2/3-seneca/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data
14 changes: 14 additions & 0 deletions node/wikibooks-nodejs-microservice/2/3-seneca/app1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const seneca = require('seneca');
const service = seneca({ log: 'silent' });

service.add({ math: 'sum' }, (msg, next) => {
next(null, {
sum: msg.values.reduce((total, value) => (total + value), 0)
});
});

service.act({ math: 'sum', values: [1, 2, 3] }, (err, msg) => {
if (err) return console.error(err);

console.log('sum = %s', msg.sum);
});
25 changes: 25 additions & 0 deletions node/wikibooks-nodejs-microservice/2/3-seneca/app2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const seneca = require('seneca');
const service = seneca({ log: 'silent' });

const stack = [];

// http://localhost:3000/act?stack=push&value=one
service.add('stack:push,value:*', (msg, next) => {
stack.push(msg.value);

next(null, stack);
});

// http://localhost:3000/act?stack=pop
service.add('stack:pop', (msg, next) => {
stack.pop();

next(null, stack);
});

// http://localhost:3000/act?stack=get
service.add('stack:get', (msg, next) => {
next(null, stack);
});

service.listen(3000);
41 changes: 41 additions & 0 deletions node/wikibooks-nodejs-microservice/2/3-seneca/app3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const async = require('async');
const seneca = require('seneca');
const service = seneca({ log: 'silent' });

service.use('basic');
service.use('entity');
service.use('jsonfile-store', { folder: 'data' });

const stack = service.make$('stack');

stack.load$((err) => {
if (err) throw err;

service.add('stack:push,value:*', (msg, next) => {
stack.make$().save$({ value: msg.value }, (err) => {
return next(err, { value: msg.value });
});
});

service.add('stack:pop,value:*', (msg, next) => {
stack.list$({ value: msg.value }, (err, items) => {
async.each(items, (item, next) => {
item.remove$(next);
}, (err) => {
if (err) return next(err);

return next(err, { remove: items.length });
});
});
});

service.add('stack:get', (msg, next) => {
stack.list$((err, items) => {
if (err) return next(err);

return next(null, items.map((item) => (item.value)));
});
});

service.listen(3000);
});
9 changes: 9 additions & 0 deletions node/wikibooks-nodejs-microservice/2/3-seneca/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"dependencies": {
"async": "^3.1.0",
"seneca": "^3.14.1",
"seneca-basic": "^0.6.0",
"seneca-entity": "^4.1.0",
"seneca-jsonfile-store": "^1.1.0"
}
}
21 changes: 21 additions & 0 deletions node/wikibooks-nodejs-microservice/2/4-hydra/description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## 2 - 4 히드라(Hydra)

- `npm i -g yo generator-fwsp-hydra hydra-cli`

- `hydra-cli config local`
- `redisUrl: 127.0.0.1 redisPort: 6379 redisDb: 15`

- `yo fwsp-hydra`
- ? Name of the service (`-service` will be appended automatically) hello
- ? Your full name?
- ? Your email address?
- ? Your organization or username? (used to tag docker images)
- ? Host the service runs on?
- ? Port the service runs on? 0
- ? What does this service do?
- ? Does this service need auth? No
- ? Is this a hydra-express service? Yes
- ? Set up a view engine? No
- ? Set up logging? No
- ? Enable CORS on serverResponses? No
- ? Run npm install? No
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# http://editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{
"plugins": ["jasmine"],
"extends": ["eslint:recommended", "plugin:jasmine/recommended"],
"parserOptions": {
"ecmaVersion": 6,
"ecmaFeatures": {
"jsx": true
},
"sourceType": "module"
},
"rules": {
"valid-jsdoc": [2, {
"requireReturn": false
}],
"comma-dangle": 0,
"curly": 2,
"semi": [2, "always"],
"no-console": 0,
"no-debugger": 2,
"no-extra-semi": 2,
"no-constant-condition": 2,
"no-alert": 2,
"no-unused-vars": ["error", { "argsIgnorePattern": "^(?:reject|_)" }],
"one-var-declaration-per-line": 2,
"operator-linebreak": [
2,
"after"
],
"max-len": [
2,
240
],
"indent": [
2,
2,
{
"SwitchCase": 1
}
],
"quotes": [
2,
"single",
{
"avoidEscape": true
}
],
"no-multi-str": 2,
"no-mixed-spaces-and-tabs": 2,
"no-trailing-spaces": 2,
"space-unary-ops": [
2,
{
"nonwords": false,
"overrides": {}
}
],
"one-var": [
2,
{
"uninitialized": "always",
"initialized": "never"
}
],
"keyword-spacing": [
2,
{}
],
"space-infix-ops": 2,
"space-before-blocks": [
2,
"always"
],
"eol-last": 2,
"space-in-parens": [
2,
"never"
],
"no-multiple-empty-lines": 2,
"no-multi-spaces": 2,
"key-spacing": [
2,
{
"beforeColon": false,
"afterColon": true
}
]
},
"env": {
"browser": true,
"node": true,
"es6": true,
"jasmine": true
},
"globals": {
"-": 0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.apib linguist-documentation

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.DS_Store
*.log
*.pem
*.rsa
node_modules
config/config.json
*/public
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v6.2.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"environment": "development",
"hydra": {
"serviceName": "hello-service",
"serviceIP": "",
"servicePort": 0,
"serviceType": "hello",
"serviceDescription": "",
"redis": {
"url": "127.0.0.1",
"port": 6379,
"db": 15
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* @name Hello
* @summary Hello Hydra Express service entry point
* @description
*/
'use strict';

const version = require('./package.json').version;
const hydraExpress = require('hydra-express');



let config = require('fwsp-config');

/**
* Load configuration file and initialize hydraExpress app
*/
config.init('./config/config.json')
.then(() => {
config.version = version;
return hydraExpress.init(config.getObject(), version, () => {
hydraExpress.registerRoutes({
'/v1/hello': require('./routes/hello-v1-routes')
});
});
})
.then(serviceInfo => console.log('serviceInfo', serviceInfo))
.catch(err => console.log('err', err));
Loading