메인 콘텐츠로 이동하기
  1. Posts/

회고 - Laravel 게시판 패키지 수정

·3 분

약 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에 버전을 명시하는 것이 더 간편하다고 판단하였다. ↩︎