이강현님 포트폴리오 3주차 작업 내용 피드백
메가스터디IT아카데미 SpringBoot 백엔드 개발자 과정 주말반 (25.02.22 ~ 25.09.13). 이강현님의 포트폴리오 3주차 작업 내용에 대한 피드백
이강현님 포트폴리오 3주차 작업 내용 피드백
작성일: 2025-09-06
github에 push된 코드를 바탕으로 장점, 단점, 그리고 개선사항을 정리했습니다.
아래 사항은 참고만 하시고 적용 여부는 본인이 직접 판단하시면 됩니다.
잘된 점
1. Controller 역할 분리
HomeController
에 집중되어 있던 상품 관련 로직들을 ProductController
와 RecommendedController
로 분리하여 역할과 책임(SRP)을 명확하게 나눈 점이 매우 좋습니다. 이렇게 하면 코드를 이해하고 유지보수하기가 훨씬 쉬워집니다.
- 관련 파일:
src/main/java/kr/khlee/icecreamhaggendazs/controllers/main/ProductController.java
src/main/java/kr/khlee/icecreamhaggendazs/controllers/main/RecommendedController.java
2. 검색 기능 구현
상품 검색 기능을 추가하고, 검색 결과 페이지(search.html
)를 별도로 만들어 사용자 경험을 개선한 점이 돋보입니다. ProductService
와 ProductMapper
까지 일관성 있게 SearchProducts
메서드를 추가하여 구조적으로도 잘 구현했습니다.
- 관련 코드 (
ProductController.java
):1 2 3 4 5 6
@GetMapping("/search") public String searchProducts(@RequestParam("keyword") String keyword, Model model) { List<Product> products = productService.SearchProducts(keyword); model.addAttribute("products", products); return "products/search"; }
3. 일관성 있는 테스트 코드
ProductMapperTests.java
와 productServiceTest.java
를 보면, 새로 추가된 기능(e.g., SearchProducts
)에 대한 테스트 케이스를 꾸준히 추가하고 있는 점이 인상적입니다. 기능 구현과 테스트를 함께 진행하는 좋은 습관입니다.
- 관련 코드 (
ProductMapperTests.java
):1 2 3 4 5
@Test void searchProducts(){ String keyword = "케이크"; log.info(String.valueOf(productMapper.SearchProducts(keyword))); }
4. 명확한 서비스-매퍼 메서드명
ProductServiceImpl.java
에서 SelectGiftAll
-> productMapper.SelectCakeAll()
처럼 서비스 메서드명과 매퍼 메서드명이 다른 경우가 있었는데, 이는 비즈니스 로직(선물)과 DB(케이크)의 개념을 분리한 것으로 볼 수 있어 좋은 시도입니다. 하지만 가독성을 위해 이름을 통일하는 것도 고려해보세요.
개선할 점
1. [권장] Thymeleaf URL 표현식 개선
recommended.html
등 여러 파일에서 상품 상세 페이지로 이동하는 링크가 상대 경로로 되어 있어, 현재 URL에 따라 의도치 않은 주소로 이동할 수 있습니다. 예를 들어, /recommended
페이지에서 링크를 클릭하면 /recommended/products/products_detail/{id}
로 이동하게 됩니다. @{/...}
처럼 슬래시(/)로 시작하는 절대 경로를 사용하면 이런 문제를 예방할 수 있습니다.
- 파일:
src/main/resources/templates/recommended/recommended.html
(line 20) - 현재 코드:
1
<a th:href="@{'products/products_detail/' + ${p.id}}">
- 개선 제안:
1
<a th:href="@{'/products/products_detail/' + ${p.id}}">
다른 파일들(
recommended_gift.html
,recommended_single.html
,search.html
등)의 링크도 함께 수정하는 것을 권장합니다.
2. [권장] CSS 클래스 중복 정의
main.css
파일에 .all-products
, .product-card-all
, .product-info-all
등의 클래스가 여러 번 정의되어 있습니다. 중복된 스타일은 CSS 파일의 용량을 늘리고 유지보수를 어렵게 만듭니다. 중복되는 부분은 합치고, 달라지는 부분만 별도로 관리하는 것이 좋습니다.
- 파일:
src/main/resources/static/assets/css/main.css
- 문제 부분:
/* ---------- 상품 리스트 ---------- */
섹션과/*추천 상품 페이지*/
섹션에 동일한 클래스명이 중복으로 정의되어 있습니다.
3. [수정 제안] 불필요한 HTML 파일
src/main/resources/templates/recommended/recommend.html
파일은 recommended.html
과 기능이 거의 겹치고, 현재 Controller에서는 사용되지 않는 것으로 보입니다. 만약 사용하지 않는 파일이라면 혼란을 줄이기 위해 삭제하는 것을 고려해보세요.
이번 주에도 정말 수고 많으셨습니다! 컨트롤러를 분리하고 검색 기능을 추가하는 등 프로젝트 구조를 개선하려는 노력이 돋보입니다.