이강현님 포트폴리오 2주차 작업 내용 피드백
메가스터디IT아카데미 SpringBoot 백엔드 개발자 과정 주말반 (25.02.22 ~ 25.09.13). 이강현님의 포트폴리오 1주차 작업 내용에 대한 피드백
이강현님 포트폴리오 2주차 작업 내용 피드백
이강현님 포트폴리오 1주차 작업 내용 피드백
작성일: 2025-08-31
github에 push된 코드를 바탕으로 장점, 단점, 그리고 개선사항을 정리했습니다.
아래 피드백은 코드의 품질을 높이고 좋은 습관을 기르기 위한 제안입니다. 내용을 검토해보시고 적용 여부를 직접 판단하시면 됩니다.
안녕하세요, 강현님! 프로젝트 초기 세팅과 기능 구현을 진행하시느라 고생 많으셨습니다. 전반적으로 SpringBoot의 구조를 잘 이해하고 계시고, 테스트 코드를 작성하려는 노력이 돋보입니다. 아래에 몇 가지 잘된 점과 개선하면 좋을 점들을 정리했으니 확인해 보세요!
칭찬하고 싶은 부분 (잘된점)
1. 테스트 코드 작성
- 파일:
src/test/java/kr/khlee/icecreamhaggendazs/productServiceTest.java
- 내용: 서비스 로직에 대한 테스트 코드를 작성하신 점이 매우 좋습니다. 테스트는 코드의 안정성을 높이고, 미래에 발생할 수 있는 버그를 미리 방지하는 좋은 습관입니다. 앞으로 기능을 추가할 때마다 꾸준히 테스트 코드를 작성해 보세요!
2. 명확한 서비스 계층 분리
- 파일:
src/main/java/kr/khlee/icecreamhaggendazs/services/ProductService.java
,src/main/java/kr/khlee/icecreamhaggendazs/services/impl/ProductServiceImpl.java
- 내용:
ProductService
인터페이스와ProductServiceImpl
구현체를 분리하여 서비스 계층의 역할을 명확하게 정의했습니다. 이는 객체 지향의 SRP(단일 책임 원칙)을 잘 따른 것으로, 코드의 유지보수성과 확장성을 높여줍니다.
3. Lombok을 활용한 깔끔한 모델 클래스
- 파일:
src/main/java/kr/khlee/icecreamhaggendazs/models/Product.java
- 내용:
@Data
어노테이션을 사용하여getter
,setter
,toString
등의 메서드를 자동으로 생성하여 코드를 매우 간결하게 유지하고 있습니다. Lombok의 다른 유용한 어노테이션들(@NoArgsConstructor
,@AllArgsConstructor
,@Builder
등)도 알아보시면 도움이 될 거예요.
함께 개선해볼 부분 (개선점)
1. NullPointerException 발생 가능성 (반드시 수정)
- 파일:
src/main/java/kr/khlee/icecreamhaggendazs/services/impl/ProductServiceImpl.java
- 라인: 29
- 코드 내용:
1 2 3 4 5 6 7 8 9 10
@Override public List<Product> getProductList(Product input) throws Exception { List<Product> result = null; if (input.getIs_sold_out().equals("Y")) { // input이 null일 경우 여기서 NullPointerException 발생 result = productMapper.selectListSoldOut(input); } else { result = productMapper.selectList(input); } return result; }
- 개선 제안:
getProductList
메서드로 들어오는input
파라미터가null
일 경우를 대비해야 합니다.input
이null
인데input.getIs_sold_out()
을 호출하면NullPointerException
이 발생하여 프로그램이 비정상적으로 종료됩니다. 메서드 시작 부분에null
체크 로직을 추가하여 안정성을 높이는 것을 권장합니다.1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 수정 제안 @Override public List<Product> getProductList(Product input) throws Exception { // input이 null이거나 is_sold_out 필드가 null/빈 문자열일 경우를 대비 if (input == null || input.getIs_sold_out() == null || input.getIs_sold_out().trim().isEmpty()) { return productMapper.selectList(input); } if ("Y".equals(input.getIs_sold_out())) { // "Y"를 기준으로 비교하면 더 안전합니다. return productMapper.selectListSoldOut(input); } else { return productMapper.selectList(input); } }
2. 프론트엔드 유효성 검사 부재 (수정 권고)
- 파일:
src/main/resources/templates/account/join.html
- 내용: 회원가입 폼에 아이디, 비밀번호 등을 입력하지 않고도 ‘가입하기’ 버튼을 누를 수 있습니다. 서버로 불필요한 요청이 전송되는 것을 막고 사용자 경험을 개선하기 위해 기본적인 프론트엔드 유효성 검사가 필요합니다.
- 개선 제안: HTML
input
태그에required
속성을 추가하는 것만으로도 간단하게 빈 값 제출을 막을 수 있습니다.1 2
<!-- 예시: 아이디 입력란 --> <input type="text" name="user_id" id="user_id" class="form-control" placeholder="아이디를 입력하세요." required />
This post is licensed under CC BY 4.0 by the author.