우선 이 이야기는 헤로쿠와 일요일부터 월요일까지 씨름하다 화요일에 드디어 깨달음을 얻고 db.json을 쏘아올리는데 성공한 이야기를 담고 있다.
무료로 웹 호스팅을 제공하는 서비스로
무료 버전의 경우, 최대 5개의 어플리케이션을 올릴 수 있고 30분 동안 이용을 하지 않을 시, sleep상태로 빠져 다시 웹이 깨어나는 데 시간이 걸린다.
만약 내가 프로젝트를 배포하는데, db데이터도 배포할곳이 필요하다 하면 간단하게 하기 좋은 곳이라고 하는데 나한테는 간단하지가 않네...?^^
비슷한 서비스로는 gearhost, aws, bonus:cloudways등이 있다고 한다.
heroku는 나의 프로젝트를 간단히 발표용으로 띄워야 할때 사용하기 좋다고 한다.
여러시도 끝에 알게된 방법들을 정리해보았다.
npm i json -server
npm json-server --watch db.json --port 3001
이 명령어는 db.json 파일의 제이슨서버를 3001포트로 띄워죠!! 만약 db.json파일이 없다면 파일도 만들어죠!! 라는 의미다.
Procfile은 heroku가 서버를 띄울 파일을 가리켜준다.
db.json과 Procfile을 만들고 최상단에 위치한뒤, procfile에 이렇게 입력하면
헤로쿠야 db.json을 서버에 띄워죠!!!라는걸 의미한다. 일종의 화살표역할 이랄까
procfile이 필요한 이유는 만약 리액트앱 파일내에서 헤로쿠서버를 띄울경우 리액트 앱자체가 서버에 올라가게 된다. (사실 리액트 앱안에 db.json도 있기 때문에 리액트앱자체를 띄워도 db연결은 가능하다고 한다...)
따로 폴더에 담지 않고, db.json과 procfile을 최상단에 가져다 놓은 이유는 procfile이 db.json을 찾기 쉬우라고 저 위치에 놓았다.
나의 경우 폴더를 만들어 db.json을 넣어놓았더니 헤로쿠 이자식이 db.json을 찾지 못하는 일이 발생하였다. 만약 procfile에서 경로설정을 잘해주기만 한다면 문제가 되지 않을 것이다. 나는 아직 경로설정이라던가, heroku이놈이 익숙치 않기 때문에 쉬운방법을 택하였다.
const jsonServer = require("json-server");
const path = require("path");
const server = jsonServer.create();
const router = jsonServer.router(path.resolve(__dirname + "/db.json"));
const middlewares = jsonServer.defaults({
static: path.resolve(__dirname + "/../build/"),
});
const port = process.env.PORT || 3001;
server.use(middlewares);
server.use(jsonServer.bodyParser);
server.use(router);
server.listen(port, () => {
console.log("JSON Server is running");
});
npm i cross-env
npm 에 들어가 명령어를 확인하다 보니 아래에
주의!! 오타로 멀웨어를 받는일이 없도록 하세요 라고 써있다.
이름이 비슷한 멀웨어가 있나보다 했는데
꽤나 큰 문제였나보다 다들 조심하길...!!
"scripts": {
"start": "node server",
"dev": "cross-env NODE_PATH=src react-scripts start",
"build": "cross-env NODE_PATH=src react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"heroku-postbuild": "cross-env NODE_PATH=src npm run build"
},
// 원래코드
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
이렇게 될 경우 npm start를 입력시
리액트 앱이 실행이 되지 않을 것이다.
npm run dev를 입력하면 실행이된다.
npm run build
https://devcenter.heroku.com/articles/heroku-cli
heroku login
터미널에 입력시 자동으로 사이트가 실행된다. 여기서 회원가입도 가능하다.
여기가 제일 혼란스러웠다.
갑자기 깃에올린다고...?
왜...?
---> git에 헤로쿠를 올리게 되면 자동으로 헤로쿠 저장소가 따로 생기게 되고, 그곳에 나의 db.json이 저장된다.
heroku create <프로젝트명> # 프로젝트명을 공백으로 하시면 이름이 자동으로 랜덤설정 됩니다.
heroku config:set NPM_CONFIG_PRODUCTION=false
// devDependency 도 설치하게 설정합니다
git push heroku main
--> 그리고 꼭 main에서만 실행이 가능하다.
만약 내가 브랜치에서만 작업이 가능하다면
git push Heroku 현재브랜치명:main
이렇게 입력할 경우 현재 브랜치에서 나온 브랜치의 main에 저장가능하다
http://<프로젝트명>.herokuapp.com/
위에 주소로 들어가면 나으 서버를 볼 수 있다. 처음에 떨리는 마음으로 서버에 들어가니 저렇게 괄호만 딸랑 있어
아씨...또실패 했자나...
라고 생각했다.
알고보니 heroku.com뒤에 endpoint를 적어줘주면 잘 뜬다.
참고: 헤로쿠 사이트에서 my app버튼을 클릭하면 내가 올리 서버를 열수 있다.
무료의 경우 서버 올리는 시간 등의 제약이 있으니, 확인해볼것!
헤로쿠 사이트이용에 대한 자세한 내용은
https://todaycode.tistory.com/22
서버를 띄우는 자세한 내용은 벨로퍼트님께...
https://redux-advanced.vlpt.us/3/09.html