Skip to content
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

Open
wants to merge 28 commits into
base: main
Choose a base branch
from

Conversation

kuma4188
Copy link

No description provided.

Copy link

@yoo-jaein yoo-jaein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수빈님 안녕하세요!
앞으로 6주간 step2를 함께 할 유재인입니다. 잘 부탁드려요😊

몇 가지 코멘트와 질문을 남겨드렸으니 확인 부탁드립니다!

src/main/java/gift/Product.java Show resolved Hide resolved
@@ -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');

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,

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());

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

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) {

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);

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) {

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) {

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 충돌에 의해서 실행되지 않는 일이
많았습니다. 그래서 더 과제가 힘들었던것 같습니다.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

버전 충돌때문에 많은 일들이 있으셨군요 ㅠ_ㅠ 1주차 고생 많으셨어요
저는 보통 버전 문제가 있을 때 이렇게 찾아보곤 합니다.

  1. 자바 버전과 스프링, 사용한 라이브러리의 호환성을 구글링해서 체크
  2. ./gradlew dependencies으로 의존성 트리를 체크해서 충돌되는 라이브러리를 파악해서 버전 조정하기
  3. 클린 빌드 ./gradlew clean build 해보기
  4. IntelliJ 캐시 삭제 후 재부팅
  5. PC 재부팅...

productService.deleteProduct(id);
return "redirect:/web/products/list"; // 상품 목록 페이지로 리다이렉트
}
}

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 설정으로 쉽게 처리할 수 있으니 활성화하는 것을 추천드립니다.

프로젝트 전체적으로 코드 컨벤션이 적용 안된 것 같아요 (들여쓰기, 줄 띄우기, 공백 등)
한 번 체크 부탁드릴게요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants