MySQL에서 데이터를 어떻게 저장하고 관리할지 결정하는 스토리지 엔진(Storage Engine).
그중 가장 많이 비교되는 두 가지: InnoDB와 MyISAM.
| 항목 | InnoDB | MyISAM |
|---|---|---|
| 트랜잭션 | 지원 (ACID 보장) | 미지원 |
| Lock 방식 | Row-level Locking (행 단위) | Table-level Locking (테이블 단위) |
| 외래 키(FK) | 지원 | 미지원 |
| 성능 특징 | 동시성 처리 최적화 쓰기/변경에 강함 | 읽기 성능 우수 간단한 쿼리 빠름 |
| 충돌 복구 | 자동 복구 기능 우수 | 충돌 복구 기능 미흡 |
| 저장 공간 효율성 | 비교적 낮음 | 비교적 높음 |
| 주요 특징 | 데이터 무결성 보장 복잡한 애플리케이션 적합 | 읽기 중심 시스템에 적합 간단한 구조 |
🔸 InnoDB는 대부분의 최신 MySQL에서 기본 스토리지 엔진이다.
예시 SQL:
SELECT
name, age, sex, COUNT(*) AS cnt
FROM users
JOIN user_profiles
ON users.id = user_profiles.user_id
WHERE age >= 20
GROUP BY age, sex
HAVING COUNT(*) > 0
ORDER BY age DESC
LIMIT 5
SQL 실행 순서
1. FROM users
2.JOIN user_profiles ON users.id = user_profiles.user_id
3.WHERE age >= 20
4.GROUP BY age, sex
5.HAVING COUNT(*) > 0
6.SELECT name, age, sex, COUNT(*) AS cnt
7.ORDER BY age DESC
8.LIMIT 5
🔸SELECT가 가장 먼저 보이지만 가장 나중에 실행된다!
예시: 소셜 로그인 토큰 저장
보통 카카오나 구글 등의 소셜 로그인 시 토큰 정보는
user_profiles 같은 테이블에 따로 저장.
예시 구조
users 테이블 → 유저의 기본 정보 (id, name, email 등)
user_profiles 테이블 → 소셜 로그인 정보 (user_id, provider, access_token 등)
이렇게 분리하는 이유
유저 정보와 외부 서비스 데이터를 분리하여 관리
다양한 소셜 로그인(카카오, 구글, 네이버 등)을 하나의 구조로 확장 가능
마무리 요약
InnoDB: 동시성/무결성이 중요한 시스템에 적합 (CRUD, SNS 등)
MyISAM: 빠른 읽기 작업이 필요한 단순 검색 시스템에 유리
SQL 실행 순서를 이해하면 더 효율적인 쿼리 작성 가능
소셜 로그인은 별도 프로필 테이블로 관리하는 것이 일반적