-
Notifications
You must be signed in to change notification settings - Fork 8
2024.07.11 백엔드 ERD 회의
재우 edited this page Jul 11, 2024
·
2 revisions
- extension은 연결된 language가 존재한다.
- (데이터무결성) 이를 매번 snippet에 입력된 extension에 연결된 language를 찾아서 추가해야한다.
- (데이터무결성) 분리하지 않았을 때, 수정 시 수정 오류가 발생할 가능성이 크다.
- 정규화 된 테이블이라고 생각한다.
- (데이터무결성) 분리하지 않았을 때, 수정 시 수정 오류가 발생할 가능성이 크다.
- enum을 썼을 경우, 배포를 다시 해야한다.
- varchar는 가변 길이 문자열이기 때문에 varchar의 값은 최대 길이를 의미하는 것이다.
- 크게 해도 차지하는 메모리는 사용된 문자열 길이
- 255 이상은 가변 문자열이기 때문에 성능 이슈가 생기긴함
- 길이를 제한하는 크기로 할 경우, 요구사항 변경이 생겼을 때 프로그램 설정이 아니라 데이터베이스 설정이 변경되어야한다.
- 길이 제한은 DB 단이 아니라 프로그래밍 단에서 잡아주면 되지 않을까?
ex. 템플릿 제목은 127자일 때 varchar(127)
- 요구 사항과 DB를 동등하게 제한을 두고 싶다
- 장점
- 초기 테이블 세팅에 null 이 존재하지 않는다
- 단점
- 결국엔 JPA 이용 시 문제 발생할 수 있지 않을까? (어려움 존재)
- 장점
- 간단하다
- 단점
- 순환 참조가 발생한다. (snippet이 template를 참조, template도 snippet을 참조)
- 초기 테이블 세팅에 null이 존재한다
- 장점
- 간단하다
- 초기 테이블 세팅에 null 이 존재하지 않는다
- 단점
- 첫 번째 snippet이 대표가 아닐 수도 있다 (매우 중요)
- 해당 사항은 대표 snippet을 설정하는 필드가 아닌 기본 필드여야 할 것 같다.
- 장점
- 초기 테이블 세팅에 null 이 존재하지 않는다
- 단점
- 검색 시 snippet을 다 확인해야 하는 성능 이슈
- 인덱싱으로 설정할 수 있다
- 검색 시 snippet을 다 확인해야 하는 성능 이슈
table member {
id BIGINT [pk, increment]
email VARCHAR(255) [unique, not null]
password VARCHAR(255) [not null]
nickname VARCHAR(255) [not null]
created_at TIMESTAMP
modified_at TIMESTAMP
}
table template {
id BIGINT [pk, increment]
member_id BIGINT [not null, ref: > member.id]
title VARCHAR(255) [not null]
created_at TIMESTAMP
modified_at TIMESTAMP
}
table snippet {
id BIGINT [pk, increment]
template_id BIGINT [not null, ref: > template.id]
extension_id BIGINT [not null, ref: - extension.id]
filename VARCHAR(255) [not null]
content TEXT [not null]
order INT [not null]
created_at TIMESTAMP
modified_at TIMESTAMP
}
table representative_snippet {
template_id BIGINT [pk, ref: - template.id]
snippet_id BIGINT [not null, ref: - snippet.id]
created_at TIMESTAMP
modified_at TIMESTAMP
}
table language {
id BIGINT [pk, increment]
name VARCHAR(255) [NOT NULL]
created_at TIMESTAMP
modified_at TIMESTAMP
}
table extension {
id BIGINT [pk, increment]
language_id BIGINT [not null, ref: - language.id]
name VARCHAR(255) [not null]
created_at TIMESTAMP
modified_at TIMESTAMP
}
- 실행 DB
- 로컬 DB
- 테스트 DB
- language table은 data.sql 이용
- yml 파일 이용
- main/develop 브랜치에는 옮기지 말자 (yml 설정에서 data.sql 사용을 지워라)
- 어차피 배포 시에는 초기 한번만 사용할 sql 문이니, github에 문서를 올리지 말자
- 백엔드 코드 컨벤션
- 백엔드 기술 스택 및 선정 이유
- 각종 인스턴스 설정 파일 및 구성 위치 가이드
- ERD
- 백엔드 CI CD 동작 프로세스
- 로컬 DB 환경 설정
- 백엔드 로깅 전략
- 백엔드 로그 모니터링 구성도
- 스프링 메트릭 모니터링 구성도
- Flyway 로 스키마 관리
- 코드잽 서버 구성도
- Git Submodule 사용 메뉴얼
- 프론트엔드 코드 컨벤션
- 프론트엔드 기술 스택 및 선정 이유
- 프론트엔드 서비스 타겟 환경 및 브라우저 지원 범위 선정
- 프론트엔드 모니터링 및 디버깅 환경 구축
- 프론트엔드 테스트 목록
- 프론트엔드 라이브러리 기술 검토
- 프론트엔드 개발서버, 운영서버 빌드 및 배포 환경 구분
- 목표했던 타겟 환경과 디바이스에서 서비스 핵심 기능 동작 확인
- 프론트엔드 접근성 개선 보고서
- EC2 로그 확인 방법
- VSCode를 통한 EC2 인스턴스 SSH 연결 방법
- 터미널을 통한 EC2 인스턴스 SSH 연결 방법
- NGINX 설정 파일 접근 및 적용 방법
- DB 접속 및 백업 방법
- [QA] 배포 전 체크리스트
- CI 파이프라인 구축
- CD 파이프라인 구축
- 백엔드 CI CD 트러블슈팅
- Lombok Annotation Processor 의존성을 추가한 이유
- 2차 스프린트 기준 ERD
- DTO 검증하기
- ProblemDetail
- Fork된 레포지토리 PR에서 CI Secrets 접근 문제 해결
- AWS CloudWatch 모니터링
- 스프링 메트릭 모니터링 구축 방법
- 로깅과 Logback에 대해 알아보아요.
- Logback MDC로 쉽게 요청 추적하기 (+ Grafana로 추적 더더 쉽게!)
- 백엔드 CD 파이프라인 Ver.2
- 요청, 응답 로그에 correlationId 를 추가하자!
- 3차 스프린트 기준 ERD
- 더미데이터 생성하고 실행하기
- 쿼리 성능 개선 결과
- 테이블별 인덱스 설정 목록
- 사용자 증가 시 발생할 수 있는 문제 상황과 개선 방안
- k6를 사용한 서버 부하 테스트
- 6차 스프린트 기준 ERD
- TestExecutionListenr 간의 충돌 문제에 대해 알아보아요
- Query Performance Improvement Results
- 테스트 전략 및 CI 설정
- CI CD 구조
- 배포 전, 로컬에서 로그인 기능 포함 테스트해보는 법
- stylelint 적용기
- 내 작업 브랜치 중간에 Merge된 동료의 작업물을 넣고 싶다면 pull vs rebase
- [TS] Webpack config
- [TS] Webpack 환경에서 MSW v2 이슈
- [TS] webpack에서 react‐router‐dom 적용 안됨