inlee's blog

회고 - 게시판 패키지 수정

· inlee

약 3년전쯤 Laravel에서 사용할 게시판을 패키지로 구현한 후 바쁘다는 핑계로 방치해두고 로직 구현만 참조하고 있었다. 그런데, 올해 중순 경 어느 개발자 한 분이 패키지가 오래되어 설치가 되지 않아 정상동작하는 버전이 있는지 문의를 했었고 없던 관계로 나도 겸사겸사 사용할 목적으로 새로 구현한 후 회신하였다.

그래서 지난번과 달라진 점 / 어떤 부분들을 수정했는지 간단히 정리 후 복기(復棋)1 해보고자 한다.

주요 변경사항

1. 스캐폴딩(Scaffolding) 형태로 변환

기존 게시판은 게시판 로직 자체가 패키지 내부에 정의되어 있어 소스코드를 개발자가 직접 수정하여 사용할 수 없었다2. 생각해보면 그 당시 게시판을 만들 때 각 사이트별로 요구하는 바가 달라 커스터마이징이 가능해야 하는 점을 생각하지 못했었다. 또한 Laravel용 패키지를 만드는 공부를 겸했기 때문에 어떻게 해결해야 할지도 몰랐던 것 같다.

그래서 이번 구현에서는 스캐폴딩(Scaffolding)3 형태로 제작하여 명령어를 통해 게시판 CRUD4 샘플 코드를 개발자 프로젝트에 Publish 해주는 역할만 하도록 하였다.

2. API 형태로 구현

기존 게시판은 view 구현을 포함하였으나 참조했던 적이 없어 이번에는 API 형태로 구현하였다.

2-1. Authentication

게시판을 API형태로 구현함에 따라 사용자 인증을 Stateless5 형태로 변경하였다.

스캐폴딩으로 코드를 생성(샘플코드)해주는 점을 생각해 별다른 구현 없이 사용 가능하고(Laravel에서 기본제공) 가장 간단한 email:password 형태를 base64 인코딩하여 사용하는 Basic Authentication을 적용하였다.

  • 회원 정보: Laravel 제공해주는 기본 테이블 사용
  • POST, PUT, DELETE method 에 대해서만 Basic Authentication 적용

2-2. Role

간단한 형태로 구현하고자 게시판 사용자 역할은 별도로 두지 않았다6.

2-2. Versioning

API 구현으로 변경하며 URL에 Version을 삽입하였다 (ex. /api/v1/board/freev1)7.

Command

패키지 설치 후 게시판 스캐폴딩 코드를 Publish 해주는 명령어를 추가하였다. 자세한 내용은 inium/laraboard의 README.md > 2. Publish files & Append routes에 기록하였다.

문서화

패키지 개발완료 후 사용방법 등을 기록한 내용을 inium/laraboard의 README.md에 기록하였다. 또한 구현한 API에 대한 문서를 REST Client 를 이용해 REST API 형식으로 기록하였다.

결과

약 2주간 구현 및 수정을 완료했고 Github, Packagist에서 참조할 수 있도록 하였다.

마치며

작년 여름, 어느 개발자의 요청으로 게시판 패키지를 단순화 및 개선을 하였고 그 결과를 해가 바뀌고 돌아보았다.

처음 구현은 게시판에 필요한 많은 것을 구현하려고 했는데 개선하면서 복기를 해 보니 부끄러울 정도로 구조 및 구현이 마음에 들지 않았다. 그래서 이번에는 게시판에 필요한 최소 기능만 구현한 후 개발자가 원하는 대로 필요한 코드를 스캐폴딩해주는 식으로 변경하였다.

돌아보면 지난번에 비해 많이 나아진 것 같으나, 시간이 지나면 이 또한 부끄러움이 될 것 같다. 생각해보면 이 과정을 통해 발전을 하는게 아닌가 싶다.

요청주신 어느 개발자분 덕분에 나 또한 돌아보고 개선 항목들을 추릴 수 있었으며 그것들을 이번 구현에 반영할 수 있어 감사하다는 말을 하고 싶다. 현재 약 6개월 정도 지난 시점에서 수정해야 할 부분들이 많이 보이는데, 향후 이를 포함해 코드 리펙토링, 테스트 코드를 구현하여 추가해보고자 한다.


  1. 바둑 대국이 끝난 뒤, 해당 대국의 내용을 검토하기 위하여 두었던 순서대로 다시 두어보는 일 ↩︎

  2. 패키지 자체를 수정하면 사용 가능하긴 함 ↩︎

  3. 초기 프로젝트의 뼈대를 만들어주는 행위를 뜻한다. 명령어를 입력하면 어플리케이션 내 코드 생성을 해준다. 건축에서 가져온 비계(飛階)라는 단어 (작업자들이 임시로 외벽을 지나다닐 수 있도록 만든 임시 구조물) 에서 유래했다. ↩︎

  4. Create, Read, Update, Delete ↩︎

  5. 사용자 인증 상태를 서버에서 유지하지 않고 요청(request)시 유효한 사용자인지 여부를 판단하는 방법. Request header에 주로 Authentication 항목에 token을 입력하여 사용하며 OAuth2, JWT, Basic 등의 방법이 있다. ↩︎

  6. 추후 게시판 역할 추가 시 Laravel에서 제공하는 Gate or Policy, 혹은 spatie/laravel-permission와 같은 패키지를 사용하는 것을 고려해 볼 수 있을 것 같다. ↩︎

  7. 버전을 명시하는 방법에는 여러가지 방법 중 Request Body 내 버전을 명시하는 방법도 고려해 보았으나 URL에 버전을 명시하는 것이 더 간편하다고 판단하였다. ↩︎