본문 바로가기

4. Node.js | React.js

5/17(수) IT K-DT(54일차) / twitter 예제(6)

 

 

11. 배포 기능 실습

지금까지 refactoring한 twitter 기능의 예제를 Client단, Server단으로 나누어 hosting을 해 볼 예정.

Server단은 클라우드타입을, Client단은 netlify를 통해 hosting할 예정.

 

11-1. Server단 배포

사용할 배포 플랫폼: 클라우드타입

(https://cloudtype.io/)

 

모두의 플랫폼팀, 클라우드타입

클라우드타입은 클라우드 기반 애플리케이션을 빠르게 개발하고 배포할 수 있는 클라우드 애플리케이션 플랫폼입니다.

cloudtype.io


메인화면으로, 로그인이 필요함.

 

Github에 이미 push해둔 Server단을 (별도의 repository를 생성하여 미리 push해둠)

MariaDB라는 관계형데이터베이스 관리서비스를 이용해 배포할 예정.

 

github와 연동 후 아래와 같이 작성


작성 완료 후의 모습

 

새 프로젝트를 생성한 후의 모습.

 

옵션 中 TCP 외부 접속 허용

→ MySQL Workbench의 사용이 가능함.

 

세팅에 필요하므로 오른쪽의 '주소복사'를 눌러 메모장에 입력.

 

주소는 '주소 + 포트번호'로 이루어짐.

    주소: svc.sel4.cloudrype.app

    포트번호: 31581

 

Connection의 새로운 생성을 위해 MySQL workbench를 오픈하여 new connection을 클릭

 

 

아까 복사한 주소를 이용하여 아래와 같이 작성

 

mariaDB에서 설정했던 비밀번호와 동일한 비밀번호를 입력

 

정상적으로 connection이 새롭게 생성

 

'dwitter'라는 이름의 새로운 Database를 생성.

 

github의 twitter repository 內 sequelize branch를 clone → vs code로 수정

 

터미널에서 npm i mariadb로 mariadb 모듈 설치

 

Server\.env

 

Server\db\database.js


import {config} from '../config.js';
import SQ from 'sequelize';

const {host, user, database, password } = config.db;

export const sequelize = new SQ.Sequelize(database, user, password, {
    host,
    dialect: 'mariadb',
    logging: false,
    timezone: "+09:00",
    port: '31581'
})

 

Server\config.js


import dotenv from 'dotenv';
dotenv.config();
function required(key, defaultvalue = undefined) {
    const value = process.env[key] || defaultvalue;
    if(value == null) {
        throw new Error(`key ${key} is undefined`);
    }
    return value;
}
export const config = {
    jwt: {
        secretKey: required('JWT_SECRET'),
        expiresInSec: parseInt(required('JWT_EXPIRES_SEC', 86400)),
    },
    bcrypt: {
        saltRounds: parseInt(required('BCRYPT_SALT_ROUND', 12)),
    },
    host: {
        port:parseInt(required('PORT', 8080))
    },
    db: {
        host: required('DB_HOST'),
        user: required('DB_USER'),
        database: required('DB_DATABASE'),
        password: required('DB_PASSWORD')
    },
    port:parseInt(required('PORT', 8080)),
    cors: {
        allowedOrigin: required('CORS_ALLOW_ORIGIN')
    }
}

 

작성한 내용을 Github에 다시 push해서 update를 한 후,

이제 본격적으로 클라우드타입 사이트에서 twitter 기능을 배포해볼 예정.

 

새 프로젝트 생성 클릭 후 Node.js 템플릿을 설정하여 생성.

 

아래와 같이 설정 변경

 

애플리케이션 설정 中 버전은 아래와 같이 터미널에서 node -v를 이용하여 확인

 

Environment variables는 아래와 같이 본인의 dotenv와 동일하게 작성.

 

Port, Install command, Start command도 아래와 같이 작성한 후 배포하기 클릭

 

배포하기 클릭 후 실행.

정상적으로 배포할 프로젝트의 서버가 동작하는 모습.



 

접속하기를 클릭하면 나오는 빈 화면의 주소를 복사

 

Postman을 실행하여 해당 주소의 서버가 정상적으로 동작하는지 확인해볼 예정.

관련된 postman의 collection (여기서는 'Twitter')의 Variables에서 변수명을 cloud로 설정한 후,

value값을 바로 위의 주소로 설정.

 

postman의 주소를 {{cloud}}로 설정한 후, 기능 실행.

 

 

정상적으로 postman이 작동하는 경우, (login후 token값을 받아 twitter에 입력까지 완료한 후)

signup → MySQL Workbench 內 users 테이블의 필드 생성.

create/update tweets → MySQL Workbench 內 tweets 테이블의 필드 생성.

 

정상적으로 server가 배포된 것을 확인한 후, github의 repository에 다시 push하여 완료함.

 

 

11-2. Client단 배포

Client\.env

REACT_APP_BASE_URL에 위의 클라우드타입 사이트의 server 배포과정에서 생성했던 주소를 입력

Server\.env

Client단 배포 시 netlify 플랫폼을 이용할 예정. 

Netlify

https://app.netlify.com/teams/choyunjae123/overview

 

Netlify App

 

app.netlify.com

 

 

npm run build

 

npm i netlify-cli -g

 ( -g: global설치로 package.json에서 확인할 수 없음)

 

netlify deploy

 

마지막 줄 입력 시 아래와 같은 웹페이지가 출력.

 

 

 

Github로 Login 후 인증작업까지 모두 완료 시 아래 창 출력.

 

add new site를 통해 배포할 Client를 연동한 github에서 불러오기함.

 

정상적으로 불러온 모습.


정상적으로 Client가 배포된 것을 확인한 후, github의 repository에 다시 push하여 완료함.