일단
입니다. 별거 아니지만 누르고 들어가면 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 기반의 프로그래밍 언어입니다.
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
인스턴스가 재부팅시에 자동으로 시작되게 세팅도 가능합니다. (멋진 기능!!)