express 4버전으로 프로젝트를 생성하니 기존에 앱을 실행하던 node app.js 명령어가 먹히지 않았다.

찾아보니 express3 에서 4로 버전업하면서 package.json 에 정의하던 시작 스크립트가 node ./bin/www 로 변경되었다고 한다.


따라서 기존처럼 node app.js 로 실행하도록 설정을 바꾸어보았다.



1. express 4 설치 

$ npm install -g express-generator


2. 프로젝트 생성

$ express nodejsproject       // 이전버전과 동일


3. package.json 시작 스크립트 수정


{

  "name": "nodejsproject",

  "version": "0.0.0",

  "private": true,

  "scripts": {

    "start": "node app.js"    -- 기존: node ./bin/www  

  },

  "dependencies": {

    "cookie-parser": "~1.4.3",

    "debug": "~2.6.9",

    "ejs": "^2.6.1",

    "express": "~4.16.0",

    "http-errors": "~1.6.2",

    "jade": "~1.11.0",

    "morgan": "~1.9.0"

  }

}


4. app.js 스크립트 수정


상단에 debug 변수 정의

var debug = require('debug')('nodejsproject');


하단에 module.exports 주석처리 하고 소스 추가

//module.exports = app;


app.set('port', process.env.PORT || 3000);


var server = app.listen(app.get('port'), function() {

  debug('Express server listening on port ' + server.address().port);

});




*설정을 변경하여 이전처럼 실행이 가능해졌다! 근데.. 이 방법을 권장하진 않는다고해서 /bin/www 파일과 구조를 살펴본 후에 다시 롤백하려고한다.


[ 참고글 발췌 ]

이제 ./bin/www의 기능이 다시 app.js로 이전되었습니다. 이러한 변경은 권장되지 않지만, 이러한 연습을 통해 ./bin/www 파일의 작동 원리를 이해하고 app.js 파일이 더 이상 자체적으로 시작되지 않는 이유를 이해할 수 있습니다.




참고글 : https://expressjs.com/ko/guide/migrating-4.html

github 에 프로젝트 등록 방법


먼저 로컬pc 의 작업폴더로 이동해서 차례로 진행 

(git 이 설치돼있다는 가정하에..)



$ git init     -- .git 파일이 생성됨 (ls -a 로 확인가능)


$ git add [파일이름]     -- 전체 파일 등록 시 git add . )


$ git commit -m "comment 내용"


$ git remote add origin [git 저장소 url]


$ git push -u origin master



서버에서 github 프로젝트 다운로드


git 설치 후


$ git clone [ git 저장소 ] 



서버에서 github 소스 다운로드


$ git pull



'프로젝트 관리 툴 > GIT' 카테고리의 다른 글

Git Reset, Revert 차이  (1) 2019.08.19
Git Log 옵션  (0) 2019.08.19
Git Branch 관리 명령  (0) 2019.08.19
Git Commit 명령  (0) 2019.08.19

코딩야학 프로젝트 3일차 - 실제 개발


1. 로컬에 express 설치 (node 는 이미 설치)

 $ sudo npm install -g express-generator


express 로 프로젝트 생성

$ express testProject


cd testProject

npm install

DEBUG=testProject:* npm start  (디버그 필요없을 경우 node app.js or node bin/www app.js 로 실행)


명령어 서버가 연결되었다는 메세지가 뜨고 해당 포트로 접근하면 express 메세지 출력!


참고글 : http://ding-dong-in-future.tistory.com/2




'사이드 프로젝트' 카테고리의 다른 글

Spring Boot 프로젝트 셋팅1 - 서버환경  (0) 2019.05.11
코딩야학 프로젝트 day5  (0) 2019.01.22
코딩야학 프로젝트 day4  (0) 2019.01.16
코딩야학 프로젝트 day2  (0) 2019.01.08
코딩야학 프로젝트 day1  (0) 2019.01.08

코딩야학 프로젝트 2일차


오늘은 AWS EC2 서버 셋팅을 진행했다. (EC2 는 CentOS 기반)


1. 필요 패키지 설치


sudo yum update -y
sudo yum install gcc gcc-c++
sudo yum install -y git


2. nginx 설치


참고글 : https://hue9010.github.io/aws/nginx%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%B4-%EB%B3%B4%EC%9E%90/


아파치도 많이 사용하긴하지만 요즘엔 nginx 도 많이 사용한다고 해서 nginx 를 설치했다.  (내부적으로 nginx는 비동기처리를 해주어 효율적이라고함)

yum으로 설치했고 현재 ec2 서버에 루트아닌 계정으로 접속해서 sudo 로 설치하였다.


sudo yum install nginx — root 로 설치



- nginx 관련 명령어

service nginx start : 시작
service nginx stop : 정지
service nginx restart : 재시작
service nginx reload : 설정파일을 재로드
service nginx status : 현재 상태

설치 후 EC2  인스턴스 콘솔에서 방화벽 해제를 해주고 nginx 시작 명령어를 입력하면 nginx 인덱스 화면이 뜨는걸 볼 수 있다.

3. 프로젝트 아이템 선정 - 개발공부노트 사이트 만들기

[ 기능 ]

로그인 - 시큐어코딩 고려

게시글 CRUD

댓글기능

즐겨찾기 기능

글쓰기 에디터 연동


[ 사용기술 ]

node.js

vue.js or react

mongo DB


4. 개발 공부!



'사이드 프로젝트' 카테고리의 다른 글

Spring Boot 프로젝트 셋팅1 - 서버환경  (0) 2019.05.11
코딩야학 프로젝트 day5  (0) 2019.01.22
코딩야학 프로젝트 day4  (0) 2019.01.16
코딩야학 프로젝트 day3  (0) 2019.01.08
코딩야학 프로젝트 day1  (0) 2019.01.08

코딩야학 5기에 참여하여 사이드 프로젝트를 진행하기로 했다!

대략적인 아웃라인은 기본 ÇRUD 기능이 있는 게시판 구현이다.


먼저 1일차

서버 호스팅을 위해 dothome 을 오랜만에 들어갔으나.. 무료버전에서는 ssh를 지원하지않아 aws 를 사용하기로 했다.


1. AWS 에 가입후 EC2 인스턴스를 생성


참고글 : http://luji.tistory.com/6


나는 맥을 사용하므로 putty 대신 터미널에 아래 명령어 입력 (pem 파일이름은 ec2 생성할때 만든 이름으로 해야함)

ssh -i "myKeyPairAWS.pem" ec2-user@ec2-xxx-xxx-xxx-xxx.us-east-2.compute.amazonaws.com (인스턴스 위에 연결버튼 누르면 명령어 가이드 나옴)


*추가글 2019.01.16

서버셋팅중 sudoers 파일을 잘못건드려 인스턴스를 삭제하고 다시 생성했다.

새 인스턴스는 ubuntu 로 진행하기로했다.

참고글 : http://luji.tistory.com/6



2. 도메인생성


참고글 : https://my.freenom.com/clientarea.php


도메인에 돈을 쓰기싫어서... 무료 도메인 사이트에서 생성했다. (이외에도 무료 도메인 사이트는 찾아보면 많음)



3. 도메인연결

 

참고글 : http://wingsnote.com/57


hosted zone 과 record set(www) 을 추가하면  스턴스 ip 와 도메인이 연결되는데 

내가 생성한 도메인은 마이너한 도메인이라 그런지 bbjeong.ml 로 등록하면 bbjeong.ml. 으로 생성이 되어지는 문제점이 있었다..

이걸로 시간을 더 끌기는싫어서... 프로젝트 완료한 이후에 더 살펴보기로하고 넘어갔다!


*추가글 2019.01.16

엉망진창.. AWS 에서 도메인을 bbjeong.ml. 으로 생성한 것 때문에 freenom 사이트에는 bbjeong.ml 도메인이 제대로 접근불가하다고 판단하여 취소된것같다...ㅠ

일단 아이피로 접근하고 도메인문제는 나중으로 미뤄야겠다..



'사이드 프로젝트' 카테고리의 다른 글

Spring Boot 프로젝트 셋팅1 - 서버환경  (0) 2019.05.11
코딩야학 프로젝트 day5  (0) 2019.01.22
코딩야학 프로젝트 day4  (0) 2019.01.16
코딩야학 프로젝트 day3  (0) 2019.01.08
코딩야학 프로젝트 day2  (0) 2019.01.08

한국계 천재 개발자가 만든 블록체인 코스모스, 왜 주목받나

코스모스 재권 CEO 인터뷰

730
비들 컨퍼런스에서 기조연설을 진행하고 있는 재권(사진=텐더민트 공식 블로그)

올해 코인(암호화폐) 가격은 롤러코스터를 탔다. 대장주인 비트코인은 연초 2천400만원까지 치솟았다가 연말 400만원 대로 주저앉았다. 가치가 80% 이상 줄어들었다.

코인 가치폭락을 두고 여러 가지 원인 분석이 나오지만, 그중 “블록체인이 가치를 입증할 사용사례를 만들지 못했다”는 진단이 가장 뼈아프다. 이미 올해 중반부터 지속적으로 제기된 경고다.

내년엔 블록체인이 실생활에 쓰일 수 있을까. 이미 많이 알려진 것처럼 블록체인 기술의 태생적 한계인 '성능' 문제를 뛰어넘어야 가능한 일이다.

블록체인은 네트워크에 참여한 모든 노드가 모든 거래를 기록하도록 설계돼 있다. 덕분에 일부 노드에서 데이터 위변조가 일어나도 분산된 다른 노드가 이를 검증할 수 있지만, 성능 면에선 전체 네트워크 처리 능력이 단일 노드의 처리 능력으로 제한된다는 한계가 존재한다. 일명 '확장성' 문제라고 한다.

많은 플랫폼 블록체인들이 성능 문제를 풀기 위해 도전하고 있다. 그중 블록체인 업계 종사자들 사이에서 큰 기대를 받고 있는 게 '코스모스' 프로젝트다. 코스모스가 가장 빠른 시일 내에 완성도 높은 대안을 내놓을 수 있을 것으로 전망되기 때문이다.

코스모스는 천재 개발자로 불리는 한국계 미국인 재권이 이끌고 있다. 그는 4년전인 2014년부터 비트코인의 작업증명(PoW) 방식에 한계를 확인하고, 이를 극복하기 블록체인 엔진인 '텐더민트'를 개발해 주목 받았다. 그는 텐더민트를 기반으로 서로 다른 블록체인을 연결해 블록체인 확장성 문제를 해결하는 '코스모스'를 이끌고 있다.

코스모스에서 서로 다른 블록체인을 연결해 주는 역할을 하는 '코스모스 허브'라는 블록체인이 내년 메인넷 론칭을 준비하고 있다.

최근 국내 블록체인 개발자 컨퍼런스 '비들'의 기조 연설을 위해 한국을 방문한 재권을 만나 코스모스 프로젝트의 차별성과 목표에 대해 들어봤다.

5초 안에 블록 확정까지 끝...고성능 합의알고리즘 텐더민트에 주목

지난해 하반기 불어닥친 비트코인 열풍으로 이제는 PoW 방식이 지나치게 에너지 소모적이고 일부 채굴자들에 의해 좌지우지 될 수 있다는 점이 널리 인지되기 시작했다.

재권이 무려 4년 전에 이런 문제의식을 가지고 새로운 블록체인 설계를 시작한 것은 그가 상당한 통찰력을 가졌다고 평가되는 점이다. 대표 플랫폼 블록체인인 이더리움도 PoW에서 벗어나기 위한 여정을 시작했지만 앞으로 2-3년은 걸릴 것으로 예상된다.

그가 2014년 비트코인 PoW의 문제를 풀기 위해 생각해 낸 것이 텐더민트다. 텐더민트는 전체 검증자 중 3분의 2 이상이 찬성으로 합의에 이르는 비잔틴 장애 허용(BFT)기반으로 설계됐다. 텐더민트는 BFT를 개량해, 퍼블릭 블록체인과 프라이빗 블록체인에서 모두 사용할 수 있게 했다.

재권은 BFT를 채택한 이유에 대해 "BFT컨센서스가 수학적으로 얼마만큼의 성능을 낼 수 있는지에 대한 연구는 지난 수십년간 이뤄져 왔다"며 "이미 안정성을 확보한 BFT를 채택하는 것은 너무 당연했다"고 말했다.

코스모스 재권 CEO(이미지=재권 링크드인)

그는 "우리는 심플하지만 학문적으로 검증된 시스템을 단계적으로 구현하는 것을 중요하게 생각해 생각하고 있다"며 "텐더민트합의알고리즘은 4년 전에 완성했고 지속적으로 개선해 사실상 상용화 마무리 단계에 와있다"고 설명했다.

또 "텐더민트가 170명의 검증인이 네트워크에 참여했을 때 작동하는 것을 확인했다"며 "BFT에서 파생된 합의 알고리즘에 이렇게 많은 검증인이 참여한 사례는 최초다"고 강조했다.

재권에 따르면 현재 코스모스 허브의 블록 생성과 확정(블록이 번복되지 않는 상태)까지 5초에 이뤄진다.

체인 연결 인터체인프로토콜과 개발 환경 코스모스SDK에 주목

재권은 PoW에 대한 해결책을 찾으면서 블록체인이 확장성 문제까지 주목하게 됐다고 한다. 텐더민트 코어 엔진만으로 초당 수천건의 트랜잭션처리가 가능하다. 하지만 수많은 애플리케이션이 하나의 체인에서 작동하는 것은 사실상 불가능하다. 이를 극복하기 위해 각각의 애플리케이션을 작동시키는 고성능 체인 존재하고 체인이 서로 연결돼 가치와 정보를 이동할 수 있는 구조를 생각한 것이다.

그는 "PoW에 대해 해결책을 찾다보니 오히려 더 많은 문제점을 발견하게 됐다"며 "최우선으로 확장성 문제를 해결하기 위한 방법으로 블록체인 간 소통할 수 있는 IBC(인터 블록체인 커뮤니케이션) 프로토콜을 만들었고 (이렇게) 코스모스는 텐더민트 합의 알고리즘으로 만들어진 다양한 블록체인들이 공존하는 블록체인 네트워크가 됐다"고 설명했다.

코스모스 구성도(이미지=코스모스 블로그)

코스모스 허브는 코스모스팀 코어 개발팀이 직접 개발하고 있는 블록체인 네트워크다. 코스모스 안에서 공존하는 블록체인들의 중간 역할을 하면서 토큰 수량이나 원장을 관리해주는 역할을 한다.

코스모스 허브에는 어떤 블록체인이든 허가 없이 연결할 수 있다. 퍼블릭 블록체인뿐 아니라 프라이빗 블록체인도 연결 가능하다. 블록체인 간 토큰 이동은 10~15초 이내에 가능하다.

코스모스 팀은 수 많은 블록체인이 연결되려면, 우선 블록체인 개발이 쉬워야 한다고 보고 코스모스는 소프트웨어개발키트(SDK)를 만들었다. 또 이를 통해 개발된 기능들은 서로 모듈형식으로 쉽게 연결할 수 있게 했다.

재권은 "지금 현재 상태에서 디앱을 만들기 위한 가장 쉬운 환경은 스마트컨트랙트를 이용하는 것이다. 하지만 좀 더 복잡한 애플리케이션을 만들기 위해선 고나 자바 같은 프레임워크가 필요하다고 봤다"며 코스모스SDK 개발 이유를 설명했다.

누구나 코스모스 SDK를 이용해 생태계 내에서 쓰이는 솔루션을 개발할 수 있다. 개발된 기능들은 모듈 형태로 가져다 쓸 수 있기 때문에, 이를 결합해 새로운 블록체인을 만들 수 있다. 코스모스 코어 팀이 개발한 텐더민트 합의알고리즘이나 IBC도 모듈형태로 만들어졌다.

코스모스 세계관을 나타낸 구성도(이미지=코스모스 블로그)

코스모스는 우주의 질서 의미...다양한 블록체인이 정돈된 질서 안에서 작동하는 세계 만들 것

재권의 얘기를 종합해 보면 코스모스는 고성능 블록체인 엔진, 서로 다른 블록체인이 연결될 수 있는 통신 프로토콜, 복잡한 애플리케이션 개발도 효율적으로 가능하게 하는 개발 환경 등을 두루 갖춘 것으로 보인다.

그렇다면 코스모스가 이루고자 하는 최종 목표는 무엇일까. 코스모스라는 프로젝트 이름에 그의 생각이 담겨 있다.

"프로젝트 이름이 왜 코스모스이냐"는 질문에 그는 "먼저 우리모두 칼 세이건(유명한 천문학자로 대중 과학서 코스모스의 저자)을 상당히 좋아한다.(웃음) 또 코스모스는 정돈된 우주를 의미한다. 온 우주의 모든 것이 원자(아톰)로 만들어져 있는 것처럼, 블록체인 시스템 또한 수많은 트랜잭션을 하나의 이치 아래 정리하면서 시스템이 만들어진 것이다. 우리도 검증된 하나의 이치아래 정리된 시스템을 만들고 있다는 의미다"고 말했다.

그는 또 블록체인 산업에서 코스모스 허브 메인넷 출시가 갖는 의미에 대해 "PoW를 이용하지 않아도 충분히 탈중앙화되고 안전한 블록체인이 가능하다는 점을 보여 줄 수 있는 것"이며 "수천개의 블록체인이 공존하는 시스템이기 때문에 수 많은 블록체인 공존하면서 확장성 문제를 해결할 수 있을 것으로 기대한다"고 말했다.


참고 : http://www.zdnet.co.kr/view/?no=20181224151801



'IT 기술 소식' 카테고리의 다른 글

자바 유료화  (0) 2019.02.13

jar, war, ear 은 모두 압축파일의 종류이다.

각 파일이 담고있는 규모를 따지면 class > jar > war > ear 순이다.


jar (java archive)

  • 하나의 application 기능이 가능하도록 java 파일을 압축하고 지원한다.
  • path 정보를 유지하여 압축되기 때문에 배포된 jar 파일을 이용하면 각 파일에 대한 path 문제를 신경쓰지 않아도 된다.
  • ex) ojdbc.jar



war (web archive)

  • war는 web application을 지원하기 위한 압축방식으로 jsp, servlet, gif, html, jar 등을 지원한다.
  • war는 단독으로 실행이 안되고 서버 컨테이너(was)에 의해 실행되어야하므로 배포디스크립터가 담겨있다.(web.xml)



ear (enterprise archive)

  • 하나의 web application 단위를 넘어 실제 서버에 배포하기 위한 단위이다.
  • jar와 war를 묵어서 각각의 기능을 지원한다. (jar는 애플리케이션 레벨(business layer), war는 웹애플리케이션 레벨(web layer)을 지원하도록)


JUnit


JUnit 은 자바 테스팅 프레임워크다. 사실상 표준이라고 할만큼 널리 사용되고 있다.



JUnit 장점


JUnit 을 사용하는 이유는 개발자가 설계하고 만든 코드가 원래 의도한대로 잘 동작하는지를 개발자 스스로 테스트하기 위해서이다.


테스팅 프레임워크를 사용하지 않을 때에는 System.out.println 메소드를 호출해서 일일이 확인하여 처리했었다.


하지만 이러한 테스트 방식은 화면, db 연결, 여러가지 설정까지 모두 해준뒤에야 테스트가 가능하다.


JUnit 은 이러한 점을 개선하여 작은 단위테스트까지 가능하도록 만들어졌다.



예를들어 테스팅 프레임워크를 쓰지않고 Dao 클래스를 테스트를 진행한다면 화면 폼을 만들고 DB 도 연동해 sysout 으로 확인해봐야하지만


JUnit을 이용하면 화면개발과 DB 연동 없이도 Dao 클래스만 독립적으로 테스트가 가능하다.



사용 방법


테스트 메소드를 만들기 위해서는 2가지 설정이 필요하다.

(테스트 클래스 생성하면 자동으로 설정되어있음)


  • 테스트메소드를 public으로 선언
  • 메소드 위에  @Test 어노테이션 설정 


JUnit 메소드 


JUnit 은 if~else 대신 assertThat 이라는 스태틱 메소드를 제공한다.


assertThat은 첫번째 파라미터의 값을 뒤에 나오는 매처라고 불리는 조건으로 비교해서 일치하면 다음으로 넘어가고 아니면 테스트가 실패하도록 만든다.


is() 는 매처의 일종으로 equals() 로 비교해주는 기능을 한다.


예)

assertThat(user2.getPassword(), is(user.getPassword());

JUnit 은 예외가 실패하거나 테스트가 실패하면 자동으로 알려주기때문에 System.out.println("테스트 성공") 같이 메시지를 직접 작성할 필요가 없다.


테스트가 성공할 경우, OK 메세지와 테스트실행시간, 몇개의 테스트 메소드가 실행됐는지 실패할 경우, 호출스택에는 실패원인, 테스트코드에서 검증에 실패한 위치 등을 알려준다.



JUnit 테스트

  • JPA 를 이용해 UserRepository.java 생성
  • UserRepository 클래스를 테스트하는 UserRepositoryTest 클래스 생성

1. JPA 를 이용해 UserRepository.java 생성


2. UserRepository 클래스를 테스트하는 UserRepositoryTest 클래스 생성

(src/test/java 내에서 New > JUnit Test Case 선택)
Name 에는 테스트 클래스 명을, Class under test 에는 테스트할 객체의 클래스를 입력 




3. UserRepository 클래스에 대한 테스트 코드 작성

@Test 어노테이션과 함께 @Before, @After 어노테이션도 사용할 수 있는데 이름대로 @Before 는 @Test 메소드 직전에, @After 는 직후에 실행됨.



4. JUnit 실행
테스트클래스 우클릭 > Run As > JUnit Test 클릭
성공하면 아래 그림처럼 초록바가 똬앟






참고 : 토비의 스프링 3.1 

MVC 의 View 란


Spring MVC의 View 는 DispatcherServlet이 직접 호출하는 오브젝트로, View 인터페이스를 구현하여 다양한 클래스를 만들 수 있다.

(따로 설정하지 않을 경우 디폴트는 InternalResourceView 라는 뷰리졸버로 세팅)


사실 찾아보기 이전까지는 보통 View 단을 jsp 로 구현해왔기 때문에 Spring에서는 무조건 jsp로 화면을 구현하는줄 알고있었다..


주로 JSP뷰라고 부르는 이유는 Spring 이외의 다른 MVC 프레임워크에서도 jsp를 광범위하게 사용하고, 실제로도 jsp에 뷰작업을 위임하기 때문이라고 한다.



다른 View 기술에는


Velocity 나 FreeMarker 등이 있다.



각 기술의 설정 예제를 보면 ViewResolver 구현체를 bean으로 등록하여 사용하는 것을 확인할 수 있다.


Velocity 설정


velocity 는 *.vm 확장자를 사용하지만 내부 문법은 html과 동일하다.




FreeMarker 설정


freemarker는 *.ftl 확장자를 사용







* 참고 : http://misoboy.tistory.com/36

빌드 툴 역할

  • 프로젝트에 추가되는 라이브러리와 버전 관리


Gradle

  • 안드로이드 스튜디오의 공식 빌드 시스템
  • Java, C/C++, Python 등 여러 언어 지원
  • Groovy 라는 언어를 기반으로 작성
  • STS(Spring Tool Suite) 에서 gradle support 플러그인을 제공하다가 최근 이클립스 공식 buildship gradle을 릴리즈하면서 support는 차츰 사라질 예정


Maven

  • 예전에는 Apache Ant를 많이 쓰다가 현재는 사실상 Maven이 자바 빌드 툴의 표준이 됨
  • xml 기반으로 작성

Groovy

  • jvm 위에서 실행되는 스크립트 언어 (컴파일되지는 않음)
  • 자바와 호환가능
  • gradle 설치 시, 자동 포함


'프로젝트 관리 툴 > 기타' 카테고리의 다른 글

Mac 터미널 명령어  (0) 2019.01.22
M/M (Man/Month) 계산 방법  (0) 2018.07.19

+ Recent posts