본문으로 건너뛰기

Adonis.js 개요.

소개

Adonis.js는 개발자가 확장 가능하고 효율적인 웹 애플리케이션을 구축할 수 있는 Node.js 프레임워크입니다. 이는 MVC (Model-View-Controller) 패턴을 따르며 개발 프로세스를 단순화하기 위한 강력한 기능을 제공합니다. 이 튜토리얼에서는 Adonis.js의 역사, 기능 및 예제를 살펴보겠습니다.

역사

Adonis.js는 루마니아에 기반을 둔 소프트웨어 개발 회사인 ace에 의해 개발되었습니다. 이는 2016년에 처음 출시되었으며 간결성과 성능 때문에 개발자들 사이에서 인기를 얻었습니다. 이 프레임워크는 인기 있는 PHP 프레임워크인 Laravel에서 영감을 받았으며 많은 개념을 차용하고 있습니다.

기능

Adonis.js의 주요 기능 중 일부를 살펴보겠습니다:

1. 라우팅

Adonis.js는 애플리케이션의 라우트를 정의할 수 있는 강력한 라우팅 시스템을 제공합니다. 간단한 라우트를 정의하는 예시를 살펴보겠습니다:

Route.get('/', ({ response }) => {
return response.send('Hello World');
});

이 예제에서는 "Hello World" 메시지를 반환하는 루트 URL ("/")에 대한 GET 라우트를 정의합니다.

2. 미들웨어

Adonis.js의 미들웨어는 라우트 핸들러에 도달하기 전이나 후에 요청/응답을 처리하는 방법을 제공합니다. 인증, 유효성 검사 등과 같은 공통 관심사를 구현하는 데 도움이 됩니다. 요청 URL을 로깅하는 미들웨어의 예시를 살펴보겠습니다:

class LogRequest {
async handle({ request }, next) {
console.log(`Request URL: ${request.url()}`);
await next();
}
}

이 미들웨어를 사용하려면 start/kernel.js 파일에서 등록할 수 있습니다:

const namedMiddleware = {
log: 'App/Middleware/LogRequest',
};

그리고 라우트에 적용할 수 있습니다:

Route.get('/', ({ response }) => {
return response.send('Hello World');
}).middleware(['log']);

3. 데이터베이스 통합

Adonis.js는 Lucid라는 내장형 ORM (Object Relational Mapper)을 제공합니다. 이는 MySQL, PostgreSQL, SQLite 및 Oracle과 같은 여러 데이터베이스를 지원합니다. 모델을 생성하고 데이터베이스에서 쿼리하는 예시를 살펴보겠습니다:

class User extends Model {
static get table() {
return 'users';
}
}

const users = await User.query().where('age', '>', 18).fetch();

이 예시에서는 데이터베이스에서 'users' 테이블을 나타내는 User 모델을 정의합니다. 그런 다음 query() 메서드를 사용하여 18세 이상의 모든 사용자를 가져옵니다.

4. 인증

Adonis.js는 기본적으로 간단하고 안전한 인증 시스템을 제공합니다. 등록, 로그인 및 비밀번호 재설정과 같은 기능을 포함하고 있습니다. 사용자를 인증하는 방법에 대한 예시를 살펴보겠습니다:

const auth = await auth.attempt(email, password);

이 예시에서는 attempt() 메서드를 사용하여 이메일과 비밀번호로 사용자를 인증합니다.

예제

Adonis.js의 강력함과 유연성을 보여주기 위해 몇 가지 예제를 살펴보겠습니다:

예제 1: 할 일 목록 애플리케이션 생성

Adonis.js를 사용하여 간단한 할 일 목록 애플리케이션을 만들어보겠습니다. 이 애플리케이션은 사용자가 작업을 만들고 업데이트하고 삭제할 수 있게 해줍니다.

  1. Adonis.js를 전역으로 설치합니다:

    npm install -g @adonisjs/cli
  2. 새로운 Adonis.js 프로젝트를 생성합니다:

    adonis new todo-list
  3. 할 일 모델과 마이그레이션을 생성합니다:

    adonis make:model Todo -m
  4. 마이그레이션을 실행하여 'todos' 테이블을 생성합니다:

    adonis migration:run
  5. start/routes.js에서 작업 생성, 업데이트 및 삭제를 위한 라우트를 정의합니다:

    Route.post('/todos', 'TodoController.create');
    Route.put('/todos/:id', 'TodoController.update');
    Route.delete('/todos/:id', 'TodoController.delete');
  6. app/Controllers/Http/TodoController.js에서 메서드를 구현합니다:

    class TodoController {
    async create({ request }) {
    const { title } = request.body;
    const todo = new Todo();
    todo.title = title;
    await todo.save();
    return todo;
    }

    async update({ params, request }) {
    const { title } = request.body;
    const todo = await Todo.findOrFail(params.id);
    todo.title = title;
    await todo.save();
    return todo;
    }

    async delete({ params }) {
    const todo = await Todo.findOrFail(params.id);
    await todo.delete();
    return { message: 'Task deleted successfully' };
    }
    }
  7. 개발 서버를 시작합니다:

    adonis serve --dev

이제 Postman과 같은 도구를 사용하여 작업 생성, 업데이트 및 삭제를 위한 API 엔드포인트를 테스트할 수 있습니다.

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

Adonis.js는 WebSocket 및 Socket.io와 같은 WebSocket 프로토콜과 원활하게 통합되므로 실시간 애플리케이션 구축에 이상적입니다. 실시간 채팅 애플리케이션의 예시입니다:

  1. Adonis.js WebSockets 패키지를 설치합니다:

    npm install @adonisjs/websocket
  2. 채팅 애플리케이션을 위한 새로운 채널을 생성합니다:

    adonis make:channel Chat
  3. app/Channels/Chat.js에서 채팅 메시지 처리 로직을 구현합니다:

    class Chat {
    onMessage({ socket, request }, message) {
    socket.broadcastToAll('message', message);
    }
    }
  4. start/socket.js에서 채널을 등록합니다:

    const namedChannels = {
    chat: 'App/Channels/Chat',
    };
  5. start/routes.js에서 WebSocket 라우트를 생성합니다:

    Route.ws('/chat', 'ChatController.index').middleware(['auth']);
  6. app/Controllers/Http/ChatController.js에서 메서드를 구현합니다:

    class ChatController {
    async index({ auth, view }) {
    await auth.check();
    return view.render('chat');
    }
    }
  7. resources/views/chat.edge에 채팅 인터페이스를 위한 뷰를 생성합니다:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Chat</title>
    </head>
    <body>
    <input type="text" id="message" placeholder="Type your message">
    <button id="send">Send</button>

    <script src="/socket.io/socket.io.js"></script>
    <script>
    const socket = io();

    document.getElementById('send').addEventListener('click', () => {
    const message = document.getElementById('message').value;
    socket.emit('message', message);
    });

    socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    });
    </script>
    </body>
    </html>
  8. 개발 서버를 시작합니다:

    adonis serve --dev

이제 웹 브라우저에서 채팅 인터페이스를 열고 실시간으로 메시지를 보낼 수 있습니다.

결론

이 튜토리얼에서는 Adonis.js의 소개, 역사, 기능 및 예제를 살펴보았습니다. 강력한 라우