본문 바로가기

토이프로젝트/MOBOOK

MOBOOK1.0 회고

1. MOBOOK1.0을 만든 이유

 

회사 인턴기간이 끝날 쯤, 이사님께서 툭 던진 말이 있다.

회사에 있는 책들이 많아지면서 엑셀로 관리하기가 힘들었다.

그리고 책을 빌릴 때는 구두로, 또는 개인 채팅으로 말해야 했기 때문에 휴먼에러나 의사소통 에러로 정리가 잘 되지 않고있었다.

 

그래서 만들었다. 

 

2. 사용 기술

  • Language : Java
    • 사실 Kotlin을 쓰고 싶었지만 아직 잘 알지도 못하고(사실 아직 java도 잘 알지 못한다.) 프로젝트를 진행하기에 미흡한 부분이 많아서 일단 Java를 쓰기로 했다.
      그리고 추후에 Kotlin으로 리팩토링해야겠다는 생각을 했다. (MOBOOK2.0)
  • Back-end : Spring Boot
    • 프레임워크는 SpringBoot로 정했다. 사용해본 경험도 있고, 지금 회사에서도 springBoot를 기반으로 일을 하고 있기 때문에 큰 고민없이 정할 수 있었다.
  • Front-end : React.js
    • Vue.js와 React.js
      처음부터 자바스크립트를 공부하고 깊이 있는 프론트를 구현하기에는 자원이 부족했다. 그래서 사람들이 많이 쓰는, 관련된 정보가 많은 라이브러리를 선택하기로 생각했다.
      두 가지 모두 많은 사람들이 쓰고 있었지만, React.js가 조금 더 많은 포스팅, 정보가 있었고 예제들도 많이 있었다. 그래서 프론트는 React.js를 쓰기로 했다.
  • DB : MariaDB, JPA
    • 가장 대중적인 MariaDB를 사용했다.
    • 최근 김영한님의 JPA강의를 재밌게 들었다. 그래서 배운 것들을 실제로 써볼 수 있는 기회라고 생각했다.
    • 모든 쿼리를 JPA로 커버하기는 어렵기 때문에 강의에서 배 QeuryDsl과 함께 사용하기로 생각했다.

 

3. 도전 과제 & 해결방안

  • JWT
    • 이번 프로젝트에서 jwt를 사용하기로 생각했다. 기존에 진행했던 프로젝트는 모두 세션을 이용해서 로그인, 로그아웃을 구현했었다. 실제 고객들이 쓸 서비스가 아니라 회사 내부에서 쓰는 서비스기 때문에 JWT, 세션 둘 다 크게 상관없다고 생각했다. 
      JWT가 뭔지, 대부분의 사이트들이 JWT를 이용하는데 어떻게 돌아가는 지 궁금했다.
      그리고 회사 인원이 많아진다면 세션은 서버에 부담을 줄 수 있기 때문에 JWT를 사용하기로 계획했다.

    • 해결 방안
      https://www.youtube.com/@funnyjava 이 유튜브 채널을 통해서 많이 배웠다. JWT의 전체적인 흐름을 알 수 있었고 영상의 내용을 바탕으로 프로젝트에 JWT를 적용할 수 있었다.
  • API 설계
    • 프론트와 api통신을 해야 하기 때문에, 프론트에서 쉽게 쓸 수 있게 적절한 응답을 줘야한다.

    • 해결 방안
      다른사람들의 깃허브를 통해서 api경로를 어떻게 설정했는 지 많이봤다. 그리고 나쁜 예시들, 좋은 예시들을 비교하면서 설계할 수 있었다.
  • 프론트
    • 지금까지 해온 프로젝트는 모두 타임리프를 통해 구현했다. 이번 기회에 서버와 프론트를 나눠서 api통해 통신하는 서비스를 개발하고 싶었다. 그리고 회사 업무와도 직접적인 연관이 있어서 도전하기로 생각했다.

    • 해결 방안
      멋쟁이 사자처럼 부트캠프 시절 강사님이셨던 장희승 강사님의 영상을 많이 참고했다.
      특히, JWT를 프론트에서 어떻게 해결할지에 대해서 고민이 많았는데 https://www.youtube.com/watch?v=KObFKTtAEgs 이 영상의 시리즈들을 보면서 recoil을 통해서 고민을 해결할 수 있었다.
  • 배포 
    • 2개의 토이프로젝트 모두 NCP(네이버클라우드플랫폼)을 통해서 배포했다. 부트캠프에서 지원해준 100만원 상당의 서버비가 있었기 때문에 부담없이 결정했었다.
      그러나 회사에서는 그런 쓸데없는 지출을 하고싶어하지 않는다.
      회사에 IIS서버가 구축되어 있어서 IIS를 이용하기로 계획했다.
      기본적으로 웹 서버에 배포할 줄도 모르면서 AWS나 GCP같은 클라우드서비스를 쓰는건 모순이라고 생각했다. 그래서 직접 build파일, JAR파일을 FTP통신으로 업로드 해서 배포하기로 계획했다.

    • 해결방안
      지이사님의 도움을 받아 IIS 서버의 포트를 열고 파일질라를 통해 build파일과 JAR파일을 업로드 했다. 그리고 이미 구현되어 있는 다른 사이트를 참고하며 진행했다. 방화벽에서 알 수 없는 문제가 있었지만 옵션 초기화를 한 후에 잘 작동했다. URL재작성 설정하는 과정에서 애를 먹었지만 수많은 포스팅과 chatgpt의 도움을 받아 해결할 수 있었다.
  • 실사용되는 서비스
    • 지금까지는 나 혼자 보고, 내 친구들만 사용하는 서비스를 만들었다. 
      MOBOOK은 실제로 회사 내부에서 사용할 서비스고 실제 사용자들이 있는 서비스기 때문에 보다 사용자입장에서 생각하면서 만들어야 했다. 
      실제로 사용되는 서비스를 만든다는 점에서 UI나 벨리데이션 등 고려해야할 사항이 꽤 많았다.
      기능 하나 하나, 발생할 수 있는 오류를 체크해야 하기 때문에 '기능목록'을 작성하면서 처리해 나갈 계획을 세웠다.

    • 해결방안
      완전히 오픈하기 전에 3~4명의 직원에게 먼저 테스트를 부탁했다. 이 과정에서 내가 발견하지 못했었던 오류를 발견했고, 또 UI적이나 여러부분에서 피드백을 받으면서 조금 더 보완된 서비스를 오픈할 수 있었다.
  • 문서화
    • 내가 없더라도 다른 사람이 유지보수를 해야 하기 때문에 프로젝트의 기능, 설계, API 사용법 등을 문서화할 필요성이 있었다
      swagger, 기능목록 등 프로젝트와 관련된 문서를 정리할 계획을 했다.

    • 해결방안
      swagger를 통해 api를 문서화시켰다. 또, 구글스페이스를 이용해 프로젝트에 필요한 파일들을 순서대로 정리하면서 다른 사람이 봐도 유지보수가 용이하게 문서화시킬 수 있었다.

4. 앞으로의 MOBOOK의 방향

   1. MOBOOK1.0의 에러 수정 계획

  • 일단 오늘 피드백을 꽤 많이 받았다. 추가적으로 필요한 기능, 있었으면 하는 기능들에 대해서 피드백을 받고 에러메세지에 대한 피드백도 받았다. 나와야 할 에러메세지가 나오지 않는다던가, 상황에 맞지않는 메세지가 나오는 부분도 있었다. 

   2. MOBOOK1.1 - 추가기능 구현

  • 추가적으로 책에 관련된 링크, 썸네일, 댓글기능들을 추가할 예정이다

   3. MOBOOK 버전 관리

  • 기능이 추가되거나 버전이 올라갈 때 마다 모두에게 메세지를 돌릴 수는 없다.
    그래서 공지게시판을 만들어서 버전이 올라갈 때마다 게시판을 통해 버전관리를 할 예정이다.

   4. Kotlin으로 리팩토링

  • 현재는 Java로 되어있는 코드를 Kotlin으로 리팩토링할 계획이다. 강의도 많이 구매해놨고 관련된 책들도 충분히 있다. 그리고 Kotlin으로 바뀔 때의 버전은 2.0이 될 계획이다.

   5. 서비스 확장

  • 도서대여 서비스뿐만 아니라 회사 비품 신청, 화장실 음악 신청, 출석 체크 등 다양한 기능을 추가할 계획이다.
  • 점점 커버해주는 범위를 넓혀서 사내 커뮤니티로 발전시키고 싶다. 이름은 MOHUB로 생각해놨다.

5. 후기

너무 재밌었다. 프론트 개발하는 것도 재미있었고 api통신하면서 내가 원했던 응답을 받았을 때 기뻤다. 

그리고 이 기능들을 실제로 쓴다고 생각하니 더 애착이가고 잘 만들어야겠다는 생각이 들었다.

 

시작은 책대여시스템이지만 나중에는 회사에 없으면 안되는 그런 서비스로 발전시키고 싶다.

 

화이팅!