[회고] Pre Project

jiyoon·2023년 4월 20일
2

1. 프로젝트 개요


프로젝트 목표와 배경 : StackOverFlow 웹사이트의 클론 코딩을 진행하며 프로젝트에 있어서 필요한 기본적인 협업 능력과 함께 코스 기간 배웠던 기술들을 잘 접목하여 소화하는 시간을 가졌다.

프로젝트 기간 : 2주동안 6인으로 진행하였으며, 백엔드 3, 프론트 3으로 진행하였다.


2. 기술 스택 및 도구


프로그래밍 언어 : JAVA

프레임워크 : Spring Boot

라이브러리 : Spring Security, JWT

데이터베이스 : JPA, H2, MySQL

배포 : AWS (EC2, RDS)

버전 관리 : Git

API 테스트 도구 : PostMan

협업 도구 : Notion, Discord, Zep

로컬 서버 : Ngrok

개발 환경 : IntelliJ


3. 주요 기능 및 구현 방법


StackOverFlow Clone 프로젝트에서는 주요 기능으로 회원가입, 로그인, 질문 작성, 질문 조회, 질문 수정, 질문 삭제, 질문 목록을 구현하였다. 이러한 기능들을 구현하는 과정에서 사용한 기술과 방법은 다음과 같다.

  1. 회원 가입 및 로그인 : Spring Security와 JWT를 사용하여 사용자 인증 및 인가를 처리하였다. 회원가입시 이메일, 비밀번호, 닉네임 정보를 입력받아 데이터베이스에 저장하며, 로그인시 이메일과 비밀번호를 확인하여 JWT 토큰을 발급하였다.

  2. Question 도메인 : 질문 작성, 조회, 수정, 삭제, 목록 기능을 구현하였다. 사용자는 질문을 작성할 수 있으며, 작성된 질문을 조회하거나 수정, 삭제할 수 있다. 또한, 사용자는 메인 화면에서 질문 리스트를 확인할 수 있다. 이러한 기능들은 Spring MVC 모델을 사용하여, 컨트롤러 계층에서 클라이언트의 요청을 처리하고, 서비스 계층에서 비즈니스 로직을 구현하였으며, 리포지토리 계층에선 JPA를 사용해 데이터베이스와 상호작용 하였다. 그리고 DTO를 활용해 각 계층 간 데이터 전송을 처리하였다.

  3. 로그아웃 : 배포 시점에서 로그아웃 기능이 누락되어 있다는 사실을 인지하였다. 팀원들과 의논 끝에, 일단 쿠키를 삭제하는 방법으로 조치를 취하였다. 향후 Redis로 로그아웃 기능을 보완하여 JWT 토큰을 만료시키는 등의 처리를 추가할 예정이다.


4. 프로젝트 경험 및 배운 점


첫 프로젝트를 시작할 때, 팀장과 팀원으로서의 역할을 동시에 수행해야 하는 부담감이 상당했다. 기술적으로 부족한 부분은 단기간에 보완하기 어려웠기에, Soft Skill에 많이 집중했고 노력하였다.

소통의 단절이 팀워크에 악영향을 미칠 수 있다고 생각했기 때문에, 팀원들과 의사소통 및 회의 시간을 늘렸고 긴 시간 해결하지 못하는 문제가 생기면 외부의 도움도 적극적으로 요청하여 해결하기 위해 노력했다.

각 팀원의 강점이 다르기 때문에, 부족한 부분을 서로 채워주며 협력하는 방식으로 프로젝트를 완수할 수 있었다. 이러한 경험을 통해서 소통과 협력 그리고 문제 해결에 있어서 보다 적극적이고 능동적인 태도가 중요하다는 것을 깨닫게 되었다.


5. 어려웠던 점 및 해결 과정


프로젝트의 초기 단계에서 백엔드와 프론트엔드 간의 요구사항 정의서를 함께 작성하였음에도 불구하고, 이해와 구현에 있어 미묘한 차이가 발생했다.

배포 당일, 백엔드는 User 도메인의 MyPage 기능을 구현하였지만, 프론트엔드는 MyPage를 정적 페이지로 구성해버렸다.

이 문제는 여러 번의 의사소통을 거쳤음에도 서로 다른 이해를 바탕으로 작업을 진행하여 발생한 것이었다.

처음에는 분명 MyPage 부분을 정적 페이지로 구성할 계획이었으나, 후에 백엔드 측에서 기능을 선제적으로 추가하게 되면서 그 내용을 프론트엔드에 전달하였었다.

그러나 프론트엔드는 요구사항 정의서의 내용을 따르며, 우선순위가 높은 기능을 위주로 구현하다가 MyPage 기능을 뒤로 미루게 되었다. 이러한 상황이 발생한 이유는 마감이 가까워지며 프로젝트가 급박하게 진행되면서 서로의 작업 내용을 완벽하게 이해하고 조율하지 못해 생긴 문제였다.

결국 팀장으로서 백엔드와 프론트엔드 작업 내용을 모두 이해하고 조율하는 역할을 수행해야 했지만, 프론트엔드 지식의 부족으로 인해 이를 완벽하게 수행하지 못했다.

이 문제를 해결하기 위해 프론트엔드 부팀장과 별도의 회의 시간을 가지고, 각 진영의 대표로 작업물에 대한 브리핑을 주고 받는 시간을 가졌다면 더 나은 결과를 얻을 수 있었을 것 같다.

이 경험을 통해 향후 프로젝트에서는 더욱 철저한 의사소통과 조율을 통해 이러한 문제가 발생하지 않도록 노력할 것이다.


6. 프로젝트 결과물 및 성과


첫 프로젝트를 통해 배운 내용들을 실제로 적용하고 체득하는 기회를 가졌다. Git의 커밋 메시지 가이드라인을 정하고, 칸반보드를 활용해 팀원들의 작업 현황을 파악했으며, 작업물을 Push 할 때마다 팀원들과 소통하여 병합 충돌을 예방했고 문제가 발생하면 함께 해결했다.

작은 이슈조차도 팀 단위로 해결하려고 노력하며 서로 성장할 수 있는 기회를 만들었다. 그럼에도 해결하지 못한 문제에 직면 할때면 외부의 도움을 적극적으로 구해 성공적으로 해결했다.

처음 프로젝트를 시작할 때, 우리 팀은 어디서부터 시작해야 할지 막막했지만, 함께 노력하여 하나씩 성과를 이루어냈다. ERD 설계부터 요구사항 정의서 작성, 도메인 별 구현까지 진행했고, 구현 과정에서 부족한 부분은 서로 보충해 나가며 완성해나갔다.

팀장으로서 Soft Skill기술적 이해도의 중요성을 깨달았고, 팀 분위기와 일정 조율에 노력을 기울였다.

프론트엔드와의 협업 과정에서는 서로의 기술에 대해 이해하고, 소통 방법에 대해 배웠다. 서로 다른 기술이었기에, 요구사항이 있으면 보다 자세히 설명하며 협업을 진행했다.

AWS를 통해 프로젝트를 배포하는 과정에서도 많은 시행착오를 겪었으나, 포기하지 않고 팀원들과 함께 해결해 나갔다.

배포 이후에도 몇 가지 문제가 있었지만, 이러한 과정을 통해 프로젝트의 전반적인 흐름과 팀원들과의 의사소통 및 협업 방법을 배울 수 있는 좋은 경험이었다고 생각한다.


7. 마무리 및 향후 계획


프로젝트를 진행하며 기술적인 부족함을 많이 느꼈다. 팀장을 맡게 되면서 이러한 부족함이 더욱 부각되었던 것 같다.

그럼에도 불구하고, 위기 상황에서 융통성을 발휘하여 외부의 도움도 적극적으로 요청함으로써 프로젝트를 원활하게 완수할 수 있었다고 생각한다.

이 경험을 통해 도움을 주신 분들에게 감사한 마음을 갖고, 나 또한 도움이 필요한 이들에게 도움을 줄 수 있도록 노력해야겠다.

그리고 팀장으로서 부족했음에도 불구하고 팀원들이 믿고 따라와 준 덕분에 프로젝트를 좋은 팀워크로 마무리 할 수 있었다.

앞으로 기술적인 부분에 대한 공부를 통해 프로젝트의 방향을 잘 잡을 수 있도록 더욱 노력할 것이다.

향후 계획은 우선, 배포 시점에서 CORS 에러를 방지하지 못한 점을 반성하며, Spring Security를 좀 더 공부하여 CORS 에러 해결에 초점을 맞출 생각이다. 기능 구현에 급급하기보다 기능 원리에 대한 이해를 높이는 것이 중요하다고 생각했다.

또한, 요구사항 정의서에는 없었지만 로그아웃 기능을 구현하지 않은 것을 보완하기 위해 Redis를 활용하여 JWT 토큰 만료 처리 방법에 대해서도 추가적으로 공부할 계획이다.

profile
한걸음 나아가는 개발자

0개의 댓글