Skip to content

OmokNoonE/PPM-backend

Repository files navigation

소규모 일정 관리 시스템 PPM : Pro Project Manager

리드미로고

프로젝트 일정 관리를 위한 툴은 스타트업과 중소기업 모두에게 필수적이지만, 비용 부담과 높은 학습 곡선으로 인해 도입이 어려운 경우가 많습니다. 이러한 기업들에게 쉽고 빠르게 사용할 수 있는 소규모 프로젝트 일정 관리를 위한 ERP 솔루션을 제공하여 원활한 사용 경험을 제공하고자 합니다.

이 솔루션은 직관적인 인터페이스와 간단한 설정 과정을 통해 누구나 쉽게 사용할 수 있도록 설계되었습니다. 또한, PPM 시스템을 통해 소규모 프로젝트들을 하나의 플랫폼에서 효율적으로 관리함으로써 중소기업의 성장과 발전에 기여하고자 합니다.

이를 통해 기업들은 프로젝트 관리의 효율성을 높이고, 자원의 최적화를 이룰 수 있습니다.


👋 커뮤니티 관리자를 소개합니다

이재원 장민석 조예린 지현근 최종찬

💡 기술 스택

Frontend

Vue 3 JavaScript HTML CSS Bootstrap

Backend

Java Spring Boot Spring Data JPA Hibernate Spring Security JWT Gradle JUnit5

DB

MariaDB MongoDB

DevOps

Jenkins Docker ArgoCD Amazon EKS Kubernetes Jasypt Prometheus Grafana


🎨 DDD

🔗 DDD 설계


📃 문서

프로젝트 기획서 image
요구사항 정의서 image
API 명세서

API명세서

시스템 아키텍처

image

WBS

WBS

ERD

image

화면 설계서 image
단위 테스트 결과서 image
UI/UX 단위 테스트

UI:UX

통합 테스트 결과서

통합


🤔 회고

  팀 원    회고록
이재원 2개월 동안 진행한 ERP 시스템 개발 프로젝트를 통해 협업과 제가 배워온 기술들을 사용하고 점검해볼 수 있는 유의미한 경험을 얻을 수 있었습니다. 이 프로젝트에 앞서 현재 팀원들과 소규모 프로젝트를 한 차례 진행하면서 팀워크를 기르고 있었으며, 그 경험을 살려 이번 PPM 프로젝트에서는 더 발전된 협업을 할 수 있었습니다. 구체적으로 단어 사전과 개선된 API 문서를 통해 이전보다 더 효율적인 소통을 할 수 있었습니다. 매일 아침 스크럼 회의를 통해 서로의 개발 현황을 공유하고 문서화하면서 부족한 부분을 빠르게 보완하고 변동 사항을 제 작업에 반영할 수 있었습니다.

그럼에도 불구하고 일정에 맞춰어 개발을 진행하는 것은 쉽지 않아습니다. 예상치 못한 에러가 발생하여 개발이 진연되거나, 구현 난이도가 예상보다 더 어려워져 일정을 연장해야 하는 경우도 있었지만, 이 부분은 스크럼 회의를 통해 공유하고 다른 팀원들의 도움으로 해결할 수 있었습니다.

효율적인 데이터 처리를 위해 자주 사용되는 부분은 공통 코드로 처리하고, 비즈니스 로직의 경우 서비스에 인터페이스를 적용하여 가독성과 확장성을 고려했습니다. 이번 프로젝트는 AWS 인프라를 활용하여 Jenkins와 ArgoCD를 통한 무중단 배포로 소프트웨어 아키텍처를 구현하여 서비스의 가용성과 안정성을 높였습니다. 특히, EKS(Elastic Kubernates Service) 안에서 무중단 배포를 구현하여 서비스의 가용성과 안정성을 높였습니다. 또한, 이 프로젝트에서 처음으로 SMTP (Simple Mail Transfer Protocol)를 사용하여 이메일 통신을 구현하였으며, 이를 통해 다양한 알림 기능을 제공할 수 있었습니다. 이를 통해 실시간으로 장애에 대응하는 경험을 했지만, 빌드로 인한 비용이 예상보다 많이 나올 수 있다는 점을 확인하고, 비즈니스의 사용량에 따라 설계를 더 신중하게 고민해야 한다는 것을 깨달았습니다. 또한, ERP 시스템 개발 프로젝트였지만 사용자 경험을 고려하여 적절한 화면을 구성해야만 개발된 백엔드 서버의 의미가 더 커진다는 것을 배울 수 있었습니다.

짧지만 많은 일을 겪을 수 있었던 프로젝트였습니다. 함께한 팀원들로부터 많은 것을 배우고 함께할 수 있어 고마웠습니다!
장민석 부트캠프에서 6개월간 배운 기술을 모두 사용하는 프로젝트였습니다. 기획, 설계부터 배포까지 모든 부분을 다 경험해보는 첫 프로젝트라 더욱 의미가 있었습니다. 이번 프로젝트에서는 이전에 작은 프로젝트를 하면서 아쉬웠던 부분을 보완하려고 노력했습니다.

이전 프로젝트에서는 일정을 맞추지 못해 모든 기능을 완성하지 못했던 경험이 있어, 이번에는 이를 보완하기 위해 데일리 스크럼 회의를 진행했습니다. 매일 회의를 통해 일정의 진행 상태를 확인하고, 일정이 밀리게 될 경우 여유가 있는 팀원이 업무를 분담하여 해결하려고 했습니다.

또한, DB 설계에도 많은 신경을 썼습니다. 현업에서는 어떤 부분을 고려하여 설계를 하는지 멘토링을 받기도 했습니다. 협업을 하기 때문에 문서화에도 신경을 많이 썼습니다. 단어 사전, API 문서, 요구사항 정의서 등 팀원이 문서만 보고도 개발을 진행할 수 있도록 노력했습니다.

제가 맡은 개발 부분은 인증/인가 부분이었습니다. 이전 프로젝트에서는 토큰 관리를 Redis를 통해 처리했었지만, 이번 프로젝트에서는 AWS를 사용하기 때문에 ElastiCache를 고려했습니다. 그러나 사용자가 많지 않고 비용적인 측면에서 부담이 되어 MariaDB를 통해 관리하는 방식으로 변경하여 개발했습니다. 한 회원이 PM/PL/PA 총 3가지의 권한을 프로젝트별로 가질 수 있도록 개발했는데, 이 부분은 Spring Security가 아닌 Spring Annotation으로 개발했습니다. 추후에는 Spring Security에서 사용할 수 있게 변경할 예정입니다.

UX 측면에서도 많은 고민을 했습니다. 사용자가 어떤 정보를 원하고, 어떤 형식으로 정보를 제공하는 것이 좋은지에 대해 특히 신경을 많이 썼습니다. AWS로 프로젝트를 배포하는 만큼 소스코드 보안에도 신경을 많이 썼습니다. Jasypt를 사용하여 Jenkins에서 암호화하여 GitHub 소스코드에서 AWS 정보를 얻을 수 없도록 관리했습니다.

저번 프로젝트에서는 CI까지만 적용했지만, 이번에는 ArgoCD를 적용하여 GitHub Release 기능을 통해 버전 관리까지 진행하여 추적과 관리가 가능해졌습니다. 이번 프로젝트를 통해 마감일이 정해진 프로젝트에서 어떤 것들을 챙겨야 하고, 어떤 것들을 미뤄야 하는지에 대해 알게 되었습니다. 코드적으로 아쉬운 부분이나 유효성 검사를 꼼꼼하게 하지 못한 부분은 아쉽지만, 상품화할 수 있는 상태까지 개발하기 위해 조율하는 방법을 알게 되었습니다.

발표가 끝난 후에도 멈추지 않고 마감일을 맞추기 위해 놓친 부분이나 아쉬운 개발 부분을 계속 고도화할 예정입니다. 팀원들과 큰 다툼 없이 프로젝트를 마무리할 수 있어서 매우 좋았습니다. 서로 마음에 들지 않는 부분이 있었겠지만, 대화를 통해 잘 풀어나갈 수 있었습니다. 좋은 개발자가 되기를 바라며 프로젝트를 마무리합니다.
조예린 ERP 시스템 개발 프로젝트는 소프트웨어 개발 단계를 직접 경험할 수 있는 훌륭한 기회였습니다. 특히, 일정 관리 부분에서 개선이 이루어졌습니다. 지난 프로젝트의 아쉬움을 덜기 위해, 이번에는 깃허브 이슈와 칸반 보드를 통해 담당자별로 업무 진행 상황을 명확하게 확인할 수 있었습니다. 매일 아침 회의를 통해 업무 현황을 공유하며 일정 관리에 큰 도움이 되었습니다.

DB 설계 단계에서는 현직자인 멘토님의 조언을 통해 실제 업무에서 어떤 부분을 고려해야 하는지, 그리고 그 이유에 대해 배울 수 있었습니다. 덕분에 더 꼼꼼한 DB 설계를 할 수 있었습니다.

저는 대시보드 화면 구현을 담당했으며, 데이터 정합성 유지와 성능 최적화를 위해 mongoDB를 도입했습니다. 이는 기존의 MariaDB 대신 스키마리스 구조를 통해 다양한 데이터 형식을 저장하고 복잡한 조인 없이 성능을 최적화할 수 있도록 했습니다.

또한, 팀원들이 개발에만 집중할 수 있도록 젠킨스, argoCD, EKS를 이용해 무중단 배포 환경을 구축했습니다. 자동화된 파이프라인을 통해 수동 배포의 복잡성을 줄이고 지속적인 배포를 구현할 수 있었습니다. k8s를 통해 장애 발생 시 자동으로 문제를 감지하고 복구하여 시스템의 일관된 상태를 유지할 수 있었습니다. EKS를 사용함으로써 인프라 관리 부담을 줄여 애플리케이션 개발에 더 집중할 수 있었습니다.

발표는 마무리되었지만 유저 편의성을 고려한 기능들을 추가적으로 개발할 예정입니다. 또한, 기존 코드의 유지보수성과 성능 향상을 위해 리팩토링할 계획입니다. 개발 과정에서 서로 다른 의견이 충돌하는 일도 있었지만, 스크럼과 논의를 통해 프로젝트가 더 나은 방향으로 나아갈 수 있었습니다. 감사합니다.
지현근 dd
최종찬 dd