간단하지만 여러가지 기술들을 조합해서 만든 사이트

일단

http://crazia.org

입니다. 별거 아니지만 누르고 들어가면 https://crazia.org 로 바뀝니다. 정말 너무 일반적인 형태의 웹사이트로 보이지만 나름 최신 기술들로 잘 버무려져 있습니다. http2 도 지원함 ㅋㅋ

1 AWS 의 Certificate Manager 를 이용해서 SSL 인증서를 발급 받았습니다.

  • 혁신적이죠. 기존에는 항상 싼 SSL 인증서를 사서 사용했는데, 여기는 클릭 몇번으로 공짜로 인증서를 받을 수 있습니다.

2 AWS 의 ELB (Elastic LoadBalancer) 를 사용하고 ELB 에 인증서를 포함시켰습니다.

  • 기존에는 NginX 에 인증서를 포함시키는 방법을 썼는데 이제는 이렇게 하는게 편하더군요. 알아서 갱신까지 해줘서 설정만 해주면 문제 없습니다.

3 Nginx 를 사용했습니다.

  • 웹서버는 Nginx 죠!! 아파치는 이제 설정하는 법도 까먹었네요 ㅎㅎ
  • SSL 인증서가 ELB 에 있기 때문에 기존에 SSL 인증서 가진 웹서버 세팅으로는 TOO_MANY_REDIRECT 가 발생할 수가 있습니다.
    server{
       listen 80;
    
       server_name crazia.org;
    
       access_log /var/log/portfolio_access.log;
       error_log /var/log/portfolio_error.log;
    
       if ($http_x_forwarded_proto != 'https') {
         rewrite ^ https://$host$request_uri? permanent;
       }
    
       server_tokens off;
       location / {
             proxy_pass http://localhost:3000/;
             proxy_set_header Host $http_host;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_redirect  off;
     }
    
      gzip on;
      gzip_disable "msie6";
    
      gzip_vary on;
      gzip_proxied any;
      gzip_comp_level 6;
      gzip_buffers 16 8k;
      gzip_http_version 1.1;
      gzip_types text/plain text/css application/json \
        application/x-javascript text/xml application/xml \ 
        application/xml+rss text/javascript
    }
    

    이렇게 80 포트만 신경 써주면 됩니다.

4 clojure 를 사용했습니다.

  • 무지하게 마이너 언어지만 제가 사랑하는 언어입니다.
  • 리습의 방언(dialect) 이고 JVM 기반의 프로그래밍 언어입니다.

5 Luminus 를 사용했습니다.

  • clojure 의 웹프레임워크중의 하나입니다. 그나마 자동화가 많이 되어 있고, 프레임워크 구조 설계가 좋아서 종종 애용하고는 합니다.

6 Jetty 임베디드 방식입니다.

  • WAR 를 만들고 앱엔진에 배포하는 방식이 아니라 Jetty 를 임베디드 시켜서 jar 파일 한개로 앱엔진 + WAS 의 기능을 하게 만들어 주는 것입니다.
  • 일반 스크립트 형 WAS 랑 차이가 뭔가? 바로 그 방식과 유사한 것입니다.

7 Bootstrap 을 이용해서 간단한 화면을 구성했습니다.

  • 말이 필요 없는 그 부트스트랩 입니다.
  • HTML, CSS, JS 를 한꺼번에 알맞게 제공해주죠. 저 같은 디자인 고자(?) 도 대충 이쁜 사이트를 구성하는게 가능해집니다.

8 Systemd 를 이용해서 관리합니다.

  • Ubuntu 16.04 부터 자주 이용해야 하는 관리 스크립트입니다.
  • /lib/systemd/system/myapp.service 위치에 스크립트를 만들고
    [Unit]
    Description=My Application
    After=network.target
    
    [Service]
    WorkingDirectory=/var/myapp
    EnvironmentFile=-/var/myapp/env
    Environment="DATABASE_URL=jdbc:postgresql://localhost/app?user=app_user&password=secret"
    ExecStart=/usr/bin/java -jar /var/myapp/myapp.jar
    User=deploy
    
    [Install]
    WantedBy=multi-user.target
    

    이와 같이 만들어주고 저장하고

    sudo systemctl daemon-reload
    sudo systemctl start myapp.service
    

    스크립트를 인식시키고 시작하면 됩니다. start|stop|restart 가 될 것이고요.

    sudo systemctl enable myapp.service
    

    인스턴스가 재부팅시에 자동으로 시작되게 세팅도 가능합니다. (멋진 기능!!)