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

외래키 제거 완료 #390

Closed
wants to merge 49 commits into from
Closed

외래키 제거 완료 #390

wants to merge 49 commits into from

Conversation

limehee
Copy link
Collaborator

@limehee limehee commented Jun 26, 2024

Summary

#388

외래키를 제거하고 엔티티 간의 직접 참조를 ID를 통한 간접 참조로 전환하였습니다. 이는 헥사고날 아키텍처의 외부-내부 의존성 역전을 준수함과 동시에 성능 및 운영적인 측면에서의 문제를 해결하기 위함입니다. 외래키 사용의 단점을 극복하고 애플리케이션의 확장성과 유지보수성을 높이기 위해 다음과 같은 작업을 수행하였습니다.

Tasks

  • Member 엔티티의 직접 참조를 제거하고, memberId를 통해 간접 참조하도록 변경
  • 엔티티의 업데이트 및 생성 시 MemberLookupService를 사용하여 memberId의 유효성을 검사
  • 외래키 제약 조건 제거 및 관련 스키마 변경
  • MemberDeletedEvent와 MemberUpdatedEvent를 사용하여 회원 삭제 및 업데이트 시 정합성을 유지하도록 이벤트 기반 처리 로직 추가
  • MemberEventDispatcher와 MemberEventProcessor 인터페이스를 사용하여 회원 이벤트 처리 로직을 중앙집중화 및 모듈화

ETC

활동 관련 테이블과 미사용 테이블은 작업에 포함하지 않았습니다.

Query

다음은 변경된 테이블 구조를 반영하는 쿼리문입니다.

  1. 제약 조건, 컬럼 이름 확인
SELECT
    conname,
    conrelid::regclass AS tablename,
    a.attname AS column_name
FROM
    pg_constraint AS c
    JOIN pg_attribute AS a ON a.attnum = ANY(c.conkey) AND a.attrelid = c.conrelid
WHERE
    c.contype = 'f'
    AND c.conrelid::regclass IN (
        'public.accuse', 'public.award', 'public.blog', 'public.board', 'public.book',
        'public.book_loan_record', 'public.comment', 'public.donation', 'public.account_lock_info',
        'public.membership_fee', 'public.notification', 'public.position', 'public.work_experience'
    );
  1. 동적 SQL을 사용한 제약 조건 삭제
DO $$
DECLARE
    r RECORD;
BEGIN
    FOR r IN (
        SELECT
            conname,
            conrelid::regclass AS tablename,
            a.attname AS column_name
        FROM
            pg_constraint AS c
            JOIN pg_attribute AS a ON a.attnum = ANY(c.conkey) AND a.attrelid = c.conrelid
        WHERE
            c.contype = 'f'
            AND c.conrelid::regclass IN (
                'public.accuse', 'public.award', 'public.blog', 'public.board', 'public.book',
                'public.book_loan_record', 'public.comment', 'public.donation', 'public.account_lock_info',
                'public.membership_fee', 'public.notification', 'public.position', 'public.work_experience'
            )
            AND a.attname = 'member_id'
    ) LOOP
        EXECUTE 'ALTER TABLE ' || r.tablename || ' DROP CONSTRAINT ' || r.conname;
    END LOOP;
END $$;

limehee and others added 30 commits June 19, 2024 21:46
젠킨스 슬랙 메시지 개선 완료
젠킨스 웹훅 미작동 오류 수정 완료
* refactor(Slack): 슬랙 알림을 발행-구독 패턴으로 변경 및 알림을 On/Off 가능한 구조로 변경

* feat(Slack): 슬랙 알림 설정 변경 API 추가

* feat(Slack): 슬랙 알림 조회 API 추가

* refactor(Slack): AlertType 예외 수정

* refactor(Slack): 코드 컨벤션 수정

* feat(Slack): 새 게시글 알림 추가

* refactor(Slack): 새 게시글 알림 이모지 변경
* feat: 모집공고 상태 나타내는 enum 도입 #353

* feat: 모집 기간에 따라 자동으로 모집 상태 변경하는 로직 작성 #353

* refactor: 모집 상태 구현 로직 변경에 따른 DTO 수정 #353

* feat: 트랜잭션을 추상화한 인터페이스 빈으로 등록 #353

* refactor: 모집 상태 문자열 사이즈 관련 message 삭제 #353

* refactor: 모집 공고 수정 시에도 즉각적으로 상태 반영되도록 수정 #353

* refactor: 띄어쓰기 수정 #353

* refactor(Recruitment): 띄어쓰기 수정

---------

Co-authored-by: 한관희 <[email protected]>
limehee added 19 commits June 26, 2024 01:26
@limehee limehee added the 🔨 Refactor 코드 수정 및 개선 label Jun 26, 2024
@limehee limehee self-assigned this Jun 26, 2024
@limehee limehee linked an issue Jun 26, 2024 that may be closed by this pull request
@limehee limehee closed this Jun 26, 2024
@limehee limehee removed their assignment Jun 26, 2024
@limehee limehee removed the 🔨 Refactor 코드 수정 및 개선 label Jun 26, 2024
@limehee limehee removed a link to an issue Jun 26, 2024
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