본문으로 건너뛰기

Feathers.js 개요.

소개​

Feathers.js는 실시간 애플리케이션 및 RESTful API를 구축하기 위한 가벼우며 유연한 웹 프레임워크입니다. 강력한 도구와 추상화를 제공하여 확장 가능하고 유지 관리 가능한 애플리케이션을 개발하기 쉽게 설계되었습니다. Feathers.js는 Express.js와 Socket.io 위에 구축되어 있어 현대적이고 실시간 애플리케이션을 만드는 데 탁월한 선택입니다.

역사​

Feathers.js는 2013년 David Luecke에 의해 만들어졌습니다. 이 프레임워크는 인기있는 실시간 통신 라이브러리인 Socket.io의 성공과 실시간 웹 애플리케이션 개발의 단순화를 원하는 욕구에서 영감을 받았습니다. Feathers.js는 간결함, 유연성 및 성능으로 인해 개발자들 사이에서 빠르게 인기를 얻었습니다.

기능​

Feathers.js는 실시간 애플리케이션을 구축하기 위한 강력하고 효율적인 기능을 제공합니다. 주요 기능을 살펴보겠습니다:

1. 실시간 통신​

Feathers.js는 기본적으로 실시간 통신 기능을 제공합니다. Socket.io와 원활하게 통합되어 실시간 애플리케이션을 쉽게 구축하고 클라이언트에 즉각적인 업데이트를 제공할 수 있습니다. 다음은 Feathers.js를 사용하여 실시간 채팅 애플리케이션을 만드는 예입니다:

// 채팅 서비스 정의
app.use('/chat', {
async create(data) {
// 메시지를 데이터베이스에 저장
const message = await db.messages.create(data);

// 새로운 메시지를 모든 연결된 클라이언트에게 발송
app.service('chat').emit('created', message);

return message;
}
});

// 채팅 서비스에 연결
const chatService = app.service('chat');
chatService.on('created', message => {
console.log('새로운 메시지:', message);
});

이 예제에서 create 메서드를 사용하여 클라이언트가 새로운 메시지를 작성할 때마다 메시지가 데이터베이스에 저장되고 Socket.io를 사용하여 모든 연결된 클라이언트에게 발송됩니다.

2. 데이터베이스 통합​

Feathers.js는 MongoDB, SQL 데이터베이스 등 다양한 데이터베이스 통합을 지원합니다. 데이터베이스 작업을 수행하기 위한 직관적이고 일관된 API를 제공하여 CRUD 작업을 쉽게 수행할 수 있습니다. 다음은 Feathers.js와 MongoDB를 사용하여 간단한 작업 관리 API를 만드는 예입니다:

// 작업 서비스 정의
app.use('/tasks', {
async create(data) {
return db.tasks.create(data);
},
async find(params) {
return db.tasks.find(params.query);
},
async update(id, data) {
return db.tasks.update(id, data);
},
async remove(id) {
return db.tasks.remove(id);
}
});

이 예제에서 tasks 서비스는 작업 생성, 조회, 업데이트, 삭제를 위한 메서드를 노출합니다. 이러한 메서드는 실제 데이터베이스 작업을 db.tasks 객체에 위임합니다. 이 객체는 예를 들어 MongoDB 컬렉션일 수 있습니다.

3. 인증 및 권한 부여​

Feathers.js는 인증 및 권한 부여를 위한 내장 지원을 제공하여 애플리케이션을 쉽게 보안할 수 있습니다. JWT, OAuth 등 인기 있는 인증 제공자와 통합됩니다. 다음은 Feathers.js를 사용하여 사용자를 인증하는 예입니다:

// 인증 설정
app.configure(authentication({
secret: 'my-secret-key'
}));

// 사용자 인증
app.service('authentication').create({
strategy: 'local',
email: 'example@example.com',
password: 'password'
}).then(result => {
console.log('인증됨!', result);
});

이 예에서 authentication 서비스는 비밀 키로 구성됩니다. 그런 다음 create 메서드를 호출하여 로컬 전략을 사용하여 사용자를 인증합니다. 결과에는 인증된 사용자의 정보가 포함됩니다.

4. 확장성과 마이크로서비스​

Feathers.js는 높은 확장성을 지원하고 마이크로서비스 아키텍처 패턴을 지원하도록 설계되었습니다. 애플리케이션을 여러 서비스로 분할하고 독립적으로 배포할 수 있으므로 확장성과 유지 관리성이 향상됩니다. 다음은 Feathers.js를 사용하여 마이크로서비스를 만드는 예입니다:

// 사용자 서비스 정의
app.use('/users', {
async find(params) {
return db.users.find(params.query);
},
async get(id) {
return db.users.get(id);
},
async create(data) {
return db.users.create(data);
},
async update(id, data) {
return db.users.update(id, data);
},
async remove(id) {
return db.users.remove(id);
}
});

이 예제에서 users 서비스는 사용자 데이터를 관리하는 독립적인 마이크로서비스로 작동합니다. 사용자를 찾고, 가져오고, 생성하고, 업데이트하고, 삭제하기 위한 메서드를 노출합니다.

예제​

Feathers.js를 실제로 사용하는 몇 가지 예제를 살펴보겠습니다:

예제 1: 실시간 Todo 애플리케이션​

이 예제에서는 Feathers.js와 Socket.io를 사용하여 실시간 todo 애플리케이션을 만듭니다. 이 앱은 여러 사용자가 협력하여 실시간으로 todo 목록을 업데이트할 수 있습니다.

// 할 일 서비스 정의
app.use('/todos', {
async create(data) {
// 할 일을 데이터베이스에 저장
const todo = await db.todos.create(data);

// 새로운 할 일을 모든 연결된 클라이언트에게 발송
app.service('todos').emit('created', todo);

return todo;
},
async find(params) {
return db.todos.find(params.query);
},
async update(id, data) {
return db.todos.update(id, data);
},
async remove(id) {
return db.todos.remove(id);
}
});

// 할 일 서비스에 연결
const todosService = app.service('todos');
todosService.on('created', todo => {
console.log('새로운 할 일:', todo);
});

이 예제에서 사용자가 새로운 할 일을 작성하면 데이터베이스에 저장되고 Socket.io를 사용하여 모든 연결된 클라이언트에게 발송됩니다. find, update 및 remove 메서드를 사용하여 사용자는 할 일을 검색, 업데이트 및 삭제할 수 있습니다.

예제 2: 인증 API​

이 예제에서는 Feathers.js와 JWT를 사용하여 사용자 인증을 위한 API를 만듭니다. 이 API는 사용자 등록, 로그인 및 보호된 리소스에 액세스하기 위한 엔드포인트를 제공합니다.

// 인증 설정
app.configure(authentication({
secret: 'my-secret-key'
}));

// 사용자 서비스 정의
app.use('/users', {
async create(data) {
// 비밀번호를 저장하기 전에 해싱
data.password = await bcrypt.hash(data.password, 10);

return db.users.create(data);
}
});

// 인증 서비스 정의
app.use('/authentication', {
async create(data) {
const { email, password } = data;

// 이메일로 사용자 찾기
const user = await db.users.findOne({ email });

// 비밀번호 확인
const isPasswordValid = await bcrypt.compare(password, user.password);

if (isPasswordValid) {
// JWT 토큰 생성
const token = jwt.sign({ userId: user._id }, 'my-secret-key');

return { accessToken: token };
} else {
throw new Error('잘못된 이메일 또는 비밀번호');
}
}
});

이 예제에서 users 서비스는 이메일과 비밀번호로 계정을 생성하여 사용자를 등록할 수 있도록 합니다. authentication 서비스는 로그인을 위한 create 메서드를 제공합니다. 이메일과 비밀번호가 유효한 경우 JWT 토큰이 생성되고 반환됩니다.

Feathers.js에 대해 더 알아보려면 공