블로그 구현

2016-12-20 00:01:242016-12-20 00:36:29
top
before

블로그 구현

2016-12-20 00:01:242016-12-20 00:36:29

이 블로그는 전에도 말했다시피 많은 오픈소스 및 프레임워크를 사용하여 구현되어있다.
사실 이런것을 쓸때에는 "기술" 이라는 표현을 쓰기에도 민망하고, 죄송하고, 부끄러운 기분이 들어서,
short description에는 "사용한 것" 이라는 명칭을 썼는데, (자기소개서를 썼다면 기술이라고 하였었겠지,, 'ㅁ';;;)
아무튼 그것에 대해서 적어볼까 한다.

  1. node.js
    V8 JS엔진으로 구현된 서버사이드 플랫폼
    싱글 스레드 이벤트 루프 기반으로  논블로킹 I/O를 구현하여 높은 처리성능이 있다는것으로 알려져 있다.
  2. express 
    node.js 용 웹 어플리케이션 프레임워크
    많은 미들웨어를 제공하고 이를 통해 웹을 쉽게 구현할수 있다.
    이제는 뭐 너무나 익숙하고 잘 알려져 있어서, 
    오버를 좀 보태면 이것 없이 어떻게  짰었는지 기억도 안날것같은 기분... 'ㅁ';
  3. nginx
    다양한 기능을 제공하는 reverse proxy
    CPU 갯수 까지 가능한 단일 스레드 이벤트 루프기반의 워커 프로세스에 의하여 서빙되는것으로 알고 있고, 이를통해 큰 throughput을 제공하는것으로 알고있다.
    HTTP proxy 이외에도 mail proxy나, stream을통한 TCP/UDP 프록시도 지원이 되며,
    설정의 hot swap 이 가능하여 여기서는 웹서버의 기능 말고도 DB의 로드발란서의 기능으로도 사용하고 있다.
    ( 백업용 DB로 변경이 가능하게 준비는 되어있지만, 두개로 서비스 되는것은 아니고 standby 이어서 로드 발란서라는 표현이 엄밀히는 맞지 않는듯 하네...)
  4. mongodb / mongoose
    대포적 no-sql 인 mongodb.
    모델의 변경이 RDB에 비하여 자유로워 개발이 편리하고, 
    포스트 자체가 특별한 관계가 필요없어 여러 속성을 갖는 document db에 넣는것이 이로워 보였다.
    아직 auto-sharding 같은 기능은 사용하지 않지만 이와같은 기능으로 scale out 이 좋은것으로 알려져있다.
    mongoose는 node.js 의 mongodb용 ODM 으로 
    다양한 기능들을 제공하여, 도메인 드리븐한 비지니스 로직 구현에 큰도움을 준다.
  5. docker
    process isolation 을 이용한 light weight container .
    실행 환경을 구축하고 형상관리 배포하는데 용이하다.
    원래는 나만쓰는 환경에 나만 한 두개의 어플리케이션이 올라갈 예정이어서 사용할 생각이 없었지만, 
    한개의 머신에서 웹, 웹어플리케이션, DB 모두 동작하게 되는데,
    mongodb에서 memory mapped file을 이용하는데,  이때 사용할 메모리의 양을 설정할 방법이 없는것 인지,  어찌하는것인지 모르는것인지 메모리를 가용한 범위에서 전부 사용하게 되어서
    ( 물론 다른 프로세스에 사용하려 할때 내려가기는 하지만 )
    도커를 이용하여 메모리량을 사용량을 제한 하였다.. ( 바르게 사용하는것인지 모르겠다.. )
  6. bootstrap / react / sb-admin / start-react sb-admin 
    bootstrap 은 트위터에서 만든 UI 프레임워크 이다.  
    반응형웹 디자인을 위한 많은 기능이 제공된다.
    react 는 유져 인터페이스를 구성하기 위한 javascript 라이브러리로 컴포넌트 기반의 개발을 가능하게 한다. 
    virtual dom과 단방향 바인딩으로 성능적으로 angular 에 비해서 좋다고 한다.
    ( 블로그의 컨텐츠를 infinite scroll 로 표시할 예정인데, 아직은 컨텐츠가 적어서 문제가 안되지만 두고 보면 뭔가 결정이 되겠지...) 
    하지만 개인적으로는 동작과 모양이 분리되지 않고 관리 되는것이 조금 그렇고,  angular 2 에서는 성능 문제도 많이 해결되었다고 하니 이것도 한번 공부해서 적용해보고 싶다.
    sb-admin은 bootstrap으로 구현된 admin 템플릿 이다. 
    상단 바와 좌측메뉴 디자인을 체용하고 있다.
    start-react의 sb-admin 템플릿은 react로 구현된 sb-admin의 템플릿이다. 
    빌드와 배포등 큰 골자를  제공하고 있어, 이 블로그는 사실 이것의 약간의 커스터 마이즈 정도라고 해도 과언이 아니다.
  7. ES6 / ES7
    react 가 babel 과 webpack을 통한 es6+ 사용을 권장하고 있고,
    node.js에서는 es6의 많은 부분이 들어가 있지만, 아직 브라우져에서는 이를 온전히 지원하지 않아서, babel 등 별도의 컴파일러가 필요하다.
    뭐 지금 사용하는것은 promise나 class , 가변 argument , arrow function , es7의 async/ await 정도 이지만,
    이 정도만 되어도,  기존 자바스크림트의 패턴중 간결하게 대체되는 부분도 많고, callback hell도 많이 해소가 되고 좋은듯 하다.
  8. graphql / express-graphql
    graphql 은 클라이언트에서의 flexible 한 인터렉션을 제공하기 위하여 고안된 쿼리 렝기지로 서버에 정의된 타입의 데이터를 전달하기 위한 좋은 방법을 제안한다고 한다.
    다양한 뮤테이션 요청으로 원하는 정보를 조합하여 얻는것이 가능할 테지만, 
    이 블로그에서는 컴포넌트형 개발 구조를 사용하다 보니, 이것 역시 한번에 결과를 얻을수 있는것도 분리하여 호출하는등 아직 잘 사용하고 있는것은 아닌것으로 보인다.
    어떻게 잘 사용할수 있을지 더 공부가 필요한 부분인듯 하다.
    express-graphql 은 graphql을 제공하기 위한 express middleware로 스키마와 쿼링하는 방법을 정의하면 graphql을 제공하고, 테스트 할수 있는 클라이언트(http://bruce.pllip.com/graphql)를 제공한다.

일단 적어보기는 하였는데,
아까도 이야기 했듯이 , 이것이 기술이고 내가 익힌것이다 라고 이야기 하기가 민망하다.
나도 나름 컴퓨터 엔지니어로서 위와 같은것들을 만들어 보고 싶기도 하고, (물론 시도 해본것도 있지만 결과물은 위의 것보다 훨씬 못했던거 같다)
하지만 뭐, 경험을 해봤다는것에 의의를 두고.., 
나는 드레곤 슬레이어는 아니지만, 용잡는 칼의 손잡이 정도는 잡아봤고, 기회가 되면 휘두룰수 있도록 준비를 해야겠다라는 정도로 생각해야지...