티스토리 뷰

Node.js MS-SQL Database REST API Server 구축





1. 소개


Node.js를 이용하여 MS-SQL Database에 URI로 접근하여 CRUD(Create, Read, Update, Delete) 기능을 수행하는  REST API Server 를 구축해보도록 합니다.

해당 내용은 지속적으로 업데이트 될 예정입니다.






2. 왜 REST API Server를 구축하여야 하는가?


일단 저는 보안 이슈와 Front-end 단에서 직접 쿼리를 짜지 않아도 된다는 장점 때문에 이용 하려고 합니다.






3. 환경구축


 - Node : 최신 버전으로 설치해주세요...

 - NPM : 최신 버전으로 설치해주세요...

 - Dependecy (본 기능을 구현하기 위하여 필요한 모듈 정리)

   body-parser : client 요청 중 POST 방식의 Body 내용을 

                     Parsing 하기 위하여 사용 합니다.

   express : 웹서버 개발을 편리하게 해주는 프레임워크 입니다.

   mssql : MS-SQL Database에 접속하기 위한 모듈입니다.

- Insomnia : 브라우저로는 Get 요청만 할 수 있어 Post, Put, Delete 명령을 보내기 위한 테스트 프로그램입니다.

JSON 형태로 전송이 가능하고 응답 또한 확인할 수 있어 개발에 편리합니다.



npm init 명령으로 현재 설치되어 있는 모듈에 대한 package.json을 생성 할 수 있습니다.


새롭게 개발하려는 경로에서 npm install 만 입력하면 package.json파일을 읽어 관련된 패키지들을 자동으로 설치해줍니다.


package.json 내용은 아래와 같습니다.


//package.json


{

  "name": "restapiserverformssql",

  "version": "1.0.0",

  "description": "",

  "main": "main.js",

  "dependencies": {

    "body-parser": "^1.17.1",

    "express": "^4.15.2",

    "mssql": "^4.0.1"

  },

  "devDependencies": {},

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "author": "",

  "license": "ISC"

}






4. 폴더 구조 및 테이블 구조


--node_modules  : npm 에서 설치되는 모듈들 폴더

--routes : URI 입력에 따라 페이지 분기를 위한 폴더

  -index.js : URI 입력에 따라 MS-SQL 쿼리 후 결과를 JSON으로 리턴하는 

               express 모듈 구현 파일

-main.js : 웹서버 구동을 위한 접속 대기 처리 및 express 모듈 선언 파일

-package.json : 설치되어 있는 npm 모듈들의 정보를 저장해둔 파일




MS-SQL DB Table 구조는 아래 처럼 미리 만들어주세요.


DB 명 : [your db name]

Table 명 : MemberInfo

Column 1 : MemberID (사용자 번호) ex) '1'

Column 2 : Name (사용자 이름) ex) '홍길동'






5. 구현


필요한 모듈들 로드 하고 값들을 설정해 줍니다.

8080 Port로 대기하도록 설정하였으며

http://127.0.0.1:8080/api/users 브라우저 주소창에 입력 시 맴버 전체를 반환하는 Query가 실행 됩니다.


//main.js

var express     = require('express');

var app         = express();

var bodyParser  = require('body-parser');


app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());


var port = process.env.PORT || 8080;

var router = require('./routes')(app);


// [RUN SERVER]

var server = app.listen(port, function(){

 console.log("Express server has started on port " + port)

});



MS-SQL DB 접속 정보를 설정하고

SQL에 연결을 합니다. 

연결이 끝나면 pool 에서 URI 주소 별로 구분된 app.Get, Post, Put, Delete 등의 함수가 설정이 되고 실제 Client 가 접속하여 해당 URI를 입력하게 되면 각 함수의 return pool.request() 부터 시작하게 됩니다.

pool => {} 은 ES6 의 새로운 문법으로 function(pool) { return ... } 과 동일합니다.



// routes/index.js


module.exports = function(app)

{

    const sql = require('mssql');

    

    var config = {

    user: 'sa',

    password: '[your password]',

    server: '[your db server ip]\sqlexpress',

    database: '[your db name]'

        

//    options: {

//                encrypt: true // Use this if you're on Windows Azure 

//            }

    };

    

    sql.connect(config).then(pool => {

        

        // GET ALL USERS

        app.get('/api/users', function(req, res){

           return pool.request()

            .query('select * from MemberInfo')

            .then(result => {

                res.json(result.recordset);

                res.end();

            });

            

        });

        

        // GET SINGLE USERS BY USER_ID

        app.get('/api/users/:user_id', function(req, res){

           return pool.request()

            .input('input_parameter', sql.Int, req.params.user_id)

            .query('select * from MemberInfo where MemberID = @input_parameter')

            .then(result => {

                res.json(result.recordset);

                res.end();

            });

            

        });

        

        // GET SINGLE USERS ID BY NAME

        app.get('/api/users/userid/:name', function(req, res){

           return pool.request()

            .input('input_parameter', req.params.name)

            .query('select * from MemberInfo where Name = @input_parameter')

            .then(result => {

                res.json(result.recordset);

                res.end();

            });

            

        });

        

        // CREATE USERS

        app.post('/api/users', function(req, res){

            return pool.request()

            .input('input_parameter', req.body.name) // json body에서 name 항목을 찾아서 할당

            .query('INSERT INTO MemberInfo (Name) VALUES (@input_parameter)')

            .then(result => {

                res.json(result.recordset);

                res.end();

            });

        });

                

        // UPDATE THE USERS

        app.put('/api/users/:user_id', function(req, res){

           return pool.request()

            .input('input_parameter_user_id', sql.Int, req.params.user_id)

            .input('input_parameter_name', req.body.name)

            .query('UPDATE MemberInfo SET Name = @input_parameter_name WHERE MemberID = @input_parameter_user_id')

            .then(result => {

                res.json(result.recordset);

                res.end();

            });

        });

        // DELETE USERS

        app.delete('/api/users/:user_id', function(req, res){

            return pool.request()

            .input('input_parameter', sql.Int, req.params.user_id)

            .query('DELETE FROM MemberInfo WHERE MemberID = @input_parameter')

            .then(result => {

                res.json(result.recordset);

                res.end();

            });

        });

    });

}





6. 테스트


CMD 창을 띄우고 main.js 파일이 존재하는 위치로 이동합니다.

node main.js 를 실행하면 서버는 클라이언트의 

접속을 수신 할 준비상태가 됩니다.



주소창에 http://127.0.0.1:8080/api/users 입력 시

[{"MemberID":1,"Name":"홍길동"},{"MemberID":2,"Name":"이순신"}]


주소창에 http://127.0.0.1:8080/api/users/1 입력 시

[{"MemberID":1,"Name":"홍길동"}]


주소창에 http://127.0.0.1:8080/api/users/userid/이순신 입력 시

[{"MemberID":2,"Name":"이순신"}]


POST, PUT, DELETE 기능은 Insomnia 프로그램을 사용하여 테스트를 진행합니다.


Insomnia에 전송모드를 POST로 설정하고

http://127.0.0.1:8080/api/users/ 를 입력한 뒤 

Body에 추가할 맴버의 이름을 JSON 형태로 입력하고 
Send 버튼을 누를 경우 맴버가 추가됩니다.




Insomnia에 전송모드를 PUT으로 설정하고

http://127.0.0.1:8080/api/users/맴버 ID를 입력한 뒤 

Body에 수정할 맴버의 이름을 JSON 형태로 입력하고 

Send 버튼을 누를 경우 해당 ID의 맴버 이름이 변경됩니다.




Insomnia에 전송모드를 DELETE로 설정하고

http://127.0.0.1:8080/api/users/맴버 ID 를 입력한 뒤 

Send 버튼을 누를 경우 맴버가 삭제됩니다.





7. 결론


node.js 를 이용하여 REST API 서버를 매우 간단하게 구현할 수 있음을 알 수 있습니다.





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함