Web/Server
개요 SSH Tunneling을 통해 특정 애플리케이션에 접근해야하는 경우가 있을 수 있다. 예를들어, VPC 내부에서만 접근할 수 있는 RDS가 있다고 한다면 호스트에서 바로 RDS로 접근은 불가능하다. RDS에 접근하는 방법으로는 VPC 내부에 있는 EC2(외부에서 접속이 가능한)를 통해서 접근하는 방법이 있다. 이를 SSH Tunneling으로 특정 포트를 포워딩 시켜둔다면 호스트에서는 localhost:{특정 포트}를 사용해 RDS를 접근할 수 있게 된다. 위의 예시 상황에서 RDS에 접근해야하는 곳이 로컬(macOS)가 아닌 로컬에서 실행중인 도커 컨테이너이라고 가정해보자. 만약 network의 세팅값을 특별히 지정하지 않았다면 도커 컨네이너에서 localhost:{특정 포트}를 사용해 RDS를..
이번 글에서는 Apache가 제공하는 mod_proxy 모듈을 사용해 리버스 프록시를 구현해보려고 합니다. 프록시에 대해서 모든 것을 설명하기에는 벅차기 때문에 이번 글에서는 간단히 프록시가 무엇이고, 포워드 프록시와 리버스 프록시의 차이점에 대해서만 설명해보려고 합니다. 프록시란? 프록시 서버는 서버와 클라이언트 사이에 위치하여 요청이나 응답을 중계하는 역할을 하는 서버라고 할 수 있습니다. 다시 말하면 클라이언트에서 보내는 요청을 프록시 서버에서 대신 처리하게끔하여 일종의 대리인이 될 수도 있습니다. 즉, 아래 그림과 같이 클라이언트에서 요청을 보내면 프록시 서버가 중간에 위치하여 요청에 대하여 검증을 한다거나 부가적인 작업을 수행할 수 있게됩니다. 포워드 프록시? 리버스 프록시? 어찌됐든 프록시 서..
이번 글에서는 HTTPS가 무엇이고, Apache에서 HTTPS를 구현하기 위해서 동작 과정과 인증서를 생성하고 설정하는 방법에 대하여 살펴보고자 합니다. HTTPS란? HTTPS란, HTTP over TLS, HTTP over SSL, HTTP Secure라고 불리며, 기존 HTTP가 평문으로 전달되는 통신 과정에서 안전하지 못한 문제점을 HTTP의 데이터를 SSL/TLS로 암호화하여 안전한 통신을 보장하기 위해 사용되는 프로토콜입니다. 또한, HTTP의 경우 80번 포트를 사용하는반면 HTTPS는 443번 포트를 사용하게 됩니다. HTTPS의 동작 원리 HTTPS가 이뤄지는 과정, 즉 SSL Handshake는 크게 3단계로 설명할 수 있습니다. Hello 교환 인증서 교환 키 교환 이 과정을 그림으..
Apache는 특정 디렉토리에 접근할 때 사용자의 ID와 패스워드를 요구하도록 설정할 수 있는 기능을 제공합니다. 이러한 인증 기법에는 여러 가지가 있지만 이번 글에서는 Basic과 Digest를 다뤄보려고 합니다. Basic 인증 HTTP Basic Authentication이라고도 불리며, 일반적으로 사용자의 ID와 패스워드를 정의한 파일을 이용해 사용자 인증을 처리하게 됩니다. Basic 인증을 사용하기 위해서는 mod_auth_basic이라는 모듈이 필요하며, 이는 httpd 패키지를 설치하면 일반적으로 사용할 수 있습니다. Basic 인증은 클라이언트(ex)브라우저)가 보내는 인증에 대한 정보는 Base64로 인코딩이 되어 평문으로 전달되기때문에 안전하다고는 할 수 없다고 합니다. Base64란..
이번 글에서는 Apache 웹서버가 제공하는 CGI와 UserDir에 대해서 살펴보고자 합니다. CGI란? CGI는 Common Gateway Interface의 약자로 서버 사이드 스크립트와 웹 서버가 서로 통신하는 방법을 정의한 것입니다. 만약 사용자가 정적인 콘텐츠(HTML같은 콘텐츠)가 아닌 동적인 콘텐츠를 요청한다면, 웹 서버는 이러한 요청을 처리하기 위해서 서버 사이드 스크립트(Python, node.JS, Perl, php 등)를 사용해 처리해야한다. 문제는 웹 서버가 바로 서버 사이드 스크립트를 사용할 수 없다는 것이다. 즉, 웹 서버와 서버 사이드 스크립트를 이어주는 다리가 필요한 셈이다. 여기서 '다리'가 바로 CGI인 것이다. 예를들어, 웹 페이지에서 사용자가 로그인을 ..
웹 서버란? 웹 서비스는 서비스를 제공하는 서버 부분과 이를 이용하는 클라이언트로 구성이 된다. 사용자들이 이용하는 웹 브라우저가 대표적인 클라이언트 중 하나이다. 이에 반해 클라이언트에게 서비스를 제공하는 서버 프로그램을 웹 서버라고한다. 다시말해 클라이언트가 서버에게 특정 리소스를 요청하면 웹 서버는 요청에 따른 리소스를 반환해주게 된다. 대표적인 웹 서버 프로그램으로는 Apache, Nginx, IIS등이 있다. Apache란? 웹 서버 프로그램 중 하나로 아파치 소프트웨어 재단에서 제공하는 대표적인 오픈소스 HTTP 서버이다. Apache는 자체적으로 다양한 기능을 제공하지만, 다양한 종류의 서드파티 모듈 설치를 통해 여러 기능들을 사용자 환경에 맞게 언제든지 추가와 삭제가 가능하고, 그 업데이트..
배포 환경 AWS EC2 Ubuntu 16.04.6 AWS RDS MySql Spring Boot 2.2.9 Java 11 ( 해당 글은 EC2와 RDS를 사용해봤다는 전제하에 작성함. ) 1. DB 설정 JPA와 MySql을 사용하기 위한 의존성 추가 # build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-jpa' compile 'mysql:mysql-connector-java' application.yml 설정 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/{..
배포 환경 AWS EC2 Ubuntu 16.04.6 1. git 설치 여부 확인 $ git --version => git version정보가 잘 출력된다면 설치되어있는 것. git이 설치되어 있지 않다면 아래 명령어를 통해 git 설치 $ sudo apt-get install git 2. nvm 설치하기 $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash 3. nvm 활성화하기 $ . ~/.nvm/nvm.sh 4. nvm에 node 설치하기 $ nvm install node 5. node 설치 확인 $ node -v => 설치된 node의 version정보가 잘 뜨면 설치 완료 [참고] nvm에서 node 버전..
이 글은 nginx, python이 모두 설치되어 있고 도메인을 가지고 있는 상태에서 따라하시면 됩니다. 테스트 환경 AWS EC2 (Ubuntu 16.04.6 LTS) nginx/1.10.3 Python 2.7.12 1. Certbot 설치하기 apt에 repository를 추가해줍니다. $ sudo add-apt-repository ppa:certbot/certbot apt를 업데이트 해줍니다. $ sudo apt-get update python-certbot-nginx 를 설치해줍니다. $ sudo apt-get install python-certbot-nginx 2. nginx 설정에 도메인을 설정하기 $ sudo vi etc/nginx/sites-available/default 설정파일을 에디터..