API란 무엇인가? – RESTful API 이해하기

현대 웹 개발에서 API는 필수적인 요소입니다. API는 애플리케이션 간의 상호작용을 가능하게 하며, 다양한 서비스와 데이터를 통합할 수 있게 해줍니다. 이 포스팅에서는 API의 기본 개념과 RESTful API에 대해 설명하고, 예제를 통해 이를 이해하는 데 도움을 주겠습니다. 


API란?


API(Application Programming Interface)는 소프트웨어 애플리케이션 간의 상호작용을 가능하게 하는 인터페이스입니다. API는 애플리케이션이 서로 소통하고 데이터를 주고받을 수 있게 해줍니다. API를 통해 애플리케이션은 다른 소프트웨어의 기능을 호출하고, 데이터를 요청하거나, 특정 작업을 수행할 수 있습니다.


API의 역할


API는 다음과 같은 역할을 합니다:


  1. 데이터 접근: 애플리케이션이 데이터베이스나 외부 서비스에 접근하여 데이터를 읽고 쓸 수 있습니다.
  2. 기능 호출: 다른 애플리케이션의 기능을 호출하여 특정 작업을 수행할 수 있습니다.
  3. 서비스 통합: 다양한 서비스와 데이터를 통합하여 복잡한 애플리케이션을 구축할 수 있습니다.

API의 예


  • Google Maps API: 위치 정보와 지도를 애플리케이션에 통합할 수 있습니다.
  • Twitter API: 트위터 데이터를 읽고 쓰는 기능을 애플리케이션에 추가할 수 있습니다.
  • Payment API: 결제 시스템을 애플리케이션에 통합할 수 있습니다.

RESTful API란?


REST(Representational State Transfer)는 네트워크 상에서 자원을 정의하고 자원에 대한 주소를 지정하는 방법론입니다. RESTful API는 REST 아키텍처 스타일을 따르는 API를 의미합니다. RESTful API는 HTTP를 사용하여 자원에 접근하고 조작할 수 있습니다.


REST의 기본 원칙


REST는 다음과 같은 기본 원칙을 따릅니다:


  1. 자원(Resource): 모든 것은 자원으로 간주됩니다. 예를 들어, 사용자, 제품, 주문 등이 자원입니다.
  2. 자원의 주소(Resource URL): 각 자원은 고유한 URL로 식별됩니다. 예: https://api.example.com/users/1
  3. 표현(Representation): 자원은 다양한 형식(JSON, XML 등)으로 표현될 수 있습니다.
  4. 상태 없음(Stateless): 각 요청은 독립적이며, 서버는 요청 간의 상태를 유지하지 않습니다.
  5. 표준 HTTP 메서드: RESTful API는 표준 HTTP 메서드를 사용하여 자원을 조작합니다. 예: GET, POST, PUT, DELETE

HTTP 메서드와 RESTful API


  • GET: 자원을 조회합니다.
  • POST: 자원을 생성합니다.
  • PUT: 자원을 수정합니다.
  • DELETE: 자원을 삭제합니다.

RESTful API 예제


이제 Node.js와 Express를 사용하여 간단한 RESTful API를 만들어보겠습니다.


프로젝트 설정


  1. 새로운 디렉토리를 만들고, 해당 디렉토리로 이동합니다.
    mkdir my-restful-api
    cd my-restful-api
    

  2. npm 초기화를 통해 package.json 파일을 생성합니다.
    npm init -y
    

  3. Express를 설치합니다.
    npm install express
    

간단한 RESTful API 구현


  1. server.js 파일을 만들고, 다음 코드를 작성합니다.
    const express = require('express');
    const app = express();
    const port = 3000;
    
    app.use(express.json());
    
    let users = [
        { id: 1, name: '홍길동', email: 'hong@example.com' },
        { id: 2, name: '이순신', email: 'lee@example.com' }
    ];
    
    // GET 모든 사용자 조회
    app.get('/users', (req, res) => {
        res.json(users);
    });
    
    // GET 특정 사용자 조회
    app.get('/users/:id', (req, res) => {
        const user = users.find(u => u.id === parseInt(req.params.id));
        if (!user) return res.status(404).send('사용자를 찾을 수 없습니다.');
        res.json(user);
    });
    
    // POST 새로운 사용자 추가
    app.post('/users', (req, res) => {
        const user = {
            id: users.length + 1,
            name: req.body.name,
            email: req.body.email
        };
        users.push(user);
        res.status(201).json(user);
    });
    
    // PUT 기존 사용자 수정
    app.put('/users/:id', (req, res) => {
        const user = users.find(u => u.id === parseInt(req.params.id));
        if (!user) return res.status(404).send('사용자를 찾을 수 없습니다.');
    
        user.name = req.body.name;
        user.email = req.body.email;
        res.json(user);
    });
    
    // DELETE 사용자 삭제
    app.delete('/users/:id', (req, res) => {
        const user = users.find(u => u.id === parseInt(req.params.id));
        if (!user) return res.status(404).send('사용자를 찾을 수 없습니다.');
    
        const index = users.indexOf(user);
        users.splice(index, 1);
        res.json(user);
    });
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}/`);
    });
    

  2. 서버를 실행합니다.
    node server.js
    

  3. 브라우저나 Postman과 같은 도구를 사용하여 http://localhost:3000에서 API를 테스트합니다.

API 테스트 예제


  • GET /users: 모든 사용자 조회
    curl -X GET http://localhost:3000/users
    

  • GET /users/1: 특정 사용자 조회
    curl -X GET http://localhost:3000/users/1
    

  • POST /users: 새로운 사용자 추가
    curl -X POST -H "Content-Type: application/json" -d '{"name": "강감찬", "email": "kang@example.com"}' http://localhost:3000/users
    

  • PUT /users/1: 기존 사용자 수정
    curl -X PUT -H "Content-Type: application/json" -d '{"name": "홍길동", "email": "newhong@example.com"}' http://localhost:3000/users/1
    

  • DELETE /users/1: 사용자 삭제
    curl -X DELETE http://localhost:3000/users/1
    

RESTful API의 장점


  • 확장성: RESTful API는 독립적인 클라이언트-서버 구조를 사용하여 애플리케이션을 쉽게 확장할 수 있습니다.
  • 유연성: 다양한 데이터 형식을 지원하며, 클라이언트와 서버가 독립적으로 개발될 수 있습니다.
  • 표준화: HTTP 프로토콜을 사용하여 일관된 인터페이스를 제공합니다.

결론


API는 애플리케이션 간의 상호작용을 가능하게 하는 중요한 요소입니다. RESTful API는 HTTP 프로토콜을 기반으로 자원을 정의하고 조작하는 방법을 제공하여, 현대 웹 애플리케이션 개발에서 널리 사용되고 있습니다. 이 포스팅에서는 API의 기본 개념과 RESTful API의 원칙을 설명하고, Node.js와 Express를 사용하여 간단한 RESTful API를 구현하는 방법을 소개하였습니다.

이 포스팅이 API와 RESTful API를 이해하는 데 도움이 되길 바랍니다. 질문이나 추가 정보가 필요하시면 언제든지 댓글로 남겨주세요.

다음 이전