본문으로 건너뛰기

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