> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL 가이드

> 개발자를 위한 실용적인 MySQL 가이드입니다. 데이터 모델링, 쿼리, 보안, 성능, AI 통합, 일상 운영을 다룹니다.

MySQL은 범위가 넓습니다. 이 가이드들은 가장 자주 나오는 부분에 집중합니다. 첫 마이그레이션 전에 한 번 내리는 결정부터 매주 손이 가는 기법까지입니다. 각 가이드는 실용적이며 VillageSQL에서 동작합니다.

SQL이 처음이라면? [MySQL 튜토리얼](https://villagesql.com/docs/ko/tutorial/index.md)이 하나의 샘플 데이터베이스를 대상으로 한 번에 한 레슨씩 순서대로 가르칩니다. 이미 SQL을 쓴다면, [데이터 유형 선택하기](https://villagesql.com/docs/ko/guides/choosing-data-types.md), [조인](https://villagesql.com/docs/ko/guides/joins.md), [인덱스](https://villagesql.com/docs/ko/guides/mysql-indexes.md)부터 시작하세요. 다른 모든 것의 바탕이 되는 기초를 다룹니다.

## MySQL과 PostgreSQL 비교

* [MySQL과 PostgreSQL은 어떻게 다르고, 무엇을 써야 할까](https://villagesql.com/docs/ko/guides/mysql-vs-postgresql.md)

## 데이터 저장

열과 스키마 결정은 데이터가 프로덕션에 들어간 뒤에는 되돌리기 어렵습니다. 이 가이드들은 열 유형, 기본 키 전략, 제약 조건, 그리고 VillageSQL의 확장 프레임워크가 가능하게 하는 유형(네이티브 UUID와 네트워크 주소 유형 같은)을 다룹니다.

* [UUID를 효율적으로 생성하고 저장하는 방법](https://villagesql.com/docs/ko/guides/uuids.md)
* [자동 증가, UUID, 복합 키 중에서 선택하는 방법](https://villagesql.com/docs/ko/guides/primary-key-strategies.md)
* [IPv4와 IPv6 주소를 효율적으로 저장하는 방법](https://villagesql.com/docs/ko/guides/storing-ip-addresses.md)
* [MySQL에 MAC 주소를 저장하고 쿼리하는 방법](https://villagesql.com/docs/ko/guides/storing-mac-addresses.md)
* [VillageSQL로 IPv6 주소를 네이티브로 처리하는 방법](https://villagesql.com/docs/ko/guides/ipv6-storage.md)
* [JSON 문서를 저장하고, 쿼리하고, 조작하는 방법](https://villagesql.com/docs/ko/guides/json-in-mysql.md)
* [데이터에 맞는 열 유형을 고르는 방법](https://villagesql.com/docs/ko/guides/choosing-data-types.md)
* [TINYINT(1) 대신 진짜 불리언을 저장하는 방법](https://villagesql.com/docs/ko/guides/boolean-columns.md)
* [문자 집합과 콜레이션이 데이터에 미치는 영향](https://villagesql.com/docs/ko/guides/character-sets.md)
* [MySQL 타임스탬프로 시간대를 올바르게 처리하는 방법](https://villagesql.com/docs/ko/guides/timestamps-timezones.md)
* [데이터베이스 정규화로 스키마를 구성하는 방법](https://villagesql.com/docs/ko/guides/normalization.md)
* [외래 키로 참조 무결성을 강제하는 방법](https://villagesql.com/docs/ko/guides/foreign-keys.md)
* [생성 열로 파생 값을 계산하고 인덱스하는 방법](https://villagesql.com/docs/ko/guides/generated-columns.md)
* [CHECK 제약 조건으로 데이터베이스 수준에서 데이터를 검증하는 방법](https://villagesql.com/docs/ko/guides/check-constraints.md)
* [deleted\_at 열로 소프트 삭제를 구현하는 방법](https://villagesql.com/docs/ko/guides/soft-deletes.md)
* [utf8mb4로 이모지와 완전한 유니코드를 저장하는 방법](https://villagesql.com/docs/ko/guides/utf8mb4.md)

## 쿼리 작성

이 가이드들은 JOIN과 집계부터 윈도우 함수, CTE, 전문 검색까지 가장 자주 쓰게 될 SQL을 다룹니다. VillageSQL 전용 가이드에는 IP 서브넷으로 쿼리하기와 HTTP 및 AI 함수로 결과 보강하기가 있습니다.

* [느리거나 잘못된 JOIN을 바로잡는 방법](https://villagesql.com/docs/ko/guides/joins.md)
* [서브쿼리와 JOIN 중에서 결정하는 방법](https://villagesql.com/docs/ko/guides/subqueries-vs-joins.md)
* [CTE가 도움이 되는지 해가 되는지 판단하는 방법](https://villagesql.com/docs/ko/guides/ctes-in-mysql.md)
* [느린 GROUP BY를 빠르게 만드는 방법](https://villagesql.com/docs/ko/guides/group-by-having.md)
* [윈도우 함수로 누적 합계, 순위, 이동 평균을 계산하는 방법](https://villagesql.com/docs/ko/guides/window-functions.md)
* [MySQL에서 NULL이 동작하는 방식과 올바르게 다루는 방법](https://villagesql.com/docs/ko/guides/null-in-mysql.md)
* [MySQL에서 전문 검색을 구현하는 방법](https://villagesql.com/docs/ko/guides/full-text-search.md)
* [뷰로 복잡한 쿼리를 단순화하는 방법](https://villagesql.com/docs/ko/guides/views.md)
* [UPSERT로 문 하나에서 행을 삽입하거나 업데이트하는 방법](https://villagesql.com/docs/ko/guides/upsert.md)
* [키셋과 OFFSET 페이지네이션으로 큰 결과 집합을 나누는 방법](https://villagesql.com/docs/ko/guides/pagination.md)
* [SQL에서 문자열을 조작하고 변환하는 방법](https://villagesql.com/docs/ko/guides/string-functions.md)
* [MySQL 쿼리에서 날짜와 시간을 다루는 방법](https://villagesql.com/docs/ko/guides/date-time-functions.md)
* [MySQL에서 IP 서브넷으로 쿼리하고 필터링하는 방법](https://villagesql.com/docs/ko/guides/subnet-queries.md)
* [MySQL에서 IP 주소로 지리 위치를 조회하는 방법](https://villagesql.com/docs/ko/guides/ip-geolocation.md)
* [MySQL에서 직접 HTTP 요청을 보내는 방법](https://villagesql.com/docs/ko/guides/http-requests-in-mysql.md)
* [외부 REST API의 데이터로 쿼리 결과를 보강하는 방법](https://villagesql.com/docs/ko/guides/rest-api-enrichment.md)
* [cube 유형으로 다차원 데이터를 저장하고 쿼리하는 방법](https://villagesql.com/docs/ko/guides/cube-queries.md)
* [MySQL에서 트라이그램 유사도로 비슷한 문자열을 찾는 방법](https://villagesql.com/docs/ko/guides/trigram-similarity.md)
* [MySQL에서 이름을 음성과 편집 거리로 매칭하는 방법](https://villagesql.com/docs/ko/guides/fuzzy-string-matching.md)

## 데이터 보안

VillageSQL의 crypto 확장은 bcrypt, AES 암호화, HMAC 서명, 다이제스트 함수를 SQL로 가져옵니다. 이 가이드들은 그 암호화 함수와 함께 MySQL 내장 사용자 및 권한 관리를 다룹니다.

* [bcrypt와 Argon2로 비밀번호를 안전하게 해싱하는 방법](https://villagesql.com/docs/ko/guides/password-hashing.md)
* [데이터 무결성을 위한 체크섬과 다이제스트를 생성하는 방법](https://villagesql.com/docs/ko/guides/hashing-data.md)
* [데이터베이스 수준에서 민감한 열 데이터를 암호화하는 방법](https://villagesql.com/docs/ko/guides/encrypting-columns.md)
* [MySQL에서 AES로 데이터를 암호화하고 복호화하는 방법](https://villagesql.com/docs/ko/guides/symmetric-encryption.md)
* [MySQL에서 HMAC으로 데이터에 서명하고 검증하는 방법](https://villagesql.com/docs/ko/guides/hmac-mysql.md)
* [암호학적으로 안전한 랜덤 값을 생성하는 방법](https://villagesql.com/docs/ko/guides/random-data-mysql.md)
* [MySQL 사용자와 권한을 만들고 관리하는 방법](https://villagesql.com/docs/ko/guides/user-management.md)
* [사용자가 비밀번호 대신 JWT로 로그인하게 하는 방법](https://villagesql.com/docs/ko/guides/jwt-authentication.md)
* [프로덕션을 위해 MySQL 서버 보안을 강화하는 방법](https://villagesql.com/docs/ko/guides/security-hardening.md)

## 성능 최적화

느린 쿼리는 보통 인덱스나 스키마 문제입니다. 이 가이드들은 EXPLAIN 출력, 슬로우 쿼리 로그, InnoDB가 데이터를 저장하는 방식에 대한 이해로 느린 쿼리를 진단하는 방법과 무엇을 바꿔야 하는지 다룹니다.

* [느린 MySQL 쿼리를 진단하고 고치는 방법](https://villagesql.com/docs/ko/guides/mysql-query-performance.md)
* [인덱스의 동작 방식과 사용 시점](https://villagesql.com/docs/ko/guides/mysql-indexes.md)
* [MySQL EXPLAIN 출력을 읽고 조치하는 방법](https://villagesql.com/docs/ko/guides/reading-explain.md)
* [커버링 인덱스가 테이블 조회를 없애는 방식](https://villagesql.com/docs/ko/guides/covering-indexes.md)
* [슬로우 쿼리 로그로 느린 쿼리를 찾고 고치는 방법](https://villagesql.com/docs/ko/guides/slow-query-log.md)
* [연결 풀링으로 데이터베이스 연결을 효율적으로 관리하는 방법](https://villagesql.com/docs/ko/guides/connection-pooling.md)
* [InnoDB가 데이터를 저장하는 방식과 그것이 성능에 중요한 이유](https://villagesql.com/docs/ko/guides/innodb-storage.md)
* [대량의 데이터를 빠르게 삽입하는 방법](https://villagesql.com/docs/ko/guides/bulk-inserts.md)
* [더 나은 쿼리 성능을 위해 큰 테이블을 파티셔닝하는 방법](https://villagesql.com/docs/ko/guides/table-partitioning.md)

## AI로 구축

VillageSQL의 AI 확장은 SQL에서 직접 언어 모델을 호출하고 임베딩을 생성하게 해 줍니다. 이 가이드들은 제공자 설정과 실제 쿼리에서 `ai_prompt()`와 `ai_embedding()`을 사용하는 방법을 다룹니다.

* [VillageSQL을 위한 AI 제공자 자격 증명을 구성하는 방법](https://villagesql.com/docs/ko/guides/ai-api-setup.md)
* [ai\_prompt()로 SQL에서 직접 AI 모델을 호출하는 방법](https://villagesql.com/docs/ko/guides/ai-prompts-in-mysql.md)
* [MySQL에서 벡터 임베딩을 생성하고 저장하는 방법](https://villagesql.com/docs/ko/guides/vector-embeddings.md)
* [MySQL 안에서 AI로 텍스트를 분류하는 방법](https://villagesql.com/docs/ko/guides/text-classification.md)
* [MySQL에서 AI 함수로 감성 분석을 실행하는 방법](https://villagesql.com/docs/ko/guides/sentiment-analysis.md)
* [SQL에서 직접 AI로 텍스트를 요약하는 방법](https://villagesql.com/docs/ko/guides/ai-summarization.md)
* [MCP로 AI 에이전트를 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/mysql-ai-agents-mcp.md)

## MySQL 운영

이 가이드들은 운영 측면을 다룹니다: 스키마 마이그레이션, Docker 설정, 트랜잭션, 복제, 백업, 그리고 프로덕션에서 문제가 생겼을 때 해야 할 일입니다.

* [최소한의 중단으로 MySQL을 업그레이드하는 방법](https://villagesql.com/docs/ko/guides/upgrade.md)
* [지원 종료 후 MySQL 8.0을 8.4로 업그레이드하는 방법](https://villagesql.com/docs/ko/guides/mysql-80-eol-upgrade.md)
* [PostgreSQL에서 MySQL로 마이그레이션하는 방법](https://villagesql.com/docs/ko/guides/postgres-to-mysql.md)
* [MariaDB에서 MySQL로 마이그레이션하는 방법](https://villagesql.com/docs/ko/guides/mariadb-to-mysql-migration.md)
* [프로덕션에서 스키마 변경을 안전하게 관리하는 방법](https://villagesql.com/docs/ko/guides/schema-migrations.md)
* [중단 없이 라이브 테이블에 ALTER TABLE을 실행하는 방법](https://villagesql.com/docs/ko/guides/zero-downtime-schema-changes.md)
* [MySQL을 위해 Django, Rails, Prisma를 구성하는 방법](https://villagesql.com/docs/ko/guides/mysql-with-orms.md)
* [로컬 개발과 프로덕션을 위해 Docker에서 MySQL을 실행하는 방법](https://villagesql.com/docs/ko/guides/mysql-on-docker.md)
* [Testcontainers로 실제 MySQL 서버를 대상으로 테스트하는 방법](https://villagesql.com/docs/ko/guides/testing-with-testcontainers.md)
* [Kubernetes에서 MySQL을 실행하는 방법](https://villagesql.com/docs/ko/guides/mysql-on-kubernetes.md)
* [트랜잭션으로 데이터를 일관되게 유지하는 방법](https://villagesql.com/docs/ko/guides/transactions.md)
* [교착 상태를 감지하고, 예방하고, 복구하는 방법](https://villagesql.com/docs/ko/guides/deadlocks.md)
* [가장 흔한 MySQL 오류를 고치는 방법](https://villagesql.com/docs/ko/guides/common-mysql-errors.md)
* [MySQL에서 스토어드 프로시저를 작성하고 사용하는 방법](https://villagesql.com/docs/ko/guides/stored-procedures.md)
* [MySQL 트리거로 동작을 자동화하는 방법](https://villagesql.com/docs/ko/guides/triggers.md)
* [MySQL 트리거에서 웹훅을 보내는 방법](https://villagesql.com/docs/ko/guides/http-webhooks.md)
* [INFORMATION\_SCHEMA로 MySQL 메타데이터를 쿼리하는 방법](https://villagesql.com/docs/ko/guides/information-schema.md)
* [MySQL 데이터베이스를 백업하고 복원하는 방법](https://villagesql.com/docs/ko/guides/backup-strategies.md)
* [MySQL 복제의 동작 방식과 설정 방법](https://villagesql.com/docs/ko/guides/replication-basics.md)
* [MySQL 읽기 복제본으로 읽기를 확장하는 방법](https://villagesql.com/docs/ko/guides/read-replicas.md)
* [바이너리 로깅의 동작 방식과 특정 시점 복구에 사용하는 방법](https://villagesql.com/docs/ko/guides/binary-logging.md)

## 애플리케이션 연결

모든 프레임워크는 MySQL에 조금씩 다르게 접근합니다. 이 가이드들은 각각 라이브 서버를 대상으로 작은 동작하는 애플리케이션을 만들고, 처음에 틀리기 쉬운 설정 단계를 다룹니다: 드라이버 선택, 마이그레이션, 연결 풀링, 그리고 풀이 있어야 하는 위치입니다.

* [Prisma로 Next.js를 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/mysql-with-prisma.md)
* [Drizzle로 Next.js를 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/mysql-with-drizzle.md)
* [ORM 없이 Next.js를 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/nextjs-mysql.md)
* [SQLAlchemy 2.0으로 FastAPI를 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/fastapi-sqlalchemy-mysql.md)
* [Eloquent로 Laravel을 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/laravel-mysql.md)
* [ActiveRecord로 Rails를 MySQL에 연결하는 방법](https://villagesql.com/docs/ko/guides/rails-mysql.md)
* [sqlc로 Go에서 타입 안전한 MySQL 쿼리를 생성하는 방법](https://villagesql.com/docs/ko/guides/go-sqlc-mysql.md)
* [서버리스 런타임이 MySQL 연결을 고갈시키지 않게 하는 방법](https://villagesql.com/docs/ko/guides/serverless-mysql-drizzle.md)
* [MySQL 테이블을 REST API로 공개하는 방법](https://villagesql.com/docs/ko/guides/rest-api-from-tables.md)

## 확장 작성

VillageSQL의 확장 프레임워크는 서버 코드를 건드리지 않고 MySQL에 사용자 정의 함수와 유형을 추가하게 해 줍니다. 이 가이드들은 처음부터 설치 가능한 확장까지 안내합니다.

* [C++로 VillageSQL 확장을 만드는 방법](https://villagesql.com/docs/ko/guides/cpp-extensions.md)
* [Rust로 VillageSQL 확장을 만드는 방법](https://villagesql.com/docs/ko/guides/rust-extensions.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.