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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

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

Draft
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt
Draft

Refactor : shop 조회 response에 updated_at 추가#212
daheeParkk wants to merge 3 commits into
developfrom
refactor/refactor-response-updatedAt

Conversation

@daheeParkk

Copy link
Copy Markdown
Contributor

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


< 변경 전 >

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

< 변경 후 >

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

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


trigger 생성 문법

DELIMITER $$
CREATETRIGGERupdate_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_rateWHERE discount_rate =OLD.discount_rate;
END IF;
END $$
DELIMITER ;

사용 예시

DELIMITER $$
CREATETRIGGERupdate_shop_updated_at_opens
AFTER UPDATEON shop_opens FOR EACH ROW
BEGINUPDATE shops SET updated_at =NEW.updated_atWHEREshops.id=NEW.shop_id;
END $$
DELIMITER ;

@InvidamInvidam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

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

Copy link
Copy Markdown
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 ; No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
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
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
ContributorAuthor

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
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍

@damiano1027

Copy link
Copy Markdown
Contributor

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

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

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

@Invidam

Copy link
Copy Markdown
Contributor

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 freeto 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

@daheeParkk@damiano1027@Invidam