Table DSL로 테이블 정의하기
열, 기본 키 및 외래 키가 있는 타입 지정 테이블 스키마를 정의해 보세요.
Table DSL로 테이블 정의하기은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Exposed 테이블 객체
Exposed에서는 데이터베이스 테이블을 Table(쿼리 DSL) 또는 IntIdTable/LongIdTable/UUIDTable(DAO 계층)을 확장하는 Kotlin 싱글턴 object로 나타냅니다. 열 정의는 Kotlin 프로퍼티입니다.
기본 테이블 정의
Table을 확장하고 내장 열 팩토리 함수를 사용하여 열을 정의하십시오:
import org.jetbrains.exposed.sql.Table
object Users : Table("users") {
val id = long("id").autoIncrement()
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
val age = integer("age").nullable()
override val primaryKey = PrimaryKey(id)
}열 유형
Exposed는 일반적인 SQL 유형을 위한 팩토리 함수를 제공합니다:
integer("col"),long("col"),short("col")varchar("col", length),text("col")bool("col"),double("col"),decimal("col", precision, scale)datetime("col"),date("col"),timestamp("col")blob("col"),uuid("col"),binary("col", length)
널 허용 열
어떤 열에서든 .nullable()을 호출하면 NULL 값을 허용할 수 있습니다. 그러면 Kotlin 유형도 널 허용 유형이 됩니다(String 대신 String?):
object Products : Table("products") {
val id = long("id").autoIncrement()
val name = varchar("name", 200)
val description = text("description").nullable()
override val primaryKey = PrimaryKey(id)
}기본값
Kotlin 측 기본값(삽입 전에 적용)에는 .default(value)를 사용하고, 데이터베이스 측 SQL 기본값에는 .defaultExpression(expr)을 사용하십시오:
object Orders : Table("orders") {
val id = long("id").autoIncrement()
val status = varchar("status", 20).default("PENDING")
val createdAt = datetime("created_at")
.defaultExpression(CurrentDateTime)
override val primaryKey = PrimaryKey(id)
}인덱스 및 고유 제약 조건
열에서 직접 일반 인덱스를 만들려면 .index()를, 고유 인덱스를 만들려면 .uniqueIndex()를 호출하십시오. 복합 인덱스에는 Table의 index() 함수를 사용하십시오:
object Articles : Table("articles") {
val id = long("id").autoIncrement()
val title = varchar("title", 300).index()
val slug = varchar("slug", 300).uniqueIndex()
override val primaryKey = PrimaryKey(id)
}외래 키
열 사이에 외래 키 제약 조건을 선언하려면 .references()를 사용하십시오. 참조할 열과 선택적으로 onDelete 및 onUpdate 작업을 전달하십시오:
object Posts : Table("posts") {
val id = long("id").autoIncrement()
val authorId = long("author_id").references(Users.id, onDelete = ReferenceOption.CASCADE)
val title = varchar("title", 300)
override val primaryKey = PrimaryKey(id)
}IdTable 변형
DAO 계층에서는 일반 Table 대신 유형이 지정된 ID 테이블을 사용하십시오:
IntIdTable("name")—Int자동 증가 기본 키의 이름은id입니다LongIdTable("name")—Long자동 증가 기본 키UUIDTable("name")— UUID 기본 키
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
}복합 기본 키
여러 열을 PrimaryKey()에 전달하여 복합 기본 키를 정의하십시오:
object UserRoles : Table("user_roles") {
val userId = long("user_id").references(Users.id)
val roleId = long("role_id").references(Roles.id)
override val primaryKey = PrimaryKey(userId, roleId)
}열거형 열
enumerationByName() 또는 enumeration()을 사용하여 Kotlin 열거형 값을 문자열 또는 서수로 저장하십시오:
enum class Status { ACTIVE, INACTIVE, BANNED }
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val status = enumerationByName<Status>("status", 20)
}스키마 변경 적용
SchemaUtils.createMissingTablesAndColumns()를 호출하면 기존 데이터를 삭제하지 않고 누락된 테이블과 열을 추가할 수 있습니다. 이는 개발 환경에서 안전한 마이그레이션 방법입니다. 운영 환경에서는 Flyway 또는 Liquibase와 같은 마이그레이션 도구를 사용하십시오.
transaction {
SchemaUtils.createMissingTablesAndColumns(Users, Posts, Orders)
}빠른 확인
Exposed의 Table DSL에서 Posts.authorId에서 Users.id로 이어지는 외래 키를 어떻게 선언하나요?
복습: Table DSL로 테이블 정의하기
핵심 내용:
- 테이블은
Table,LongIdTable등을 확장하는object입니다 - 열에는
varchar,integer,long,bool,datetime,uuid등이 있습니다 .nullable(),.default(),.uniqueIndex(),.references()로 열을 수정합니다- 복합 기본 키는
PrimaryKey(col1, col2)로 정의합니다 SchemaUtils.create()또는createMissingTablesAndColumns()로 스키마를 적용합니다
AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“Table DSL로 테이블 정의하기” 강의는 무료인가요?
네 — “Table DSL로 테이블 정의하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Table DSL로 테이블 정의하기”에서 뭘 배우나요?
열, 기본 키 및 외래 키가 있는 타입 지정 테이블 스키마를 정의해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“Table DSL로 테이블 정의하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Exposed 설정: 데이터베이스 연결과 트랜잭션 DSL
- Table DSL로 테이블 정의하기
- Query DSL로 CRUD 수행하기: insert, select, update, delete
- Exposed DAO: 엔터티 클래스와 관계