[DEPLOY] HEROKU

youngseo·2022년 7월 19일
0

FireBase

목록 보기
9/9

HEROKU

Heroku란?

Heroku는 Java, Node.js, Python등 여러 언어를 지원하는 클라우드 Paas입니다.

※ Paas란?
서비스형 플랫폼(Platform as a Service, PaaS)은 클라우드 컴퓨팅 서비스 분류 중 하나다. 일반적으로 앱을 개발하거나 구현할 때, 관련 인프라를 만들고 유지보수하는 복잡함 없이 애플리케이션을 개발, 실행, 관리할 수 있게 하는 플랫폼을 제공한다. SaaS의 개념을 개발 플랫폼에도 확장한 방식으로, 개발을 위한 플랫폼을 구축할 필요 없이, 필요한 개발 요소를 웹에서 쉽게 빌려쓸 수 있게 하는 모델이다.

  • 무료버전의 경우 30분정도 접속이 없는 경우 서버가 잠듭니다. 잠든 서버를 다시 꺠우는데는 약 20초~1분 정도의 시간이 걸립니다.
  • 무료버전에서는 기본 실행 명령(npm start)만 사용할 수 있기에 기본 실행명령이 아닌 다른 명령을 사용하고 싶은 경우 요금제를 써야합니다.

프로젝트 환경 구축

1. express, cors 설치

터미널

$ npm i cors express

index.js

const express = require('express')
const cors = require('cors')

const app = express()
app.use(express, json())
app.use(cors())
app.use('/', (req, res) => {
  res.status(200).json({
    name: '0seo!'
  })
})

app.listen(1234, ()=>{
  console.log('서버 동작?!')
})
  • node index.js라는 명령을 통해 해당하는 프로젝트의 진입점에 해당하는 파일을 실행합니다.
  • 단점
    • node index.js 실행 후 '서버동작?!'에 ?가 하나를 더 붙이게 되면 콘솔창에 변경된 내용으로 출력되지 않습니다.
    • 따라서 코드가 바뀔 때마다 그때그때 반영해주는 패키지인 nodemon을 설치하도록 하겠습니다.
  • 포트번호를 1234로 설정해 1234포트에서 서버가 열릴 수 있도록 만들어 놓았습니다.

2. nodemon 설치

$ npm i nodemone

package.json

  • 헤로쿠의 경우 기본 실행명령이 정해져있기에 그에 맞춰 nodemon을 세팅해줍니다.
"scripts": {
  "start": "nodemon index.js"
},

3. Router 연결

  • http//localhost:1234/api/v1/todos와 같이 하위 api 주소를 만들기 위해서는 express에서 제공하는 Router를 사용해야합니다.

설명

const router = express.Router()
router.get('/', (req, res) => {
  //
})
...
api.use('/api', router)
  • 위의 경우 /api/'가 붙어 /api/로 접근이 가능하게 됩니다.

모듈화

  • 루트경로에 새로운 routes라는 폴더 > api 폴더 내부에 todos.js라는 파일을 만들어줍니다.
const express = require('express')

const router = express.Router()

//get
router.get('/', (req,res)=> {
const { apikey } = req.query
 const validApikeies = ['1223', '1456'] //DB에서 정보를 빼옴
 
 if(!validApikeies.indcludes(Number(apikey))) { //문자=>숫자
  return res.status(401).json('유효한 정보가 아닙니다.')
 }
  
 return res.status(200).json({
    name: 'First Todo API'
  })
})

//post
router.post('/', (req,res)=> {
console.log('req.body::' req.body)
 res.status(200).json(true)
}
            
//put
router.put('/:id', (req,res) =>{
  console.log('req.params::', req.params)
  
  res.status(200).json(true)
}

//Delete1: id값 받아서 처리
router.delete('/:id', (req,res) =>{
  console.log('req.params::', req.params)
  
  res.status(200).json(true)
}
              
//Delete2: body에서 받아서             
router.delete('/', (req,res) =>{
  
  const { id } = req.body  
  res.status(200).json(true)
}

//Delete3: body에서 받아서  
router.post('/delete', (req,res) =>{
  
  const { id } = req.body  
  res.status(200).json(true)
}
 moudel.exporst = router //꼭반환해줘야합니다.
  • http://localhost1234/api/todos?apikey=1223에 접근해 결과를 확인해봅니다.

2. FileSystem을 이용한 데이터다루기

  • DB에 연결하는 것이 아닌 node.js에서 제공하는 filesystem을 이용해 데이터를 다뤄보도록 하겠습니다.
  • 루트경로에 todos라는 폴더 내 index.json이라는 이름으로 파일을 저장할 예정입니다.
    • app root path라는 패키지를 써도 좋습니다.
    • 노드.js의 최상위 전역객체인 global을 이용하도록 하겠습니다.
      • global.appRoot = __dirname

2-1 파일 가져오기

const fs = require('fs')
const express = require('express')
const router = express.Router()

//Create
router.poster('/', (req, res) => {
  try {
    fs.readFileSync(`${global.appRoot}/todos/index.json`, 'utf8') //조회
  } catch(err) {
     fs.mkdirSync( `${global.appRoot}/todos`)
     fs.writeSync(`${global.appRoot}/todos/index.json`, '[]')
  }
  
  res.status(200).json('')
})
//Create
router.poster('/', (req, res) => {
  const {title} = req.body //1
  try {
    const todos = Json.parse(fs.readFileSync(`${global.appRoot}/todos/index.json`, 'utf8')) //2.문자 데이터가 나오므로 JSON.parse를 해줍니다.
    todos.push({title}) //3.push로 title을 밀어넣습니다
  } catch(err) {
     fs.mkdirSync( `${global.appRoot}/todos`)
     fs.writeSync(`${global.appRoot}/todos/index.json`, '[]')
  }
  
  res.status(200).json('')
})

mongoose

설치

$ npm i mongoose
  • 몽고 DB를 제어하는 node.js 패키지입니다.

연결

index.js

const mongoose = require('mongoose')

mongoose.connect('주소://아이디:비밀번호')
const db = mongoose.connection //db가 나옵니다.
db.once('open', () => {//db가 열리면 콜백을 실행합니다.
  console.log('MongoDB connected!')
})
  • 원격에서 사용하는 몽고 DB

0개의 댓글