본문으로 건너뛰기

Sails.js: 소개, 역사, 기능 및 예제

소개

Sails.js는 Node.js를 사용하여 확장 가능하고 실시간 웹 애플리케이션을 구축하기 위한 현대적인 MVC (Model-View-Controller) 프레임워크입니다. 이는 구성보다 관례를 따르는 철학을 따르므로 구성에 너무 많은 시간을 쓰지 않고도 애플리케이션을 개발하고 유지할 수 있도록 해줍니다. Sails.js는 Express.js를 기반으로 구축되었으며, 데이터 기반 API, 실시간 업데이트 및 강력한 명령 줄 인터페이스와 같은 기능을 제공합니다.

역사

Sails.js는 Mike McNeil에 의해 개발되었으며, 2012년에 처음 출시되었습니다. 이는 Ruby on Rails에서 영감을 받아 Node.js 생태계에 비슷한 생산성과 개발 편의성을 가져오기 위해 고안되었습니다. 출시 이후로 Sails.js는 견고함, 확장성 및 실시간 애플리케이션 구축 능력으로 개발자들 사이에서 인기를 얻었습니다.

기능

1. MVC 아키텍처

Sails.js는 MVC 아키텍처 패턴을 따르며, 코드베이스를 구성하고 관심사를 분리하는 데 도움이 됩니다. 모델은 데이터와 비즈니스 로직을 나타내고, 뷰는 표현 계층을 처리하며, 컨트롤러는 모델과 뷰 간의 상호 작용을 관리합니다.

// 예시: UserController.js
module.exports = {
find: async (req, res) => {
const users = await User.find();
return res.view('user/index', { users });
},

create: async (req, res) => {
const user = await User.create(req.body).fetch();
return res.created(user);
},
};

2. 실시간 기능

Sails.js는 WebSockets와 Socket.io를 통해 기본적으로 실시간 기능을 제공합니다. 이를 통해 개발자는 실시간으로 연결된 클라이언트에 업데이트를 전송할 수 있는 애플리케이션을 구축할 수 있습니다.

// 예시: ChatController.js
module.exports = {
subscribeToRoom: async (req, res) => {
const roomId = req.param('roomId');
sails.sockets.join(req, roomId);
return res.ok({ message: '룸에 가입되었습니다.' });
},

sendMessage: async (req, res) => {
const roomId = req.param('roomId');
const message = req.param('message');
sails.sockets.broadcast(roomId, 'newMessage', { message });
return res.ok({ message: '메시지가 전송되었습니다.' });
},
};

3. Blueprint API

Sails.js는 모델에 대한 RESTful 라우트와 CRUD 액션을 자동으로 생성해주는 강력한 블루프린트 API를 제공합니다. 이를 통해 추가적인 코드 작성 없이 데이터를 생성, 읽기, 업데이트 및 삭제할 수 있습니다.

// 예시: UserController.js
module.exports = {
// 자동으로 생성된 라우트
create: async (req, res) => {
const user = await User.create(req.body).fetch();
return res.created(user);
},

find: async (req, res) => {
const users = await User.find();
return res.ok(users);
},

// 추가적인 사용자 정의 액션
search: async (req, res) => {
const query = req.param('query');
const users = await User.search(query);
return res.ok(users);
},
};

4. 명령 줄 인터페이스 (CLI)

Sails.js는 프로젝트의 뼈대 구축, 코드 생성 및 관리를 도와주는 강력한 명령 줄 인터페이스 (CLI)를 제공합니다. CLI를 사용하면 컨트롤러, 모델, 서비스 등을 생성하는 명령을 실행할 수 있으며, 개발자의 생산성을 향상시킬 수 있습니다.

# 새로운 Sails.js 프로젝트 생성 예시
$ sails new myproject

# 새로운 컨트롤러 생성 예시
$ sails generate controller user

# 새로운 모델 생성 예시
$ sails generate model user

예제

예제 1: 실시간 채팅 애플리케이션

// 예시: ChatController.js
module.exports = {
subscribeToRoom: async (req, res) => {
const roomId = req.param('roomId');
sails.sockets.join(req, roomId);
return res.ok({ message: '룸에 가입되었습니다.' });
},

sendMessage: async (req, res) => {
const roomId = req.param('roomId');
const message = req.param('message');
sails.sockets.broadcast(roomId, 'newMessage', { message });
return res.ok({ message: '메시지가 전송되었습니다.' });
},
};

이 예제에서 subscribeToRoom 액션은 WebSockets를 사용하여 사용자가 채팅 룸에 가입할 수 있게 합니다. sendMessage 액션은 지정된 룸에 연결된 모든 클라이언트에게 새로운 메시지를 브로드캐스트합니다.

예제 2: RESTful API 생성

// 예시: UserController.js
module.exports = {
create: async (req, res) => {
const user = await User.create(req.body).fetch();
return res.created(user);
},

find: async (req, res) => {
const users = await User.find();
return res.ok(users);
},
};

이 예제에서 create 액션은 요청 본문을 기반으로 데이터베이스에 새로운 사용자 레코드를 생성합니다. find 액션은 데이터베이스에서 모든 사용자 레코드를 검색하고 응답으로 반환합니다.

자세한 정보 및 상세 문서는 공식 웹사이트를 참조하세요: Sails.js