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] chore: flyway 설정 #601

Merged
merged 7 commits into from
Sep 15, 2024
Merged

Conversation

skylar1220
Copy link
Contributor

@skylar1220 skylar1220 commented Sep 12, 2024


🚀 어떤 기능을 구현했나요 ?

  • DB Schema 파일을 생성하고, Flyway를 적용하였습니다.

🔥 어떻게 해결했나요 ?

  • schema.sql을 추가했습니다.
    • 실제 작동에는 영향을 주지 않지만 명시용으로 추가해주었습니다.
  • flyway 의존성 및 applicaion-dev.yml에 설정을 추가해주었습니다.
  • develop의 ddl-auto를 validate로 변경하였습니다.

📝 어떤 부분에 집중해서 리뷰해야 할까요?

  • secret의 develop 브랜치에 적용되어있는 applicaion-dev.yml 파일도 한번 봐주세요~

📚 참고 자료, 할 말

  • 현재에는 설정만 추가해놓은 것이고, 스키마에 변경이 필요한 경우가 생기면 V1 sql 파일을 처음으로 생성하여 정상 동작하는지 확인할 수 있습니다.
  • 위의 정상동작이 확인되면 prod 환경에도 flyway 설정을 추가할 계획입니다.
  • flyway 사용시 몇가지 주의점이 있어요. 작업 내용 공유하면서 같이 설명할게요!
    (예: sql문에 에러가 있으면 어플리케이션은 뜨지 않지만 롤백이 되지 않습니다. 즉, flyway_schema_history 테이블에 해당 버전의 sql이 추가가 된다. 이럴 경우 db에서 해당 버전 row를 직접 삭제해주고 해당 버전의 sql 파일을 다시 만들어야하니 조심!)

Copy link

github-actions bot commented Sep 12, 2024

Test Results

91 tests   91 ✅  3s ⏱️
31 suites   0 💤
31 files     0 ❌

Results for commit 27544b9.

♻️ This comment has been updated with latest results.

Copy link
Contributor

@nayonsoso nayonsoso left a comment

Choose a reason for hiding this comment

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

구구구구구굳!
플라이웨이 공부하시고 적용하시느라 수고하셨습니다☺️
image

secret의 develop 브랜치에 적용되어있는 applicaion-dev.yml 파일도 확인 완료했습니다🫡
테이블 변경이 있을 때 dev 먼저 적용해보고 문제 없으면 prod 에 적용하는 플로우도 이해완 했습니다

Copy link
Contributor

@donghoony donghoony left a comment

Choose a reason for hiding this comment

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

한 번 확인해주시면 감사하겠슴다 👍🏻 고생했어요!

on_selected_option_id BIGINT,
position INTEGER NOT NULL,
section_name VARCHAR(255) NOT NULL,
visible_type ENUM ('ALWAYS','CONDITIONAL') NOT NULL,
Copy link
Contributor

@donghoony donghoony Sep 14, 2024

Choose a reason for hiding this comment

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

기존 테이블은 Hibernate가 만들어줘서 Enum을 가지고 있지만, 추가적으로 유연하게 진행하기 위해서는 ENUM 대신 VARCHAR로 두는 건 어떨까요? DB가 어플리케이션을 의존하고 있다고 보여지기도 해요~!
어플리케이션에서는 Enum이 String형식으로 들어가게 되어 있으니깐요 😁

Copy link
Contributor Author

Choose a reason for hiding this comment

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

코멘트를 보고 Java에서의 enum을 DB에서 관리하는 방법에 대해 생각해봤어요~ 새삼 중복 데이터가 있는 구조라는 생각이 들어서 3번 참조테이블 방법도 떠올랐는데, 데이터 규모가 크지 않다면 Varchar 타입이 간단하겠네요!

1. Enum 타입

장점

  • varchar에 비해서 저장 용량이 적고, 조회가 빠름 → 근데 우린 @Enumerated(EnumType.STRING)라서 이 장점이 없음

단점

  • enum이 추가, 변경되면 DDL이 변경되어야함.


2. Varchar 타입

장점

  • 인덱스 적용하면 조회 성능도 챙길 수 있어서 간단한 구조로 하기 좋음

단점

  • 데이터 중복 발생, 이로인해 저장 공간이 더 많이 들게됨

3. 참조 테이블을 만드는 방법

장점

  • 데이터 중복을 없앨 수 있다. 저장공간이 절약됨.
  • enum에 해당하는 데이터가 추가되거나 수정될 때 참조테이블만 수정하면 되니 변경에 대응하기 쉽다.

단점

  • 조회할 때마다 join이 일어나야한다.
  • 테이블이 늘어나 구조가 복잡해진다.

Copy link
Contributor

@donghoony donghoony Sep 15, 2024

Choose a reason for hiding this comment

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

DDL보다는 어플리케이션단에서 추가하는 게 더 유연하겠습니다 👍

Comment on lines 1 to 12
DROP TABLE IF EXISTS checkbox_answer CASCADE;
DROP TABLE IF EXISTS checkbox_answer_selected_option CASCADE;
DROP TABLE IF EXISTS option_item CASCADE;
DROP TABLE IF EXISTS option_group CASCADE;
DROP TABLE IF EXISTS section_question CASCADE;
DROP TABLE IF EXISTS question CASCADE;
DROP TABLE IF EXISTS section CASCADE;
DROP TABLE IF EXISTS review CASCADE;
DROP TABLE IF EXISTS review_group CASCADE;
DROP TABLE IF EXISTS template_section CASCADE;
DROP TABLE IF EXISTS template CASCADE;
DROP TABLE IF EXISTS text_answer CASCADE;
Copy link
Contributor

Choose a reason for hiding this comment

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

DROP은 조금 위험하지 않을까요 🤔 단순한 명시 목적이면 이 부분은 없어도 좋겠네요!

Copy link
Contributor Author

@skylar1220 skylar1220 Sep 15, 2024

Choose a reason for hiding this comment

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

만약 처음부터 schema.sql로 스키마를 생성했다면...을 가정해서 넣은 부분인데, 위험성이 더 있겠네요. 반영완료!

Copy link
Contributor

@Kimprodp Kimprodp left a comment

Choose a reason for hiding this comment

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

시크릿 레포 설정파일도 모두 확인했습니다. 고생했어요 ~~ 👍👍

DROP TABLE IF EXISTS review_group CASCADE;
DROP TABLE IF EXISTS template_section CASCADE;
DROP TABLE IF EXISTS template CASCADE;
DROP TABLE IF EXISTS text_answer CASCADE;
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 Author

Choose a reason for hiding this comment

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

만약 처음부터 schema.sql로 스키마를 생성했다면...을 가정해서 넣은 부분인데, 위험성이 더 있겠네요. 제거했어요!

Copy link
Contributor

@donghoony donghoony left a comment

Choose a reason for hiding this comment

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

학습하느라 고생했어요~ 공유 부탁합니다 흐흐

@skylar1220 skylar1220 merged commit a97ef30 into develop Sep 15, 2024
4 checks passed
@donghoony donghoony deleted the be/chore/516-add-schema-flyway branch September 26, 2024 02:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

[BE] DB Schema 파일을 생성하고, Flyway를 적용한다.(dev → prod)
4 participants