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

Refactor : shop 조회 response에 updated_at 추가 #212

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from

Conversation

daheeParkk
Copy link
Contributor

user가 상점을 조회할 때 update된 날짜도 반환


< 변경 전 >

  • 상점을 조회해도 update된 날짜가 나오지 않음

< 변경 후 >

  • 상점 조회 시 update된 날짜가 나옴
    • 카테고리, 메뉴, 이미지, open 정보를 업데이트 했을 때 shop 테이블의 updated_at이 변경됨

상점을 업데이트 할 경우 상점 테이블에 포함된 데이터가 변경될 경우 updated_at이 변경되지만, 상점 테이블이 아닌 상점테이블의 id를 참조하는 테이블의 정보만 변경될 경우 그 테이블의 updated_at만 변경됩니다.
상점 테이블을 참조하는 다른 테이블을 변경 했을 때에도 상점 테이블의 updated_at을 변경하여 업데이트된 날짜를 통일하기 위해 다른 테이블들과 동기화가 필요했습니다. 이를 위해 trigger를 사용하였습니다.


trigger 생성 문법

DELIMITER $$

CREATE TRIGGER update_item
AFTER UPDATE  -- {BEFORE | AFTER} {INSERT | UPDATE| DELETE } 중 언제 어떤 작업을 할지 정한다
ON sale_table -- 트리거를 부착할 테이블
FOR EACH ROW -- 아래 나올 조건에 해당하는 모든 row에 적용한다는 뜻

BEGIN
  -- 트리거시 실행되는 코드
  IF NEW.discount_rate != OLD.discount_rate THEN -- update 트리거는 old와 new 값이 존재한다.
    UPDATE item_table SET discount_rate = NEW.discount_rate WHERE discount_rate = OLD.discount_rate;
  END IF;
END $$

DELIMITER ;

사용 예시

DELIMITER $$

CREATE TRIGGER update_shop_updated_at_opens
AFTER UPDATE  
ON shop_opens 
FOR EACH ROW

BEGIN
    UPDATE shops SET updated_at = NEW.updated_at WHERE shops.id = NEW.shop_id;
END $$

DELIMITER ;

Copy link
Contributor

@Invidam Invidam left a comment

Choose a reason for hiding this comment

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

트리거를 이용한 해결은 처음이었을텐데 잘해주었네요~ 👍
아침일찍?부터 PR을 날리는 게 대단해요...;

수정사항 및 고민해봐야할 내용 있는 것 같아 리뷰 남겼습니다.
확인해주세요~ 😄

Copy link
Contributor

Choose a reason for hiding this comment

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

V72.000_ 가 아니라
V72.000__ 로 해야 (언더바 2개) flyway 동작이 가능합니다 😅

컨벤션 유의해주세요~

UPDATE shops SET updated_at = NEW.updated_at WHERE shops.id = NEW.shop_id;
END $$

DELIMITER ;
Copy link
Contributor

Choose a reason for hiding this comment

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

마지막 라인에 뉴 라인이 추가되어야 할 것 같아요

Copy link
Contributor

Choose a reason for hiding this comment

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

트리거를 이용하여 메뉴, 이미지, 카테고리가 update될 때 상점의 updated_at이 변경되도록 수정됐다고 이해했는데

update될 때만 변경되면 될까요?
create, delete에도 트리거가 필요하지 않을까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

create, delete 때도 필요할 것 같습니다.. 추가하겠습니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

shop_opens 테이블의 경우에는 soft delete인데 delete에 관한 트리거를 추가할 필요가 있을까요?

Comment on lines +54 to +57
@ApiModelProperty(value = "업데이트 일자", example = "2023-01-01 12:01:02", required = true)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
private Date updated_at;

Copy link
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027
Copy link
Contributor

mysql에서 트리거를 사용하게 될 경우 성능에는 영향이 없을까요?

만약 성능에 영향을 준다면
코드단에서 updated_at을 현재 시간으로 수정해서 UPDATE하는것이 더 깔끔하겠다는 생각이 들기도 합니다.

mysql에서 트리거가 성능에 영향을 주는지 한번 알아보시고(저도 모르는 부분이라 알아봐야 할 것 같아요) 의견을 남겨주시면 감사하겠습니다!

@Invidam
Copy link
Contributor

Invidam commented Apr 18, 2023

mysql에서 트리거를 사용하게 될 경우 성능에는 영향이 없을까요?

만약 성능에 영향을 준다면 코드단에서 updated_at을 현재 시간으로 수정해서 UPDATE하는것이 더 깔끔하겠다는 생각이 들기도 합니다.

mysql에서 트리거가 성능에 영향을 주는지 한번 알아보시고(저도 모르는 부분이라 알아봐야 할 것 같아요) 의견을 남겨주시면 감사하겠습니다!

프로시저 활용하는 것도 좋을 것 같아요
mysql에서 일종의 함수(상점의 updated_at을 수정하는 명령어)를 만들어서,
이미지, 카테고리, 메뉴의 Create, Update, Delete를 발생시킬 때 해당 함수를 실행해주면 될 것 같아요

@Invidam Invidam marked this pull request as draft May 9, 2023 00:19
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.

3 participants