-
Notifications
You must be signed in to change notification settings - Fork 122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
부산대 BE_박수빈_1주차 과제(3단계) #192
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수빈님 안녕하세요!
앞으로 6주간 step2를 함께 할 유재인입니다. 잘 부탁드려요😊
몇 가지 코멘트와 질문을 남겨드렸으니 확인 부탁드립니다!
@@ -0,0 +1,3 @@ | |||
INSERT INTO product (name, price, image_url) VALUES ('아이스 카페 아메리카노 T', 4500, 'https://st.kakaocdn.net/product/gift/product/20231010111814_9a667f9eccc943648797925498bdd8a3.jpg'); | |||
INSERT INTO product (name, price, image_url) VALUES ('아이스 카페 라테 T', 5500, 'https://item.elandrs.com/upload/prd/orgimg/088/2005488088_0000001.jpg?w=750&h=&q=100'); | |||
INSERT INTO product (name, price, image_url) VALUES ('뜨거운 아이스 아메리카노 T', 6500, 'https://dimg.donga.com/wps/NEWS/IMAGE/2017/02/06/82727038.1.jpg'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
초기 데이터 설정 👏
@@ -0,0 +1,8 @@ | |||
CREATE TABLE product ( | |||
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AUTO_INCREMENT
👍
|
||
@GetMapping("/add") | ||
public String addProductForm(Model model) { | ||
model.addAttribute("product", new Product()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
데이터베이스 엔티티이자 도메인 객체인 Product
를 직접 뷰에 노출시키고 있습니다.
이는 보안상의 문제가 발생할 수 있고, 코드 유지보수성도 떨어집니다.
컨트롤러단에서 엔티티를 받지 말고, 대신 DTO(Data Transfer Object)를 만들어 사용해볼까요?
|
||
private final ProductService productService; | ||
|
||
@Autowired |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
생성자가 하나만 있는 경우, @Autowired
어노테이션을 생략해도 자동으로 주입됩니다!
} | ||
|
||
@Transactional | ||
public void updateProduct(Long id, Product product) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
존재하지 않는 제품의 id로 요청하는 경우 어떻게 될까요?
|
||
@Transactional | ||
public void updateProduct(Long id, Product product) { | ||
product.setId(id); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
앞서 말씀드린 것 처럼, 객체에 수동으로 id를 설정하고 저장하는 것은 권장하지 않습니다.
기존 엔티티를 데이터베이스에서 가져오지 않고 새로 생성한 객체를 저장하면, 데이터베이스와의 일관성이 깨질 수 있습니다.
(데이터베이스에 저장된 다른 필드 값이 덮어씌워질 위험)
데이터베이스에서 기존 엔티티를 가져온 다음에 수정해볼까요?
this.id = id; | ||
} | ||
|
||
public void setImageUrl(String imageUrl) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사용하지 않는 getter, setter는 지우는 것이 좋습니다.!
} | ||
|
||
// create setter | ||
public void setId(Long id) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현재 id 필드는 데이터베이스에서 자동으로 생성(auto_increment) & 관리되고 있어요.
이를 수동으로 설정하는 것은 데이터 무결성에 문제를 일으킬 수 있습니다.
따라서 id 필드에 대한 setter 메서드는 만들지 않는 것이 좋습니다.
gradle 버전 , jdk 버전 등등에 의해 상당히 영향을 많이 받았고 | ||
또한 의존성 충돌 , propertise 충돌에 의해서 실행되지 않는 일이 | ||
많았습니다. 그래서 더 과제가 힘들었던것 같습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
버전 충돌때문에 많은 일들이 있으셨군요 ㅠ_ㅠ 1주차 고생 많으셨어요
저는 보통 버전 문제가 있을 때 이렇게 찾아보곤 합니다.
- 자바 버전과 스프링, 사용한 라이브러리의 호환성을 구글링해서 체크
./gradlew dependencies
으로 의존성 트리를 체크해서 충돌되는 라이브러리를 파악해서 버전 조정하기- 클린 빌드
./gradlew clean build
해보기 - IntelliJ 캐시 삭제 후 재부팅
- PC 재부팅...
productService.deleteProduct(id); | ||
return "redirect:/web/products/list"; // 상품 목록 페이지로 리다이렉트 | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Google Java Style Guide 규칙 중 하나가 적용되지 않았네요!
- 모든 소스 파일은 빈 줄로 끝나야 합니다.
IntelliJ 설정으로 쉽게 처리할 수 있으니 활성화하는 것을 추천드립니다.
- Settings > Editor > General > Ensure every saved file ends with a line break
- https://jojoldu.tistory.com/673 참고
프로젝트 전체적으로 코드 컨벤션이 적용 안된 것 같아요 (들여쓰기, 줄 띄우기, 공백 등)
한 번 체크 부탁드릴게요!
No description provided.