Post

이강현님 포트폴리오 3주차 작업 내용 피드백

메가스터디IT아카데미 SpringBoot 백엔드 개발자 과정 주말반 (25.02.22 ~ 25.09.13). 이강현님의 포트폴리오 3주차 작업 내용에 대한 피드백

이강현님 포트폴리오 3주차 작업 내용 피드백

이강현님 포트폴리오 3주차 작업 내용 피드백

작성일: 2025-09-06
github에 push된 코드를 바탕으로 장점, 단점, 그리고 개선사항을 정리했습니다.
아래 사항은 참고만 하시고 적용 여부는 본인이 직접 판단하시면 됩니다.

잘된 점

1. Controller 역할 분리

HomeController에 집중되어 있던 상품 관련 로직들을 ProductControllerRecommendedController로 분리하여 역할과 책임(SRP)을 명확하게 나눈 점이 매우 좋습니다. 이렇게 하면 코드를 이해하고 유지보수하기가 훨씬 쉬워집니다.

  • 관련 파일:
    • src/main/java/kr/khlee/icecreamhaggendazs/controllers/main/ProductController.java
    • src/main/java/kr/khlee/icecreamhaggendazs/controllers/main/RecommendedController.java

2. 검색 기능 구현

상품 검색 기능을 추가하고, 검색 결과 페이지(search.html)를 별도로 만들어 사용자 경험을 개선한 점이 돋보입니다. ProductServiceProductMapper까지 일관성 있게 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.javaproductServiceTest.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에서는 사용되지 않는 것으로 보입니다. 만약 사용하지 않는 파일이라면 혼란을 줄이기 위해 삭제하는 것을 고려해보세요.


이번 주에도 정말 수고 많으셨습니다! 컨트롤러를 분리하고 검색 기능을 추가하는 등 프로젝트 구조를 개선하려는 노력이 돋보입니다.

This post is licensed under CC BY 4.0 by the author.