마이크로서비스를 로컬에서 실행하기

마이크로서비스를 로컬에서 실행하기

이 모듈에서는 로컬 컴퓨터에서 단일 서비스를 개발할 때 필요한 다양한 측면을 배워요. 코드를 작성할 필요는 없고, 기존 서비스인 ratings를 빌드하고, 실행하고, 테스트해요.

출처: Istio 문서

본문

마이크로서비스 아키텍처가 등장하기 전에는 개발팀이 전체 애플리케이션을 하나의 큰 소프트웨어 덩어리로 빌드하고, 배포하고, 실행했어요. 모듈의 작은 변경을 단위 테스트만으로가 아니라 제대로 테스트하려면 개발자들은 전체 애플리케이션을 빌드해야 했어요. 그래서 빌드에 많은 시간이 걸렸어요. 빌드 후에는 자신의 애플리케이션 버전을 테스트 서버에 배포했어요. 테스트 서버는 원격 머신이나 로컬 컴퓨터에서 실행했는데, 후자의 경우 로컬 컴퓨터에 꽤 복잡한 환경을 설치하고 운영해야 했어요.

마이크로서비스 아키텍처 시대에는 개발자들이 작은 소프트웨어 서비스를 작성하고, 빌드하고, 테스트하고, 실행해요. 빌드가 빨라요. Node.js 같은 현대적인 프레임워크를 쓰면 복잡한 서버 환경을 설치·운영하지 않아도 단일 서비스를 테스트할 수 있어요. 서비스가 일반 프로세스로 실행되기 때문이에요. 단지 테스트하기 위해 어떤 환경에 서비스를 배포할 필요도 없어요. 즉, 서비스를 빌드하고 로컬 컴퓨터에서 즉시 실행하면 돼요.

이 모듈은 로컬 머신에서 단일 서비스를 개발할 때 관련된 다양한 측면을 다뤄요. 코드를 작성할 필요는 없어요. 대신 기존 서비스인 ratings를 빌드하고, 실행하고, 테스트해요.

ratings 서비스는 Node.js로 작성된 작은 웹 앱으로 혼자서 실행될 수 있어요. 다른 웹 앱들과 비슷한 동작을 수행해요.

  • 파라미터로 받은 포트에서 리슨해요.
  • /ratings/{productID} 경로에서 HTTP GET 요청을 기대하고, 클라이언트가 productID로 지정한 값과 일치하는 제품의 평점을 반환해요.
  • /ratings/{productID} 경로에서 HTTP POST 요청을 기대하고, productID로 지정한 값과 일치하는 제품의 평점을 업데이트해요.

앱의 코드를 다운로드하고, 의존성을 설치하고, 로컬에서 실행하기 위해 다음 단계를 따르세요.

  1. 서비스의 코드와 패키지 파일을 별도의 디렉터리에 다운로드하세요.
$ mkdir ratings
$ cd ratings
$ curl -s https://raw.githubusercontent.com/istio/istio/release-1.31/samples/bookinfo/src/ratings/ratings.js -o ratings.js
$ curl -s https://raw.githubusercontent.com/istio/istio/release-1.31/samples/bookinfo/src/ratings/package.json -o package.json
  1. 서비스의 코드를 훑어보고 다음 요소들을 주목하세요.
  • 웹 서버의 기능: 포트 리슨, 요청·응답 처리
  • HTTP 관련 측면: 헤더, 경로, 상태 코드

Node.js에서는 웹 서버의 기능이 애플리케이션 코드에 내장돼 있어요. Node.js 웹 애플리케이션은 독립적인 프로세스로 실행돼요.

  1. Node.js 애플리케이션은 JavaScript로 작성되어 명시적인 컴파일 단계가 없어요. 대신 just-in-time 컴파일을 사용해요. 그러므로 Node.js 애플리케이션을 "빌드"한다는 것은 의존성을 설치한다는 뜻이에요. 서비스 코드와 패키지 파일을 저장한 폴더에서 ratings 서비스의 의존성을 설치하세요.
$ npm install
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN ratings No description
npm WARN ratings No repository field.
npm WARN ratings No license field.

added 24 packages in 2.094s
  1. 파라미터로 9080을 전달해 서비스를 실행하세요. 그러면 애플리케이션이 포트 9080에서 리슨해요.
$ npm start 9080
> @ start /tmp/ratings
> node ratings.js "9080"
Server listening on: http://0.0.0.0:9080
  1. 브라우저에서 http://localhost:9080/ratings/7을 열거나, 다른 터미널 창에서 curl 명령으로 ratings에 접근하세요.
$ curl localhost:9080/ratings/7
{"id":7,"ratings":{"Reviewer1":5,"Reviewer2":4}}
  1. curl 명령의 POST 메서드를 사용해 제품의 평점을 1로 설정하세요.
$ curl -X POST localhost:9080/ratings/7 -d '{"Reviewer1":1,"Reviewer2":1}'
{"id":7,"ratings":{"Reviewer1":1,"Reviewer2":1}}
  1. 업데이트된 평점을 확인하세요.
$ curl localhost:9080/ratings/7
{"id":7,"ratings":{"Reviewer1":1,"Reviewer2":1}}
  1. 서비스를 실행 중인 터미널에서 Ctrl-C를 사용해 서비스를 중지하세요.

축하합니다, 이제 로컬 컴퓨터에서 서비스를 빌드하고, 테스트하고, 실행할 수 있어요!

이제 서비스를 컨테이너로 패키징할 준비가 됐어요.

더 알아보기 (Learn more)