2015년 12월 29일 화요일

AWS Essentials

2015.12.29 T아카데미 AWS강좌를 수강하면서 필기.

http://skpla.net/ta1229 비트윈, 디스패치가 AWS로 구현되었음.

아마존 웹서비스는 public cloud computing 을 제공하는 세계 최대의 벤더이다.

온 디맨드(On-demand) : 주문형 서비스

  1. 서비스를 구축하려면 서버, 스토리지, 네트워크 엔지니어가 필요하다. -> 지금은 cloud computing을 통해 on-demand하게 access할 수 있다.
  2. 내가 쓴 만큼 비용을 지불한다.
  3. 안정적이다.
  4. 전문적인 인력들이 나의 인프라를 관리해준다. 인프라의 각 구성 요소가 API로 연결되어 있다.(서버 자원 및 사용량 셋팅 등…) 시간과 시기에 따라 자원의 투입량을 CRON등의 스크립트를 사용해서 자동으로 조절할 수 있다.

  • 전통적인 서비스 구축 : Packaged Software
  • Cloud Computing : Infrastructure(물리적인 인프라의 장애 대응은 벤더사에 위임), Platform(물리적인 인프라와 OS, Middleware 환경까지 on-demand하게 제공-개발만 한다-), Software(소프트웨어까지 위임한다. All. MS애저, 구글플랫폼, 구글Docs 등)

Cloud Computing의 특징

  1. Cloud라고 해서 무조건 저렴하지는 않다.
  2. 사용량과 서비스 활성화에 따라 자원 투입을 플렉서블하게 운용할 수 있다. -> 이 상황에 따라 비용이 많이 들 수도, 적게 들 수도 있다.
  3. 초기 비용이 들지 않는 대신 매달 유지비용이 든다.
  4. 서비스와 장애 대응의 신속성
  5. 병렬로 확장 (2코어 4기가 서버를 여러대 증설 -> 병렬로 요청을 받게 됨), 직렬로 확장 (2코어 4기가 서버를 8코어 32기가 서버로 업그레이드)
  6. 관리의 용이성 (서비스를 관리하기 위한 스크립트 기반의 API가 잘 되어있다)

Cloud Computing의 고려 사항

  1. 보안성(서비스 관리 계정 정보가 유출될 경우 누구나 접근이 가능한 맹점도 있음)
  2. 국가간, 대륙간 데이터 이동, 백업이 발생하는데 개인정보와 미디어, 컨텐츠 데이터의 경우 법률적인 문제가 될 수 있다.
  3. 인프라 리소스에 대한 보안을 보장하지 데이터베이스에 대한 보안은 보장해주지 않는다.
  4. 보안패치 및 장애 대응 작업의 경우 AWS에서 진행하기 때문에 서비스 중단 시점에 대한 주도권을 쥘 수 없다.(인프라를 위임했기 때문에)
  5. 위의 문제를 보완하기 위해 가용성 측면에서 Cloud 상에서 이중화로 구축해놓아야 한다.
  6. 커스터마이징 불가 (서버OS 라이브러리의 업데이트나 미들웨어 설정의 변경 등…)

AWS가 기술적으로 MS애저보다 2년 빠른 것 같다. - 활용도와 레퍼런스 서비스가 발전해있다.

  • JAVA - AWS
  • .Net - MS Azure

AWS 의 데이터 센터

https://prezi.com/cxpwi_og7lht/aws-regions-and-availability-zones/#

REGION > Availability Zone (IDC. 논리적인 묶음일수도, 물리적인 집합일 수도 있다.)

논리적인 집합이라 하더라도 네트워크를 통해 같은 Zone내의 서버 간의 속도를 빠르게 한다. > EC2 Instance (가상머신, 서버. 물리적 장비 위에 탑재된다.)

3개의 지불 모델 :

  • On Demand - 주문형 (구글은 계속 사용하면 Reserved로 전환된다). 위치한 Region에 따라 사용 가격이 다르다. 미국이 제일 저렴.
  • Reserved - Cloud벤더에서 제안하는 표준적인 사양. 가격대가 30% 저렴
  • Spot - 약 70% 가량 저렴. 남는 자원을 입찰을 통해 배분한다. 24시간 서비스 보장을 하지 않아 일시적이고 정기적인 대용량 데이터 처리에 적합.

EBS : Storage Level. 확장 및 축소가 간편. 내구성이 뛰어나 거의 장애가 발생하지 않는다.(chunk 단위)

AMI : EC2 Instance에 포함되어 있는 부가적인 서비스. OS + Software의 가상 이미지. OS와 커스터마이징 된 설정, 그 위에 탑재된 미들웨어까지 포함된 설치-배포용 표준 이미지. AMS 마켓플레이스에서는 오라클DB, SAP 등의 상용 소프트웨어가 설치된 이미지도 제공한다. (물론 비용 상승은 덤. 볼륨 라이선스나 연단위로 사용정책을 체크하는 일반적인 상용 소프트웨어 설치와 달리 AWS에서는 시간 단위로 라이선스를 책정한다.)

RDS Instance : 기존의 DB는 관리적인 소모가 너무 많이 든다(보안패치, 백업 작업, 이중화 작업의 어려움, 고난이도의 장애 대응) 위와 같은 관리를 AWS에서 해 줌. 대쉬보드를 통해 설치, 백업 정책 설정, 데이터 롤백과 리커버리가 간편하다.(Click 두 번으로 가능)

S3 : 웹 베이스로 파일(Object) 단위의 I/O를 위한 스토리지. 파일 단위 당 5TB까지의 용량 제한. 스토리지 사용 용량 자체는 제한없다.(쓴만큼 돈 낸다)

DynamoDB : NoSQL DB. 비정형 데이터를 취급하기 때문에 용량 제한이 없다(무제한). Request Base로 쿼리를 몇 번 날렸는지에 따라 가격이 달라진다. 속도가 중요하기 때문에 SSD로 물리적 장비가 구성되어 있다. 자동으로 이중화 구성이 된다.

Auto Scaling Group : AWS을 사용하는 가장 중요한 이유.

  • 실시간 모니터링을 통해 서비스 사용 자원량이 임계점에 도달하기 전에 자동으로 자원 스케일링(확장)을 해준다.
  • 트래픽 폭주 시 자동으로 병렬 서버를 생성하여 다중화(부하 분산)로 돌입하도록 설정할 수 있다.
  • 임계값 설정(CPU 기준으로? 트래픽 기준으로? 디스크 I/O기준으로?)이 중요하다.

Elastic Load Balancer : Health Check 등을 활용하여 부하 분산 처리.

AWS에서는 시스템 뿐만 아니라 billing에 관한 모니터링도 가능하다. 넷플릭스는 자체 서버가 없이 모두 AWS의 자원을 사용한다. 디스패치는 원래 워드프레스 기반으로 10대 미만의 자체 서버로 운영되었었다. → 스캔들, 이슈 발생 시를 대비해 AWS으로 마이그레이션 (Auto Scaling이 주 목적) 최대 초당 11,500 request 발생, 60대까지 서버가 늘어남. AZ간 이중화를 해야 한다 → AWS의 인프라 관리 체계에 종속되기 때문(AWS에서 정기점검시 서비스도 정지시켜야 하는 상황이 발생할 수 있음)

AWS의 SNS 서비스를 이용해 Push 서버 없이 Push 기능을 구현할 수 있다.

대용량 메일 발송 서비스를 제공한다.(SMTP 서버도 제공)

http://www.slideshare.net/AmazonWebServices?utm_campaign=profiletracking&utm_medium=sssite&utm_source=ssslideview

AWS Mobile Hub

  • Auth, Push 적용 여부, 라이브러리, iOS/Android SDK, 앱 빌드까지 모두 제공
  • 6개월 안에 시장조사부터 앱 런칭까지 끝내야 한다.
  • 기존 개발방법론으로 하면 인프라 구축에만 6개월 걸리고, 이미 시장은 급변해 있다(한발 늦음) https://www.lucidchart.com

AWS 실습 웹사이트 : https://qwiklab.com

1
2
3
4
$sudo su -
#yum update
#yum install httpd
#service httpd start
cs

2015년 12월 9일 수요일

Node.js와 Oracle DB 붙이기

MongoDB나 Redis, 게다가 같은 RDBMS인 MySQL 연결하는 것보다 훨씬 까다롭다.

회사에서는 RDBMS로 무조건 Oracle을 쓰기 때문에 이 문제를 해결하지 않으면 Node.js로 개발하는 것은 어려워진다.

MySQL이나 다른 NoSQL DB에 연결하려면 npm으로 드라이버 모듈(이 표현이 맞는지 모르겠지만)을 설치하고 require로 가져다 쓰면 되지만 Oracle의 경우 인스턴트클라이언트를 사전에 설치해놓아야 한다. 가장 정확한 가이드는 오라클 사에서 GitHub에 만들어놓은 레퍼런스 설치 가이드다. 실제로 구글링해서 나온 내용들이 결국은 다 레퍼런스 가이드의 내용과 대동소이했고 하다가 안되서 결국 레퍼런스 가이드를 보고 천천히 따라해봤다.

레퍼런스 설치 가이드 : https://github.com/oracle/node-oracledb/blob/master/INSTALL.md

설치 과정을 압축해서 열거하자면

1. Oracle 인스턴트클라이언트를 설치한다.(Basic, SDK) http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

개발서버에서는 그냥 rpm으로 전역설치했는데 Live에서는 실제 서비스 하는 서버이니만큼 tar파일 다운받아 압축만 풀었다. 압축을 푼 경로는 /opt/oracle/instantclient 이다.

2. 설치한 인스턴트클라이언트의 Path를 설정한다.

  • ORACLE_HOME, OCI_LIB_DIR : Oracle Instantclient 를 설치한 경로
  • OCI_INC_DIR : Oracle Instantclient 중 SDK를 설치한 경로
  • LD_LIBRARY_PATH : 라이브러리 Path에 ORACLE_HOME 디렉터리를 추가한다.

참고로 라이브러리 Path 추가하는 것을 빼먹고 그냥 DB접속 시도하면 아래와 같이 에러가 난다.

해결은 스택오버플로우 웹페이지 참고. 

3. npm install oracledb 명령어로 프로젝트 디렉터리 내 드라이버 모듈을 설치한다.

4. js소스 내에서 require('oracledb') 명령어로 설치한 모듈을 가져다 쓴다.

…위와 같이 진행하면 끝인데 순조롭게 잘 되었으면 좋겠지만 나의 경우 온갖 에러들이 oracledb 모듈 설치 도중에 짜장 나타났다.

실제 겪은 몇가지 트러블을 정리해보겠다.

  • Cannot find $OCI_INC_DIR/oci.h

이건 그냥 ORACLE_HOME만 잡고 다른 Path를 안잡아서 그렇다.

  • make: g++ 명령을 찾지 못했음
C 관련 문제인 것 같은데 yum install -y gcc-c++ 실행해주었더니 해결되었다.

  • gyp ERR! stack Error: Python executable "python2" is v2.4.3, which is not supported by gyp.

Live서버에서 발생한 오류인데 서버에 설치되어 있는 Python이 2.4.3인데 이 버전을 지원하지 않는다는 것이다. 해결은 역시 스택오버플로우의 이 웹페이지를 참고하였다.

우선 npm의 설정을 Python 2.7 버전으로 설정해준다. npm config set python python2.7

그 다음 Python 2.7 버전을 다운로드 받아 서버에 설치하면 잘 된다. 설치하는 방법은 이 웹사이트를 참고하였다. (JDK 설치하는 것보다 다소 까다롭다)

  • gyp ERR! node -v v4.2.2

도저히 답이 안나와서 Node.js 버전을 0.12로 다운시켜서 진행했다(…)

oracledb 모듈 설치까지 마치고 위와 같이 간단히 오늘 날짜를 구하는 쿼리를 짜서 app.js 파일에 넣어보았다.

잘 된다.

2015년 12월 4일 금요일

Webtob와 Node.js 연동하기

Node.js는 http모듈을 내장하고 있기 때문에 자체만으로도 웹 서버로 동작할 수 있다.

그러나 새로운 서비스를 Node.js로 구현하려고 하는데, 새로 살 서버는 없고 기존의 서버를 재활용해야 하는데 기존 서버들은 이미 웹서비스가 돌아가고 있어 80포트가 이미 사용 중이다.

이렇게 되면 Node.js로 웹 어플리케이션 하나를 만들어도 80포트를 쓸 수가 없기 때문에 접속하려면 URL 뒤에 포트번호를 붙여야된다고 하는 형태가 되어 버린다.

어떻게 방법이 없을까?

검색을 해보니 이런 고민을 하는 사람들이 많은지 아파치 웹서버의 프록시 서버 기능을 사용하여 80포트로 접근하면 웹서버에서 Node.js로 돌아가고 있는 서비스로 던져주게끔 구현한 사례들을 찾을 수 있었다.

그런데 회사에서는 아파치가 아니라 Webtob를 사용한다.

티맥스 테크넷에 접속해서 Webtob의 프록시 서버 설정하는 부분을 찾아보았다.

관리자 문서 중에 REVERSE_PROXY 절이라는 부분을 읽고 개발 서버에 적용해보았는데 예상 외로 놀랍도록 간단하다.

Webtob의 http.m 파일을 열어 VHOST 절에 Node.js기반으로 구동되는 웹 어플리케이션의 호스트네임 URL와 사용할 PORT를 설정한다. 그리고 REVERSE_PROXY라는 절을 새로 만들어 적용대상 VHOST네임에 아까 설정한 웹 어플리케이션의 VHOST 네임을 적고 요청받은 URL의 컨텍스트 Path와 변경하여 전달할 Path, 그리고 내부에서 접근가능한 웹 서비스 주소를 설정한다.

(이 예시에서는 Node.js가 3000번 포트 사용)

http.m 파일을 컴파일하고 나서 Webtob서비스를 재시작하면 80포트로 접근가능.

2015년 12월 3일 목요일

Node.js 설치

https://nodejs.org/en/download/

위 사이트로 접속하여 Node.js를 다운받는다. 프로젝트에서 사용하는 버전은 4.2.3이다.

→ 지금 구버전 0.12로 변경했다. 오라클 접속 문제 때문에… 오라클에서는 이제야 4.2와 5.0도 지원한다고 밝혔지만, 별 짓을 다 해봐도 안붙음…;

Live 서버의 OS를 업그레이드 해야하는 큰 문제로 발전할지 몰라 구 버전으로 돌아가기로 했다.

(그래도 구 버전이라 해봐야 올해 2월에 릴리즈 된 것이다)

설치는 간단한데 다운 받은 것을 서버에 올려놓고 tar -xvf #다운받은 파일명# 명령어로 압축을 풀기만 하면 된다. (안풀고 그냥 tar파일 상태로 돌려도 상관없음. 오히려 이쪽이 더 나은 방법 같기도 하고.)

Node.js 설치한 디렉터리로 들어가서 간단한 웹서버를 구동하는 js 파일 하나를 작성한다.

js파일 하나 만들고 node 명령어로 js파일 구동.

웹 브라우저에서 서버 IP와 포트번호 등 주소치고 들어가면 Hello World~

Webtob 설치

처음으로 Node.js로 진행하는 프로젝트.

Live가 될 서버는 웹서버 Webtob 4.1, WAS는 JEUS 6 환경이다.

따라서 개발 서버에도 우선 웹서버로 Webtob 4.1를 설치해 놓는다… 개발은 Node.js 기반으로 하고 Webtob의 프록시 서버 기능을 이용하여 80포트로 http 접속 시 Node.js 기반으로 구동되고 있는 웹 어플리케이션으로 연결시켜 주는 것이 목적이다. 그래서 개발 서버에서는 JEUS는 설치하지 않는다.

개발 서버 OS는 Redhat과 가장 커널 구조가 유사하다는 CentOS 7을 설치해놓았다.

1. ftp로 Webtob 설치파일을 서버에 올려놓고 chmod 명령어로 실행권한을 준 다음 설치 명령어 실행

2. 그러면 아래와 같이 설치가 진행된다. 설치할 디렉터리를 지정하고 엔터.

3. root 계정으로 전환하여 ‘vi /etc/profile’ 명령어로 Webtob 패스 설정

source profile’ 명령어로 적용한다.

4. 일반계정으로 Webtob를 설치했다면 80포트를 사용할 수 없으므로 일반계정으로 서비스를 관리할 거면 아래와 같이 셋팅해준다.

Webtob 설치 디렉터리 내 bin 폴더로 들어간다. ‘chown root:root htl’ 명령어로 htl 파일의 소유자를 root계정으로 변경한다. ‘chmod u+s htl’ 명령어로 일반계정도 htl 파일에 접근할 수 있게 해준다.

5. http://technet.tmaxsoft.com 티맥스 테크넷에 접속하여 Webtob 데모 라이센스를 신청하여 licence.dat 파일을 E-Mail을 통해 전달받는다.

6. license.dat 파일을 Webtob 설치 디렉터리 내 license 폴더에 넣는다.

7. config 폴더에서 ‘wscfl -i http.m’ 명령어로 http.m파일을 컴파일 한 후 wsboot 명령어를 쳐 주면 Webtob 서비스 시작~

종료는 wsdown 명령어로 한다.

2015년 11월 20일 금요일

Node.js 프로그래밍 과정 5일차

2015.11.20 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

소스자료 : http://nashorn.tistory.com/entry/TNODE

Node.js 프로그래밍 샘플 예제

Redis (NoSQL)

https://github.com/dmajkic/redis/downloads 설치파일 다운 받아 압축 풀고 실행

Redis 접속. Redis는 Key:Value 형식으로 데이터가 구성되는 NoSQL이다.

  • set foo bar → {foo:'bar'} 데이터 생성
  • get foo → key:'foo'인 데이터 조회 subscribe chat → subcribe 객체를 생성(publish되는 메시지를 받는다)

다른 프롬프트 창으로 Redis에 접속하여 publish 객체를 생성하고 hello 메시지 전송

메시지가 subcribe객체로 수신된 것을 알 수 있다.

Mongoose : 다른 방식으로 MongoDB와 연결, 스키마를 만들어서 쓰기/읽기를 한다.

2015년 11월 19일 목요일

Node.js 프로그래밍 과정 4일차

2015.11.19 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

NoSQL

  • 데이터 비정규화
  • 어그리게이션
  • 어플리케이션 사이드 조인 → 연산을 단순화하여 속도를 빠르게 한다. 

RDBMS(MySql) 연결

MariaDB 실행 후 테스트 데이터 삽입

Node.js를 통한 INSERT 문 수행시 결과값인 results 객체에 아래와 같이 primary key값이 나온다.

MongoDB

1. MongoDB 설치 후 저장소로 쓸 디렉터리를 생성한다.

2. 저장소 디렉터리를 지명하고 MongoDB를 실행한다.

3. 아래와 같이 실행된다.(프롬프트창 유지)

4. MongoDB Shell 실행

  1. show dbs; - DB용량 체크
  2. use moviest; - ‘moviest’라는 이름의 데이터베이스를 사용하거나 없으면 새로 만든다.
  3. db.users.save({a:99}); - ‘users’라는 이름의 Collection에 {a:99}라는 값을 갖는 객체를 저장한다.(‘users’ Collection이 없으면 새로 만든다.)
  4. db.users.find(); = ‘users’ Collection의 데이터를 조회.

5. 명령어는 자바스크립트 문법과 유사하다. for 순환문을 이용하여 10개의 데이터를 생성하여 ‘users’ Collection에 INSERT하는 예제.

6. 데이터를 찾는 예제이다.(RDBMS의 SELECT에 해당)

  1. a = 2 조건에 해당하는 데이터
  2. a의 값이 2보다 크고 8보다 작은 데이터 (AND)
  3. a의 값이 [3,4,5,6,7] 범위에 해당되는 데이터 (IN조건)
  4. a의 값이 3보다 작거나 7보다 큰 데이터 (OR)
  5. a의 값이 [3,4,5,6,7] 범위에 해당하지 않는 데이터 (NOT IN조건)

7. 데이터를 갱신하는 예제. ‘a = 3’ 조건에 해당하는 데이터의 temp 항목 값을 10으로 업데이트.

스키마에 구애받지 않기 때문에, 아예 항목 명을 바꿔버리는 것도 가능하다. ObjectId의 값은 그대로 유지된다.

8. 데이터 삭제 예제.

  1. a의 값이 5보다 크면 삭제
  2. 전체 데이터를 삭제
  3. Collection 자체를 삭제


9. MongoDB 종료 - 정상종료가 아닐 때 데이터가 깨질 위험이 있다.

MongoDB의 ObjectId

데이터에는 저마다의 고유한 ObjectId가 있는데 이 값을 프런트엔드 <-> 백엔드 사이에 전송할 경우 String객체로 전송이 되며, 이럴 때는 createFromHexString 메서드를 이용해 다시 객체화 해줘야 쿼리에 사용할 때 제대로 적용이 된다.

Node.js 소스코드에서 ObjectId 객체를 생성하여 createFromHexString 메서드로 객체화 해주는 예제.

2015년 11월 18일 수요일

Node.js 프로그래밍 과정 3일차

2015.11.18 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

RESTful API

Http Method : ‘PUT’

아래와 같이 JSON 형태로 데이터를 보내 전체 수정을 한다.

[{"title":"마션","director":"리들리스콧"},{"title":"토토로","director":"미야자키 하야오"}]​

아래는 일부 수정의 예제.

응답 Action을 Redirect로 지정하면 무한 반복으로 오류가 나므로, res.send() 혹은 res.end() 로 마무리 해야한다. (DELETE도 동일한 현상)

위 현상에 대한 해결책으로, response 객체의 상태값을 ‘301’로 지정해주면 된다.

  • 301 : 신규 load
  • 302 : Cash 데이터 사용

동적 파라메터 사용 시의 주의점

1
2
3
app.get('/movies', function1);
app.get('/movies/list', function2);
app.get('/movies/:id', function3);
cs

위 코드라인에서 app.get('/movies/:id', function3); 구문이 app.get('/movies/list', function2); 구문보다 먼저 있을 경우, URL '/movies/list'를 호출하여도 callback 메서드 function2는 작동하지 않는다.

HTML 렌더링 : Jade

  • 마크업태그 체계에 맞춰 줄바꿈과 들여쓰기를 제대로 해줘야 인식한다.
  • ‘Tab’과 ‘Space’를 혼용하면 안된다.

form을 통해 delete, put 메서드를 보내려면 ‘_method’라는 이름의 입력컨트롤을 생성한 다음 value에 메서드 명칭을 지정하여 전송한다.

2015년 11월 17일 화요일

Node.js 프로그래밍 과정 2일차

2015.11.17 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

1
var obj = {name:'John'};
cs

JSON(Javascript Object Notation)

  • HTML → XML → JSON
  • JAVA의 Map과 같은 key:value 형태
    • Node.js의 모든 데이터는 JSON 형태로 다루어진다. → 데이터 핸들링이 쉽다.

분산처리시스템

분산저장을 하고, 분산연산을 할 수 있어야 한다. RDBMS의 구조로는 분산처리가 어렵다.

스키마에서 필요한 정보만을 분리하여 처리할 수 없기 때문

→ 즉, 분산처리를 하기 위해 모든 데이터는 key:value 형태로 저장된다.(NoSQL DB의 등장 배경)

Hadoop

JAVA로 구현된 빅데이터 분산처리. map() 메서드와 reduce() 메서드 두개의 메서드만 사용.

WORD COUNT

  • map() -> {read:1} {a:1} {book:1} {write:1} {a:1} {book:1}
    • key:value형태로 데이터를 매핑.
  • reduce() -> {a:2} {book:2} {read:1} {write:1}
    • key별로 묶어서 더하기만 한다.

교재 샘플코드 : https://github.com/wannabewize/node-samples 

JSON 다루기

1
2
3
4
5
var str = "{'name':'John'}";
JSON.parse(str); //String 객체를 JSON 객체로 변환
 
var obj = {name:'John'};
JSON.Stringify(obj); //JSON 객체를 String 객체로 변환
cs

2015년 11월 16일 월요일

Node.js 프로그래밍 과정 1일차

2015.11.16 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

패러다임의 변화 - 2008년 NYT 130여개 컨텐츠 PDF로 이전시

  1. 기존 패러다임으로 할 때 소요기간 14년 예상
  2. Hadoop, AWS로 수행 : 1일 200만원 소요

Node.js의 특징

  • DB연동이 쉽다
  • 2009년 라이언 달 제작
  • C++기반의 자바 스크립트 엔진
  • 이벤트에 반응하는 이벤트 리스너로 구현
  • Non-blocking I/O

애플리케이션 서버 작성

  • Apache + PHP
  • 자바 - 스프링
  • 파이썬 - 장고
  • 루비 - 레일즈
  • 자바스크립트 - node.js 

TCP통신과 HTTP통신의 차이

  • TCP통신 : 계속 connection을 유지해야 한다
  • HTTP통신 : 필요할 때만 connection이 유지되어도 된다. 요청을 보내서 응답을 받을 수 있기만 하면 된다.

Node.js를 도입한 곳

  • 링크드인
  • 이베이
  • 페이팔
  • 월마트
  • 페이스북
  • MS

서버에서의 동기식
하나의 서버로 다수의 클라이언트 요청 처리

  • 입출력 처리 병목 현상
    • 디스크 접근
    • 네트워크 접근
  • 서버 성능 향상 노력
    • 멀티 쓰레드를 이용한 성능 향상 노력
    • 멀티 쓰레드 프로그래밍의 난이도 + 자원동기화에 어려움

함수를 다루는 방법

1
2
3
4
5
function sayHello(who){
    console.log('Hello' + who);
}
var func = sayHello;
func('IU');
cs

콜백 - 인라인 방식으로 다시 작성하기

1
2
3
4
5
6
7
8
9
var fs = require("fs");
function readingfile(callback){
    fs.readFile("readme.txt","utf-8",function(err,content){
        callback(content);
    })
};
readingfile(function(fcontent){
    console.log(fcontent);
});
cs

아키텍처

  • 상위 - 자바스크립트
  • 하위 - C

Node.js 설치 후 Hello World 찍기

node.js 설치된 디렉터리에서 js파일 작성 후 실행

웹서버를 작성하여 실행하는 예제

Eclipse를 활용한 개발환경 셋팅

1. nodeclipse plug-in 설치 

2. Perspective를 ‘Node’ 로 변경 

3. 신규 프로젝트 생성 시 Node.js 프로젝트 선택

4. 템플릿을 선택하고 생성 

express와 nodemon 모듈의 전역설치

nodemon의 실행예제 : 서버 restart를 수동으로 할 필요없이 변경내용이 자동 적용됨

필요한 외부 모듈은 npm을 통해 설치 후 사용한다.

Kotlin, SpringBoot 3, GraalVM 환경에서 Native Image로 컴파일하여 애플리케이션 실행

Spring Boot 3부터, GraalVM Native Image를 공식 지원하여 애플리케이션의 시작 속도와 메모리 사용량을 크게 줄일 수 있다. Native Image란 기존의 JVM 기반 위에서 돌아가는 Java 애플리케이션과는 달리 JVM 없이...