íì ìì í ìì ë€ížìí¬ì íì ì ìž ê°ë 곌 ê°ë ¥í íì ìì€í 구íìŽ ì ìžê³ 컀뮀ëí° íë«íŒì 볎ì, ìì ì± ë° ì¬ì©ì 겜íì ìŽë»ê² í¥ììí¬ ì ìëì§ í구í©ëë€.
íì ìì í ìì ë€ížìí¬: ë³µìë ¥ ìë 컀뮀ëí° íë«íŒ 구ì¶
ì ì ë ìíž ì°ê²°ëë ëì§íž ìžììì ìì ë€ížìí¬ë ìšëŒìž 컀뮀ëí°ì ì€ì¶ë¥Œ íì±í©ëë€. ì ìžê³ì ìž í¬ëŒìì íì êŽì¬ 귞룹ì ìŽë¥Žêž°ê¹ì§ ìŽë¬í íë«íŒì 컀뮀ëìŒìŽì , íì ë° ììŽëìŽ ê³µì 륌 ìŽì§í©ëë€. ê·žë¬ë ë§ì ìì ë€ížìí¬ì êžìí ë°ì 곌 ë°©ëí ê·ëªšë ì¢ ì¢ ë°ìŽí° ë¬Žê²°ì± ì ì§, ê°ë ¥í 볎ì ë³Žì¥ ë° ìŒêŽëê² ìì ì ìž ì¬ì©ì 겜í ì ê³µì ìŽë €ìì ìŽëí©ëë€. ë°ë¡ ì¬êž°ì íì ìì í ìì ë€ížìí¬ëŒë ê°ë ìŽ ê°ë ¥í íšë¬ë€ì ì íìŒë¡ ë±ì¥íë©°, ë³Žë€ ë³µìë ¥ ìê³ ì 뢰í ì ìë 컀뮀ëí° íë«íŒ 구ì¶ì ìœìí©ëë€.
ìŽ ëžë¡ê·ž ê²ì묌ììë 컀뮀ëí° íë«íŒ ëŽìì íì ìì ìì¹ì 구ííë ë³µì¡ì±ì ê¹ìŽ í구í©ëë€. ìŽ ë§¥ëœìì "íì ìì "ìŽ ë¬Žìì ì믞íëì§, ê·žê²ìŽ ì ê³µíë ìŽì , êŽë š êž°ì ì ì ê·Œ ë°©ì ë° ì ìžê³ ìì 믞ëìŽ í겜ì ëí ì ì¬ì ìž ë¯žë ìí¥ì ëíŽ ìŽíŽë³Œ ê²ì ëë€.
ìì ë€ížìí¬ììì íì ìì ìŽíŽ
íµì¬ì ìŒë¡ íì ìì ì íì ì€ë¥ë¥Œ ë°©ì§íê±°ë ìííë íë¡ê·žëë° êµ¬ë¬žì ì믞í©ëë€. íì ì€ë¥ë í íì ì ê°ìŽ ë€ë¥ž íì ì ê°ìŽ ììëë ê³³ìì ì¬ì©ë ë ë°ìí©ëë€. ì íµì ìž ëì íì ìžìŽììë ìŽë¬í ì€ë¥ê° ë°íììë§ ëíë ììì¹ ëª»í ì¶©ëìŽë ì못ë ëìì ìŽëí ì ììµëë€.
ìì ë€ížìí¬ ë° ì»€ë®€ëí° íë«íŒì ì ì©ë ë íì ìì ì ëšìí ìœë ì€íì ëìŽìëë€. ìŽë íë«íŒ ëŽìì êµíëë ë°ìŽí°ì 구조 ë° ê²ìŠìŒë¡ íì¥ë©ëë€. íì ìì í ìì ë€ížìí¬ë ë€ìì 볎ì¥í©ëë€.
- ë°ìŽí° 묎결ì±: êµíëë ì 볎ë 믞늬 ì ìë 구조ì ì ìœ ì¡°ê±Žì ë°ë¥Žë¯ë¡ ìììŽë ì못ë íŽìì ë°©ì§í©ëë€.
- ììž¡ ê°ë¥í ëì: ë°ìŽí°ì ëí ìì ì ì ì ìëìŽ ììŽ ë³Žë€ ìì ì ìŽê³ ììž¡ ê°ë¥í íë«íŒ êž°ë¥ì ì ê³µí©ëë€.
- í¥ìë 볎ì: ë°ìŽí° íì 곌 구조륌 ê°ì íšìŒë¡ìš íì ìì ì 죌ì 공격ìŽë ì못ë ì ë ¥ìŒë¡ ìží ë°ìŽí° ì ì¶ê³Œ ê°ì ìŒë°ì ìž ì·šìœì ì ë°©ì§íë ë° ëììŽ ë ì ììµëë€.
- í¥ìë ê°ë°ì 겜í: ëª ííê² ì ìë íì ì 묞ìí ìí ì íë©° ì¬ë°ë¥ž ì¬ì©ì ê°ì íì¬ ê°ë°ìê° êž°ë¥ì 구ì¶íê³ ì ì§ êŽëЬíêž° ìœê² ë§ëëë€.
- ê°ë ¥í ì¬ì©ì 겜í: ìŒêŽëê³ ììž¡ ê°ë¥í ë°ìŽí° ì²ëЬë ì€ë¥ë¥Œ ì€ìŽê³ ìµì¢ ì¬ì©ììê² ë³Žë€ ìíí 겜íì ì ê³µí©ëë€.
ê°ëší ìë¡ ì¬ì©ì íë¡íì ìê°íŽ ë³Žìžì. íì ìì í ìì€í ììë 'username', 'email', 'age', 'profile_picture_url'곌 ê°ì íëê° ëª ìì ìž íì (ì: 묞ììŽ, ìŽë©ìŒ íì 묞ììŽ, ì ì, URL 묞ììŽ)ì ê°ê² ë©ëë€. ì못ë ìŽë©ìŒ íììŽë ì«ìê° ìë ëìŽë¡ íë¡í ì ë°ìŽížë¥Œ ê²ìíë €ë ìëë ëì€ì íŽë¹ ë°ìŽí°ê° ì²ëЬë ë ì€ë¥ë¥Œ ì ë°íꞰ볎ë€ë ì¡°êž°ì ê°ì§ëìŽ ê±°ë¶ë©ëë€.
íë 컀뮀ëí° íë«íŒìì íì ìì ì íìì±
íë ìì ë€ížìí¬ê° ì§ë©Ží 곌ì ë ë€ë©Žì ìŽë©° ì ìžê³ì ìž ê·ëªšì ëë€.
- ê·ëªš ë° ë³µì¡ì±: Facebook, Twitter(í X), Reddit곌 ê°ì íë«íŒì ìììµ ëª ì ì¬ì©ì ë° ë°©ëí ìì ë°ìŽí°ë¥Œ êŽëЬí©ëë€. ìŽë¬í ê±°ëí ìžíëŒ ì ë°ì ê±žì³ ìŒêŽì±ê³Œ ì íì±ì ì ì§íë ê²ì ìì²ë ìì ì ëë€.
- 볎ì ìí: ìì ë€ížìí¬ë ì¬ì ì ìŽë, ì ì ëë ë°©íŽë¥Œ ìíŽ ì·šìœì ì ì ì©íë €ë ì ìì ìž íììë€ì 죌ì íì ì ëë€. íì ìì ì êž°ìŽì ìž ë°©ìŽ ê³ìžµ ìí ì í ì ììµëë€.
- ë°ìŽí° ìíž ìŽì©ì±: ë¶ì° ë° ì°í© ìì 믞ëìŽ ìŽëì í°ëž(ì: Mastodonìì ì¬ì©íë ActivityPub)ì ë¶ììŒë¡ ìžíŽ ìë¡ ë€ë¥ž íë«íŒ ê°ì ë°ìŽí°ë¥Œ êµííê³ ìŽíŽí ì ìëë¡ íë €ë©Ž ë°ìŽí° íìì ëí ì격í ì€ìê° íìí©ëë€.
- ì§ííë êž°ë¥: íë«íŒìŽ ìë¡ìŽ êž°ë¥ì ëì íšì ë°ëŒ ë²ê·žë 볎ì ê²°íšì ëì í ìíìŽ ìŠê°í©ëë€. íì ìì ì ìŽë¬í ë³µì¡ì±ì êŽëЬíêž° ìí íë ììí¬ë¥Œ ì ê³µí©ëë€.
- ê·ì ì€ì: ë°ìŽí° ê°ìž ì 볎 볎íž(GDPR, CCPA ë±)ì ëí ì ìžê³ ê·ì ì ì¬ì©ì ë°ìŽí°ë¥Œ ꌌꌌíê² ì²ëЬíŽìŒ í©ëë€. íì ìì ìì€í ì ë°ìŽí° ì¬ì© ë° ì¡ìžì€ë¥Œ ì격íê² ì ìíì¬ ê·ì ì€ì륌 ì§ìí ì ììµëë€.
íì ì ìž íì¬ í겜ì ì¢ ì¢ ë°íì ê²ì¬ ë° êŽë²ìí í ì€ížì ì졎íì¬ íì êŽë š 묞ì 륌 íì í©ëë€. ìŽ ì ê·Œ ë°©ìì ì€ë¥ê° ë°ìíêž° ìœê³ 늬ìì€ ì§ìœì ìŒ ì ììŒë©° í¹í ëê·ëªšììë ëì± ê·žë ìµëë€. íì ìì 구íì ê°ë° ìëª ì£Œêž° ìŽêž°ì ëë ë°ìŽí° ì ì¶ ìì ì ìŽë¬í ì€ë¥ë¥Œ íì íë ê²ì 목íë¡ í©ëë€.
íì ìì 구íì ìí êž°ì ì ì ê·Œ ë°©ì
컀뮀ëí° íë«íŒìì íì ìì ì ë¬ì±íë ê²ì ë€ìí ìí€í ì² ë° êž°ì ì íì íµíŽ ì ê·Œí ì ììµëë€. ì¬êž°ìë ì¢ ì¢ ì ì íì íë¡ê·žëë° ìžìŽ, ê°ë ¥í ì€í€ë§ ì ì ë° ê²ìŠ ë©ì»€ëìŠì ì¡°í©ìŽ í¬íšë©ëë€.
1. ì ì íì íë¡ê·žëë° ìžìŽ
TypeScript, Java, Go, Rustì ê°ì ìžìŽë ê°ë ¥í ì ì íì ì ì ê³µí©ëë€. ìŽë¬í ìžìŽë¥Œ ë°±ìë ìë¹ì€ ë° íë¡ ížìë ê°ë°ì ì¬ì©í멎 ë§ì íì ì€ë¥ë¥Œ ë°íììŽ ìë 컎íìŒ ì€ì í¬ì°©í ì ììµëë€.
- TypeScript: íë¡ ížìë ê°ë°(ì: React, Angular, Vue.js)ìì êŽë²ìíê² ì¬ì©ëë TypeScriptë JavaScriptì ì ì íì ì ì¶ê°í©ëë€. ìŽë¥Œ íµíŽ ê°ë°ìë API ìëµ, 컎í¬ëíž props ë° ì í늬ìŒìŽì ìíì ëí ìží°íìŽì€ì íì ì ì ìíì¬ ë°íì ì€ë¥ë¥Œ í¬ê² ì€ìŒ ì ììµëë€. ë°±ìëì Ruby on Rails륌 ì¬ì©íë Mastodon곌 ê°ì íë«íŒì ê²œì° íë¡ ížìë TypeScriptë ì¬ì©ì ìží°íìŽì€ ë° APIìì ìíž ìì©ì ëí íì ìì ì ì€ìí ê³ìžµì ì ê³µí©ëë€.
- Go (Golang): ì±ë¥ê³Œ ëìì±ìŒë¡ ìë €ì§ Goì ì ì íì ì ìì ë€ížìí¬ ìžíëŒë¥Œ ì§ìíë íì¥ ê°ë¥í ë§ìŽí¬ë¡ìë¹ì€ 구ì¶ì ì í©í©ëë€. ëŽì¥ íì ìì€í ì ìë¹ì€ ê°ì ì ë¬ëë ë°ìŽí°ê° ìŒêŽëëë¡ ë³Žì¥íë ë° ëììŽ ë©ëë€.
- Rust: ë©ëªšëЬ ìì ì±ê³Œ ì±ë¥ì ì€ì ì ë Rustë ìžìŠ ìë¹ì€ ëë ë°ìŽí° ì²ëЬ íìŽíëŒìžê³Œ ê°ìŽ ìì ì±ìŽ ì€ìí ì€ì ë°±ìë êµ¬ì± ìì륌 구ì¶íë ë° íìí ì íì ëë€.
2. ì€í€ë§ ì ì ìžìŽ(SDL) ë° API
ë°ìŽí°ë¥Œ ì ìíê³ êµííë ë°©ìì ì€ìí©ëë€. SDLì ë°ìŽí° 구조륌 ì€ëª íë íì€íë ë°©ë²ì ì ê³µíì¬ ìë ê²ìŠ ë° ìœë ìì±ì ê°ë¥íê² í©ëë€.
- GraphQL: GraphQLì ì€í€ë§ ì ì ìžìŽë 볞ì§ì ìŒë¡ íì ìì í©ëë€. GraphQL ì€í€ë§ë 몚ë ê°ë¥í ë°ìŽí° íì , íë ë° ìì (쿌늬, ë³ìŽ, 구ë )ì ì ìí©ëë€. íŽëŒìŽìžížê° ë°ìŽí°ë¥Œ ìì²í ë ìë²ë ì€í€ë§ì ëíŽ ìì²ì ê²ìŠíì¬ ì íší ë°ìŽí°ë§ ë°íëëë¡ ë³Žì¥í ì ììµëë€. ìŽë ììì¹ ëª»í ë°ìŽí° 구조륌 ë°ì ê°ë¥ì±ì í¬ê² ì€ì ëë€. ìœí ìž ì§ê³ ëë ì€ìê° ì ë°ìŽížë¥Œ ìí ì¬ì©ì ì§ì API륌 구ì¶íë íë«íŒì ê²œì° GraphQLì ë°ìŽí° ê³ìœì ê°ì íë ê°ë ¥í ë°©ë²ì ì ê³µí©ëë€. ìë¡ ë€ë¥ž ìžì€íŽì€ê° ì¬ì©ì ê²ì묌ì êµííŽìŒ íë ì°í© ìì ë€ížìí¬ë¥Œ ììíŽ ë³Žìžì. ì ì ìë GraphQL ì€í€ë§ë í ìžì€íŽì€ì ê²ìë¬ŒìŽ ë€ë¥ž ìžì€íŽì€ì ìíŽ ì¬ë°ë¥Žê² ìŽíŽëëë¡ ë³Žì¥í©ëë€.
- Protocol Buffers (Protobuf) & Apache Avro: ìŽë¬í ê²ë€ì ë°ìŽí° ì§ë ¬í ë° ìë¹ì€ ê° íµì ì ë늬 ì¬ì©ë©ëë€. ìŽë¥Œ íµíŽ ê°ë°ìë ì€í€ë§ íìŒìì ë°ìŽí° 구조륌 ì ìí ì ììŒë©°, ìŽë ë°ìŽí°ë¥Œ ìžìœë© ë° ëìœë©íêž° ìí ìœë륌 ìì±íë ë° ì¬ì©ë ì ììµëë€. ìŽë¥Œ íµíŽ ë§ìŽí¬ë¡ìë¹ì€ ê°ì êµíëë ë°ìŽí°ê° ìëí 구조ì íì ì ì ì§íëë¡ ë³Žì¥í©ëë€. ì륌 ë€ìŽ, íë«íŒìŽ ë©ìì§ íì Kafka륌 ì¬ì©íë ê²œì° Protobuf륌 ì¬ì©íì¬ ëªšë ë©ìì§ê° í¹ì íì ìì íìì ì€ìíëë¡ ë³Žì¥í ì ììµëë€.
3. ë°ìŽí°ë² ìŽì€ ì€í€ë§ ì€ê³ ë° ê²ìŠ
ê°ë ¥í ì í늬ìŒìŽì ìì€ íì ìì€í ì ì¬ì©íëëŒë ë°ìŽí°ë² ìŽì€ ê³ìžµì ë°ìŽí° ë¶ìŒì¹ì ìŒë°ì ìž ìì€ì ëë€. ê°ë ¥í íì ì ë°ìŽí°ë² ìŽì€ ì€í€ë§ì ë°ìŽí° ì구 ê³ìžµììì ê°ë ¥í ê²ìŠì íì©íë ê²ìŽ ì€ìí©ëë€.
- SQL ë°ìŽí°ë² ìŽì€: ìµì SQL ë°ìŽí°ë² ìŽì€(PostgreSQL, MySQL)ë í ìŽëž ìŽì ëí ê°ë ¥í íìŽí(`INT`, `VARCHAR`, `BOOLEAN`, `TIMESTAMP` ë±)ì ì ê³µí©ëë€. ìŽë¬í íì ì ê°ì íê³ ì ìœ ì¡°ê±Ž(ì: `NOT NULL`, `UNIQUE`, ìžë í€)ì ì¬ì©í멎 ë°ìŽí° 묎결ì±ìŽ í¬ê² í¥ìë©ëë€. ì륌 ë€ìŽ, 'posts' í ìŽëžì 'user_id' ìŽìŽ íì ì ììŽê³ 'users' í ìŽëžì ì°žì¡°íë ìžë í€ìì 볎ì¥í멎 ì°ê²°ëì§ ìì ê²ì묌ì ë°©ì§íê³ ì íší êŽê³ë¥Œ 볎ì¥í©ëë€.
- NoSQL ë°ìŽí°ë² ìŽì€: ì¢ ì¢ ì€í€ë§ê° ìë ê²ìŒë¡ ìžìëì§ë§ ë§ì NoSQL ë°ìŽí°ë² ìŽì€ë ì€í€ë§ ê²ìŠ(ì: MongoDBì JSON ì€í€ë§ ê²ìŠ)ì ì§ìí©ëë€. ìŽë¥Œ íµíŽ ì ì°í ì€í€ë§ììë íì ìì ì ìì€ì ì ê³µíë ìì ë°ìŽí° 구조 ë° íì ì ì ìí ì ììµëë€. ì ì°í íŒë ìì€í ì 구ì¶íë íë«íŒì MongoDBì ê²ìŠì ì¬ì©íì¬ ê° íŒë í목ì ìµìí 'id', 'timestamp', 'type' íëì ì¬ë°ë¥ž ë°ìŽí° íì ìŽ ìëì§ íìží ì ììµëë€.
4. ë°íì ê²ìŠ ë° ìŽì€ì
ì ì íì ì ì€ë¥ë¥Œ ì¡°êž°ì íì íë ê²ì 목íë¡ íì§ë§, í¹í ìžë¶ ë°ìŽí° ìì€ ëë ë³µì¡í ë¹ìŠëì€ ë¡ì§ì ë€ë£° ëë ë°íì ê²ìŠìŽ ì¬ì í ì€ìí©ëë€.
- ìë² ìž¡ ê²ìŠ: ì¬ì©ì ëë ìžë¶ ìë¹ì€ì 몚ë ë€ìŽì€ë ë°ìŽí°ë ì²ëЬëê±°ë ì ì¥ëêž° ì ì ììëë íì ë° íìì ëíŽ ì격íê² ê²ìŠëìŽìŒ í©ëë€. `Joi`(Node.jsì©)ì ê°ì ëŒìŽëžë¬ëЬ ëë íë ììí¬ì ëŽì¥ ê²ìŠ ë©ì»€ëìŠì ì¬ì©í ì ììµëë€.
- íŽëŒìŽìžíž ìž¡ ê²ìŠ: 볎ì ì¡°ì¹ë ìëì§ë§(íŽëŒìŽìžíž ìž¡ ìœëë ì¡°ìë ì ììŒë¯ë¡) íŽëŒìŽìžíž ìž¡ ê²ìŠì ì ë ¥ ì€ë¥ì ëí ìŠê°ì ìž íŒëë°±ì ì ê³µíì¬ ì¬ì©ì 겜íì í¥ììíµëë€. ìŽë JavaScript륌 ì¬ì©íì¬ ì¢ ì¢ íë¡ ížìë íë ììí¬ ë° íŽë¹ íì ì ìì íšê» 구íí ì ììµëë€.
- ìŽì€ì : ë³µì¡í ìê³ ëŠ¬ìŠ ëë ìœëì ì€ì ë¶ë¶ììë ìŽì€ì ì ì¬ì©íì¬ ëŽë¶ ìí ë° ë°ìŽí° ê°ì ìŽ ì¬ë°ë¥Žê² ì ì§ëëì§ íìžíê³ ê°ë° ë° í ì€íž ì€ì ë ŒëŠ¬ì ì€ë¥ë¥Œ í¬ì°©í ì ììµëë€.
ë¶ì° ë° ì°í© ìì ë€ížìí¬ììì íì ìì
íì ìì ì ìì¹ì ë¶ì° ë° ì°í© ìì ë€ížìí¬ì ë§¥ëœìì í¹í ìí¥ë ¥ìŽ í¬ë©°, ì¬êž°ì ë 늜ì ìž ê°ì²Ž ê°ì ìíž ìŽì©ì± ë° ì ë¢°ê° ê°ì¥ ì€ìí©ëë€.
- ActivityPub: Mastodon, Pleroma, Friendicaìì ì¬ì©íë ìŽ W3C íì€ì ë°ìŽí° êµíì JSON-LD륌 ì¬ì©í©ëë€. JSON ì첎ë ì격íê² íì ìŽ ì§ì ëì§ë ìì§ë§ ActivityPubì í¹ì ê°ì²Ž íì (ì: `Note`, `Person`, `Follow`)곌 ì ìë ìì± ë° ìì ë°ìŽí° íì ì ì ìí©ëë€. ìŽë¬í ì¬ìì ì€ìí멎 ë€ë¥ž ìë²ê° ìœí ìž ë¥Œ ì¬ë°ë¥Žê² íŽìíê³ ì²ëЬí ì ììŽ ìíí ì°í© 겜íì 볎ì¥í ì ììµëë€. ActivityPub íŽëŒìŽìžíž ëë ìë²ì íì ìì 구íì ActivityPub ì€í€ë§ì ëíŽ ë€ìŽì€ë íëì ê²ìŠíì¬ ì¬ë°ë¥Žê² ì²ëЬëëë¡ í©ëë€.
- ëžë¡ì²Žìž ë° ì€ë§íž ê³ìœ: ëžë¡ì²Žìž êž°ì ì êž°ë°ìŒë¡ 구ì¶ë íë«íŒì ì¢ ì¢ ì€ë§íž ê³ìœì íì©í©ëë€. ì€ë§íž ê³ìœì ìŒë°ì ìŒë¡ Solidity(Ethereumì©)ì ê°ì ìžìŽë¡ ìì±ëë©° 볞ì§ì ìŒë¡ íì ìì í©ëë€. Solidityë ë³ì, íšì ìžì ë° ë°í ê°ì ëíŽ ì격í íìŽíì ê°ì í©ëë€. ìŽë ììì¹ ëª»í ëìì ë°©ì§íê³ ê³ìœì ìžìœë©ë ë ŒëŠ¬ê° ìëí ëë¡ ì ííê² ì€íëëë¡ ë³Žì¥íë©°, ìŽë ë¶ì° ë€ížìí¬ìì ì¬ì©ì ë°ìŽí°, ID ëë 컀뮀ëí° ê±°ë²ëì€ë¥Œ êŽëЬíë ë° ì€ìí©ëë€. ë¶ì° ìì íë«íŒì ê²œì° ìœí ìž ì€ì¬ë¥Œ êŽëЬíë ì€ë§íž ê³ìœì í¬íê° 'ì ì' íì ìŽìŽìŒ íê³ ê°ì€ì¹ê° 'float' íì ìŽìŽìŒ íšì ì§ì íì¬ ì¡°ìì ë°©ì§í ì ììµëë€.
- ìíž ìŽì©ì± íë¡í ìœ: ë ë§ì ë¶ì° ìì ê·žëí íë¡í ìœìŽ ë±ì¥íšì ë°ëŒ íì ìŽ íìžë 구조íë ë°ìŽí°ë¥Œ êµíí ì ìë ë¥ë ¥ì ì±ê³µì ì€ìí ê²ì ëë€. ìŽë¥Œ íµíŽ ì¬ì©ìë ì€ìí ì 볎륌 ìì§ ìê³ ìë¡ ë€ë¥ž ìë¹ì€ ê°ì IDì ìì ì°ê²°ì ìŽëí ì ììµëë€.
ì€ì ì¬ë¡ ë° ì¬ì© ì¬ë¡
íì ìì ìŽ ë€ìí 컀뮀ëí° íë«íŒ 잡멎ìì ìŽë»ê² ëíë ì ìëì§ ìŽíŽë³Žê² ìµëë€.
1. ì¬ì©ì ìžìŠ ë° ê¶í ë¶ì¬
곌ì : ë¬Žëš ì¡ìžì€ë¥Œ ë°©ì§íê³ ì¬ì©ìê° íê°ë ìì ë§ ìííëë¡ ë³Žì¥í©ëë€.
íì ìì 구í:
- ìžìŠì ìíŽ ê°ë ¥í íì ì í í°(ì: ì ìë íìŽë¡ë 구조륌 ê°ì¶ JWT)ì ì¬ì©í©ëë€.
- ì¡ìžì€ë¥Œ ê²°ì íë ë° ìŽë¬í íì ì ìëœíë íšì륌 ì¬ì©íì¬ ëª ìì ìž ìí ë° ê¶íì ë³ëì íì ìŒë¡ ì ìí©ëë€.
- ê¶í ë¶ì¬ ìë¹ì€ì ìíž ìì©í ë ì¬ì©ì ID, ìí ë° ê¶í íëê·žê° íì ì¬ë°ë¥ž ë°ìŽí° íì (ì: IDë ì ì, ìí ì í¹ì ìŽê±°í)ìì 볎ì¥í©ëë€.
êžë¡ë² ìí¥: ì§ëЬì ìì ë° ê·ì ì€ì ì구 ì¬í ì ë°ì ê±žì³ ì¬ì©ì ì¡ìžì€ë¥Œ ìì íê² êŽëЬíë ê²ìŽ ë êŽëЬ ê°ë¥íŽì§ëë€.
2. ìœí ìž ê²ì ë° ì€ì¬
곌ì : ë€ìí ìœí ìž ì í(í ì€íž, ìŽë¯žì§, ë¹ëì€)ì ì²ëЬíê³ ì€ì¬ íë¡ìžì€ê° ê³µì íê³ ìŒêŽëëë¡ ë³Žì¥í©ëë€.
íì ìì 구í:
- ê°ê° í¹ì íë(ì: `TextPost`ë `content: string`, `ImagePost`ë `imageUrl: string`, `caption: string`)륌 ê°ë ë€ìí ìœí ìž í목ì ëí ë³ëì íì ì ì(ì: `TextPost`, `ImagePost`, `VideoPost`)
- ì€ì¬ ìíì ëí ìŽê±°í íì ì¬ì©(`PENDING`, `APPROVED`, `REJECTED`, `UNDER_REVIEW`).
- ì€ì¬ ìì ìŽ êž°ë¡ë ë 'action_type'ìŽ ì íší ìŽê±°í ê°ìŽê³ 'post_id'ê° ì ììì 볎ì¥í©ëë€.
êžë¡ë² ìí¥: ë€ë¥ž 묞íì ë§¥ëœìì 컀뮀ëí° ì§ì¹šì ìŒêŽë ì ì©ì ê°ë¥íê² íë©°, ì€ì¬ ê²°ì ì ëí ëª íí ë°ìŽí° íì ì ì ê³µí©ëë€.
3. ì€ìê° ì늌
곌ì : êŽë š ìŽë²€ížì ëí ì¬ì©ììê² ìêž°ì ì íê³ ì íí ì늌ì ì ê³µí©ëë€.
íì ìì 구í:
- ì늌 ìŽë²€ížì ëí íì ì ì(ì: `NewMessageNotification`, `LikeNotification`, `FollowNotification`), ê° í¹ì íìŽë¡ë íì í¬íš(ì: `NewMessageNotification`ìë `senderId: number`, `messageContent: string` í¬íš).
- ë©ìì§ í ëë ì¹ììŒì íµíŽ ì ë¬ëë ì늌 ë°ìŽí°ê° ìŽë¬í ì ìë íì ì ì격íê² ì€ìíëë¡ ë³Žì¥í©ëë€.
êžë¡ë² ìí¥: ë°ìŽí°ê° ì¬ë°ë¥Žê² 구조íëê³ íŽìëëë¡ íì¬ ì¬ì©ìì ì°ê²° ìëë ì¥ì¹ì êŽê³ììŽ ì ìžê³ ì¬ì©ììê² ìêž°ì ì í ì 볎ì ìì ì ìž ì ë¬ì 볎ì¥í©ëë€.
4. ì¬ì©ì íë¡í ë° êŽê³ êŽëЬ
곌ì : ì íí ì¬ì©ì íë¡í ë° êŽê³(íë¡ì, ì¹êµ¬)륌 ì ì§í©ëë€.
íì ìì 구í:
- ì¬ì©ì íë¡í íëì ëí ì격í íìŽí(ì: `displayName: string`, `avatarUrl: string`, `bio: string`, `joinedDate: Date`).
- êŽê³ë íì íë ì°ê²°ë¡ ííë©ëë€. ì륌 ë€ìŽ, `Follow` êŽê³ë `followerId: number` ë° `followingId: number`륌 ê°ìµëë€.
- ìŽë¬í ë°ìŽí°ë¥Œ ê²ìíê³ ì¡°ìíêž° ìíŽ íì ìì í 쿌늬륌 ì¬ì©í©ëë€.
êžë¡ë² ìí¥: ë€ìí ì¬ì©ì ID ë° êŽê³ ííì ìŽì§íê³ ê°ìž ì 볎ì ëí êµì ë°ìŽí° ê°ìž ì 볎 ë³Žíž íì€ì ì€ìí©ëë€.
íì ìì 구í ì±íì ìŽì
íì ìì ì ì€ì ì ëìŽ ì»€ë®€ëí° íë«íŒì 구ì¶íë ìŽì ì ìë¹íë©° êŽë²ìí©ëë€.
- ë²ê·ž ë° ì€ë¥ ê°ì: ë§ì ìŒë°ì ìž ë²ê·žê° 컎íìŒ ìì ëë ê°ë° ìŽêž° ëšê³ìì ì ê±°ëìŽ ë³Žë€ ìì ì ìž ìíížìšìŽë¥Œ ì ê³µí©ëë€.
- í¥ìë 볎ì: ë€ìí ì§ì ìì ë°ìŽí°ë¥Œ ê²ìŠíšìŒë¡ìš íì ìì ì 죌ì 공격 ë° ì못ë ë°ìŽí° ì ì©ê³Œ ê°ì ìŒë°ì ìž ì·šìœì ì ë°©ì§íë ë° ëììŽ ë©ëë€.
- í¥ìë ì ì§ êŽëЬì±: ëª ííê² ì ìë íì ì í¹í ëê·ëªš ë¶ì° íì ê²œì° ìœëë² ìŽì€ë¥Œ ìŽíŽ, ìì ë° ëŠ¬í©í°ë§íêž° ìœê² ë§ëëë€.
- ê°ë°ì ìì°ì± í¥ì: IDEë ê°ë ¥íê² íì íë ìžìŽ ë° ì€í€ë§ë¡ ìì í ë ë ëì ìë ìì±, ì€ë¥ ê°ì§ ë° ëŠ¬í©í°ë§ êž°ë¥ì ì ê³µí ì ììµëë€.
- ë ëì íì : íì ì ìë ìì€í ì ë€ë¥ž ë¶ë¶ ëë ë€ë¥ž í/ê°ë°ì ê°ì ê³ìœ ìí ì íì¬ ëªšë ì¬ëìŽ ë°ìŽí° 구조ì ëíŽ ëìŒí ì ì¥ì ì·šíëë¡ ë³Žì¥í©ëë€.
- íì¥ì± ë° ìì ì±: ììž¡ ê°ë¥í ë°ìŽí° ì²ëЬë íšê³Œì ìŒë¡ íì¥ëê³ ë§ì ë¶íììë ìì ì ìŒë¡ ì ì§ëë ë³Žë€ ê°ë ¥í ìì€í ìŒë¡ ìŽìŽì§ëë€.
- ìíž ìŽì©ì±: ì°í© ëë ë¶ì° ìì€í ì ê²œì° íì ì ìì ëí ì격í ì€ìë ë¶ì° ìë¹ì€ ê°ì ìíí íµì ì íìì ì ëë€.
곌ì ë° ê³ ë € ì¬í
ìŽì ì ë§€ë ¥ì ìŽì§ë§ ëê·ëªšë¡ íì ìì ì 구ííë ë°ë ìŽë €ììŽ ë°ëŠ ëë€.
- íìµ ê³¡ì : ì ì íì ìžìŽ ëë ì€í€ë§ ì ì ìžìŽì ìµìíì§ ìì ê°ë°ìë ì ìíë ë° ìê°ìŽ íìí ì ììµëë€.
- ìŽêž° ê°ë° ì€ë²í€ë: ì격í íì ì€í€ë§ë¥Œ ì ìíê³ íì ê²ì¬ë¥Œ íµí©íë ë° ìŽêž° ê°ë° ìê°ìŽ ì¶ê°ë ì ììµëë€.
- ì ì°ì± ë 겜ì§ì±: ì§ëì¹ê² ì격í íì ìì€í ì ëëë¡ ë¹ ë¥ž íë¡í íìŽíìŽë 구조íëì§ ìê±°ë ì§ííë ë°ìŽí°ë¥Œ ì²ëЬíë ê²ì ë°©íŽí ì ììµëë€. ì¬ë°ë¥ž ê· íì ì°Ÿë ê²ìŽ ì€ìí©ëë€.
- ë ê±°ì ìì€í : Ʞ졎ì ëì íì ìì€í ì íì ìì ìí€í ì²ë¡ ë§ìŽê·žë ìŽì íë ê²ì ë³µì¡íê³ ë¹ì©ìŽ ë§ìŽ ëë ìì ìŽ ë ì ììµëë€.
- ë구 ë° ìíê³: ì±ìíì§ë§ íì ìì (컎íìŒë¬, 늰í°, IDE ì§ì)ì ìí ë구ë í¹í ìë¡ê±°ë íì êž°ì ì ê²œì° ê°ë°ì ë¹ ë¥ž ìë륌 ë°ëŒê°ì§ 못í ì ììµëë€.
íì ìì í ìì ë€ížìí¬ì 믞ë
ìíížìšìŽ ê°ë°ìì íì ìì ìŒë¡ì ì¶ìžë ë¶ìží ì ììµëë€. 컀뮀ëí° íë«íŒìŽ ê³ìíŽì ë³µì¡ì±ê³Œ ì€ìì±ì ëíŽê°ì ë°ëŒ íì ìì ìì¹ì ì±íì ììžê° ìë íì€ êŽíìŽ ë ê°ë¥ì±ìŽ ëìµëë€.
ì°ëЬë ë€ì곌 ê°ì ê²ì ììí ì ììµëë€.
- TypeScript ë° Rustì ê°ì ìžìŽì ì±í ìŠê° ë°±ìë ìë¹ì€ì ì¬ì©ë©ëë€.
- GraphQLì êŽë²ìí ì¬ì© APIì ì¬ì€ìì íì€ìŒë¡ ê°ë ¥í ë°ìŽí° ê³ìœì ìíí©ëë€.
- SQL ë° NoSQL ë°ìŽí°ë² ìŽì€ 몚ëìì ë ì êµí ì€í€ë§ ê²ìŠ.
- íì ìì í ë°ìŽí° êµí ë©ì»€ëìŠì ëª ìì ìŒë¡ íì©íë ë¶ì° íë¡í ìœì ë°ì .
- ë³µì¡í ë°ìŽí° 몚ëžì ëí íì ì€í€ë§ ìì± ë° ê²ìŠì ì§ìíë AI êž°ë° ë구 ê°ë°.
ê¶ê·¹ì ìŒë¡ íì ìì í ìì ë€ížìí¬ë êž°ì ì ì íì±ë¿ë§ ìëëŒ ì 뢰 구ì¶ì êŽí ê²ì ëë€. ë°ìŽí°ë¥Œ ì ííê³ ììž¡ ê°ë¥íë©° ìì íê² ì²ëЬíëë¡ ë³Žì¥íšìŒë¡ìš íë«íŒì ë ì믞 ìê³ ì 뢰í ì ìë ìšëŒìž 컀뮀ëí°ë¥Œ ì¡ì±íì¬ ì ìžê³ ì¬ì©ì륌 ì§ìí ì ììµëë€.
íë«íŒ 구íì륌 ìí ì€í ê°ë¥í íµì°°ë ¥
컀뮀ëí° íë«íŒì 구ì¶íê±°ë ì ì§ êŽëЬíë íì ê²œì° ë€ì ëšê³ë¥Œ ê³ ë €íììì€.
- APIë¶í° ììíìžì: ì API륌 구ì¶íë ê²œì° GraphQL ëë OpenAPI ì¬ìì ê°ì¶ ì ì ìë RESTful API륌 ê°ë ¥íê² ê³ ë €íììì€. Ʞ졎 APIì ê²œì° GraphQLë¡ ë§ìŽê·žë ìŽì íê±°ë ê°ë ¥í ê²ìŠì 구ííë ê²ì íê°íììì€.
- íë¡ ížìëì TypeScript ì±í: íë¡ ížìëê° ìŽë¯ž TypeScript륌 ì¬ì©íê³ ìì§ ìë€ë©Ž íì ìì ì ëì íê³ ê°ë°ì 겜í ë° ìœë íì§ì ê°ì íë ë¹êµì ë§ì°°ìŽ ì ì ë°©ë²ì ëë€.
- ë°ìŽí°ë² ìŽì€ ì ìœ ì¡°ê±Ž ê°í: ë°ìŽí°ë² ìŽì€ ì€í€ë§ë¥Œ ê²í íììì€. ì ì í ë°ìŽí° íì ìŽ ì¬ì©ëìëì§ íìžíê³ ì ìœ ì¡°ê±Ž(NOT NULL, UNIQUE, ìžë í€)ì íì©íì¬ ì볞ìì ë°ìŽí° 묎결ì±ì ê°ì íììì€. NoSQLì ê²œì° ì€í€ë§ ê²ìŠ êž°ë¥ì íìíììì€.
- ì ì í ë°±ìë ìžìŽ ì í: ì ë°±ìë ìë¹ì€ì ê²œì° ì±ë¥ê³Œ ê³ ì í íì ìì ì ìíŽ Go ëë Rustì ê°ì ìžìŽë¥Œ íê°íê±°ë íì ííž ë° ê²ìŠ ëŒìŽëžë¬ëЬì ëí ê°ë ¥í 컀뮀ëí° ì§ìì ê°ì¶ ëì íì ìžìŽë¥Œ ê³ ë €íììì€.
- í¬êŽì ìž ê²ìŠ êµ¬í: ì ë ¥ì ì ë ì 뢰íì§ ë§ììì€. ììëë íì , íì ë° ì ìœ ì¡°ê±Žì íìžíì¬ ìë² ìž¡ìì 몚ë ë€ìŽì€ë ë°ìŽí°ë¥Œ ì격íê² ê²ìŠíììì€.
- í êµì¡: ê°ë° íìŽ íì ìì ìì¹ê³Œ ê·žê²ìŽ ê°ì žì€ë ìŽì ì ìŽíŽíëë¡ íììì€. ìë¡ìŽ ë구 ë° êŽíì ì±ííêž° ìí êµì¡ ë° ëŠ¬ìì€ë¥Œ ì ê³µíììì€.
- ì°í© íì€ ì±í: ì°í© ê³µê°ìì ìŽìíë ê²œì° ActivityPub곌 ê°ì íì€ì ì¬ìì ì격íê² ì€ìíì¬ ê¹ìŽ ìŽíŽíê³ êµ¬ííììì€.
ê²°ë¡
ë ìì ì ìŽê³ ìì íë©° ì¬ì©ì ì¹íì ìž ìì ë€ížìí¬ë¥Œ 구ì¶íêž° ìí ì¬ì ì ê³ì ì§í ì€ì ëë€. íì ìì í ìì ë€ížìí¬ë ìŽ ì§íìì ìë¹í ë°ì ì ëíë ëë€. íë«íŒ ì€ê³ ë° êµ¬íì 몚ë 잡멎ì íì ì íì±ì ëŽì¥íšìŒë¡ìš ê°ë°ìë ìíì ìííê³ ì±ë¥ì í¥ììí€ë©° ì ìžê³ ì¬ì©ì êž°ë° ê°ì ì 뢰륌 ëìŒ ì ììµëë€. ëì§íž íê²œìŽ ê³ì ë°ì íšì ë°ëŒ ì°šìžë ë³µìë ¥ ìê³ ìí¥ë ¥ ìë 컀뮀ëí° íë«íŒì ë§ëë ë° íì ìì ì ì±ííë ê²ìŽ ì€ìí ê²ì ëë€.