모듈식 구조는 콤포넌트 사이를 완전히 분리되지 않는 것으로 이해할 수 있다. 모듈화 구조는:
작은 콤포넌트로 나뉜다
콤포넌트 자체의 의존성 (테스트)를 갖고 타 콤포넌트에 영향을 최소화해 갱신할 수 있다.
프로젝트 전반 의존성은 개별 콤포넌트낄 공유 (혹은 덮어씀)할 수 있다
콤퍼넌트 우선-클래스(first-class)를 만들어야 한다. 즉 상대적인 경로롤 require를 구문을 사용 않는다.
다시 구성할 필요 없이앱 확장 (혹은 축소)에 전념한다
최소 모듈식 구조
아래 같은 최소 구조를 기반으로 하자:
1 2 3 4
bin/ lib/ package.json index.js
bin: npm 스크립에 내장하지 않는 모든것 (ex. hooks, ci 등등 )
lib: 앱 콤포넌트
콤포넌트를 추가
콤포넌트는 단독으로 사용할 수 있는 프로젝트의 모든 측면이다. 예를 들어, 한 구성 요소는 cron 작업 스케줄링, 전자 메일 보내기, 내보내기 도구에 다른 구성 작업을 할 수 있다. 데이터 측면에서 모든 모델에 전용 인 하나의 구성 요소 또는 각 모델에 대해 별도의 구성 요소를 가질 수 있다
body-parser: parse the body so you can access parameters in requests in req.body. e.g. req.body.name.
cookie-parser: parse the cookies so you can access parameters in cookies req.cookies. e.g. req.cookies.name.
serve-favicon: exactly that, serve favicon from route /favicon.ico. Should be call on the top before any other routing/middleware takes place to avoids unnecessary parsing.
주요 미들웨어
The following middlewares are not added by default, but it’s nice to know they exist at least:
compression: compress all request. e.g. app.use(compression())
session: create sessions. e.g. app.use(session({secret: 'Secr3t'}))
method-override: app.use(methodOverride('_method')) Override methods to the one specified on the _method param. e.g. GET /resource/1?_method=DELETE will become DELETE /resource/1.
response-time: app.use(responseTime()) adds X-Response-Time header to responses.
errorhandler: Aid development, by sending full error stack traces to the client when an error occurs. app.use(errorhandler()). It is good practice to surround it with an if statement to check process.env.NODE_ENV === ‘development’.
vhost: Allows you to use different stack of middlewares depending on the request hostname. e.g. app.use(vhost(‘.user.local’, userapp)) and app.use(vhost(‘assets-.example.com’, staticapp)) where userapp and staticapp are different express instances with different middlewares.
csurf: Adds a Cross-site request forgery (CSRF) protection by adding a token to responds either via session or cookie-parser middleware. app.use(csrf());
timeout: halt execution if it takes more that a given time. e.g. app.use(timeout(‘5s’));. However you need to check by yourself under every request with a middleware that checks if (!req.timedout) next();.
R은 벨 연구소 Becker 등에 의해 개발됐던 S language를 기반으로 통계 계산, 시각화를 위한 프로그래밍 언어를 포함한 개발환경이다. S language를 이용한 Insightful사의 S+는 S 언어를 이용한 상업용 소프트웨어이고, R은 공개소프트웨어 기반의 소프트웨어 이다.
R 은 console을 통해 프로그래밍을 하거나 외부 에디터에서 작성한 소스를 컴파일해서 실행 할 수 있다.
macOS에서 R 시작시 다음 같은 경고를 보이면 macOS FAQ를 참고해 설정을 해주어야 한다.
[그림. ]
prompt
R을 실행하면 명령 입력 프롬프트 ‘>’을 볼 수 있다. 프롬프트에서 한 줄에 하나 혹은 한문장의 명령이 입력되고 실행된다.
1 2 3 4 5 6 7
print(“Hello World”) Factorial(10)# 계산 기능 Rep(x=”hello”, times=5) Rep(times=5): Error… Plot(10,10) Plot(c(5,7),c(20,30)) Plot(runif(100), runif(100))# runif()는 랜덤 넘버 생성 함수
에서 명령을 입력하고 엔터로 실행이 되지만 괄호((),{},[])가 닫히지 않으면 ‘+’ 프로프트에서 계속 입력할 수 있다.
> help()# 도움말 창 > help(ls)# 함수 ls()에 대한 도움말 >?ls # 도움말 단축키 ?로 help(ls) 호출 > help(">")# R의 예약어, 연산자 등은 ""로 > help("for")# 묶는다. >#특정 패키지에 대한 도움말 요청 > help(package="datasets") ># 일반 검색어를 이용해 도움말 검색 > help.search("Latex") >??"Latex" > ># 사용 예제 검색 > example(mean) mean> x <-c(0:10,50)
MongoDB 설치후 데이터베이스 위치, 로그, 인증 등에 관련한 서버 구성과 설정을 정리한다.
MongoDB 2.6 과 MongoDB Community Edition 3.x 버전을 사용했다.
mongoDB 접근제어
mongoDB 는 설치과정 중에 인증과 관련해 설정하는 부분이 없어서 설치 후 누구나 DB에 접속 할 수 있다. 인증을 추가해 데이터베이스 관리자와 데이터베이스 사용자로 구분해서 이용하고, 각 데이터베이스의 사용자는 허가된 역할(Role)을 가지고 데이터베이스에 접근 가능하도록 구성한다.