본문 바로가기

Back-End/Node.js

[Node.js] 파이어베이스 Realtime Database 연동

728x90

Node.js 와 파이어베이스의 Realtime Database 를 연동해보도록 하겠습니다.

 

1.  파이어베이스 프로젝트 생성 및 설정

1) 파이어베이스에 접속하여 프로젝트를 추가합니다.

프로젝트 추가

 

2) 생성한 프로젝트에 들어가서 아래과 같이 웹 버튼을 클릭합니다.

웹 버튼 클릭

 

3) 앱 닉네임을 작성하고 앱 등록 버튼을 클릭한 후, 콘솔로 이동 버튼을 클릭합니다.

4) 해당 프로젝트를 선택한 후, 프로젝트 설정 을 클릭합니다.

프로젝트 설정

 

5) 서비스 계정 에서 새 비공개 키 생성 을 클릭하여 키를 생성합니다. 생성한 키 파일의 경로를 잘 알 수 있도록 폴더를 생성하여 저장해둡니다. 아래 나와있는 코드는 config.json 파일에 작성해야 할 코드입니다.

프로젝트 설정 > 서비스 계정 > 새 비공개 키 생성

 

6) 규칙 을 클릭해서 아래와 같이 read, write 를 모두 true 로 바꾸어 권한을 설정해줍니다.

 

2.  VS code 에서 config.json 파일 작성

1) VS code 에서 파이어베이스와 관련된 모듈을 설치해줍니다.

npm install firebase-admin

 

2) config.json 파일을 생성하여, 위 5번에 나온 코드를 복붙해줍니다. 이 때 serviceAccount 는 위에서 생성한 비공개 키의 상대경로입니다.

const firebase = require('firebase-admin');
const serviceAccount = require('../jenfra/jenfra-671c9-firebase-adminsdk-9zhi0-2c5d1b14f3.json');

// Initialize Firebase
firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccount),
    databaseURL: "https://jenfra-671c9-default-rtdb.firebaseio.com"
});

const database = firebase.database();

 

3) config.json 의 전체 코드 내용입니다.

const firebase = require('firebase-admin');

const serviceAccount = require('../jenfra/jenfra-671c9-firebase-adminsdk-9zhi0-2c5d1b14f3.json');

// Initialize Firebase
firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccount),
    databaseURL: "https://jenfra-671c9-default-rtdb.firebaseio.com"
});

const database = firebase.database();

module.exports = database;

 

3.  Realtime Database 에 데이터 넣어보기

post 방식을 통해 넘어온 name과 email 값을 데이터베이스에 넣어보도록 하겠습니다.

 

1) 새로 생성한 router 폴더 안에 data.js 파일을 생성합니다.

2) 라우터와 config.json 에서 만든 database 변수를 사용하기 위해서 아래와 같이 임포트해줍니다.

const router = express.Router();
const database = require('../config');

 

3) set() 메서드

아래와 같이 set() 을 활용하여 값을 넣을 수 있습니다.

database.ref('users').child(name).set({ 
	email: email,
});

set() 활용하여 데이터 쓰기

 

4) push() 메서드

push() 를 활용하여 데이터를 쓰는 경우, 다음과 같이 임의의 키 값이 자동생성됩니다.

database.ref('users').child(name).push({ 
	email: email,
});

push() 활용하여 데이터 쓰기

 

5) 전체 코드는 다음과 같습니다.

data.js ( routes > data.js )

const express = require('express');
const router = express.Router();
const database = require('../config');

router.post('/', async(req, res) => {
    try {
        const { name, email } = req.body;
        database.ref('users').child(name).set({
            email: email,
        });  
        return res.status(200).json({
            code: 200,
            message: `파이어베이스에 데이터 성공적으로 저장`,
        })
    } catch (err) {
        return res.status(500).json({
            code: 500,
            message: `서버 내 알 수 없는 에러 발생 ${err}`,
        })
    }
});

module.exports = router;

 

app.js

const express = require('express');
const app = express();
const saveRouter = require('./routes/data');

app.use(express.json())
app.use(express.urlencoded({ extended: false }));

app.use('/', saveRouter);

app.listen(3000, ()=>{
    console.log('Server is running at 3000 port!')
});
728x90

'Back-End > Node.js' 카테고리의 다른 글

[Node.js] express-rate-limit 모듈 사용하기  (0) 2023.02.13