Bitnami로 서버 구축 및 외부에서 접속하기(포트포워딩)

콜트·2021년 1월 5일
1

라이징 프로그래머2의 서버반 2주차 과제가 시작되었다. 과제 중 일부인 Bitnami로 서버 구축 및 외부에서 접속 확인까지의 과정을 기록하도록 하겠다.

Bitnami

위키백과에서 Bitnami는 가상 어플라이언스 및 웹 앱, 개발 스택용 소프트웨어 패키지 및 설치 라이브러리라고 서술한다.

쉽게 말하자면, 윈도우 환경에 어플리케이션을 설치할 때 복잡한 과정을 거쳐야 하는 경우가 있는데 이런 복잡한 과정을 거치는 어플리케이션 솔루션들을 패키지로 만들어 이용자가 어플리케이션을 쉽게 설치하게 도와주는 프로그램이라는 뜻이다. 여러 가지 종류의 패키지 프로그램이 존재하며, Bitnami WAMP는 윈도우(Window)에 Apache, MySQL, PHP를 설치해준다.

Bitnami WAMP 설치 및 실행

  1. 먼저, bitnami WAMP에서 아래의 installers 버튼을 눌러 진입한다.

  2. 중앙에 아주 잘보이는 윈도우 로고와 함께 존재하는 노란 버튼을 눌러서 Bitnami WAMP를 다운로드한다.

  3. 인증을 하고 싶다면 해당하는 버튼을 눌러 인증을 진행해도 되지만, 굳이 필요하지 않으므로 아래의 No thanks, just take me to the download 링크를 눌러 다운로드를 진행한다.

  4. 다운로드가 완료되면 해당 파일을 실행시켜서 다운로드를 진행한다.

  5. 맨 아래의 PhpMyAdmin을 제외하고 체크해제를 한 뒤 다음으로 넘어간다.

  6. Bitnami WAMP를 설치할 경로를 설정해준다.

  7. MySQL에 접근할 때, 패스워드를 설정하는 부분이다. MySQL에 접근할 때 root 패스워드가 반드시 필요하다.

  8. MySQL 데이터베이스 포트 번호를 설정해주는 것인데, 현재 사용중이지 않은 포트 번호를 입력해주면 된다(그냥 되어있는대로 두고 다음으로 넘어가도 된다).

  9. Launch wampstack in the cloud with Bitnami의 체크를 해제해주고 다음으로 넘어간다.

  10. 다운로드 중...

  11. 다운로드가 완료되고 Finish를 눌러주면

  12. 다음 화면처럼 bitnami 로고가 있는 화면이 나온다. 이러면 설치가 완료된 것이다. 이 화면에 접근하고 싶다면 브라우저에서 127.0.0.1 또는 localhost로 접근하면 된다.

phpinfo 띄우기

  1. Bitnami를 설치한 디렉토리에서 /wampstack/apache2/htdocs를 살펴보면 index.html 파일이 존재하는데, 이 파일이 방금 브라우저의 127.0.0.1 또는 localhost 에서 확인한 화면을 표시해주는 파일이다.

  2. 마찬가지로, phpinfo를 확인하기 위해 /wampstack/apache2/htdocs 디렉토리에 phpinfo.php 파일을 만들어준다. 내용은 오른쪽 빨간 네모와 같다(본인은 notepad 편집기를 통해 만들었다).

phpinfo.php의 내용

<?php phpinfo(); ?>

  1. phpinfo.php 파일을 만든 뒤, 저장을 완료하고 브라우저에서 127.0.0.1/phpinfo.php 또는 localhost/phpinfo.php로 접근하면 다음과 같이 php 설치 정보 화면을 볼 수 있다.

이제 외부에서 접속할 수 있도록 포트 포워딩을 해보자.

외부 접속을 위한 포트 포워딩

  1. iptime 공유기를 기준으로 192.168.0.1(윈도우 기준 cmd창에서 ipconfig를 입력했을 때 기본 게이트웨이 주소)로 접근하면 공유기 설정화면으로 접근할 수 있다. 공유기 설정에 관해서는 따로 찾아보도록 하자.

  2. 관리도구 화면으로 진입해서,

  3. 왼쪽 메뉴에 있는 포트포워드 설정으로 진입.

  4. 아래쪽에 규칙이름, 내부 IP주소, 프로토콜, 외부 포트, 내부 포트를 설정하고 규칙을 추가해준다.

  • 외부 포트 : 외부에서 어떤 포트로 접속하였을 때 지정된 컴퓨터로 연결할 것인지 설정해준다.
  • 내부 포트 : 외부 포트에서 연결해주었을 때, 내부에서는 어떤 포트를 사용할 것인지 설정해준다.

포트포워딩 설정을 완료하면 http://[외부 IP]:[포트 번호]로 로컬 서버에 접근할 수 있다. findIP.kr에 들어가보면 외부 IP를 확인할 수 있다(참고로 방화벽은 끄고 진행해야 한다).

외부 클라이언트에서 접속 확인

이로써 외부 클라이언트에서 로컬 서버에 접근이 가능해졌다.


포트 포워딩이란?

외부(공인) 아이피로 들어오는 연결을 특정 내부 아이피와 연결하도록 공유기에 설정하는 것을 말한다. 설정을 하지 않으면 외부 아이피로 들어오는 연결은 공유기에 도달하면 끝나버린다. 외부 아이피로 들어온 연결을 어떤 내부 아이피로 보내줄 것인지 판단하지 못하기 때문이다.

참고사항

  • 외부 포트와 내부 포트는 서로 다를 수 있다(80을 8080으로 포워딩 가능).
  • 내부에서 연결하려는 포트는 아이피를 반드시 지정해야 한다.
  • 하나의 포트로 들어오는 연결을 두 아이피로 포워딩 할 수 없다(하나의 포트는 하나의 포워딩만 가능).
  • 공유기가 할당한 아이피에만 포워딩이 가능하다.

포트 포워딩 대신에 DMZ라는 설정을 사용하는 경우가 많은데, DMZ를 사용하게 되면 하나의 컴퓨터로만 모든 포트를 포워딩하는 것과 같다. 그렇게 때문에 여러 컴퓨터에서 서비스나 서버를 운영하게 된다면 DMZ는 큰 문제가 될 수 있다. 또한 DMZ 설정은 결코 보안에도 좋지 않기 때문에 반드시 필요한 포트만 찾아서 포워딩하는 것이 안전하다.


프로토콜이란?

프로토콜(Protocol)공통의 데이터 교환 방법 및 순서에 대해 정의한 의사소통 약속, 규약 혹은 규칙 체계를 말한다.

프로토콜에는 꽤 많은 종류가 있으며 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 하지만 또는 그 순서를 입력해놓은 프로그램도 프로토콜이라고 칭할 수 있다.

가장 주요한 프로토콜은 통신 프로토콜(Communication protocol)이다.

통신 프로토콜(Communication protocol)

"네트워크상 통신회선을 통해서 컴퓨터, 단말기와 같은 시스템 간에 내부적으로 통신, 접속하기 위하여 정보, 자료, 메시지 등을 주고 받는 프로토콜이다."

출처 : 통신 프로토콜

통신 프로토콜에도 꽤 많은 종류가 있으며, 이중 가장 널리 사용되는 통신 프로토콜의 종류는 어느정도 익숙한 TCP/IP 이다.

기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구한다. 여기에는 오류 제어, 통신경로의 선택 등의 제어정보들이 포함된다.

프로토콜은 통신을 위한 물리적, 소프트웨어적 등 여러가지 조건을 취하여 결정한다.

예를 들면 통신 데이터의 포맷(format)이나 전송 문자 등은 통신을 행하는 두 사람 사이에 사전에 결정해두지 않으면 안 된다.

동일한 통신망에 연결되어 있다고 하더라도 같은 프로토콜을 이용하는 컴퓨터들 사이에만 통신할 수 있다.

컴퓨터끼리나 컴퓨터와 단말기 사이와 같이 정보기기 간에 정보교환이 필요한 경우, 상호 간에 접속되어 정보의 오류를 없애거나 최소화함으로써 정보를 원할하게 교환할 수 있게 하기 위해 필요한 여러 가지 통신규칙과 방법의 집합이며 상호 간에 이해할 수 있는 의미 내용을 신뢰성이 유지되도록 표현하는 형식이다.

같은 통신 규약(Communication protocol)을 사용하면 기종과 모델이 달라도 컴퓨터 상호 간에 통신할 수 있게 되고, 각각의 컴퓨터상에서 다른 프로그램을 사용하고 있더라도 컴퓨터 사이에서 데이터의 의미를 일치시켜 프로그램을 동작시킬 수 있게 된다.

서로 프로토콜이 맞으면 통신이 가능하지만 일반적으로 다른 컴퓨터 기종간에는 프로토콜도 다르기 때문에, 이기종간에 정보통신을 하려면 표준 프로토콜을 설정하여 각각 이를 채택하여 통신망을 구축해야 한다.

모든 프로토콜은 크게 세 가지 구성 요소인 구문, 의미, 타이밍으로 이루어져 있다.

여기서 구문은 송수신 데이터 포맷을 의미하며, 의미는 데이터의 각 항목이 가지는 의미를, 타이밍은 데이터 송수신 동작방식의 정의를 의미한다.

단순한 메시지 전송 이외에 다른 노드안의 복수의 프로세스간 상대쪽 파일이나 데이터베이스 등에 대한 엑세스와 처리 신청까지 포함한 통신기능을 실현하기 위해서는 각종 제어정보 수수에 관한 약속을 사전에 엄밀하게 정해 둘 필요가 있다.

이 약속인 프로토콜은 통신기능의 확장과 새로운 통신기술, 방식 도입을 쉽게 하기 위해 적절한 기능 단위로 프로토콜층이라 불리우는 계층으로 분할되어 있다.

프로토콜의 계층구성은 아키텍처에 따라 다소 다르지만 기본적으로는 데이터 전송제어에 관한 계층(물리적 - 전기적 인터페이스, 노드간의 데이터 전송 등을 규정)과 통신처리에 관한 계층(메시지 전송, 파일전송 가상 단말기능 등을 규정)으로 구분하고 있다.


참고자료


profile
개발 블로그이지만 꼭 개발 이야기만 쓰라는 법은 없으니, 그냥 쓰고 싶은 내용이면 뭐든 쓰려고 합니다. 코드는 깃허브에다 작성할 수도 있으니까요.

0개의 댓글