# ๐ŸŒฒ Sonamu ## Docs - [Agent ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/ai-agents/agent-configuration.md): AI ์—์ด์ „ํŠธ ๊ธฐ๋ณธ ์„ค์ •ํ•˜๊ธฐ - [Agent ์ƒ์„ฑํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/advanced-features/ai-agents/creating-agents.md): BaseAgentClass๋กœ ์ปค์Šคํ…€ AI ์—์ด์ „ํŠธ ๊ตฌ์ถ•ํ•˜๊ธฐ - [AI SDK ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/advanced-features/ai-agents/using-ai-sdk.md): Vercel AI SDK์™€ ์ปค์Šคํ…€ ํ”„๋กœ๋ฐ”์ด๋” ํ™œ์šฉํ•˜๊ธฐ - [Cache Presets](https://sonamu.cartanova.ai/ko/advanced-features/cache-control/cache-presets.md): ์‚ฌ์ „ ์ •์˜๋œ ์บ์‹œ ์„ค์ • ํ™œ์šฉํ•˜๊ธฐ - [API์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/advanced-features/cache-control/using-in-apis.md): @api ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— Cache-Control ์ ์šฉํ•˜๊ธฐ - [SSR์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/advanced-features/cache-control/using-in-ssr.md): SSR ํŽ˜์ด์ง€์— Cache-Control ์ ์šฉํ•˜๊ธฐ - [Cache-Control์ด๋ž€?](https://sonamu.cartanova.ai/ko/advanced-features/cache-control/what-is-cache-control.md): HTTP ์บ์‹ฑ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ - [์บ์‹œ ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/caching/cache-configuration.md): BentoCache stores์™€ drivers ์„ค์ •ํ•˜๊ธฐ - [@cache ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ](https://sonamu.cartanova.ai/ko/advanced-features/caching/cache-decorator.md): ๋ฉ”์„œ๋“œ์— ์บ์‹œ ์ ์šฉํ•˜๊ธฐ - [์บ์‹œ ๋ฌดํšจํ™”](https://sonamu.cartanova.ai/ko/advanced-features/caching/cache-invalidation.md): Tag ๊ธฐ๋ฐ˜ ์บ์‹œ ๋ฌดํšจํ™” ๋ฐ ๊ด€๋ฆฌ - [์บ์‹œ ์ „๋žต](https://sonamu.cartanova.ai/ko/advanced-features/caching/cache-strategies.md): TTL, Grace, Namespace ํ™œ์šฉ ์ „๋žต - [์••์ถ• ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/compress/compress-configuration.md): ์ „์—ญ ์••์ถ• ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •ํ•˜๊ธฐ - [์••์ถ• ํ”„๋ฆฌ์…‹](https://sonamu.cartanova.ai/ko/advanced-features/compress/compress-presets.md): ์‚ฌ์ „ ์ •์˜๋œ ์••์ถ• ์„ค์ • ํ™œ์šฉํ•˜๊ธฐ - [API๋ณ„ ์••์ถ• ์ œ์–ด](https://sonamu.cartanova.ai/ko/advanced-features/compress/per-api-control.md): @api ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์—”๋“œํฌ์ธํŠธ๋ณ„ ์••์ถ• ์„ค์ •ํ•˜๊ธฐ - [์„ฑ๋Šฅ ์ตœ์ ํ™”](https://sonamu.cartanova.ai/ko/advanced-features/compress/performance-optimization.md): ์••์ถ•์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต - [SD ํ•จ์ˆ˜์™€ ๋”•์…”๋„ˆ๋ฆฌ](https://sonamu.cartanova.ai/ko/advanced-features/i18n/dictionary.md): ํƒ€์ž… ์•ˆ์ „ํ•œ ๋ฒˆ์—ญ ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ• - [Entity ๋ผ๋ฒจ ์ž๋™ ์ถ”์ถœ](https://sonamu.cartanova.ai/ko/advanced-features/i18n/entity-labels.md): Entity ์ •์˜์—์„œ ์ž๋™์œผ๋กœ ์ถ”์ถœ๋˜๋Š” i18n ๋ผ๋ฒจ - [Excel Import/Export](https://sonamu.cartanova.ai/ko/advanced-features/i18n/excel-import.md): Sonamu UI์—์„œ ๋ฒˆ์—ญ ํŒŒ์ผ ์ผ๊ด„ ๊ด€๋ฆฌํ•˜๊ธฐ - [ํ—ฌํผ ํ•จ์ˆ˜](https://sonamu.cartanova.ai/ko/advanced-features/i18n/helpers.md): josa, plural, format ๋“ฑ i18n ์œ ํ‹ธ๋ฆฌํ‹ฐ - [๋‹ค๊ตญ์–ด DB ์ปฌ๋Ÿผ](https://sonamu.cartanova.ai/ko/advanced-features/i18n/localized-columns.md): name_ko, name_en ๋˜๋Š” locale map ํ˜•ํƒœ์˜ ๋‹ค๊ตญ์–ด ์ปฌ๋Ÿผ ์ฒ˜๋ฆฌ - [i18n ๊ฐœ์š”](https://sonamu.cartanova.ai/ko/advanced-features/i18n/overview.md): Sonamu์˜ ๋‹ค๊ตญ์–ด ์ง€์› ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ - [i18n ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/i18n/setup.md): Sonamu ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๊ตญ์–ด ์ง€์› ํ™œ์„ฑํ™”ํ•˜๊ธฐ - [ํด๋ผ์ด์–ธํŠธ ํ†ตํ•ฉ](https://sonamu.cartanova.ai/ko/advanced-features/sse/client-integration.md): ํ”„๋ก ํŠธ์—”๋“œ์—์„œ SSE ์‚ฌ์šฉํ•˜๊ธฐ - [SSE ์—”๋“œํฌ์ธํŠธ ๋งŒ๋“ค๊ธฐ](https://sonamu.cartanova.ai/ko/advanced-features/sse/creating-sse-endpoints.md): @stream ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ SSE API ๊ตฌ์ถ•ํ•˜๊ธฐ - [SSE ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/sse/sse-setup.md): Server-Sent Events ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •ํ•˜๊ธฐ - [ํŒŒ์ผ ์ €์žฅ ๋ฐ ์กฐํšŒ](https://sonamu.cartanova.ai/ko/advanced-features/storage/file-operations.md): ํŒŒ์ผ ์—…๋กœ๋“œ, ๋‹ค์šด๋กœ๋“œ, ์กฐํšŒ ๊ฐ€์ด๋“œ - [์Šคํ† ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„](https://sonamu.cartanova.ai/ko/advanced-features/storage/storage-drivers.md): fs, S3 ๋“œ๋ผ์ด๋ฒ„ ์„ค์ • ๊ฐ€์ด๋“œ - [Storage Manager](https://sonamu.cartanova.ai/ko/advanced-features/storage/storage-manager.md): ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ ์†Œ๊ฐœ - [URL ๋นŒ๋”](https://sonamu.cartanova.ai/ko/advanced-features/storage/url-builder.md): ํŒŒ์ผ URL ์ƒ์„ฑ ๋ฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• - [์ฒญํ‚น](https://sonamu.cartanova.ai/ko/advanced-features/vector-search/chunking.md): Sonamu์—์„œ ๊ธด ๋ฌธ์„œ๋ฅผ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋ถ„ํ• ํ•˜๊ธฐ - [์ž„๋ฒ ๋”ฉ](https://sonamu.cartanova.ai/ko/advanced-features/vector-search/embeddings.md): Sonamu์—์„œ Voyage AI, OpenAI๋กœ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑํ•˜๊ธฐ - [ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰](https://sonamu.cartanova.ai/ko/advanced-features/vector-search/hybrid-search.md): Sonamu์—์„œ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๊ณผ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ •ํ™•๋„ ํ–ฅ์ƒํ•˜๊ธฐ - [pgvector ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/vector-search/pgvector-setup.md): PostgreSQL pgvector ํ™•์žฅ ์„ค์น˜ ๋ฐ ์„ค์ •ํ•˜๊ธฐ - [๋ฒกํ„ฐ ๊ฒ€์ƒ‰](https://sonamu.cartanova.ai/ko/advanced-features/vector-search/vector-search.md): Sonamu Model์—์„œ pgvector ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰ ๊ตฌํ˜„ํ•˜๊ธฐ - [์—๋Ÿฌ ์ฒ˜๋ฆฌ](https://sonamu.cartanova.ai/ko/advanced-features/workflows/error-handling.md): Workflow ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ์žฌ์‹œ๋„ ์ „๋žต - [Step](https://sonamu.cartanova.ai/ko/advanced-features/workflows/steps.md): Workflow๋ฅผ Step์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ - [Worker ์„ค์ •](https://sonamu.cartanova.ai/ko/advanced-features/workflows/worker-setup.md): Workflow Worker ์„ค์ • ๋ฐ ์‹œ์ž‘ํ•˜๊ธฐ - [@workflow ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ](https://sonamu.cartanova.ai/ko/advanced-features/workflows/workflow-decorator.md): Workflow ์ •์˜ ๋ฐ ์‹คํ–‰ํ•˜๊ธฐ - [๋ณดํ˜ธ๋œ ๋ผ์šฐํŠธ](https://sonamu.cartanova.ai/ko/api-development/authentication/protected-routes.md): Guards๋กœ API ๊ถŒํ•œ ์ œ์–ดํ•˜๊ธฐ - [์„ธ์…˜ ๊ด€๋ฆฌ](https://sonamu.cartanova.ai/ko/api-development/authentication/session-management.md): ์„ธ์…˜๊ณผ ํ† ํฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ - [์ธ์ฆ ์„ค์ •ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/api-development/authentication/setup.md): Sonamu์—์„œ better-auth ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ ๊ตฌ์ถ•ํ•˜๊ธฐ - [์ปค์Šคํ…€ Context](https://sonamu.cartanova.ai/ko/api-development/context/custom-context.md): ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ Context ํ™•์žฅํ•˜๊ธฐ - [Context ๊ฐ€์ ธ์˜ค๊ธฐ](https://sonamu.cartanova.ai/ko/api-development/context/getting-context.md): Sonamu.getContext()๋กœ ์š”์ฒญ ์ปจํ…์ŠคํŠธ ์ ‘๊ทผํ•˜๊ธฐ - [SonamuContext](https://sonamu.cartanova.ai/ko/api-development/context/sonamu-context.md): ์š”์ฒญ ์ปจํ…์ŠคํŠธ ์ •๋ณด: request, reply, user - [@api ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ](https://sonamu.cartanova.ai/ko/api-development/creating-apis/api-decorator.md): ๋ฉ”์„œ๋“œ๋ฅผ API ์—”๋“œํฌ์ธํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ - [HTTP ๋ฉ”์„œ๋“œ](https://sonamu.cartanova.ai/ko/api-development/creating-apis/http-methods.md): GET, POST, PUT, DELETE ์ƒ์„ธ ๊ฐ€์ด๋“œ - [ํŒŒ๋ผ๋ฏธํ„ฐ](https://sonamu.cartanova.ai/ko/api-development/creating-apis/parameters.md): API ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์ •์˜ ๋ฐ ๊ฒ€์ฆ - [๋ฐ˜ํ™˜ ํƒ€์ž…](https://sonamu.cartanova.ai/ko/api-development/creating-apis/return-types.md): API ์‘๋‹ต ํƒ€์ž… ์ •์˜ํ•˜๊ธฐ - [ํŒŒ์ผ ์ €์žฅ](https://sonamu.cartanova.ai/ko/api-development/file-upload/saving-files.md): Storage Manager์™€ ๋‹ค์–‘ํ•œ ์Šคํ† ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„ - [ํŒŒ์ผ ์—…๋กœ๋“œ ์„ค์ •](https://sonamu.cartanova.ai/ko/api-development/file-upload/setup.md): @upload ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ Storage ์„ค์ • - [BufferedFile ํด๋ž˜์Šค](https://sonamu.cartanova.ai/ko/api-development/file-upload/uploaded-file-class.md): ํŒŒ์ผ ์ •๋ณด ์ ‘๊ทผ๊ณผ saveToDisk() ๋ฉ”์„œ๋“œ - [URL ์ƒ์„ฑ](https://sonamu.cartanova.ai/ko/api-development/file-upload/url-generation.md): Public URL๊ณผ Signed URL - [Frame ์ƒ์„ฑํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/api-development/frames/creating-frames.md): BaseFrameClass๋กœ ๋…๋ฆฝ์ ์ธ API ๋งŒ๋“ค๊ธฐ - [์‚ฌ์šฉ ์‚ฌ๋ก€](https://sonamu.cartanova.ai/ko/api-development/frames/use-cases.md): Frame์˜ ๋‹ค์–‘ํ•œ ํ™œ์šฉ ์˜ˆ์ œ - [Frame์ด๋ž€?](https://sonamu.cartanova.ai/ko/api-development/frames/what-are-frames.md): Entity ์—†์ด ๋…๋ฆฝ์ ์ธ API๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• - [์ž๋™ ๊ฒ€์ฆ](https://sonamu.cartanova.ai/ko/api-development/validation/automatic-validation.md): Zod๋ฅผ ํ™œ์šฉํ•œ ํƒ€์ž… ์•ˆ์ „ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ฆ - [์ปค์Šคํ…€ ๊ฒ€์ฆ](https://sonamu.cartanova.ai/ko/api-development/validation/custom-validation.md): ํ”„๋กœ์ ํŠธ๋ณ„ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„ํ•˜๊ธฐ - [์—๋Ÿฌ ์ฒ˜๋ฆฌ](https://sonamu.cartanova.ai/ko/api-development/validation/error-handling.md): SoException ๊ธฐ๋ฐ˜์˜ ์ผ๊ด€๋œ ์—๋Ÿฌ ์‘๋‹ต - [del](https://sonamu.cartanova.ai/ko/api-reference/base-model/del.md): ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ - [findById](https://sonamu.cartanova.ai/ko/api-reference/base-model/find-by-id.md): ID๋กœ ๋‹จ์ผ ๋ ˆ์ฝ”๋“œ ์กฐํšŒ - [findMany](https://sonamu.cartanova.ai/ko/api-reference/base-model/find-many.md): ๋ฆฌ์ŠคํŠธ ์กฐํšŒ ๋ฐ ํŽ˜์ด์ง€๋„ค์ด์…˜ - [getPuri](https://sonamu.cartanova.ai/ko/api-reference/base-model/get-puri.md): Puri ์ฟผ๋ฆฌ ๋นŒ๋” ๊ฐ€์ ธ์˜ค๊ธฐ - [save](https://sonamu.cartanova.ai/ko/api-reference/base-model/save.md): ๋ ˆ์ฝ”๋“œ ์ €์žฅ ๋ฐ ์ˆ˜์ • - [sonamuFilter](https://sonamu.cartanova.ai/ko/api-reference/base-model/sonamu-filter.md): ํƒ€์ž… ์•ˆ์ „ํ•œ ์—”ํ‹ฐํ‹ฐ ํ•„ํ„ฐ๋ง - [AuthContext](https://sonamu.cartanova.ai/ko/api-reference/context/auth-context.md): Sonamu ์ธ์ฆ ์ปจํ…์ŠคํŠธ ๋ ˆํผ๋Ÿฐ์Šค - [Context ๋ฉ”์„œ๋“œ](https://sonamu.cartanova.ai/ko/api-reference/context/methods.md): Context ์ ‘๊ทผ ๋ฉ”์„œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค - [Context](https://sonamu.cartanova.ai/ko/api-reference/context/sonamu-context.md): Sonamu API ์š”์ฒญ ์ปจํ…์ŠคํŠธ ๋ ˆํผ๋Ÿฐ์Šค - [@api](https://sonamu.cartanova.ai/ko/api-reference/decorators/api.md): API ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [@cache](https://sonamu.cartanova.ai/ko/api-reference/decorators/cache.md): ๋ฉ”์„œ๋“œ ๊ฒฐ๊ณผ ์บ์‹ฑ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [@stream](https://sonamu.cartanova.ai/ko/api-reference/decorators/stream.md): SSE ์ŠคํŠธ๋ฆฌ๋ฐ API ์ƒ์„ฑ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [@transactional](https://sonamu.cartanova.ai/ko/api-reference/decorators/transactional.md): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [@upload](https://sonamu.cartanova.ai/ko/api-reference/decorators/upload.md): ํŒŒ์ผ ์—…๋กœ๋“œ API ์ƒ์„ฑ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [@websocket](https://sonamu.cartanova.ai/ko/api-reference/decorators/websocket.md): ์–‘๋ฐฉํ–ฅ WebSocket ์ฑ„๋„ API ์ƒ์„ฑ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [@workflow](https://sonamu.cartanova.ai/ko/api-reference/decorators/workflow.md): ์›Œํฌํ”Œ๋กœ์šฐ ์ •์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ - [BadRequestException](https://sonamu.cartanova.ai/ko/api-reference/exceptions/bad-request-error.md): ์ž˜๋ชป๋œ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ 400 ์˜ˆ์™ธ - [์ปค์Šคํ…€ ์˜ˆ์™ธ](https://sonamu.cartanova.ai/ko/api-reference/exceptions/custom-errors.md): ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ์ปค์Šคํ…€ ์˜ˆ์™ธ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ - [SoException](https://sonamu.cartanova.ai/ko/api-reference/exceptions/sonamu-error.md): Sonamu ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ํด๋ž˜์Šค - [UnauthorizedException](https://sonamu.cartanova.ai/ko/api-reference/exceptions/unauthorized-error.md): ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ 401 ์˜ˆ์™ธ - [Advanced Methods](https://sonamu.cartanova.ai/ko/api-reference/puri-methods/advanced-methods.md): ๊ณ ๊ธ‰ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ - [join](https://sonamu.cartanova.ai/ko/api-reference/puri-methods/join.md): ํ…Œ์ด๋ธ” ์กฐ์ธํ•˜๊ธฐ - [limit & offset](https://sonamu.cartanova.ai/ko/api-reference/puri-methods/limit.md): ํŽ˜์ด์ง€๋„ค์ด์…˜๊ณผ ๊ฒฐ๊ณผ ์ œํ•œ - [orderBy](https://sonamu.cartanova.ai/ko/api-reference/puri-methods/order-by.md): ๊ฒฐ๊ณผ ์ •๋ ฌํ•˜๊ธฐ - [select](https://sonamu.cartanova.ai/ko/api-reference/puri-methods/select.md): SELECT ์ ˆ๋กœ ์กฐํšŒํ•  ํ•„๋“œ ์ง€์ • - [where](https://sonamu.cartanova.ai/ko/api-reference/puri-methods/where.md): WHERE ์ ˆ๋กœ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง - [API ํ‚ค ๊ด€๋ฆฌ](https://sonamu.cartanova.ai/ko/configuration/environment-variables/api-keys.md): ์™ธ๋ถ€ ์„œ๋น„์Šค API ํ‚ค ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ธฐ - [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ ์ •๋ณด](https://sonamu.cartanova.ai/ko/configuration/environment-variables/database-credentials.md): PostgreSQL ์—ฐ๊ฒฐ ์ •๋ณด ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ธฐ - [.env ์„ค์ •](https://sonamu.cartanova.ai/ko/configuration/environment-variables/env-setup.md): ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ - [์นดํ…Œ๊ณ ๋ฆฌ ๋กœ๊น…](https://sonamu.cartanova.ai/ko/configuration/logging/category-logging.md): ๋กœ๊ทธ ์นดํ…Œ๊ณ ๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ๊ณ„์ธต ๊ตฌ์กฐ - [Fastify ๋กœ๊น…](https://sonamu.cartanova.ai/ko/configuration/logging/fastify-logging.md): HTTP ์š”์ฒญ/์‘๋‹ต ๋กœ๊น… ์ปค์Šคํ„ฐ๋งˆ์ด์ง• - [LogTape ์„ค์ •](https://sonamu.cartanova.ai/ko/configuration/logging/logtape-setup.md): sonamu.config.ts์˜ logging ์˜ต์…˜ - [Sinks & Filters](https://sonamu.cartanova.ai/ko/configuration/logging/sinks-and-filters.md): ๋กœ๊ทธ ์ถœ๋ ฅ ๋Œ€์ƒ๊ณผ ํ•„ํ„ฐ๋ง ์„ค์ • - [์ธ์ฆ](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/auth.md): better-auth ๊ธฐ๋ฐ˜ ์ธ์ฆ ์„ค์ • - [์บ์‹œ (BentoCache)](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/cache.md): BentoCache ๊ธฐ๋ฐ˜ ์บ์‹ฑ ์„ค์ • - [Cache-Control](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/cache-control.md): HTTP Cache-Control ํ—ค๋” ์„ค์ • - [์••์ถ•](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/compress.md): HTTP ์‘๋‹ต ์••์ถ• ์„ค์ • - [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/database.md): PostgreSQL ์—ฐ๊ฒฐ ๋ฐ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • - [ํ”„๋กœ์ ํŠธ ์„ค์ •](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/project-settings.md): projectName, api, i18n ์„ค์ •ํ•˜๊ธฐ - [์„œ๋ฒ„](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/server.md): Fastify ์„œ๋ฒ„ ๊ธฐ๋ณธ ์„ค์ • ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ - [์Šคํ† ๋ฆฌ์ง€](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/storage.md): ํŒŒ์ผ ์ €์žฅ์†Œ ๋“œ๋ผ์ด๋ฒ„ ์„ค์ • - [๋™๊ธฐํ™” ๋Œ€์ƒ](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/sync-targets.md): ํ”„๋ก ํŠธ์—”๋“œ์™€ ํƒ€์ž…/Service ๋™๊ธฐํ™” ์„ค์ • - [Task](https://sonamu.cartanova.ai/ko/configuration/sonamu-config/tasks.md): Workflow ๋ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์„ค์ • - [Path Mapping](https://sonamu.cartanova.ai/ko/configuration/typescript/path-mappings.md): ๋ชจ๋“ˆ ๊ฒฝ๋กœ ๋ณ„์นญ ์„ค์ •ํ•˜๊ธฐ - [tsconfig.json](https://sonamu.cartanova.ai/ko/configuration/typescript/tsconfig.md): TypeScript ์„ค์ •ํ•˜๊ธฐ - [ํƒ€์ž… ์ฒดํฌ](https://sonamu.cartanova.ai/ko/configuration/typescript/type-checking.md): ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ ์„ค์ •ํ•˜๊ธฐ - [์ƒ์„ฑ๋œ ์ฝ”๋“œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•](https://sonamu.cartanova.ai/ko/core-concepts/auto-generation/customizing-generated-code.md): ์ž๋™ ์ƒ์„ฑ๋œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ• - [Syncer](https://sonamu.cartanova.ai/ko/core-concepts/auto-generation/syncer.md): ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” Sonamu์˜ ํ•ต์‹ฌ ์‹œ์Šคํ…œ - [์ž๋™ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ](https://sonamu.cartanova.ai/ko/core-concepts/auto-generation/what-gets-generated.md): Sonamu๊ฐ€ Entity ์ •์˜๋กœ๋ถ€ํ„ฐ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ํŒŒ์ผ ๋ชฉ๋ก - [ํŒŒ์ผ ์žฌ์ƒ์„ฑ ์‹œ์ ](https://sonamu.cartanova.ai/ko/core-concepts/auto-generation/when-files-regenerate.md): ์–ด๋–ค ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์–ด๋–ค ํŒŒ์ผ์ด ์žฌ์ƒ์„ฑ๋˜๋Š”์ง€ ์™„๋ฒฝ ๊ฐ€์ด๋“œ - [Entity ์ •์˜ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/core-concepts/entity/defining-entities.md): entity.json ๊ตฌ์กฐ์™€ Entity ์ •์˜ ๋ฐฉ๋ฒ• - [Enums](https://sonamu.cartanova.ai/ko/core-concepts/entity/enums.md): Enum ํƒ€์ž… ์ •์˜ํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ - [Field Types](https://sonamu.cartanova.ai/ko/core-concepts/entity/field-types.md): Entity์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ•„๋“œ ํƒ€์ž…๊ณผ ์˜ต์…˜ - [Relations](https://sonamu.cartanova.ai/ko/core-concepts/entity/relations.md): Entity ๊ฐ„ ๊ด€๊ณ„ ์ •์˜ํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ - [Sonamu UI ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/core-concepts/entity/using-sonamu-ui.md): Sonamu UI์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ๊ณผ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ๋ฒ• - [Sonamu ๋™์ž‘ ์›๋ฆฌ](https://sonamu.cartanova.ai/ko/core-concepts/how-sonamu-works.md): Sonamu์˜ ์ „์ฒด ์•„ํ‚คํ…์ฒ˜์™€ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ดํ•ดํ•˜๊ธฐ - [@api Decorator](https://sonamu.cartanova.ai/ko/core-concepts/model/api-decorator.md): HTTP API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” @api ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ™œ์šฉ๋ฒ• - [BaseModel Methods](https://sonamu.cartanova.ai/ko/core-concepts/model/basemodel-methods.md): BaseModelClass๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ์™€ ์‚ฌ์šฉ๋ฒ• - [Business Logic](https://sonamu.cartanova.ai/ko/core-concepts/model/business-logic.md): Model์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋Š” ํŒจํ„ด๊ณผ ์˜ˆ์ œ - [Model ์ƒ์„ฑํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/core-concepts/model/creating-models.md): Sonamu Model ํŒŒ์ผ ์ƒ์„ฑ๊ณผ Scaffold ์‚ฌ์šฉ ๋ฐฉ๋ฒ• - [Model์ด๋ž€?](https://sonamu.cartanova.ai/ko/core-concepts/model/what-is-model.md): Sonamu Model์˜ ์—ญํ• ๊ณผ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ - [E2E Type Safety](https://sonamu.cartanova.ai/ko/core-concepts/type-system/e2e-type-safety.md): ํด๋ผ์ด์–ธํŠธ๋ถ€ํ„ฐ ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊นŒ์ง€ ์™„๋ฒฝํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ - [Entity Types](https://sonamu.cartanova.ai/ko/core-concepts/type-system/entity-types.md): Entity ์ •์˜๋กœ๋ถ€ํ„ฐ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” TypeScript ํƒ€์ž… ์‹œ์Šคํ…œ - [Generated Types](https://sonamu.cartanova.ai/ko/core-concepts/type-system/generated-types.md): Sonamu๊ฐ€ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ํƒ€์ž…๋“ค์˜ ์ข…๋ฅ˜์™€ ํ™œ์šฉ๋ฒ• - [Zod Validation](https://sonamu.cartanova.ai/ko/core-concepts/type-system/zod-validation.md): Zod๋ฅผ ํ™œ์šฉํ•œ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๊ฐ€์ด๋“œ - [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/database/migrations/creating-migrations.md): Sonamu UI์—์„œ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ - [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋™์ž‘ ์›๋ฆฌ](https://sonamu.cartanova.ai/ko/database/migrations/how-migrations-work.md): Sonamu์˜ ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ ์ดํ•ดํ•˜๊ธฐ - [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต](https://sonamu.cartanova.ai/ko/database/migrations/migration-strategies.md): ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ• - [ํ”„๋กœ๋•์…˜ ์Šน์ธ](https://sonamu.cartanova.ai/ko/database/migrations/production-approval.md): Slack์„ ํ†ตํ•œ ํ”„๋กœ๋•์…˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šน์ธ ํ”„๋กœ์„ธ์Šค - [๋กค๋ฐฑํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/database/migrations/rolling-back.md): migrate rollback์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋˜๋Œ๋ฆฌ๊ธฐ - [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/database/migrations/running-migrations.md): pnpm sonamu migrate๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ์šฉํ•˜๊ธฐ - [๊ณ ๊ธ‰ ํŒจํ„ด](https://sonamu.cartanova.ai/ko/database/puri/advanced-patterns.md): ํŠธ๋žœ์žญ์…˜, ์„œ๋ธŒ์ฟผ๋ฆฌ, ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ - [์ง‘๊ณ„ ํ•จ์ˆ˜](https://sonamu.cartanova.ai/ko/database/puri/aggregations.md): COUNT, SUM, AVG ๋“ฑ ์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ - [๊ธฐ๋ณธ ์ฟผ๋ฆฌ](https://sonamu.cartanova.ai/ko/database/puri/basic-queries.md): Puri์˜ ๊ธฐ๋ณธ์ ์ธ CRUD ์ฟผ๋ฆฌ ์‚ฌ์šฉ๋ฒ• - [์กฐ์ธ](https://sonamu.cartanova.ai/ko/database/puri/joins.md): Puri๋กœ ํ…Œ์ด๋ธ” ์กฐ์ธํ•˜๊ธฐ - [Raw Queries](https://sonamu.cartanova.ai/ko/database/puri/raw-queries.md): SQL ํ‘œํ˜„์‹๊ณผ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ - [ํƒ€์ž… ์•ˆ์ „์„ฑ](https://sonamu.cartanova.ai/ko/database/puri/type-safety.md): Puri์˜ ์™„๋ฒฝํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ ์ดํ•ดํ•˜๊ธฐ - [Subset ์ •์˜ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/database/subsets/defining-subsets.md): Entity์—์„œ Subset ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ - [์ค‘์ฒฉ ๊ด€๊ณ„](https://sonamu.cartanova.ai/ko/database/subsets/nested-relations.md): LoaderQuery๋กœ 1:N, N:M ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ - [Subset ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/database/subsets/using-subsets.md): Model์—์„œ Subset ํ™œ์šฉํ•˜๊ธฐ - [Subset์ด๋ž€?](https://sonamu.cartanova.ai/ko/database/subsets/what-are-subsets.md): ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์œ„ํ•œ Subset ์‹œ์Šคํ…œ - [๋ชจ๋ฒ” ์‚ฌ๋ก€](https://sonamu.cartanova.ai/ko/database/transactions/best-practices.md): ํŠธ๋žœ์žญ์…˜์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• - [์ˆ˜๋™ ํŠธ๋žœ์žญ์…˜](https://sonamu.cartanova.ai/ko/database/transactions/manual-transactions.md): getPuri().transaction()์œผ๋กœ ์ง์ ‘ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌํ•˜๊ธฐ - [@transactional ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ](https://sonamu.cartanova.ai/ko/database/transactions/transactional-decorator.md): ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๊ฐ์‹ธ๊ธฐ - [๊ณ ๊ธ‰ ํŒจํ„ด](https://sonamu.cartanova.ai/ko/database/upsert-builder/advanced-patterns.md): ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ํŠน์ˆ˜ ์ผ€์ด์Šค ์ฒ˜๋ฆฌํ•˜๊ธฐ - [๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•](https://sonamu.cartanova.ai/ko/database/upsert-builder/basic-usage.md): UpsertBuilder๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ - [๋ฐฐ์น˜ ์ž‘์—…](https://sonamu.cartanova.ai/ko/database/upsert-builder/batch-operations.md): ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ - [๊ด€๊ณ„ ๋ฐ์ดํ„ฐ](https://sonamu.cartanova.ai/ko/database/upsert-builder/relations.md): UBRef๋กœ ๋ณต์žกํ•œ ๊ด€๊ณ„ ์ฒ˜๋ฆฌํ•˜๊ธฐ - [API ๊ฐœ๋ฐœ](https://sonamu.cartanova.ai/ko/faq/api.md): API ๊ฐœ๋ฐœ๊ณผ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ด€๋ จ ์งˆ๋ฌธ - [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค](https://sonamu.cartanova.ai/ko/faq/database.md): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ฟผ๋ฆฌ ๊ด€๋ จ ์งˆ๋ฌธ - [๋ฐฐํฌ](https://sonamu.cartanova.ai/ko/faq/deployment.md): ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์™€ ์šด์˜์— ๊ด€ํ•œ ์งˆ๋ฌธ - [Entity์™€ Model](https://sonamu.cartanova.ai/ko/faq/entity-and-model.md): Entity์™€ Model ์ •์˜์— ๊ด€ํ•œ ์งˆ๋ฌธ - [์ผ๋ฐ˜ ์งˆ๋ฌธ](https://sonamu.cartanova.ai/ko/faq/general.md): Sonamu ์‚ฌ์šฉ์— ๊ด€ํ•œ ์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ - [ํ…Œ์ŠคํŒ…](https://sonamu.cartanova.ai/ko/faq/testing.md): ํ…Œ์ŠคํŠธ ์ž‘์„ฑ๊ณผ ์‹คํ–‰์— ๊ด€ํ•œ ์งˆ๋ฌธ - [useListParams](https://sonamu.cartanova.ai/ko/frontend-integration/core-hooks/use-list-params.md): URL ๊ธฐ๋ฐ˜ ๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง๊ณผ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ด€๋ฆฌ - [useSelection](https://sonamu.cartanova.ai/ko/frontend-integration/core-hooks/use-selection.md): ํ…Œ์ด๋ธ” ๋‹ค์ค‘ ์„ ํƒ ๋ฐ ๋ฒŒํฌ ์ž‘์—… ๊ด€๋ฆฌ - [Service ๋™์ž‘ ์›๋ฆฌ](https://sonamu.cartanova.ai/ko/frontend-integration/generated-services/how-services-work.md): ์ž๋™ ์ƒ์„ฑ ํด๋ผ์ด์–ธํŠธ์˜ ์ž‘๋™ ๋ฐฉ์‹ - [TanStack Query Hook](https://sonamu.cartanova.ai/ko/frontend-integration/generated-services/tanstack-query.md): Sonamu Service์™€ TanStack Query ํ†ตํ•ฉ - [useSSEStream](https://sonamu.cartanova.ai/ko/frontend-integration/generated-services/useSSEStream.md): Server-Sent Events ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ - [Service ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/frontend-integration/generated-services/using-services.md): ์ž๋™ ์ƒ์„ฑ๋œ Service๋กœ API ํ˜ธ์ถœํ•˜๊ธฐ - [ํ”„๋ก ํŠธ์—”๋“œ ์„ค์ •](https://sonamu.cartanova.ai/ko/frontend-integration/getting-started/setup.md): SonamuProvider๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์ดˆ๊ธฐ ์„ค์ •ํ•˜๊ธฐ - [์ž๋™ ์ƒ์„ฑ ์ปดํฌ๋„ŒํŠธ ๊ฐœ์š”](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/auto-generated-overview.md): Entity ์ •์˜์—์„œ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ปดํฌ๋„ŒํŠธ๋“ค - [์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/custom-components.md): Sonamu ์ปดํฌ๋„ŒํŠธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ธฐ - [ID Async Select](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/id-async-select.md): ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋น„๋™๊ธฐ ์…€๋ ‰ํŠธ ์ปดํฌ๋„ŒํŠธ - [OrderBySelect](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/order-by-select.md): ์ •๋ ฌ ์˜ต์…˜ ์„ ํƒ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ๋ฒ• - [View Scaffolding](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/scaffolding-views.md): CRUD ๋ทฐ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ - [๊ฒ€์ƒ‰ ์ปดํฌ๋„ŒํŠธ](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/search-components.md): SearchFieldSelect + Input์œผ๋กœ ๋™์  ๊ฒ€์ƒ‰ ๊ตฌํ˜„ํ•˜๊ธฐ - [Search Input](https://sonamu.cartanova.ai/ko/frontend-integration/react-components/search-input.md): ๊ฒ€์ƒ‰ ์ž๋™์™„์„ฑ ์ปดํฌ๋„ŒํŠธ - [์บ์‹œ ์ œ์–ด](https://sonamu.cartanova.ai/ko/frontend-integration/ssr/cache-control.md): TanStack Query ์บ์‹ฑ๊ณผ SSR Cache-Control ์„ค์ • - [Hydration ์ „๋žต](https://sonamu.cartanova.ai/ko/frontend-integration/ssr/hydration-strategies.md): TanStack Query Hydration์œผ๋กœ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ - [๋ฐ์ดํ„ฐ ํ”„๋ฆฌ๋กœ๋”ฉ](https://sonamu.cartanova.ai/ko/frontend-integration/ssr/preloading-data.md): registerSSR๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•˜๊ธฐ - [SSR ์„ค์ •](https://sonamu.cartanova.ai/ko/frontend-integration/ssr/ssr-setup.md): Sonamu์˜ TanStack Router + Vite SSR ๊ตฌ์„ฑ - [API ํƒ€์ž… ์ถ”๋ก ](https://sonamu.cartanova.ai/ko/frontend-integration/type-safety/api-type-inference.md): ๋ฐฑ์—”๋“œ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ๋กœ ์™„์ „ํ•œ ํƒ€์ž… ์ถ”๋ก  - [์ปดํŒŒ์ผ ํƒ€์ž„ ์—๋Ÿฌ](https://sonamu.cartanova.ai/ko/frontend-integration/type-safety/compile-time-errors.md): API ๋ณ€๊ฒฝ์„ ์ฆ‰์‹œ ๊ฐ์ง€ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐฉ์ง€ - [๊ณต์œ  ํƒ€์ž…](https://sonamu.cartanova.ai/ko/frontend-integration/type-safety/shared-types.md): services.generated.ts์˜ ํƒ€์ž… ๊ตฌ์กฐ - [๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ](https://sonamu.cartanova.ai/ko/getting-started/development-workflow.md): Sonamu์˜ ์ „์ฒด ๊ฐœ๋ฐœ ์‚ฌ์ดํด ์ดํ•ดํ•˜๊ธฐ - [์ฒซ ์—”ํ‹ฐํ‹ฐ ๋งŒ๋“ค๊ธฐ](https://sonamu.cartanova.ai/ko/getting-started/first-entity.md): Sonamu UI๋กœ ์ฒซ ๋ฒˆ์งธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  API ๋งŒ๋“ค๊ธฐ - [์„ค์น˜ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/getting-started/installation.md): Sonamu ์„ค์น˜ ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • - [Sonamu ์†Œ๊ฐœ](https://sonamu.cartanova.ai/ko/getting-started/introduction.md): TypeScript์˜ ๊ฐ•์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ - [ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ](https://sonamu.cartanova.ai/ko/getting-started/project-structure.md): Sonamu ํ”„๋กœ์ ํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ์ฃผ์š” ํŒŒ์ผ - [๋น ๋ฅธ ์‹œ์ž‘](https://sonamu.cartanova.ai/ko/getting-started/quick-start.md): ์ฒซ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ - pnpm create sonamu - [Seamless DX](https://sonamu.cartanova.ai/ko/getting-started/seamless-dx.md): ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์—†๋Š” ๊ฐœ๋ฐœ, ์‹œ๊ฐ์  Entity ๊ด€๋ฆฌ, ์ž๋™ ์ฝ”๋“œ ๋™๊ธฐํ™” - [Fixture ์ƒ์„ฑํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/testing/fixtures/creating-fixtures.md): fixture.ts๋กœ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ •์˜ํ•˜๊ธฐ - [Fixture ๋กœ๋”ฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/testing/fixtures/loading-fixtures.md): ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฅผ Fixture DB๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ - [Fixture ๋™๊ธฐํ™”](https://sonamu.cartanova.ai/ko/testing/fixtures/syncing-fixtures.md): Fixture DB๋ฅผ Test DB๋กœ ๋ณต์‚ฌํ•˜๊ธฐ - [ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค](https://sonamu.cartanova.ai/ko/testing/fixtures/test-database.md): ๊ฒฉ๋ฆฌ๋œ ํ…Œ์ŠคํŠธ DB ์„ค์ •ํ•˜๊ธฐ - [API Mocking](https://sonamu.cartanova.ai/ko/testing/mocking/api-mocking.md): ์™ธ๋ถ€ ์˜์กด์„ฑ ๋ชจํ‚นํ•˜๊ธฐ - [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Mocking](https://sonamu.cartanova.ai/ko/testing/mocking/database-mocking.md): ํŠธ๋žœ์žญ์…˜์œผ๋กœ DB ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌํ•˜๊ธฐ - [runWithMockContext](https://sonamu.cartanova.ai/ko/testing/mocking/run-with-mock-context.md): Mock Context๋กœ ํ…Œ์ŠคํŠธ ์‹คํ–‰ํ•˜๊ธฐ - [ํ…Œ์ŠคํŠธ ๋””๋ฒ„๊น…](https://sonamu.cartanova.ai/ko/testing/naite/debugging-tests.md): ์ฝœ์Šคํƒ ์ถ”์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋””๋ฒ„๊น…ํ•˜๊ธฐ - [Naite Viewer](https://sonamu.cartanova.ai/ko/testing/naite/naite-viewer.md): VSCode Extension์œผ๋กœ ํ…Œ์ŠคํŠธ ๋กœ๊ทธ ์‹œ๊ฐํ™”ํ•˜๊ธฐ - [๋กœ๊ทธ ์กฐํšŒํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/testing/naite/querying-logs.md): Naite.get()์œผ๋กœ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌํ•˜๊ธฐ - [๋กœ๊ทธ ๊ธฐ๋กํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/testing/naite/recording-logs.md): Naite.t()๋กœ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ถ”์ ํ•˜๊ธฐ - [Naite๋ž€?](https://sonamu.cartanova.ai/ko/testing/naite/what-is-naite.md): ํ…Œ์ŠคํŠธ ๋กœ๊น… ๋ฐ ๋””๋ฒ„๊น… ์‹œ์Šคํ…œ - [ํ…Œ์ŠคํŠธ Scaffolding](https://sonamu.cartanova.ai/ko/testing/writing-tests/scaffolding-tests.md): model.test.ts ์ž๋™ ์ƒ์„ฑํ•˜๊ธฐ - [ํ…Œ์ŠคํŠธ ํ—ฌํผ](https://sonamu.cartanova.ai/ko/testing/writing-tests/test-helpers.md): Fixture ์‹œ์Šคํ…œ๊ณผ ํ…Œ์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ - [ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ](https://sonamu.cartanova.ai/ko/testing/writing-tests/test-structure.md): Vitest ๊ธฐ๋ฐ˜ Sonamu ํ…Œ์ŠคํŠธ ์‹œ์Šคํ…œ - [Boundaries](https://sonamu.cartanova.ai/ko/tools-and-cli/hmr/boundaries.md): HMR Boundary ๊ฐœ๋…๊ณผ ์‹ค์ „ ํ™œ์šฉ๋ฒ• - [HMR ๋™์ž‘ ์›๋ฆฌ](https://sonamu.cartanova.ai/ko/tools-and-cli/hmr/how-hmr-works.md): Sonamu์˜ Hot Module Replacement ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ - [๋ฌธ์ œ ํ•ด๊ฒฐ](https://sonamu.cartanova.ai/ko/tools-and-cli/hmr/troubleshooting.md): HMR ๊ด€๋ จ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ - [build](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/build.md): ํ”„๋กœ๋•์…˜ ๋นŒ๋“œํ•˜๊ธฐ - [cone](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/cone.md): AI๋ฅผ ํ™œ์šฉํ•œ cone ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ - [dev](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/dev.md): HMR ์ง€์› ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘ํ•˜๊ธฐ - [fixture](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/fixture.md): ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌํ•˜๊ธฐ - [migrate](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/migrate.md): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ด€๋ฆฌํ•˜๊ธฐ - [scaffold](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/scaffold.md): Entity ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑํ•˜๊ธฐ - [stub](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/stub.md): ๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ฝ”๋“œ ์Šคํ… ์ƒ์„ฑํ•˜๊ธฐ - [test](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-cli/test.md): dev ์„œ๋ฒ„์—์„œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ํ•˜๊ธฐ - [Entity ๊ด€๋ฆฌ](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-ui/entity-management.md): Entity ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œํ•˜๊ธฐ - [์‹œ์ž‘ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-ui/getting-started.md): Sonamu UI ์‹คํ–‰ ๋ฐ ์ ‘์†ํ•˜๊ธฐ - [Migration ํƒญ](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-ui/migration-tab.md): ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•˜๊ธฐ - [Scaffolding ํƒญ](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-ui/scaffolding-tab.md): ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑํ•˜๊ธฐ - [Subset ๊ด€๋ฆฌ](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-ui/subset-management.md): Entity Subset ์ •์˜ ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ - [ํŒ๊ณผ ์š”๋ น](https://sonamu.cartanova.ai/ko/tools-and-cli/sonamu-ui/tips-and-tricks.md): Sonamu UI๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• - [์ฃผ์š” ๊ธฐ๋Šฅ๋“ค](https://sonamu.cartanova.ai/ko/tools-and-cli/vscode-extension/features.md): Sonamu VS Code Extension์˜ ์ฃผ์š” ๊ธฐ๋Šฅ - [์„ค์น˜ํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/tools-and-cli/vscode-extension/installation.md): Sonamu VS Code Extension ์„ค์น˜ ๋ฐฉ๋ฒ• - [๋‹จ์ถ•ํ‚ค & ๋ช…๋ น์–ด](https://sonamu.cartanova.ai/ko/tools-and-cli/vscode-extension/shortcuts.md): Sonamu Extension์˜ ๋‹จ์ถ•ํ‚ค ๋ฐ ๋ช…๋ น์–ด - [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ](https://sonamu.cartanova.ai/ko/troubleshooting/common-errors/database-connection.md): DB ์—ฐ๊ฒฐ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ - [HMR ๋ฌธ์ œ](https://sonamu.cartanova.ai/ko/troubleshooting/common-errors/hmr-issues.md): HMR ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ - [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์˜ค๋ฅ˜](https://sonamu.cartanova.ai/ko/troubleshooting/common-errors/migration-errors.md): ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ - [pnpm Workspace ์˜์กด์„ฑ ๋ฌธ์ œ](https://sonamu.cartanova.ai/ko/troubleshooting/common-errors/pnpm-workspace.md): pnpm workspace ํ™˜๊ฒฝ์—์„œ์˜ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฌธ์ œ - [ํฌํŠธ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘](https://sonamu.cartanova.ai/ko/troubleshooting/common-errors/port-in-use.md): ํฌํŠธ ์ถฉ๋Œ ํ•ด๊ฒฐํ•˜๊ธฐ - [ํƒ€์ž… ์˜ค๋ฅ˜](https://sonamu.cartanova.ai/ko/troubleshooting/common-errors/type-errors.md): ํƒ€์ž… ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ - [์ฝ˜์†” ๋กœ๊น…](https://sonamu.cartanova.ai/ko/troubleshooting/debugging/console-logging.md): ๋กœ๊ทธ๋กœ ๋””๋ฒ„๊น…ํ•˜๊ธฐ - [์†Œ์Šค ๋งต](https://sonamu.cartanova.ai/ko/troubleshooting/debugging/source-maps.md): ์†Œ์Šค ๋งต ์‚ฌ์šฉํ•˜๊ธฐ - [Naite ์‚ฌ์šฉํ•˜๊ธฐ](https://sonamu.cartanova.ai/ko/troubleshooting/debugging/using-naite.md): Naite๋กœ ๋””๋ฒ„๊น…ํ•˜๊ธฐ - [Vitest ๋””๋ฒ„๊ทธ](https://sonamu.cartanova.ai/ko/troubleshooting/debugging/vitest-debug.md): ํ…Œ์ŠคํŠธ ๋””๋ฒ„๊น…ํ•˜๊ธฐ - [์บ์‹ฑ ์ „๋žต](https://sonamu.cartanova.ai/ko/troubleshooting/performance/caching-strategies.md): ์บ์‹ฑ์œผ๋กœ ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ - [N+1 ๋ฌธ์ œ](https://sonamu.cartanova.ai/ko/troubleshooting/performance/n-plus-one-problems.md): N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ - [์ฟผ๋ฆฌ ์ตœ์ ํ™”](https://sonamu.cartanova.ai/ko/troubleshooting/performance/query-optimization.md): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”ํ•˜๊ธฐ ## OpenAPI Specs - [openapi](https://sonamu.cartanova.ai/api-reference/openapi.json)