WindsomeProject - 프로젝트 회고

박민수·2024년 3월 28일
0

WindsomeProject

목록 보기
15/32
post-thumbnail

개요

해당 포스팅에서는 2023년 12월부터 약 4개월간 진행한 쇼핑몰 프로젝트가 마무리 단계에 접어들면서, 이에 따른 프로젝트 회고를 작성하고자 한다.

기획 배경

그동안 이론적으로 공부한 프로그래밍 언어와 관련된 기술 및 프레임워크를 활용하여 실제로 동작하는 웹 애플리케이션을 구현해 보고 싶었다. 실제 웹 애플리케이션을 구현함으로써 개발 과정에서 발생할 수 있는 다양한 문제들을 직접 경험하고 해결해보는 것이 이번 프로젝트의 첫 목표였다.

또한, 개발 프로세스에 대한 이해와 숙련도를 높이고자 했다. 프로젝트를 진행하면서 요구사항 분석, 설계, 개발, 테스트, 배포 등의 과정을 경험하고, 이를 통해 개발 프로세스에 익숙해지고 소프트웨어 개발에 대한 전반적인 이해도를 높이고자 했다.

기술 스택 및 도구

  • 프론트엔드: HTML, CSS, JavaScript, jQuery, Bootstrap
  • 백엔드: Java 17, Spring Boot 2.7.6, Spring Data JPA, Spring Security, QueryDsl, OAuth2
  • 데이터베이스: MySQL, H2 Database
  • 개발 도구: IntelliJ IDEA 2023.02.02
  • 라이브러리: chart.js, Iamport API, Daum 우편번호 API, 네이버 Login API, 카카오 Login API, ckeditor.js

개발 과정

프로젝트에 대한 세부 내용은 깃허브의 README로 대체

프로젝트를 진행하면서 마주한 문제들과 문제 해결 과정

배운 점

개발 프로세스에 대한 이해도 향상

이론적인 지식만으로는 개발 프로세스의 흐름을 이해하는 데 한계가 있었지만, 실제로 요구사항 분석부터 배포까지의 과정을 경험함으로써 개발이 어떻게 진행되는지에 대한 통찰력이 향상되었다. 이제는 개발 단계 간의 연결고리를 보다 명확히 이해하고, 각 단계에서의 중요성과 영향을 더 잘 파악할 수 있게 되었다.

  • 요구사항 분석 → 설계: 요구사항 분석에서 수집된 정보를 기반으로 시스템의 구조를 설계한다. 요구사항이 명확하게 정의되고 이를 바탕으로 설계되지 않으면 개발 및 테스트 단계에서의 오류가 발생할 수 있다.
  • 설계 → 개발: 설계된 시스템 구조를 바탕으로 개발이 진행된다. 이 때 설계 단계에서의 결함이나 미비한 점이 개발 과정에서 드러날 수 있다. 따라서 설계의 품질이 개발의 품질에 직접적으로 영향을 미친다.
  • 개발 → 테스트: 개발된 소프트웨어를 테스트하여 요구사항을 충족시키고 품질을 검증한다. 개발자가 작성한 코드의 품질과 완성도가 테스트의 결과에 영향을 준다.
  • 테스트 → 배포: 테스트 단계에서 발견된 결함을 수정하고, 안정적인 소프트웨어를 배포한다. 테스트 단계에서의 품질 관리가 배포되는 제품의 안정성과 신뢰성에 직접적으로 영향을 미친다.
  • 배포 → 유지보수: 소프트웨어가 배포된 이후에는 사용자의 피드백 및 시스템의 변경 사항을 반영하여 지속적으로 유지보수가 이루어진다. 배포 후 발생하는 문제들은 유지보수 단계에서 해결되어야 하며, 이는 요구사항 분석 및 설계 단계의 품질에도 영향을 준다.

디버깅 및 문제 해결 능력 향상

초기에는 에러가 발생할 때마다 해당 부분을 해결하는 데 오랜 시간이 걸렸다. 에러 메시지를 읽어도 문제의 원인을 빠르게 파악하기 어려웠고, 구글링을 통해 문제를 해결해야 했다. 그러나 다양한 오류 상황을 경험하며 반복적으로 해결해 나가면서, 나중에는 에러 메시지를 통해 어느 부분에서 문제가 발생했는지 신속하게 파악하고, 문제가 발생하더라도 당황하지 않고 빠르게 대응할 수 있게 되었다. 이는 더 나은 코드를 작성하고 안정적인 소프트웨어를 개발하는 데 큰 도움이 되었다.

스프링에 대한 이해도 향상

스프링의 다양한 모듈과 기술에 대한 이해도가 크게 향상되었다. 이론적으로만 알고 있던 개념들을 실제 프로젝트에서 적용하고 사용하면서 그 동작 원리와 활용 방법에 대해 더욱 깊이 있게 이해할 수 있었다. 예를 들어, 스프링 부트를 사용하여 프로젝트를 초기 설정하고 구성하는 방법뿐만 아니라, Spring MVC 아키텍처를 이해하고 컨트롤러, 서비스, 리포지토리와 같은 계층 구조를 구현하는 방법도 익혔다. 또한 스프링 프레임워크의 핵심 기능을 활용하여 의존성 주입과 제어 역행을 구현하는 방법, 스프링 Security를 통해 인증 및 권한 부여를 처리하는 방법 등을 경험하면서 스프링에 대한 이해도가 높아졌다. 이를 통해 스프링을 효과적으로 활용하여 안정적이고 확장 가능한 애플리케이션을 구축하는 데 보다 자신감을 갖게 되었다.

데이터베이스 관리 능력 향상

초기에는 데이터베이스 설계와 쿼리 작성에 대한 이해도가 낮았으나, 프로젝트를 진행하면서 실제 데이터베이스를 다루고 관리하면서 많은 경험을 쌓을 수 있었다. 데이터베이스의 구조를 파악하고 적절한 테이블을 설계하는 방법부터 데이터의 삽입, 수정, 삭제, 조회 등 다양한 작업을 수행하면서 데이터베이스 관리에 대한 전반적인 이해도가 높아졌다. 또한, 데이터베이스 성능 최적화와 관련된 기술들을 학습하고 적용함으로써 프로젝트의 성능을 향상시키는 경험도 쌓을 수 있었다. 이를 통해 데이터베이스 관리에 대한 자신감을 높일 뿐만 아니라, 효율적이고 안정적인 데이터베이스 시스템을 구축하는 방법에 대해 더욱 깊이 이해할 수 있었다.

아쉬운 점

다양한 시나리오를 고려하지 못한 테스트 코드

프로젝트를 진행하면서 아쉬웠던 점 중 하나는 다양한 시나리오의 테스트 코드를 충분히 작성하지 못한 것이다. 주로 기본적인 기능에 대한 테스트 코드만을 중점적으로 작성했는데, 이로써 다양한 상황에 대응하는 테스트가 부족했다. 예를 들어, 상품 주문 기능의 경우 성공 또는 실패 시나리오만을 고려하여 테스트 코드를 작성했다. 그러나 실제로는 주문 취소, 재고 부족 등 다양한 상황이 발생할 수 있었다. 이러한 부분들을 더 꼼꼼히 테스트하지 않은 것은 프로젝트의 안정성과 신뢰성에 영향을 줄 수 있었다. 앞으로는 이러한 부분을 보완하여 테스트 커버리지를 확대하고, 더 나은 소프트웨어 품질을 보장할 수 있도록 노력해야겠다.

좋지 못한 가독성과 부족한 주석

프로젝트 초기에는 모든 기능들이 어떻게 동작하는지 정확히 이해하고 있었지만, 시간이 흐르며 기능이 더욱 복잡해지고 다양해지면서 내가 작성한 코드의 목적과 동작 방식을 이해하는 데 어려움을 겪었다. 코드를 작성할 당시의 생각과 의도가 기억에 남지 않는 일이 자주 있었다.
그래서 이해하기 쉬운 코드를 작성하고 시간을 투자하여 주석을 추가하는 것에 대한 중요성을 절실히 깨달았다. 더불어 내가 작성한 코드를 나조차 이해하기 어렵다면, 다른 사람들이 해당 코드를 이해하는 것은 더 어려울 것이라는 생각이 들었다. 향후 프로젝트에서는 주석을 철저히 달고 이해하기 쉬운 코드를 작성하기 위해 노력해야겠다.

미흡한 설계 및 계획

프로젝트를 진행하면서 프로젝트 초기에 정의한 요구사항 외에도 추가로 구현하고 싶은 기능들이 떠오를 때마다 해당 기능들을 즉흥적으로 구현하곤 했다. 이렇게 계획에도 없던 기능들을 추가 구현하다 보니 예상했던 프로젝트 기간 보다 훨씬 더 많은 기간이 소요됐다.
실제 프로젝트에는 데드라인이 존재하기 때문에 이를 준수하기 위해서는 프로젝트 초기에 요구사항을 명확히 정의하고 일정을 신중하게 계획하여 프로젝트를 효율적으로 관리하는 것이 필요하다고 느꼈다.

다른 사람과 협업을 해볼 기회가 없었던 점

프로젝트를 진행하면서 아쉬웠던 점은 협업을 해볼 기회가 없었다는 것이다. 협업을 통해 팀원들과 함께 문제를 해결하고 새로운 아이디어를 만들어 나갈 수 있는 경험이 있었다면 더욱 만족스러운 결과물을 얻었을 것이라고 생각한다. 혼자서 협업 상황을 가정해보고 시뮬레이션을 진행해보는 것은 아무래도 한계가 있었다. 추후에 온라인 개발자 커뮤니티를 통해 다양한 개발자들과 프로젝트를 진행하며 소통하고 협업하는 경험을 쌓기 위해 꾸준히 노력할 것이다.

향후 계획

프로젝트의 향후 계획 중 하나로는 보다 다양한 시나리오를 고려한 테스트 코드를 추가할 예정이다. 현재는 기본적인 기능에 대한 테스트 코드만 작성되어 있다. 그러나 애플리케이션의 신뢰성과 안정성을 높이고 사용자들에게 더 나은 서비스를 제공하기 위해서는 실제 사용자의 다양한 상황을 반영한 시나리오를 테스트하는 과정이 필요하다고 느꼈다.

또한 현재 OAuth2를 통해 소셜 로그인 기능을 구현한 상태이며, 세션 방식을 사용하여 사용자 인증 및 세션 관리를 진행 중이다. 현재는 세션 방식을 사용하고 있지만, 추후에 토큰을 이용하여 상태를 저장하므로 보다 안정적이고 확장성 있는 JWT 토큰 방식을 추가 구현하여 보다 강력한 보안 메커니즘을 적용하고자 한다. 이를 통해 프로젝트의 보안성과 안정성을 높일 수 있을 것으로 기대된다.

느낀 점

혼자 독학하며 처음 만들어본 프로젝트이기 때문에 공부한 내용들을 접목시켜 하나의 결과물을 만들어냈다는 점에서 개발에 대한 자신감을 키워준 동시에 부족함 또한 많이 느꼈습니다.

개발 과정에서 예상치 못한 다양한 에러나 이슈가 발생했고, 이를 해결하는 과정에서 더 나은 방법은 없는지 이것이 최선의 방법인지 고민을 많이 했습니다. 이러한 과정에서 각종 IT 커뮤니티, 개발 블로그 등을 통해 현업에 계신 분들의 도움을 많이 받았습니다.

처음에는 코드를 작성하는 것만으로 충분하다고 생각했지만, 실제로는 사용자의 요구를 이해하고, 문제를 해결하는 과정이 개발의 핵심이라는 것을 깨달았습니다. 특히, 예상치 못한 에러나 문제에 직면했을 때, 그 문제를 분석하고 해결하기 위해 여러 가지 방법을 고민하고 시도하는 과정에서 개발이 단순한 코딩이 아니라 문제 해결의 과정이라는 것을 깨달았습니다.

이번 프로젝트로 인해 개발을 바라보는 자세가 많이 바뀐 계기가 된 것 같습니다. 개발은 단순히 기능을 구현하기 위해 코딩하는 것이 아닌 문제를 바라보고 해결해 나가기 위한 과정이라는 것을 크게 느끼게 된 경험이었습니다.

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보