Skip to content

donghyuck/studio-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

586 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Studio One Platform

release license

๋ชจ๋“ˆํ™”๋œ Spring Boot ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ํ”Œ๋žซํผ. ์ธ์ฆ/์ธ๊ฐ€, ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ๊ด€๋ฆฌ, ํŒŒ์ผยท์ฒจ๋ถ€ ๊ด€๋ฆฌ, ํ…œํ”Œ๋ฆฟ, ๋ฉ”์ผ, ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•, AI ์ž„๋ฒ ๋”ฉ/RAG ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์™€ ์Šคํƒ€ํ„ฐ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

  1. JDK 17๊ณผ Gradle ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•œ๋‹ค.
  2. ํ•„์š”ํ•œ secret์„ ์…ธ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” ๋กœ์ปฌ ์ „์šฉ ~/.gradle/gradle.properties์— ๋„ฃ๋Š”๋‹ค.
  3. ๋ฃจํŠธ์—์„œ ./gradlew clean build๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ํ•„์š”ํ•œ starter๋งŒ ์„ ํƒํ•ด ์˜์กด์„ฑ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์ตœ์†Œ ํ™•์ธ์šฉ ๋ช…๋ น:

./gradlew clean build

ํ•„์ˆ˜ secret ์˜ˆ์‹œ๋Š” .env.example์—์„œ ํ™•์ธํ•œ๋‹ค.

๊ธฐ์ˆ  ๊ธฐ์ค€

  • Java toolchain / source compatibility: 17
  • Spring Boot: 3.5.9
  • Spring Dependency Management Plugin: 1.1.7
  • Build: Gradle Wrapper

๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ตฌ์„ฑ

starter/                         # Spring Boot ์Šคํƒ€ํ„ฐ ๋ชจ์Œ (์ž๋™ ๊ตฌ์„ฑ)
studio-application-modules/      # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ (attachment, avatar, embedding pipeline, template, mail)
studio-platform/                 # ์ฝ”์–ด ํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
studio-platform-objecttype/      # objectType ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ/์ •์ฑ…/๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ ๊ตฌํ˜„
studio-platform-ai/              # AI/RAG ๊ณตํ†ต ๊ณ„์•ฝ๊ณผ ํฌํŠธ
studio-platform-chunking/        # RAG indexing์šฉ chunking ๊ณ„์•ฝ
studio-platform-autoconfigure/   # ๊ณตํ†ต ์ž๋™ ๊ตฌ์„ฑ
studio-platform-data/            # ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณตํ†ต
studio-platform-identity/        # ์ธ์ฆ/์‹๋ณ„ ์ถ”์ƒํ™”(๊ณ„์•ฝ)
studio-platform-security(+acl)/  # ๋ณด์•ˆ + ACL
studio-platform-realtime/        # ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ(์›น์†Œ์ผ“ ๋“ฑ) ๊ณตํ†ต
studio-platform-storage/         # ์˜ค๋ธŒ์ ํŠธ ์Šคํ† ๋ฆฌ์ง€ ๊ณตํ†ต
studio-platform-user/            # ์‚ฌ์šฉ์ž/๊ทธ๋ฃน/์—ญํ• /ํšŒ์‚ฌ ๋„๋ฉ”์ธ (๊ณ„์•ฝ)
studio-platform-user-default/    # ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ๊ตฌํ˜„ (์—”ํ„ฐํ‹ฐ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ/์„œ๋น„์Šค/์ปจํŠธ๋กค๋Ÿฌ)

์ฃผ์š” ๋ชจ๋“ˆ

  • studio-platform: ๊ณตํ†ต ์›น/์˜ˆ์™ธ/๋„๋ฉ”์ธ ๊ณ„์•ฝ
  • studio-platform-security, studio-platform-security-acl: ์ธ์ฆ/์ธ๊ฐ€, JWT, ACL
  • studio-platform-user, studio-platform-user-default: ์‚ฌ์šฉ์ž ๊ณ„์•ฝ๊ณผ ๊ธฐ๋ณธ ๊ตฌํ˜„
  • studio-platform-data, studio-platform-objecttype, studio-platform-realtime: ๋ฐ์ดํ„ฐ, objectType, ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ ๊ณตํ†ต
  • studio-platform-ai, studio-platform-chunking, studio-platform-storage, studio-platform-identity: AI/RAG ๊ณ„์•ฝ, chunking ๊ณ„์•ฝ, ์ €์žฅ์†Œ, ์‹๋ณ„ ๊ณตํ†ต
  • studio-application-modules/*: attachment, avatar, embedding pipeline, template, mail

์„ธ๋ถ€ ์„ค์ •, ์—”๋“œํฌ์ธํŠธ, ํ™•์žฅ ํฌ์ธํŠธ๋Š” ๊ฐ ๋ชจ๋“ˆ README๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

์Šคํƒ€ํ„ฐ

๊ฐ ๊ธฐ๋Šฅ์€ ๋Œ€์‘๋˜๋Š” ์Šคํƒ€ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™ ๊ตฌ์„ฑ๋œ๋‹ค. ์š”์•ฝ์€ starter/README.md ์ฐธ๊ณ . ์˜ˆ์‹œ:

dependencies {
    implementation(project(":starter:studio-platform-starter"))          // ํ”Œ๋žซํผ ๊ธฐ๋ณธ
    implementation(project(":starter:studio-platform-starter-security")) // ๋ณด์•ˆ
    implementation(project(":starter:studio-platform-starter-user"))     // ์‚ฌ์šฉ์ž
    implementation(project(":starter:studio-platform-starter-objecttype")) // objectType
    implementation(project(":starter:studio-application-starter-attachment")) // ์ฒจ๋ถ€
}

๋Œ€ํ‘œ์ ์ธ ์„ ํƒ ๊ธฐ์ค€:

  • ๊ณตํ†ต ์›น/๋ฐ์ดํ„ฐ/JPA ๊ธฐ๋ฐ˜์€ :starter:studio-platform-starter
  • ์ธ์ฆ/์ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋ฉด :starter:studio-platform-starter-security
  • ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ๊ตฌํ˜„๊นŒ์ง€ ํ•„์š”ํ•˜๋ฉด :starter:studio-platform-starter-user์™€ :studio-platform-user-default
  • objectType ์ •์ฑ…/๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋ฉด :starter:studio-platform-starter-objecttype
  • STOMP/WebSocket ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์ด ํ•„์š”ํ•˜๋ฉด :starter:studio-platform-starter-realtime
  • ์ฒจ๋ถ€/์•„๋ฐ”ํƒ€/ํ…œํ”Œ๋ฆฟ/๋ฉ”์ผ ๊ฐ™์€ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ์€ ๊ฐ application starter๋ฅผ ์ถ”๊ฐ€
  • RAG indexing์šฉ chunking ์ „๋žต์ด ํ•„์š”ํ•˜๋ฉด :starter:studio-platform-starter-chunking

๋Œ€ํ‘œ ์กฐํ•ฉ ์˜ˆ์‹œ:

// ๊ธฐ๋ณธ ์ธ์ฆ ์•ฑ
implementation(project(":starter:studio-platform-starter"))
implementation(project(":starter:studio-platform-starter-security"))
implementation(project(":starter:studio-platform-starter-user"))
implementation(project(":studio-platform-user-default"))

// ์ฒจ๋ถ€ + AI ์ž„๋ฒ ๋”ฉ ์•ฑ
implementation(project(":starter:studio-application-starter-attachment"))
implementation(project(":studio-application-modules:content-embedding-pipeline"))
implementation(project(":starter:studio-platform-starter-chunking"))
implementation(project(":starter:studio-platform-starter-ai"))
implementation("org.springframework.ai:spring-ai-starter-model-openai")

// ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์•ฑ
implementation(project(":starter:studio-platform-starter-realtime"))
implementation("org.springframework.boot:spring-boot-starter-data-redis")

// ํ…œํ”Œ๋ฆฟ + ๋ฉ”์ผ ์•ฑ
implementation(project(":starter:studio-application-starter-template"))
implementation(project(":starter:studio-application-starter-mail"))

AI ์Šคํƒ€ํ„ฐ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

studio-platform-starter-ai๋Š” provider ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ compileOnly๋กœ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์†Œ๋น„ ์•ฑ์—์„œ ํ•„์š”ํ•œ provider๋ฅผ ์ง์ ‘ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค. Spring AI BOM์€ api(platform(...))์œผ๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ๋ณ„๋„ BOM ์„ ์–ธ ์—†์ด ์ผ๊ด€๋œ Spring AI ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// OpenAI ์‚ฌ์šฉ ์˜ˆ์‹œ
implementation(project(":starter:studio-platform-starter-ai"))
implementation("org.springframework.ai:spring-ai-starter-model-openai")

// Google GenAI ์‚ฌ์šฉ ์˜ˆ์‹œ
implementation(project(":starter:studio-platform-starter-ai"))
implementation("org.springframework.ai:spring-ai-google-genai")

// Ollama ์‚ฌ์šฉ ์˜ˆ์‹œ
implementation(project(":starter:studio-platform-starter-ai"))
implementation("org.springframework.ai:spring-ai-ollama")

๋ชจ๋“ˆ ์˜์กด ๋ฐฉํ–ฅ

์˜์กด์„ฑ์€ ์•„๋ž˜ ๋ฐฉํ–ฅ์„ ๊ถŒ์žฅํ•œ๋‹ค. (์ˆœํ™˜ ์˜์กด ๊ธˆ์ง€)

studio-platform
  โ†’ studio-platform-objecttype
  โ†’ studio-platform-data

studio-platform
  โ†’ studio-platform-security
  โ†’ studio-platform-security-acl

studio-platform
  โ†’ studio-platform-user
  โ†’ studio-platform-user-default

studio-platform
  โ†’ studio-platform-ai

studio-platform
  โ†’ studio-platform-realtime
  โ†’ studio-platform-storage

starter
  โ†’ platform modules
  โ†’ application modules

application modules
  โ†’ platform modules

์‚ฌ์šฉ ์š”์•ฝ

  • ์Šคํƒ€ํ„ฐ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ํ™œ์„ฑํ™”ํ•œ๋‹ค.
  • ์„ธ๋ถ€ ์›น/API ๊ทœ์น™์€ studio-platform/WEB_API_DEVELOPMENT_GUIDE.md๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
  • ACL ์™ธ๋ถ€ ์—ฐ๋™์€ studio.one.platform.security.acl.AclPermissionService ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์˜์กดํ•œ๋‹ค.

๋นŒ๋“œ

./gradlew clean build

๋ชจ๋“ˆ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ฐฐํฌ๋˜๋ฉฐ, ์Šคํƒ€ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด ์‹คํ–‰ํ•œ๋‹ค.

๋กœ์ปฌ์— Gradle์ด ์„ค์น˜๋˜์–ด ์žˆ๊ณ  wrapper ํŒŒ์ผ์„ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

gradle wrapper

๊ฐœ๋ณ„ ๋ชจ๋“ˆ๋งŒ ํ™•์ธํ•  ๋•Œ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

./gradlew :studio-platform:build
./gradlew :studio-application-modules:attachment-service:test

๋กœ์ปฌ Nexus ๋ฐฐํฌ

๊ฐœ๋ฐœ ์ค‘ ๋กœ์ปฌ Nexus์— ๋ฐฐํฌํ•  ๋•Œ๋Š” gradle.properties๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ๋ง๊ณ  ๋กœ์ปฌ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ .env.local์„ ์ฝ์œผ๋ฉฐ, ์ด๋ฏธ ์…ธ์— ์„ค์ •๋œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค.

NEXUS_USERNAME=...
NEXUS_PASSWORD=...
scripts/publish-local-nexus.sh

ํŠน์ • ๋ชจ๋“ˆ๋งŒ ๋ฐฐํฌํ•  ๋•Œ๋Š” Gradle task๋ฅผ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•œ๋‹ค.

scripts/publish-local-nexus.sh :studio-platform-user:publish

๋กœ์ปฌ Nexus์— ๊ฐ™์€ ๋ฒ„์ „์ด ์ด๋ฏธ ์˜ฌ๋ผ๊ฐ€ ์žˆ์–ด ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ๋ฐฐํฌํ•ด์•ผ ํ•  ๋•Œ๋Š” --delete-existing์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์˜ต์…˜๋งŒ ์ง€์ •ํ•˜๋ฉด settings์— ํฌํ•จ๋œ ์ „์ฒด ๋ชจ๋“ˆ์„ ํ™•์ธํ•˜๊ณ , ๊ธฐ์กด component๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ญ์ œํ•œ ๋’ค ๊ธฐ๋ณธ publish๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

scripts/publish-local-nexus.sh --delete-existing

ํŠน์ • ๋ชจ๋“ˆ๋งŒ ์‚ญ์ œ ํ›„ ์žฌ๋ฐฐํฌํ•  ๋•Œ๋Š” ๋Œ€์ƒ ๋ชจ๋“ˆ์„ ๋ช…์‹œํ•œ๋‹ค.

scripts/publish-local-nexus.sh --delete-existing --module :studio-platform-user

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ http://localhost:8081/repository/maven-releases/์™€ http://localhost:8081/repository/maven-snapshots/๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, repository URL๊ณผ nexus.allowInsecure=true ๊ฐ’์„ Gradle project property๋กœ ์ „๋‹ฌํ•œ๋‹ค. ๋กœ์ปฌ Nexus base URL์ด ๋‹ค๋ฅด๋ฉด NEXUS_URL ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ env ํŒŒ์ผ์„ ์“ฐ๋ ค๋ฉด --env-file <path>๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

๋ณด์•ˆ ์„ค์ •

  • secret์€ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” ~/.gradle/gradle.properties ๋กœ๋งŒ ์ฃผ์ž…ํ•œ๋‹ค.
  • ์ƒ˜ํ”Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ชฉ๋ก์€ .env.example, ์ƒ์„ธ ์šด์˜ ๊ทœ์น™๊ณผ ํšŒ์ „ ์ ˆ์ฐจ๋Š” SECURITY.md๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

์ž์ฃผ ํ•„์š”ํ•œ ๊ฐ’:

  • STUDIO_JWT_SECRET
  • JASYPT_ENCRYPTOR_PASSWORD
  • JASYPT_HTTP_TOKEN
  • OPENAI_API_KEY
  • NEXUS_USERNAME, NEXUS_PASSWORD
ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ จ ๊ธฐ๋Šฅ/์Šคํƒ€ํ„ฐ ๋ฏธ์„ค์ • ์‹œ ๋™์ž‘
STUDIO_JWT_SECRET studio-platform-starter-security JWT ํ™œ์„ฑํ™” ์‹œ ๊ธฐ๋™ ์‹คํŒจ
JASYPT_ENCRYPTOR_PASSWORD studio-platform-starter-jasypt ์•”ํ˜ธํ™” ํ”„๋กœํผํ‹ฐ ๋ณตํ˜ธํ™” ์‹คํŒจ
JASYPT_HTTP_TOKEN studio-platform-starter-jasypt ๋‚ด๋ถ€ Jasypt HTTP ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ
OPENAI_API_KEY studio-platform-starter-ai + OpenAI provider OpenAI provider ํ™œ์„ฑํ™” ์‹œ ๊ธฐ๋™ ์‹คํŒจ
GOOGLE_API_KEY ๋˜๋Š” GOOGLE_AI_API_KEY studio-platform-starter-ai + Google GenAI provider Google provider ํ™œ์„ฑํ™” ์‹œ ๊ธฐ๋™ ์‹คํŒจ
NEXUS_USERNAME, NEXUS_PASSWORD, NEXUS_URL scripts/publish-local-nexus.sh ๋กœ์ปฌ Nexus ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํŒจ

๊ธฐ๋ณธ ์„ค์ • ์˜ˆ์‹œ

studio:
  persistence:
    type: jpa            # jpa|jdbc
  features:
    attachment:
      enabled: true
      web:
        enabled: true
        base-path: /api/mgmt/attachments
      storage:
        type: filesystem # filesystem|database
        cache-enabled: false
    avatar-image:
      enabled: true
    user:
      enabled: true
      web:
        enabled: true
    security-acl:
      enabled: true
      cache-name: aclCache
      admin-role: ROLE_ADMIN
      use-spring-acl: false
      metrics-enabled: true
      audit-enabled: true
  ai:
    enabled: true
    default-provider: openai   # ํ•„์ˆ˜ โ€” ๋ฏธ์„ค์ • ์‹œ ๊ธฐ๋™ ์‹คํŒจ
    providers:
      openai:
        type: OPENAI
        chat:
          enabled: true
        embedding:
          enabled: true
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o-mini
      embedding:
        options:
          model: text-embedding-3-small

ํ•„์š” ์—†๋Š” ๊ธฐ๋Šฅ์€ enabled=false ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ , ๊ฒฝ๋กœ๋‚˜ ์ €์žฅ์†Œ ํƒ€์ž…์€ studio.features.<feature>.* ์†์„ฑ์œผ๋กœ ์กฐ์ •ํ•œ๋‹ค.

๋ฌธ์„œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

  • ์Šคํƒ€ํ„ฐ ์š”์•ฝ: starter/README.md
  • AI ํด๋ผ์ด์–ธํŠธ ์ˆ˜์ • ๊ฐ€์ด๋“œ: docs/dev/ai-client-update-guide.md
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“ˆ ๊ฐ€์ด๋“œ: studio-application-modules/README.md
  • ์‚ฌ์šฉ์ž ๊ณ„์•ฝ: studio-platform-user/README.md
  • ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ๊ตฌํ˜„: studio-platform-user-default/README.md
  • ๋ณ€๊ฒฝ ์ด๋ ฅ: CHANGELOG.md (2.x ๋ผ์ธ๋ถ€ํ„ฐ ์ƒˆ ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ฆฌ)
  • ๋ณด์•ˆ ์šด์˜ ๊ทœ์น™: SECURITY.md
  • ํ”Œ๋žซํผ ์›น ๊ทœ์น™: studio-platform/WEB_API_DEVELOPMENT_GUIDE.md
  • ์„ค์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ€์ด๋“œ: CONFIGURATION_NAMESPACE_GUIDE.md

ํฌํ•จ ๋ชจ๋“ˆ

  • ํ”Œ๋žซํผ ๊ณตํ†ต: studio-platform, studio-platform-data, studio-platform-autoconfigure, studio-platform-identity
  • ๋ณด์•ˆ: studio-platform-security, studio-platform-security-acl
  • ์‚ฌ์šฉ์ž: studio-platform-user, studio-platform-user-default
  • ๋ถ€๊ฐ€๊ธฐ๋Šฅ: studio-platform-objecttype, studio-platform-realtime, studio-platform-storage, studio-platform-ai
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“ˆ: attachment-service, avatar-service, content-embedding-pipeline, template-service, mail-service

Packages

 
 
 

Contributors