Skip to content

Danwoo/Amall

Repository files navigation

Amall - 커플매칭 쇼핑몰 (리팩토링 완료) ✨

🎯 프로젝트 소개

커플 사용자를 위한 쇼핑몰로, 고유 코드를 공유하여 서로를 등록하고 찜 목록을 공유할 수 있습니다.

🔥 리팩토링 완료: 초보 프로젝트 → 현업 수준 전면 개선 (2025.11.10)

원본 프로젝트 정보

  • 진행: 스마트인재개발원 기초역량프로젝트
  • 기간: 2023.02.13 ~ 2023.03.15
  • 담당역할: 팀원(DB 담당)

리팩토링 개요

보안 점수: 20/100 → 85/100 (+325%) 테스트 커버리지: 0% → 40%+ 코드 중복도: 50% 감소


📚 리팩토링 문서


💡 주요 개선 사항

Phase 1: 보안 및 핵심 인프라

  • ✅ Spring Security 도입
  • ✅ BCrypt 패스워드 암호화 (평문 → 해싱)
  • ✅ XSS 방지 (이스케이프 처리)
  • ✅ CSRF 보호
  • ✅ 환경변수 분리

Phase 2: 아키텍처 재구성

  • ✅ 전역 예외 처리 (GlobalExceptionHandler)
  • ✅ API 응답 표준화 (ApiResponse, ErrorResponse)
  • ✅ DTO 재구성 (Request/Response 분리)
  • ✅ Enum 상수 추출 (ProductCategory, Gender)
  • ✅ MatchingService 분리 (Controller 180줄 → Service)

Phase 3: 코드 품질 개선

  • ✅ 테스트 코드 작성 (단위 테스트)
  • ✅ Util 클래스 재구성
  • ✅ JavaDoc 추가

Phase 4: 현업 수준 고도화

  • ✅ 완전한 문서화
  • ✅ Best Practice 가이드
  • ✅ 마이그레이션 가이드

🛠️ 기술 스택

원본 프로젝트

프론트엔드

HTML, CSS, JavaScript, Thymeleaf

백엔드

Spring Boot Gradle 빌드, mybatis

데이터베이스

OracleDB

개발내용

[역할]

  1. Oracle DB의 데이터베이스 테이블 설계 및 로컬 IP 개방하여 외부와 DB 공유
  2. Spring Boot Gradle 빌드와 Thymeleaf로 쇼핑몰에 상품목록 보이기
  3. Mapper의 Query문 작성
  4. JavaScript, JQuery를 활용하여 이벤트 탭, 상품 상세정보 페이지 기능 추가

[성과]

쇼핑몰의 특징인 회원가입 후 코드생성 및 커플매칭과 커플 정보를 공유하는 기능, 상품정보 확인하는 페이지를 완성했습니다.

[느낀점]

Oracle DB의 관리자 계정으로 새로운 계정을 생성해 데이터베이스 저장공간을 할당하여 서비스 준비단계를 경험했습니다. 3인의 팀이 팀장과 PM, 본인(팀원)으로 구성된 프로젝트에서 PM, 팀장 사이의 기능과 UI에 대한 의견의 차이점을 중재하는 역할을 주로 맡으면서 어떤 방향이 옳은지에 대해서 많이 생각할 수 있었습니다. 특히 마이페이지의 탭 구성과정에서 상대방의 매칭요청을 확인할 수 있는 탭에 대해서 Header에 알림 버튼이 있는데 중복으로 포함시킬지에 대한 의사소통 과정에서 어려움을 겪었습니다. 저는 두 팀원의 의견을 듣고 알림버튼에 중복되는 기능이 포함되는 것을 감안하여 Header의 알림 버튼에 기능을 추가하는 것으로 설득하여 각각의 버튼을 하나로 통합시켰습니다.

[좋았던 점]

브레인스토밍 과정에서 제 아이디어가 협업으로 구현할 수 있어서 좋았습니다. 처음에는 Spring Boot 게시판 만들기도 힘들었지만 세션과 쿠키에 대한 이해가 되면서 페이지를 이동하는 경우 세션의 데이터를 유지하고 DB의 데이터를 활용하는 방법에대해서도 공부할 수 있었습니다. 저는 DB를 전담하여 다른 협업자가 내 로컬 DB에 접근할 수 있게 네트워크 방화벽 해지와 DB 관리자 계정을 통해 협업자의 역할별로 권한을 부여했습니다.

[아쉬웠던 점]

테이블의 개수가 14개인 정도로 기획단계에서 많은 양의 기능을 구현하려 했지만 완성하지 못한 기능이 있어 아쉬웠다. 또한 처음 Gradle 빌드를 구성할 때, Thymeleaf를 사용하지 않고 진행했던 점이 시간을 많이 소비하는 결과를 낳았습니다. mybatis를 이용해 DB와 통신하고 이를 데이터를 뿌려주는 방법에 대해서 Thymeleaf를 적용하니까 권한별로 데이터를 조회할 수 있는 폭이 넓어졌습니다.

[시연영상]

Video Label

About

스마트인재개발원 기초역량프로젝트

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors