09.09
리소스에 대한 엑세스 권한을 제공하고 보안과 제어를 유지
구현방식을 알지 못해도 서비스가 서로 통신 가능
/devices인 라우터와
/divices/categories 인 라우터
중복되는 라우터 모두 모듈화 시켜주기 위해
devices 폴더 생성 그리고 그 밑에 categories 폴더 생성후 한번더 묶어주기
const express = require("express"); const router = express.Router(); // categories 라우터를 호출 const categoriesRouter = require("./categories/index");
devicesArr = []; < 기기정보 업로드 > router.post("/", (req, res) => { const { name, version, price } = req.body; //필수입력란 만들기 if (!name && !version && !price) return { message: "데이터 값을 확인해주세요" }; const devicesIdx = devicesArr.findIndex((item) => { return item.name === name; }); if (devicesIdx === -1) { devicesArr.push({ name, version, price }); res.status(200).json({ message: "기기정보 추가가 완료 되었습니다.", }); } else { res.status(400).json({ message: "중복된 기기가 존재합니다.", }); } });
< 전체 조회 > router.get("/", (req, res) => { if (devicesArr.length === 0) { res.status(401).json({ message: "기기정보가 없습니다.", }); } else { res.status(200).json({ data: devicesArr, }); } });
< 특정 기기 정보 조회 > router.get("/:idx", (req, res) => { //인덱스 값 확인하기 const { idx } = req.params; const devicesIdx = devicesArr.findIndex((item) => item.name === idx); if (idx < 0 || idx >= devicesArr.length) return res.status(409).json({ message: "인덱스 에러", }); if (devicesIdx === -1) { res.status(401).json({ message: "기기 정보가 존재하지 않습니다.", }); } else { const result = devicesArr[devicesIdx]; res.status(200).json({ message: "기기 정보 조회 완료.", // data: { idx, version, price }, data: devicesArr[idx], }); } });
< 기기 정보 수정 > router.put("/:idx", (req, res) => { const { idx } = req.params; const { name, version, price } = req.body; if (devicesArr[idx]) { devicesArr[idx] = { name, version, price }; res.status(200).json({ message: "기기정보 수정이 완료 되었습니다.", data: devicesArr[idx], }); } else { res.status(400).json({ message: "기기정보가 존재하지 않습니다.", }); } });
< 기기정보 삭제 > router.delete("/:idx", (req, res) => { const { idx } = req.params; if (devicesArr[idx]) { devicesArr.splice(idx, 1); res.status(200).json({ message: "기기 삭제가 완료되었습니다.", }); } else { res.status(400).json({ message: "기기정보가 존재하지 않습니다.", }); } });
//categories router.use("/categories", categoriesRouter);
module.exports = router;
코드 로직은 어제랑 거의 동일하다.
이후 categories폴더 내에 새로운 라우터를 만들어 exprots 해주면 끝
서버 생성을 위하여 AWS 를 사용했다.
하드웨어 서버는 비싸고, 서버 수요를 예측하기 힘들 때 기업들이 투자를 유보하면서 많이 사용한다고 들었다.
Amajon 에서 ubuntu 서버를 대여하는 개념
먼저 가입하는데 visa 카드가없어서 엄카로 대체.
강사님이 aws 잘 못쓰면 과금폭탄 맞는다고 하셨으니 항상 확인해봐야함!
순서가 매우 복잡하고 도중에 오류도 몇 번씩이나 발생해서 너무 어지러웠다ㅠ
사실 지금 적는 순서가 정확한지 모르겠지만 일단 기억나는 대로 써보면
1) AWS 회원가입
2) EC2 서비스 시작
3) 인스턴스 시작 후 키페어 받기 - unbuntu 사용
4) 탄력적 IP 받기 - 특정한 IP주소로 접근하기 위해
-여기서부터 너무 어지러워~
5)
- window 사용자라 putty 설치
- putty.gen 으로 aws 키페어를 가져와서 저장
- putty 실행 후 ubuntu로 로그인
6) filezilla 를 이용해서 VScode에서 작성한 파일을 ubuntu 폴더로 이동
7) 터미널에서 환경 설정
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j
REDIRECT--to-port 3000 ( 3000번 포트도 url에 따로 적지않고 연결하도록!)
이후 npm run start
8) PC를 계속 켜놓고 서버를 유지하는 것은 어려우니까 서버 운영을 지속적으로
하기 위해서 pm2 설치
sudo npm install -g pm2
pm2 --version ( 버전 확인 )
pm2 start ./bin/www
< 사용 기초 >
- 시작 : pm2 start ./bin/www
- 중지 : pm2 stop 0
- 재시작 : pm2 restart www
- 끄기 : pm2 delete www
- 로그 확인 : pm2 logs www
- ubuntu 편집기 사용 - vi
- ex) vi package.json으로 들어감
- esc를 누르고 i ==> insert
- 수정 후 esc 누르면 다시 복귀 -> :wq 누르면 저장하고 나가기
9) Public DNS로 접근하면 화면에 Express 가 딱!