Web
개요 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/{..
이번 글은 JetBrain사의 IntelliJ에서 새로운 프로젝트를 생성하고 시작하는 방법 두 가지에 대하여 설명을 해보려고 합니다. 1. 웹 브라우저를 통해 프로젝트 생성하기 https://start.spring.io/에 접속하면 아래와 같은 사이트를 볼 수 있다. Project : 해당 프로젝트에서 사용할 Build Tool을 설정한다. Language : 해당 프로젝트에서 사용할 언어를 설정한다. Spring Boot : 해당 프로젝트에서 사용할 버전을 설정한다. Project Metadata : 프로젝트의 group, name 및 packaging, java version을 설정한다. Dependencies : 해당 프로젝트에서 사용할 디펜던시들을 검색하고 추가하여 손쉽게 디펜던시들을 설정한다. ..
서블릿이라는 단어를 많이 접하게 되었지만 어렴풋이 어떤 일을 하는지만 알고 정확한 정의에 대하여 알지 못하였었다... 또한 Servlet과 Servlet Container등 용어들도 많아 헷갈리기도 일수였던 것 같다.. 자바로 백엔드를 공부하는 나로써 한번 제대로 정리를 해봐야겠다는 생각이 들었고 이번 기회에 Servlet에 대해 다시 한 번 정리해 보는 시간을 가지려한다. 서블릿에 대하여 알아보기 전에… CGI란? CGI는 Common Gateway Interface의 약자로 웹서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약들을 의미한다. 쉽게말해, 사용자의 요청에 의한 서버의 응답이라고 할 수 있다. 왜 CGI가 필요한가요? 초기 웹 서비스에서는 주로 웹사이트에 필요한 정보만을 원하는 ..