크래프톤 정글 입학시험 때,
댓글 기능을 구현하는데
deletecomment/
, makecomment/
이런식으로 라우트를 만들었다.
당시엔 HTTP 메서드(GET‧POST‧PUT‧DELETE 등)의 의미도, RESTful 원칙도 잘 몰랐다.
시험이 끝난 후 코드 리뷰를 받았는데, “URI는 데이터(리소스) 를 가리켜야 하고, 행위 는 HTTP 메서드로 구분해야 한다”는 지적을 받았다.
그때 설계하는 방법을 배워야함을 처음 깨달았다.
기능이 늘어날수록 URI는 점점 복잡해지고, 관리가 어려워진다.
예를 들어 댓글 기능을 구현할 때, 내가 처음 했던 것처럼
처럼 행위(action) 중심으로 각각의 URI를 따로 만들면,
시간이 지나고 기능이 많아지면 API가 불필요하게 늘어나고 중복된다.
특히, 수정할 때 마다 관련된 URI들을 모두 확인하며 바꿔야 해서 유지보수가 어려워진다.
이처럼 처음 설계를 잘못하면, 시간이 지날수록 빚처럼 누적이 되는 현상이 나타나는데
이것을 기술 부채 라고 한다.
RESTful 설계는 어떤 규칙을 따르고 있어서
처음엔 좀 엄격하고 불편해 보일 수도 있지만, 쓰면 쓸수록 훨씬 더 명확하다.
기능 | URI | HTTP 메서드 |
---|---|---|
댓글 조회 | /recipes/{id}/comments | GET |
댓글 작성 | /recipes/{id}/comments | POST |
댓글 수정 | /recipes/{id}/comments/{commentId} | PUT |
댓글 삭제 | /recipes/{id}/comments/{commentId} | DELETE |
이렇게 구조가 깔끔하니까
나중에 코드를 보는 나도, 함께 일하는 다른 사람도 “이건 뭐 하는 API다”라는 게 바로 보인다.
온보딩이란?
‘온보딩(onboarding)’이란 말은 원래 신입사원이 회사에 적응하는 걸 말하는데,
개발에서는 새로운 팀원이 프로젝트에 들어와서 구조를 익히는 과정을 말한다.설계가 제각각이면, 처음 보는 사람은 어디서 뭘 고쳐야 할지 몰라서
이해하는 데 시간도 오래 걸리고, 실수도 잦아진다.반대로 설계가 표준적이고 일관성 있게 잘 돼 있으면
새로운 사람이 금방 이해하고, 바로 기여할 수 있다.
이번 프로젝트도 나 혼자 했지만,
“내가 나중에 봐도 이해할 수 있을까?” 를 계속 생각하면서 설계하려고 했다.
버그가 생겨도 구조가 정리돼 있으니까 금방 원인을 찾고 고칠 수 있다.
리소스 중심으로 설계해 두면, /recipes/{id}/likes 같은 새로운 기능도 쉽게 추가할 수 있다.
URI, 메서드, 상태코드 같은 공통 언어가 있으니까
프론트, 백엔드, 기획자, 디자이너도 더 쉽게 소통할 수 있다.
Swagger, Spring REST Docs 같은 문서화 도구도 표준 설계에 맞춰 자동으로 API 문서를 만들어준다.
처음 개발을 시작할 땐, 기능을 빠르게 구현하는 게 중요하다고 생각했다.
근데 이번 게시판 프로젝트를 하면서 느낀 건,
“빠르게”보다 “제대로” 만드는 게 훨씬 더 오래 가는 힘이라는 거다.
기능은 단순했지만
왜 이렇게 설계해야 하는지,
이 방식이 어떤 의미가 있는지를 생각하면서 만들었던 경험이
나중에 어떤 프로젝트를 하든 내 기준이 돼줄 거라 믿는다.
이게 바로 내가 생각하는 ‘똑똑한 설계법’이고,
앞으로 더 성장하기 위해 꼭 붙잡고 가야 할 기본기라고 생각한다.
명확하지 않은 설계는 곧 기술 부채가 된다. 배워갑니다