간단한 Clojure API 서버 배포하기 (aws beanstalk)

버들비·2021년 4월 18일
1

사용 라이브러리

  • ring(http)
  • compojure(라우팅)
  • ring-json (clojure의 map 을 json 응답으로 만들어준다)

프로젝트 소스코드

콘솔에 lein new compojure PROJECT_NAME 을 입력하면 ring 과 compojure 기반의 프로젝트 템플릿이 생성된다.
프로젝트 폴더 구성은 다음과 같다.

  • resources
    html, css, javascript 등의 파일이 위치할 폴더. 이번 프로젝트는 API 서버를 만드는 것이니 쓸일 없다.
  • src
    http 통신을 담당할 handler가 있는 폴더.
  • target
    빌드파일 폴더.
  • project.clj
    노드 프로젝트의 package.json 처럼, 프로젝트에 쓰이는 라이브러리를 정의하는 파일.

handler.clj 의 소스코드는 다음과 같다.

(ns cheshire-cat.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]
            [ring.middleware.json :as ring-json]
            [ring.util.response :as rr]))

(defroutes app-routes
  (GET "/" [] (rr/response {:name "home" :status "good"}))
  (GET "/cheshire" [] (rr/response
                       {:name "Cheshire cat"
                        :status :grinning}))
  (route/not-found "Not Found"))

(def app
  (-> app-routes
      (ring-json/wrap-json-response)
      (wrap-defaults site-defaults)))

각 라우팅 / 과 /cheshire 에 대해 json 응답을 하는 api 서버 코드 작성 끝.

배포는 aws beanstalk 를 사용할 것이다.

lein-beanstalk 라고 beanstalk 배포를 자동으로 해주는 CLI 라이브러리가 있는데, No Solution Stack named '32bit Amazon Linux running Tomcat 7' found. 라는 에러를 내뱉는다.
aws 가 더이상 32비트 리눅스 서버를 지원 안하는듯.
좀 오래된 라이브러리라서 그런지 최신환경에서는 작동을 안하는 것 같다 (가장 마지막 commit 이 7년전).

AWS Beanstalk 로 배포

  1. 새 환경 생성 버튼을 누른다.

  1. 웹서버 환경을 선택

  1. 애플리케이션 이름, 환경이름, 도메인 이름을 작성한다. 테스트 환경이니 적당히 적어도 된다.

  1. clojure 는 자바가상머신 위에서 돌아가므로, 자바 컨테이너인 tomcat 위에 배포할 것이다. aws 가 추천해준 default 설정으로 진행.

  1. 파일 선택을 눌러 코드를 업로드 해준다. 클로저 프로젝트를 빌드하면 생기는 target 폴더안에 ~~~.war 파일을 업로드 해준다.

  1. 환경생성을 누르고 몇분 기다리면 api 서버 배포가 끝난다. 배포가 끝난 url 을 눌러 확인해보면 라우팅에 따라 알맞은 json 응답이 오는걸 확인할 수 있다.

0개의 댓글