2025/04/20 3

복합키 vs 정수형 단일 기본 키 (with UNIQUE)

채팅방 테이블과 유저 테이블 매핑 테이블 ❓ 여기서 현재처럼 PK를 따로 둘 것인가 vs 복합키로 할 것인가? ✅ 분석 결과 → 단일 id(PK) 방식이 적합!대부분의 ORM (JPA, Sequelize, TypeORM 등)을 사용할 때특히 JPA, Hibernate, TypeORM 같은 ORM에서는 복합키는 @IdClass, @EmbeddedId 등 복잡한 설정이 필요함 → 클래스 하나 더 만들고, equals(), hashCode()도 오버라이딩해야 하고, 오류도 많음관리 편의성을 중요시할 때추후 이 테이블에 기능이 더 추가될 가능성 있을 때 (예: 채팅방 입장 시간, 권한, 상태 등)👉 지금처럼 id를 PK로 두고, 대신 channel_room_id, user_id에 UNIQUE 제약 조건을 걸..

MySQL 인덱스의 종류와 사용 기준, 주의사항

1. 인덱스란?인덱스는 데이터베이스 테이블에서 원하는 데이터를 더 빠르게 찾기 위해 사용하는 자료구조야.일반적으로 B-Tree 구조를 사용WHERE 조건이나 JOIN, ORDER BY, GROUP BY 등을 사용할 때 검색 성능을 높여줘. 2. MySQL 인덱스의 종류BRIN, GIN은 MySQL에서 지원하지 않고 Partial B-Tree도 거의 사용되지 않음👉 MySQL에서 거의 모든 경우 B-Tree 기반 인덱스 사용3. 인덱스를 설정하는 기준 (언제 인덱스를 걸어야 할까?)조건 설명WHERE 절 자주 사용예: SELECT * FROM users WHERE email = 'abc@email.com'JOIN의 ON절두 테이블을 자주 조인하는 컬럼에 인덱스를 설정해야 빨라져ORDER BY / GROU..

Study 2025.04.20

직접 설계한 API, RESTful 설계부터 예외 처리까지

1. API 설계의 기본HTTP 메서드 의미에 맞게 사용 (GET, POST, PUT, PATCH, DELETE)자원의 이름은 명사로, 동사는 지양 2. API 설계 예시 (HTTP Method별 1개씩)GET특정 채팅방 메시지 조회/api/v1/chat-rooms/{chatRoomId}/new-messagesPOST개인정보 등록/api/v1/users/informationPUT특정 튜닝 레포트 리액션 토글/api/v2/reports/{reportId}/reactionsPATCH개인정보 수정/api/v3/users/informationDELETE회원 탈퇴/api/v3/users 3. URI 설계 방식과 원칙1️⃣ 변수 네이밍은 camelCase 사용API의 요청 데이터와 응답 데이터에서 두 단어 이..