단계 6에서 두 가지 추가 - http, https 설정 이유
다른 외부 PC 가 80 으로 들어올 때 허용하겠다 의미
http 80이 디폴트 값 - 웹서버, 다른 pc 들어오면 미리 허용해놓기
https - 보안이 강화된 프로토골
만약 DB server를 사용하게되면 3306 port도 또 추가해주어야함
key-pair - 모든 클라우드에서 사용하지 않고 아마존에서 사용하는 것 ! 아마존판 공인인증서st (이중 보안)
Ubuntu 리눅스 Background 로 돌려놓기
1. server 실행하기
SSH 클라이언트 마지막 것 복붙해서
cd ~
pwd
ls (폴더 확인)
cd [들어갈 폴더]
sudo node server.js
-> 아마존 aws에서 인스턴스 Public IP 주소 -> 브라우저에 입력
-> 서버 연결을 백그라운드에 계속 돌아가게 만들어보기
2. 백그라운드로 돌리는 명령어 실행
sudo node server.js &
이렇게 하고 ubuntu 나가도 -> server는 돌아가고 이제 다른 콘솔도 칠 수 있음, 다른 작업도 할 수 있게끔!
3. 백그라운드에 돌아가는 서버 끄기
아래 명령어 : 리눅스 작업 관리자와 같은 창 볼 수 있다.
ps -ef
ps -ef | grep (요건 뭐징??)
현재 돌아가고 있는 프로그램 실행 중단 시키기
ps -ef에서 앞에 PID 값 적기 -> node server
sudo kill -9 [PID 숫자값]
프로그램 돌린 사람 : 소유권
Node.js package - pm2 로도 Background 돌리는 방법
pm2 란 ?
1. local-back 생성 -> back까지 들어오기
2. pm2 설치
npm i pm2
3. package.json 수정
{
"name": "back",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "pm2 start server.js" // 수정
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"pm2": "^5.1.0"
}
}
4. node.js background로 돌리기
npx pm2 start server.js // server.js == 파일명
5. 멈추기
npx pm2 stop server // server == 파일명(확장자 빼고)
6. 다시 npx pm2 start server.js -> online으로 만들고
npx pm2 monit
7. 종료 Ctrl + c
8. 내용 다 지우기
npx pm2 kill
-> 리눅스 server 측에도 pm2 패키지 사용하기
1. vs 터미널 -> aws_back -> 꼭 현재 경로 확인 (cd ~, ls, cd [파일명])
2. 다운
npm install pm2
실행시켜보기
npx pm2 start server.js
-> 오류
80번 포트는 관리자권한으로 실행해야 한다. 그냥 ubuntu 계정으로 실행하면 안되고 관리자로 ! 앞에 sudo 붙이기
sudo npx pm2 start server.js
-> 브라우저에 'hi'도 뜬다 ! 연결됨
관리하기 쉽게 만들기
1. npm을 삭제하고 (server 끄기)
sudo npx pm2 kill
2. 파일 확인
ls -al // -> package.json 확인
3. 리눅스에서 package.json 수정하기
* local server에서 package.json 직접 수정 X
vi package.json
vi package.json (에디터 열기) -> start 부분 아래처럼 수정
'sudo pm2 start server.js'
-> esc 누르기 -> Shift + : wq! (저장하고 나오기 )
2. 아래 명령어 실행
npm run start
-> 오류
aws-back server쪽에서 깔 때 sudo npm install -g pm2
start 할 때 global 로 해야 됨
global로 pm2 설치
sudo npm install -g pm2
다시 실행
npm run start
3. 위의 표 다시 볼 때 명령어
npm pm2 list
pm2로 서버를 돌려서 -> 외부PC가 접속이 되는가 확인
된다... 신기해,,
sudo npx pm2 start server
sudo npx pm2 stop server
sudo npx pm2 kill
POST MAN
<개념 설명>
post 값 넘길 때 꼭 화면이 있어야 data가 보내졌음 (get은 아닌데)
화면없어도 post 를 가능하도록 -> post man
postman - 해당 url에 post값을 담아 주는 TOOL => 화면 없이 백단을 먼저 만들 수 있다.
응답을 무조건 json형태로 주는 것 -> Restful API
ResfulAPI 단점 : test하기가 불편하다. (특히, post- form 그려야함) => 포스트맨 등장
1. postman 다운 -> 가입
https://www.postman.com/downloads/
2. new workspace 생성
여기에 url 관리하면 이제 다른 팀원의 url 도 잘 알 이해할 수 있다고 한다! 🕵️♂️
1. + 탭키 클릭
2. get 선택 + url 작성
서버가 실행되어있어야 3000url send가 나옴!
3. 저장도 가능
save -> react_comment 폴더 만들어서 저장해보기
지금 3000port 에러나서 3001로 수정 **
post로 해보기
1. + 탭키 -> post 선택 -> url 작성
2. 보낼 값 body에 담기
요 내용을 실어서 url로 보내준다 ---> server에서 req.body로 받고 출력
* server에서 받을 수 있게 만들기
3. local-back : bodyParser 다운
npm i bodyParser
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({extended:false}))
app.get('/', (req,res)=>{
res.send('안녕 postman')
})
app.post('/', (req,res)=>{
res.json(req.body)
})
app.listen(3001,()=>{
console.log('post test')
console.log(`server start port: 3000`)
})
4. postman -> send 보내기 !
Restful API
https://blckchainetc.tistory.com/199
Restful API
-> url을 직관적으로 바꿀 수 있다.
-> 아래 규칙들 각각 안에도 수 많은 규칙들이 있다.
request method type
1. GET - 데이터를 가져올 때 (R) select문
2. POST - 데이터를 입력할 때 (C) insert문
3. PUT - 데이터를 수정할 때 (U) update문 (전체를 수정하는거라 쓰는 경우가 드물다)
4. DELETE - 데이터를 삭제할 때 (D) delete문
5. PATCH - 데이터를 일부만 수정할 때 (U) update문 (회원정보 중 하나만 수정 시)
6. OPTIONS - 요청을 체크
7. HEAD - 데이터를 req msg header만 받아올 때 (oauth login 할 때 - 아직 쓸일이 읎다.)
회원가입url을 만들어보기
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({extended:false}))
app.get('/', (req,res)=>{
res.send('안녕 postman')
})
// app.post('/',(req,res)=>{
// res.send('post다')
// })
app.post('/', (req,res)=>{
res.json(req.body)
})
//restful 을 사용하면 /user/join ---> /user만 써도 됨
app.post('/user/join',(req,res)=>{
})
//회원 정보 url 기존
app.post('/user/userinfo',(req,res)=>{
})
//회원 정보 url 최종
app.get('/user',(req,res)=>{
})
//회원 수정 url 기존
app.get('/user',(req,res)=>{
})
//회원 수정 url restAPI 사용
app.patch('/user',(req,res)=>{
})
//회원 탈퇴 url
app.get('/user/delete',(req,res)=>{
})
// 회원 탈퇴 url restAPI 사용
app.delete('/user',(req,res)=>{
})
app.listen(3001,()=>{
console.log('post test')
console.log(`server start port: 3000`)
})
url 끝까지 보지않고 그냥 앞에 get, delete, patch...만 봐도 어떤건지 알 수 있는 직관성이 높아짐
애매한 경우
// 로그인은 ?????
// 게시판 view 는 ? -> update 조회수
// 게시판 view -> patch? view get ? 가져오기 ?
이렇게 애매~한건 get or post 사용 !
카카오 로그인할 때 post로 보냈었음 !
Restful api 만들어보기
React로 만든 댓글 화면을 DB와 연결해보기
-> front server, back server 필요함 (back-실서버 구동)
댓글 쓰면 -> DB 입력
1. 필요한 패키지 다운받기
Sequelize 사용
local-back
npm i sequelize sequelize-cli mysql2
npx sequelize init // sequelize 실행, 관련 폴더 생성시키기
2. config - config.json 비밀번호, db 수정
* Database 이름 수정하면서 -> mysql prompt창에가서 create database [db명]; 까지 해주기 !
3. models - comment.js 생성 (모델 만들기)
module.exports =(sequelize, DataTypes)=>{
const Comment = sequelize.define('Comment',{
userid:{
type:DataTypes.STRING(30),
allowNull:false,
},
content:{
type:DataTypes.TEXT,
allowNull:false,
},
date:{
type:DataTypes.DATE,
},
},{
charset:'utf8mb4', // mb4 -> 이모지 가능
collate:'utf8mb4_general_ci'
})
return Comment
}
4. models - index.js 수정 (불러올 때 쓸 아이)
'use strict';
const path = require('path');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
const Comment = require('./comment')
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.Comment = Comment(sequelize,Sequelize) // 함수 인 이유 -> comment.js 에서 함수로 export 함 그리고 매개변수 2개 주었음
module.exports = db;
또는 함수 자체로 그대로 사용 (코드 길이가 줄여짐) 도 가능하다.
5. server.js sequelize sync 쳌
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const db = require('./models') //index 생략 가능
app.use(bodyParser.urlencoded({extended:false}))
db.sequelize.sync() // sync() 결과값 : Promise 객체
.then(()=>{console.log('DB접속 성공')})
.catch((e)=>{console.log(`DB접속 실패! 에러 -> ${e} `)})
app.get('/', (req,res)=>{
res.send('안녕 postman')
})
// app.post('/',(req,res)=>{
// res.send('post다')
// })
app.post('/', (req,res)=>{
res.json(req.body)
})
app.listen(3001,()=>{
console.log('post test')
console.log(`server start port: 3000`)
})
server on -> 접속 성공 확인
앞으로 프로젝트 계획
일일 보고서 -> 주간 보고서 -> 교수님 보고
비대면 팀플도 좋을 것 같다! - 슬랙 활용
'블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기' 카테고리의 다른 글
[ 90일차 복습 2 ] POSTMAN이란? 사용 이유 / 설치 방법 / 사용법 / restful API CRUD (0) | 2021.07.19 |
---|---|
[ 90일차 복습1 ] Amazon AWS 리눅스 백그라운드로 서버 돌리기 / Node.js 에서 pm2 사용하기 (0) | 2021.07.19 |
[89일차 복습] 아마존 웹서버 구축 / 호스팅 / 배포 / 비용 / 방법 (0) | 2021.07.19 |
[89일차] Amazon AWS 웹서버 구축 / 호스팅/ 배포 설정 비용 (0) | 2021.07.16 |
[88일차 복습] 리액트 댓글 수정 삭제 (0) | 2021.07.15 |