우리는 서버를 2대 사용 예정 (리액트, express)
리액트 : html 파일 1개, JS 파일 1개, CSS 파일 1개, 이미지들 (기본적으로) => 웹팩으로 1개로 만들어줌
webpack !== server
리액트 : Single page application (페이지의 이동이 없다.) -> 페이지 여러개 있는 것처럼 보이는 것 뿐
프록시 서버 : 브라우저들이 프록시 서버에 요청하면 응답을 줌
: 프록시 서버(영어: proxy server 프록시 서버)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 또한 외부와의 트래픽을 줄이게 됨으로써 네트워크 병목 현상을 방지하는 효과도 얻을 수 있게 된다.
리액트 -> 정적인 파일들만 던져줌 / 프록시 서버가 리액트한테 툭툭 던져줄 것
리눅스 사용 예정
Front server : 리액트
Back server : express(node.js, DB) -----실제는 원래 DB도 하나의 server 하지만 우리는 이번에 프론트,백만 나눌것 !
브라우저 ----------요청-------> Front server -----------요청이래~----------> Back end ------> DB
브라우저 <-------여기 응답-----Front server <--------ㅇㅇ요기 응답--------- Backend <------ DB
TCP 22번 80, 443port 이해하기
22번 : SSH 관련 - 내 컴퓨터에서 server로 접속하는 아이 / 터미널로 상대방의 컴퓨터를 조작할 수 있게 함
80번 : 우리가 늘 쓰던 3000번 포트를 이제 80번 포트로 사용 예정 -> 다른 컴퓨터에서 이 서버에 입장 가능
http와 관련된 포트 번호 (브라우저에서 쓰는 인터넷 통신 포트)
443번 : https <- s 추가됨
AMAZON AWS 배포 & KEY PAIR 생성
1. amazon ec2 들어가서 회원가입
회원가입할 때 무료 버전으로 들어가기
12개월 무료 선택
https://aws.amazon.com/ko/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Categories=categories%23compute&trk=ps_a134p000006gGh2AAE&trkCampaign=acq_paid_search_brand&sc_channel=PS&sc_campaign=acquisition_KR&sc_publisher=Google&sc_category=Cloud%20Computing&sc_country=KR&sc_geo=APAC&sc_outcome=acq&sc_detail=amazon%20ec2&sc_content=EC2_e&sc_matchtype=e&sc_segment=477203497843&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Cloud%20Computing|EC2|KR|EN|Text&s_kwcid=AL!4422!3!477203497843!e!!g!!amazon%20ec2&ef_id=Cj0KCQjwub-HBhCyARIsAPctr7y9NRG-Jz6SNMzrv-y06xCLfyGjwI_xH8jwmISvp0043x0QK6rfjfEaAq7JEALw_wcB:G:s&s_kwcid=AL!4422!3!477203497843!e!!g!!amazon%20ec2&awsf.Free%20Tier%20Types=*all
2. 가상 머신 시작 click!
3. Ubuntu server 20.02 LTS 선택
4. 검토 및 시작 클릭 ! (디폴트 값으로 파란 버튼1)
5. 단계 6 : 보안 그룹 구성 클릭
다른 사람들이 요 포트로 들어오면 허용하겠다. 의미
0.0.0.0/0 의 의미 -> 어떤 IP 든 오게이~
규칙 기본(http, https) 추가 -> 검토 및 시작 클릭
6. '시작하기' CLICK !
7. 새 키페어 생성
키 페어 : IP / 비번 + 키 페어(암호키) 가 있어야 접속할 수 있게끔 허용 (열쇠같은 존재)
키 페어 없으면 접속이 안됨 !
키 페어 생성 + 이름 생성
키 페어가 있다면 기존꺼 써도 됨
visual studio 에 저장하고 gitignore 해놓기 !
(사진에 나온 front 가 아닌 back 에 저장해야함 )
다른 사람이 악용 가능 ** 하므로 꼭 gitignore
터미널 명령어 파워셀도 front, back 으로 나누기
↓↓ 요렇게
-> 인스턴트 시작
8.인스턴스 보기
9. 이름 설정
10. 인스턴스 접속해보기
VS로 돌아와서 터미널 back 폴더까지 들어오기 + 명령어 입력
해당 인스탄스 클릭 -> 연결 클릭 -> SSH 클라이언트
여러개의 복사 가능한 것들이 나오는데 그 중 맨 아래의 예를 복사 (가장 마지막 것!) -> vs 터미널에 입력 , 엔터 -> 무슨 질문 나오면 yes 입력
터미널 창에 초록색 글자가 나온다. : 지금 접속이 됨
의미 : 계정 @ 주소값
** ERROR pem 파일접속 시 접속 권한이 없었다 하면 아래 내용 참고 !
https://techsoda.net/windows10-pem-file-permission-settings/
리눅스 명령어
리눅스 명령어 | |
ls | 현재 디렉토리 내용 보기 (현재 위치 기준) |
cd / | 최상위 디렉토리로 |
ls -al (-al같이 뒤에 띄어쓰기 후 붙는 건 옵션이라고 함) |
디렉토리 상세하게 보기 |
pwd | 내 경로 보기 |
나오는 명령 형식 d rewx r-x r-x 계정명 계정명 root -> 최고 관리자만 조작할 수 있는 앞에 알파벳의 의미 d : 디렉토리 l : 바로가기 (symbolic link) 아무것도 없는 경우 (-) : 파일 이라는 뜻 cd ~ : 우리가 사용할, 작업할 디렉토리 공간 |
12. Node.js, mysql 설치하기 (조금 긴 부분)
Node.js 있는지 확인 명령
node -v
mysql 있는지 확인 명령
mysql
Node.js 다운받는 명령어
- 아래 5가지 명령어를 차례대로 입력하기
sudo apt-get update
sudo apt-get install -y build-essetial
sudo apt-get install curl
curl -sL http://deb.nodesource.com/setup_14.x | sudo -E bash --
sudo apt-get install -y node.js
* 위의 명령어 실행 후 아래 명령어로 버전 확인 (다운 잘 되었는지 쳌)
node -v
npm -v
sudo 뜻 : 최고 관리자 관련
4 번째 : 웹주소에 접근할 수 있는 node.js 14인 이유 : 우리가 설치한 node.js 도 14라서 !
MYSQL 설치 명령어
sudo apt-get install mariadb-server // -> y/n? 나오면 y 입력
sudo apt-get install mariadb-client
* 잘 설치되었는지 확인
mariadb --version
* DB도 server이기 때문에 server, client 설치
계정 변경
현재 계정이 ubuntu 로 접근하고 있는데 아래 명령어 실행하면 최고 관리자로 실행하겠다
sudo su
계정이 -> root로 바뀜
* sudo를 입력해서 할 수 있는 건 사용자들이 접근할 수 없다. 다른 사용자가 접근할 수 있도록 아래 명령어 실행
mysql_secure_installation
mysql_secure_installation
그 다음 mysql 비밀번호 생성/변경
test용으로 하기 위한거고 설치를 좀 더 쉽게하기 위함이다 production environment 진짜 배포를 하게되면 삭제를해라 의미 같다. 일단은 y 입력 ! (일단 모두 y를 클릭하는데 내용을 읽어보면 좋을 것 같다)
이것도 마찬가지로 test라는 이름의 데이터베이스로 누구나 접근할 수 있고 test를 위함이며 나중에 실제 고객들이 사용하게되면 이것을 삭제해라
일단은 y
모두 y를 클릭하고 설치 완료 !
-> mysql 잘 설치되었는지 확인
exit
mysql -uroot -p비번 //입장
use mysql //mysql db로 입장
방금 위에서 생성한 password 입력
명령창이 MariaDB[(none)]> 으로 바뀌어 있다.
ubunt계정에서도 쉽게 mysql 들어갈 수 있도록 설정 조금 더해주기
root의 비번을 한 번 더 바꿔줘야함
show databases;
show tables; (mysql database에 이미 tables 가 생성되어져 있다.)
테이블들 중 user password 수정하기 (무조건! 해야함)
set password for 'root'@'localhost' = password('root');
-> mariadb 버전에 따라 해당 명령어가 달라질 수 있느니 오류나면 이 점 확인 **
ex)
Plugin 잘 되었는지 확인
select user,host,plugin from user;
여기서 plugin 내용이 mysql_native_password 인지 쳌 !
모두 잘 되었으면 마지막 명령어 입력하기
flush privileges;
mysql 세팅하려고 MariaDB 안으로 들어왔기 때문에 ubunt로 다시 나가기
root 계정 접속된 상태에서 나가기 아래 명령어 차례로 입력
Ctrl-c
exit
ubunt에서 접속이 가능한지 확인 ---> 그래야 다른 곳에서도 접속이 가능하다.
mysql -uroot -proot
13. local back express 생성 -> github -> amazon AWS
코드 구현의 불편함 때문에 local PC - > github upload -> server에서 코드를 clone해와서 사용할 예정
터미널 - 새로운 파워셀 만들기 (name: local_back) -> express용 ! 헷갈리지 말자
Visual studio 경로 : back폴더인지 확인
Visual studio 터미널 : local_back 로 들어가기
아래 명령어 실행
npm init
npm i express
back 안에 server.js 파일 생성 / 기본 코드 작성
const express = require('express')
const app = express()
app.get('/', (req,res)=>{
res.send('hi')
})
app.listen(3000,()=>{
console.log(`server start port: 3000`)
})
node server.js - local 에서 잘 열리는지 테스트
-> 나의 git 저장소에 PUSH
AMAZON AWS key pair는 꼭 gitignore 하기 ***
-> 터미널 파워셀 back으로 돌아가서 (local_back 아님!! ) 아래 세 명령어 실행 -> express 코드 가져오기
cd ~
git clone [ git 주소 ]
pwd // --> home/ubuntu 가 나오는지 확인
ls // git repo 이름 잘 나오는지 확인
ls -al 명령어로 현재 디렉토리 명령어 확인 -> 최근꺼에 d가 붙어있음 -> 요 파일 안에 들어갈 수 있게 되었따
npm install을 위한 아래 명령어 실행
cd 파일 명 //해당 파일로 들어가기
ls -al // 다시 현재 상태 체크 ---> node_modules가 아마 없어야함. gitignore 에러로 가져와짐
npm install // npm 모두 다운 ------이후-----> node_modules가 생긴다.
그리고 node server.js 명령어를 실행 -> 아직 외부IP가 접근할 수 있도록 설정하지 않음
포트넘버 변경하기
이제 amazon aws 의 EC2 대시보드로 들어가서 해당 진행 중인 인스턴스 체크박스 클릭 -> 퍼블릭 IP 복사한 것을 브라우저에 띄워보면 server가 나와야하나 아직 포트가 80으로 되어 있음 (express server port : 3000) 서로 다르기 때문에 server port ---> 80으로 바꿔주기
포트 변경 위한 아래 명령어 실행
vi server.js
* vi : text 파일을 열겠다.
i 를 누르면 -> INSERT mode ------- 내용 수정 삭제 가능해진다.
포트를 3000 -----> 80 으로 수정 후 esc 빠져 나오기
* esc - > i 를 누른 후 수정/삭제 INSERT 모드에서 빠져나오기
* shift + : 누르고 wq! 입력 후 엔터 ----> 해당 vi 모드에서 아예 나오기
! 느낌표는 강제 실행
다시 node server.js 하면 에러 -> permission denied (80번 포트에 대한)
아래 명령어 실행
sudo node server.js
관리자 명령없이 node server.js 실행이 안되기 떄문에 sudo를 꼭 적어주기
server started
-> 다시 인스턴트 ip 를 브라우저에 입력해서 실행하기 -> 실행이 됨 !
끝.. 😇
'블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기' 카테고리의 다른 글
[90일차]20210719 리눅스 백그라운드로 서버 돌리기 / pm2 / postman CRUD / Restful API (0) | 2021.07.19 |
---|---|
[89일차 복습] 아마존 웹서버 구축 / 호스팅 / 배포 / 비용 / 방법 (0) | 2021.07.19 |
[88일차 복습] 리액트 댓글 수정 삭제 (0) | 2021.07.15 |
[88일차]20210715 리액트 댓글 수정 삭제 (0) | 2021.07.15 |
[87일차 복습] 리액트 Context 사용해서 댓글 추가하기 (0) | 2021.07.14 |