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의 가장 큰 장점 중 하나다! 😊
반응형