## 개발 일지
### 2020.07.01(수)
### bug fix
- 에러 : primordials is not defined
- package.json 내 추가
{
  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "graceful-fs": "4.2.3"
  }
}
- 원인 : Gulp 3 버전은 node 12 버전에서는 제대로 동작하지 않음
- 출처 : https://nykim.work/70 

### 서버 외부 공개
- 서비스를 외부에 공개할 때는 방화벽을 풀어야 한다. 아래의 명령어를 터미널에서 실행하면, 8080포트가 열린다. 이후 다시 방화벽을 실행한다.
```
firewall-cmd --permanent --add-port=8080/tcp 
firewall-cmd --reload
```
- config.json 내에서 host ip 주소와 포트 번호를 입력
- 익스프레스의 'www(bin폴더 위치)'파일에서 아래처럼 port를 '80'으로 변경해보자. 참고 사항으로 80포트는 모든 도메인의 뒷 부분에 'example.com:80'형태로 붙어 있다. 80은 생략되었을 뿐이다. (관리자 권한에서만 80포트 열 수 있음) conoha의 centOS 7에서 80포트를 열자마자 joywebgl.xyz(예시)는 외부로 오픈
- 출처 : https://webdoli.tistory.com/58

### 공유기에 붙어있는 서버 PC에 고정 Domain 지정
1. 공유기와 도메인 연동이란?
공유기는 외부와 연결되는 공인IP를 내부 사설망 IP인 192.168.0.* 등의 IP로 연결하여 하나의 공인IP를 내부에 존재하는 다수의 네트워크기기와 연결하는 역할을 합니다.
일반적으로 **공유기는 고정 IP가 아닌 유동IP로 연결**됩니다.
따라서, 공유기 내부에 서버를 구축하고 외부에서 접속을 할 때 필요한 **유동 IP는 사람이 기억을 할수가 없으므로 도메인을 연동하면 더욱 편리하게 사용이 가능**합니다.
2. 공유기와 DDNS기능
**공유기 회사에서는 DDNS(Dynamic DNS)를 기본적으로 제공**합니다. 하지만 몇가지 제약조건이 있습니다. **ipTIME같은 경우에는 원하는 호스트명.iptime.org 와 같은 형식으로 DDNS를 제공할뿐, 일반적인 .com .net과 같은 독립도메인에 대한 연동은 제공하고 있지 않습니다.** (dyndns.org 업체의 DDNS연동기능을 제공하기는 하지만, 이럴 경우 dynDNS 의 서비스를 가입해야 합니다.)
3. 공유기 자체의 DDNS와 도메인을 연동하는 개념
먼저 **공유기 자체의 DDNS기능을 설정하여, 다이나믹 DNS 호스트명**을 만듭니다. 예를 들어 ipTIME 공유기의 경우에는 공유기호스트명.iptime.org 의 형식이 됩니다.
이를 **회원님의 도메인(예: domain.com)을 연동하기 위해서는 DNSEver.com 에서 도메인추가를 한 다음에, “도메인 별명(CNAME)관리”에서 원하시는 서브도메인과 공유기호스트명.iptime.org를 연결**하면 됩니다.
기본적으로 루트도메인(도메인에 www 등 서브 도메인이 없는 기본 도메인. 예: domain.com)에는 CNAME를 “도메인 표준 규약”상 만들수 없습니다. 이를 극복하기 위하여 DNSEver에서는 **루트도메인에 CNAME를 입력할 경우, 목적지 도메인명(공유기호스트명.iptime.org)을 자동으로 해석하여 이를 A레코드의 결과값인 IP주소로 반환**하게 됩니다.
따라서, **DNSEver에서 “도메인 별명(CNAME) 관리”에서 어떠한 서브도메인을 입력하더라도 이를 회원님이 설정한 공유기호스트명.iptime.org 로 연결**할 수 있는 것입니다.
4. ipTIME공유기에서 도메인연동하는 방법(화면보면서 따라하기)
시작하기 전에 ipTIME 공유기 자체의 DDNS를 사용하기 위해서는 ipTIME 펌웨어 버전을 9.52 이상으로 업데이트해야 합니다.
관련공지: http://iptime.com/iptime/?page_id=16&pageid=1&mod=document&keyword=ddns&uid=14724
1. ipTIME의 **“시스템 요약 정보”에 보면 “외부 IP 주소”라고 되어 있는 부분이 공유기에 연결된 공인IP**입니다.
(스샷화면의 예에는 1.2.3.4로 되어 있지만, 공유기마다 다르게 나올 것입니다)
- 출처 : https://support.dnsever.com/hc/ko/articles/219800547-ipTIME-등-공유기에-도메인을-연동하는-방법

### 공유기 추가 설정
-  서버의 내부 ip를 고정해야 합니다. iptime의 공유기는 기본적으로 유동 ip를 제공합니다. 컴퓨터가 네트워크에 접속할 때마다 새로운 주소를 부여하는 방식입니다. 하지만 이 방식으로는 서버에서 사용할 서비스를 연결할 수 없으니 서버의 ip를 고정
- 컴퓨터의 네트워크 서비스는 각각 포트라고 불리는 특정한 숫자값을 가지게 됩니다. 외부에서 처음에 등록한 DDNS로 접속할 때 지정된 서비스 포트로 요청을 하면 공유기에서는 이 포트 포워딩을 통해 내부 네트워크의 서버 컴퓨터에게 해당 서비스를 요청(포트포워딩)
- 대부분 정의된 포트이기 때문에 49152번 ~ 65535번 사이에서 선택하면 대부분 안전
- 공유기 접속/보안관리 탭내에서 **원격관리포트사용에 추가** 8080 필수
- 출처 : https://danbis.net/13101

### 호스트, 포트 설정
 ip와 port의 차이
ip라는건 내 컴퓨터로 도달하게 하는것
port는 application 레이어
 hostname에 내부 ip를 넣어주면 같은 공유기환경이면 모바일에서나 다른 컴퓨터에서나 접속가능한 서버
const hostname = "192.168.0.2" ; // localhost, 127.0.0.1 ...
const port = 3001; //
- 기본적으로 http는 80포트, ftp는 21포트로 통용되는데, 인터넷 서비스 사업자가 80포트를 막아놓았을 경우
포트포워딩상에서, 외부포트를(80/8080/8000) 으로 나두고, 내부포트를 80포트로 지정하면된다.

### 서버 PC 내 방화벽 포트 예외 설정
- 제어판, 방화벽 내에서 포트 예외 설정을 해주어야 함
이름 : www or web 포트 : 80
- 이제 공유기까지는 접속가능하지만 공유기에서 연결된 기기와 통신하기 위해서는 포트포워드를 설정해주어야 합니다. 개념을 간단히 설명하자면 외부에서 어떤 포트를 통해 공유기에 접속하면, 자동으로 다른 연결된 기기의 다른 포트와 이어주는 기능
- 외부에서 접속할 포트 번호 (웹 서버임으로 첫번째 칸에만 80
- 내부로 연결시킬 포트 번호 (예시의 node.js 포트를 3000으로 해두었으니, 첫번째 칸에만 3000을 적으면 됩니다.
- 출처 : https://royalturtles.tistory.com/5


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기