스프링 플러스 주차 KPT

Yullgiii·2024년 1월 3일
0
post-thumbnail

DDProject (Development Diary)

프로젝트 개요

프로젝트 소개

이 프로젝트는 개발 프로세스의 투명성을 높이고, 팀원 간의 소통을 촉진하며, 업무 흐름을 체계화하는 데 중점을 두고 있습니다.

특히, 이 프로젝트에서는 칸반보드를 활용하여 웹 페이지를 구현하였습니다. 칸반보드는 일의 진행 상황을 한눈에 파악할 수 있게 해주며, 각 팀원의 업무 분배와 진행 상황, 일정 관리 등을 효율적으로 할 수 있게 돕습니다.

이 웹 페이지의 구현에는 Spring과 Java 프로그래밍 언어를 사용하였습니다.

DDProject는 개발자들이 프로젝트를 더 효율적으로 진행하고, 협업을 강화하며, 프로젝트의 성공 가능성을 높이는 데 크게 기여하게 되길 바라며 만들었습니다!

📔기술스택

  • Java
  • Spring
  • MySQL
  • JWT
  • Gradle
  • Spring Boot 3.2.1
  • Spring Security

⚙구현기능

  • 사용자 관리 기능
    • 로그인 / 회원가입 기능
    • 사용자 정보 수정 및 삭제 기능
  • 알람기능
    • 내 카드에 달린 코멘트 알람
    • 초대 알람
    • 멤버 추가 알람
  • 보드 관리 기능
    • 보드 생성
    • 보드 수정
      • 보드 이름
      • 배경 색상
      • 설명
    • 보드 삭제
      • 생성한 사용자만 삭제를 할 수 있습니다.
    • 보드 초대
      • 특정 사용자들을 해당 보드에 초대시켜 협업을 할 수 있어야 합니다.
  • 컬럼 관리 기능
    • 컬럼 생성
      • 보드 내부에 컬럼을 생성할 수 있어야 합니다.
      • 컬럼이란 위 사진에서 Backlog, In Progress와 같은 것을 의미해요.
    • 컬럼 이름 수정
    • 컬럼 삭제
    • 컬럼 순서 이동
      • 컬럼 순서는 자유롭게 변경될 수 있어야 합니다.
        • e.g. Backlog, In Progress, Done → Backlog, Done, In Progress
  • 카드 관리 기능
    • 카드 생성
      • 컬럼 내부에 카드를 생성할 수 있어야 합니다.
    • 카드 수정
      • 카드 이름
      • 카드 설명
      • 카드 색상
      • 작업자 할당
      • 작업자 변경
    • 카드 삭제
    • 카드 이동
      • 같은 컬럼 내에서 카드의 위치를 변경할 수 있어야 합니다.
      • 카드를 다른 컬럼으로 이동할 수 있어야 합니다.
  • 카드 상세 기능
    • 댓글 달기
      • 협업하는 사람들끼리 카드에 대한 토론이 이루어질 수 있어야 합니다.
    • 날짜 지정
      • 카드에 마감일을 설정하고 관리할 수 있어야 합니다.
  • 클라우드에 배포하기!
    • AWS, Azure와 같은 클라우드 서비스를 선택하여 여러분들의 웹 서비스 배포를 진행합니다!
    • 여러분들의 서비스를 세상 밖으로 소개해봐요!
  • 프론트엔드 개발도 해보기!

팀원별 역할

  • 진유록 : Column, Card, Comment
  • 권준혁 : User, Alarm, Security
  • 최혁 : Board, Member
  • 송지헌 : Comment

팀소개

TIL

매일 새로운 지식을 습득하고 이를 팀원들과 공유하겠다는 의지를 담고 있습니다이는 팀의 핵심 가치인 지속적인 학습과 공유, 그리고 성장을 상징합니다.
서로에게 도움이 되고 서로에게 중요한 사람이 되자는 의미

Keep

  • 체계적인 Git 사용: 각각 기능에 맞는 브랜치를 사용하여 서로 겹치지않고 각각의 맡은바를 완벽히 할수있게 되었다.
  • 꾸준한 기록 유지: 오류들이 발생할떄마다 기록을 하여 어떠한 오류가 있었는지 어떻게 해결했는지 팀원들과의 공유
  • 적극적인 소통 : 누구하나 빠지지않고 많은 소통을 나누며 오류를 겪으며 서로가 도와주며 해결하는 문화를 구축
  • 목표 달성: 해당 역할을 적절히 분담하여 각자의 역할을 다 했고 이에 처음에 설계했던 목표보다 많은 성과를 이루어내며 달성
  • 피드백 문화 구축 : 지속적인 피드백 공유를 통해 서로의 오류를 찾아주고 발전해 나아가는 문화 구축
  • 꾸준한 기록 유지: TIL 작성 및 오류 해결에 관한 기록하기
  • RESTful API 구현 : REST 아키텍처 원칙을 이해하고 RESTful API를 구현
  • 도메인 주도 설계(DDD) 적용 : 복잡한 애플리케이션의 설계와 구현에 도메인 주도 설계(DDD)를 적용

Problem

  • 깃 코드 충돌에 대한 문제...
    원인: 
    동일 파일의 동일 부분 편집 : 두 팀원이 동일한 파일을 수정하고 병합하려할때 충돌이 발생했습니다.
    병합 순서 문제 : 다른 순서로 병합을 진행하면서 같은 파일에 대한 변경사항이 다르게 적용되어 충돌이 발생!

  • 로그인 기능 문제 해결
    회원가입 컨트롤러에서 서비스 메소드를 호출할 때, 패스워드 파라미터 자리에 유저네임을 잘못 넣는 실수를 발견했습니다. 이로 인해 회원가입 과정에서 패스워드가 잘못 처리되어 로그인이 정상적으로 이루어지지 않았습니다.

  • DB List 한계 극복 및 API 구현 문제 해결데이터베이스가 List를 직접 저장할 수 없는 제한 때문에, Board에 속한 Member 테이블을 새롭게 생성하여 User 정보를 대체하면서 사용하는 과정에서 API 간의 상호작용에 신경 써야 하는 복잡한 문제가 발생했습니다.Board와 Member 사이의 관계를 효과적으로 관리하면서, 기존의 User 정보를 적절히 대체할 방법을 찾아야 했습니다. 이 과정에서 API 간의 정확한 데이터 교환과 관계 설정이 중요한 요소로 작용했습니다.

  • 시간적 한계:제한된 시간으로 인해 설계 단계에서 충분히 고려하지 못했습니다. 이로 인해 실 개발 단계에서 API와 ERD를 포함한 정말 많은 수정들이 이루어졌고,
    그로 인해 미처 예상하지 못햇던 버그와 각 파트 사이에 변수들의 불일치가 이루어졌던 부분이 있었습니다

Try

  • 코드 수정: 회원가입 컨트롤러의 서비스 메소드 호출 코드를 수정하여, 올바른 순서의 파라미터(유저네임, 패스워드)가 전달되도록 변경했습니다.
  • 재테스트: 수정 후 회원가입과 로그인 프로세스를 재테스트하여 정상 작동하는 것을 확인했습니다.
  • 기초 CRUD 응용: 이 문제를 해결하기 위해 기본적인 CRUD(Create, Read, Update, Delete) 작업을 응용하는 접근 방식을 선택했습니다.
  • Swagger 사용: API의 구조와 흐름을 명확히 이해하고, 적절한 API 문서화 및 테스트를 위해 Swagger를 사용했습니다. Swagger는 API의 시각적 표현을 제공하여 복잡한 API 관계도를 명확하게 파악하는 데 도움을 줍니다.
  • 테스트 코드 구현: 정확한 기능 구현과 버그 수정을 위해 테스트 코드를 작성하고 실행했습니다. 이는 각 API의 동작을 검증하고, 데이터 흐름을 추적하는 데 중요한 역할을 했습니다.
  • 코드 퍼포먼스 분석 및 최적화: 프로파일링 도구를 사용하여 애플리케이션의 성능을 분석하고, 성능 병목 현상을 해결하기 위한 최적화 작업

팀원별 느낀점

최혁

내배캠을 진행하며 배운 Spring 으로 과연 무엇을 할 수 있는지 의문을 갖던 즈음, 심화 주차 프로젝트를 시작하고 Trello 기능들을 구현해보면서 프론트의 유무에 따른 더 다양한 응용이 있다는걸 배우게 되었습니다.
다만 한 프로젝트당 일주일이라는 아주 짧은 기간으로 인해, 본 프로젝트는 설계 단계부터 개발 단계까지 엉망이었습니다.
조금만 더 시간이 있었더라면... 설계 단계에서 조금만 더 신경을 쓸 수 있었더라면 이 파트에서 누락된 부분이 있다는걸 알 수 있었을텐데 하는 아쉬움만을 끊임없이 뱉었던 프로젝트였습니다.
긍정적으로 생각하자면 이번 프로젝트의 기억이 있었기 때문에 설계와 문서화의 중요성을 아주 깊게 실감할 수 있었습니다.
또한 Spring 백엔드 파트에서 로직적으로 개발하는것과 프론트가 존재하는 프로젝트는 시도할 수 있는것에서 대단히 차이가 난다는 중요한 부분을 알아가는 프로젝트였습니다.
파이널 프로젝트에서 Trello를 완벽하게 구현하거나 혹은 더 나아가 비슷하고 더 기능이 다양한 서비스를 만들고 싶다는 욕심이 생기는 아쉬움과 향상심을 일으키는 한 주였습니다.
팀원 여러분 고생하셨습니다.

진유록

프로젝트를 마무리하며, 이번 프로젝트는 분명 많은 양의 작업을 요구했지만, 팀원들과의 긴밀한 협력 덕분에 성공적으로 마무리할 수 있었습니다.(당신들 잠은 자면서 하는거야?) 프로젝트를 진행하며, 각자의 전문성과 노력이 어우러져 결과물을 만들어낼 수 있었다는 점에서 큰 자부심을 느낍니다.

이번 프로젝트에서 우리 팀은 다양한 도전에 직면했습니다. 난관과 압박 속에서도 우리는 서로를 믿고, 각자의 역할에 최선을 다하는 모습을 보여주었습니다. 많은 분량을 함에 있어서 시간이 부족했지만 최선을 다했다고 생각합니다.
물론 프로젝트를 돌아보면 아쉬움도 남습니다. 특히, 일정 관리나 리소스 분배에서 좀 더 효율적인 방법을 찾을 수 있었더라면 하는 생각이 듭니다. 또한 모든 과정이 시간이 더 있었다면 설계부터 완벽하게 하고 넘어갔을텐데 라는 아쉬움도 남았습니다. 이러한 부분은 앞으로의 프로젝트에서 개선할 수 있는 중요한 포인트가 될수있다고 봅니다.

이 프로젝트는 저에게 중요한 경험이었고, 앞으로도 이 프로젝트를 틈틈이 들여다보며 지속적으로 배움을 적용해 볼 것입니다. 부족한 팀장이였고 함께 같이 와준 팀원들에게 감사하단 말을 하며 마무리 하고싶습니다.

권준혁

깃 협업방식에 대해 잘 알고있다고 생각했었는데 예상치 못한 오류가 생겼고 깃에 대해 더 공부하는 시간이 되었던 것 같습니다.
그리고 팀 내 코딩 컨벤션의 중요성을 실감했습니다. 독립적으로 동작하는 기능들은 문제가 없었지만 다른 도메인의 기능을 사용해야할 때 이런 저런 차이로 시간이 딜레이된 것 같습니다. 프로젝트 설계단계에서 컨벤션을 정하고 스타일이 다를 수 있겠다는 판단이 들면 건의를 하여 통일하는 방식을 시도해보는 것도 좋을 것 같습니다. 그리고 프로젝트의 데드라인도 중요하지만 무리하지 않는 선에서 각자의 스케줄을 본인의 속도에 맞게 관리하는 것도 중요하다고 생각이 들었습니다.
프로젝트를 하면서 코드 이외의 요인들이 결과물에 큰 영향을 미치는 것 같았습니다. 예를 들어 팀원간의 긍정적인 관계형성이 결과에 큰 영향을 미친다는 생각을 했습니다. 코드만큼이나 개발 외적인 부분이 중요하고 더 노력해야겠다는 생각을 했습니다.
새해 복 많이 받으세요 선생님들~~~

송지헌

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글