Closed Win-9 closed 1 month ago
AWS의 비용과 프리티어의 성능 이슈로 인해 필자가 구축한 홈서버에서 배포를 진행하고 있다.
클라이언트에서 API 요청을 위한 자바스크립트에 IP가 그대로 노출되면 해킹 위협에 노출이 될 수 있다고 생각하였고,
프론트 개발자의 번거롱무 또한 증가할 것이라고 생각하였다.
이러한 이유에서 도메인을 적용하기로 하였다.
우선 도메인을 구매하자.
가비아와 같은 유명한 사이트도 있지만, 비교적 저렴한 호스팅 kr에서 도메인을 구매하였다.
kr 도메인을 연간 9800원이라는 저렴한 가격에 구매할 수 있었다.
IP는 크게 두가지가 존재한다.
공인 IP와 사설 IP가 존재한다.
홈서버는 외부에 노출되지 않기 때문에 외부에서는 공인 IP를 기반으로 접속해야 한다.
공인 IP를 레코드에 추가시켜 주도록 하자.
도커 컴포즈로 등록한 두개의 서비스를 접근하도록 할 것이기 때문에 A레코드에 공인 IP를 연결해주자.
도메인 없이 포트포워딩만을 적용시킨다면 공인IP:port 만으로 내부 서비스로 쉽게 접근이 가능하기 때문에
쉽게 해결할 수 있을 것이라고 생각했다.
그러나 A레코드는 포트를 기술하는 것이 불가능하다. 그렇다면 바로 등록한 레코드를 접근하게 되면 AP 설정 페이지로 리다이렉트가 된다.
따라서 Nginx를 이용해서 ip 접근시 80포트로 리다이렉트가 되면서
각 서비스로 요청이 가능한 리버스 프록시 전략을 사용하도록 했다.
우선 nginx를 설치하자.
$ apt-get install nginx
이후, /etc/nginx/sites-available
경로의 default 파일을 편집기로 열어 서브도메인으로 사용할 가상호스트 설정들을 추가해준다.
$ vi /etc/nginx/sites-available/default
# ... 기존 설정 ...
# 가상 호스트 설정
server {
listen 80;
listen [::]:80;
server_name 첫 A레코드 도메인/;
location / {
proxy_pass http://localhost:portNum/; // focus
}
}
server {
listen 80;
listen [::]:80;
server_name 두번째 A 레코드 도메인/;
location / {
proxy_pass http://localhost:portNum/; // imagehost
}
}
설정 파일에 추가를 완료했으면 Nginx를 재시작하여 변경사항을 적용한다.
### nginx 재시작
$ systemctl restart nginx
기존에는 외부에서 접근하려는 포트를 내부에서 서비스 하는 포트로 그대로 매핑시켜 주었다.
그러나 지금은 Nginx를 사용하기 때문에 외부의 80포트를 내부 nginx 포트인 80으로 매핑시켜 주었다.
이제 설정한 도메인으로 각 요청을 보내면 각자 다른 서비스로 요청이 보내지는 것을 확인할 수 있다.
이후 다른 서비스를 제작할 때에도 다른 EC2를 추가로 사용하지 않고 확장시킬 수 있다!
[x] 엔드포인드 네이밍 변경
[x] 도커를 이용하여 호스팅서버를 같이 빌드하도록 구현
[x] Response Key 이름 변경
[x] 이미지 호스팅 서버 배포시 저장 위치 오류
[x] text -> content 변경
[x] 책갈피 response 시 관련 책 정보 전체 표시
[x] api 대소문자
[x] title기준 등록을 id 기준으로 변경
[x] id값 integer에서 string으로 변경
[x] 이미지 값 필수가 아닌 선택으로 변경
[x] base response 값 변경
[x] 도메인 분리하기
[x] validation 사용으로 이상 체크