CS 공부

# 내부 변경에도 변하지 않는 API

박태정 입니다. 2025. 2. 15. 23:34
반응형

API가 내부 프로세스 변경에도 영향을 받지 않는 것이 왜 중요한가?

API를 설계할 때 내부 프로세스가 바뀌더라도 API 응답 형식이 유지되는 것이 중요하다고한다. API가 안정적으로 유지되면 클라이언트(웹, 모바일 앱 등)가 API의 변경을 신경 쓰지 않아도 되므로 유지보수가 쉬워지고, 서비스가 안정적으로 제공될 수 있다.

내부 데이터가 변경되어도 API가 유지되는 이유

예를 들어, 다음과 같이 JSON 파일을 읽어 API 응답을 반환하는 코드가 있다고 가정하자.

const fs = require('fs');
app.get('/taejung', (req, res) => {
    const f = JSON.parse(fs.readFileSync("a.json", { encoding: "utf-8" }));
    const data = { "name": f.name };
    res.send(data);
});

여기서 a.json 파일의 내용이 다음과 같다고 하자.

{
    "name": "taejung",
    "tall": 200
}

이제 tall 값을 20000으로 수정해도 API의 응답은 여전히 name 값만 반환하므로 클라이언트 입장에서는 아무런 변화가 없다.

{
    "name": "taejung"
}

즉, 백엔드 내부 데이터가 바뀌어도 API 응답이 동일하게 유지되면, 클라이언트는 변경을 감지할 필요 없이 계속 동일한 방식으로 API를 사용할 수 있다.

API가 변경되지 않는 것이 왜 중요한가?

1️⃣ 클라이언트 코드 수정 필요 없음 (호환성 유지)

  • 만약 API의 응답 형식이 변경되면, API를 사용하는 모든 클라이언트(웹, 모바일 앱, 다른 서버 등)가 수정된 API에 맞춰 코드를 변경해야 한다.
  • 하지만 내부 데이터가 변경되어도 API의 응답이 같다면, 클라이언트는 기존 코드 그대로 사용할 수 있어 유지보수가 쉬워진다.

2️⃣ API가 안정적으로 유지됨 (Backward Compatibility)

  • API는 여러 클라이언트와 시스템에서 사용되기 때문에, 내부 로직이 변경될 때마다 API가 수정되면 모든 사용자에게 영향을 준다.
  • 하지만 API 응답이 변하지 않으면 이전 버전과의 호환성(Backward Compatibility)을 유지할 수 있다.
  • 즉, API를 사용하는 프로그램이 깨지지 않고 안정적으로 동작할 수 있다.

3️⃣ 백엔드 개발과 클라이언트 개발을 독립적으로 진행 가능

  • API가 내부 변경에 영향을 받으면, 백엔드 개발자가 API를 수정하면 클라이언트 개발자도 변경된 API에 맞춰 코드를 수정해야 한다.
  • 하지만 API 응답 형식이 유지되면, 백엔드 개발자는 내부 프로세스를 변경하면서도 클라이언트에 영향을 주지 않을 수 있다.
  • 즉, 백엔드와 프론트엔드 개발을 독립적으로 진행할 수 있어서 개발 속도가 빨라진다.

내부적으로 데이터 저장 방식이 바뀌어도 API가 유지되는 설계 방법

❌ 잘못된 API 설계 (내부 데이터 구조가 바뀌면 API도 수정해야 하는 경우)

// 원래는 JSON 파일에서 데이터를 읽음
const f = JSON.parse(fs.readFileSync("a.json", "utf-8"));
res.send(f);
  • API가 JSON 파일(a.json)을 직접 읽어서 클라이언트에게 반환하는 방식이다.
  • 이후 내부 데이터를 데이터베이스(MySQL)로 변경하면 API도 수정해야 한다.
// 내부적으로 MySQL로 변경
const mysql = require("mysql");
const connection = mysql.createConnection({...});
connection.query("SELECT * FROM users WHERE id = 1", (err, result) => {
    res.send(result);
});
  • 데이터 저장 방식이 바뀌면서 API 응답 형식도 변할 가능성이 있음 → 클라이언트가 영향을 받음

✅ 좋은 API 설계 (내부 변경이 있어도 API가 그대로 유지되는 경우)

// 내부적으로 JSON이든, MySQL이든 상관없이 API 응답을 동일하게 유지함
const getUserData = () => {
    return { "name": "taejung" };
};

app.get("/taejung", (req, res) => {
    const data = getUserData();
    res.send(data);
});
  • 내부적으로 데이터를 JSON에서 가져오든, 데이터베이스에서 가져오든 API 응답 형식은 유지됨
  • 따라서 내부 로직을 바꾸더라도 API를 사용하는 클라이언트는 변경할 필요 없음

🚀 결론: API의 가장 큰 장점

백엔드 내부 프로세스를 변경해도 API의 응답 형식을 유지하면, 클라이언트 코드를 수정할 필요가 없어서 유지보수가 쉬움
API가 안정적으로 유지되기 때문에, API를 사용하는 여러 시스템(웹, 모바일 등)이 영향을 받지 않음
백엔드와 클라이언트 개발을 독립적으로 진행할 수 있어서 개발 속도가 빨라짐

📌 이게 바로 API의 가장 큰 장점 중 하나다! 😊

반응형