#mentoring

KDE's avatar
KDE

@kde@floss.social

Season of KDE 2026 kicks off with 25 volunteers working on 21 projects.

SoK is KDE's mentorship program that introduces new contributors to Free Software. This year our mentees will help improve the state of Plasma, KDE Connect, KDE's games, KDE Eco, translations, KDE's websites, internal data collection and more.

mentorship.kde.org/blog/2026-0

A bunch of saplings in pots overlaid with the KDE mentorship logo (a gear with a seed over one of its teeth) and the words "KDE Mentorship" below it.
ALT text detailsA bunch of saplings in pots overlaid with the KDE mentorship logo (a gear with a seed over one of its teeth) and the words "KDE Mentorship" below it.
Gustavo A. R. Silva :tux:'s avatar
Gustavo A. R. Silva :tux:

@gustavoars@fosstodon.org

I talked for more than two hours (135 mins to be precise) about upstream Linux kernel hardening at Okayama University this afternoon. ๐Ÿง๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป๐ŸŽ™

I just uploaded my slides here: embeddedor.com/blog/presentati

I really enjoyed the session. The students were amazing. They were well prepared and asked a lot of questions. ๐Ÿ‘๐Ÿผ๐Ÿ‘๐Ÿผ

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social ยท Reply to ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s post

And just finished writing a comprehensive contributor guide for the mentees!

You can check it out hereโ€”it's Korean though: https://hackers.pub/@hongminhee/2025/ossca-fedify-contributors-guide.

It covers everything from setting up the accounts and development environment to finding good first issues. While it's primarily for the OSSCA participants, anyone interested in contributing to @fedify is welcome to use it as a reference.

Ready to onboard the next wave of developers!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee)'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee)

@hongminhee@hackers.pub

์•ˆ๋‚ด

์ด ๋ฌธ์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ ์ฐธ์—ฌํ˜• ํ”„๋กœ๊ทธ๋žจ์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ ๋ฉ˜ํ‹ฐ๋“ค์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ, Fedify ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์ด๋ผ๋ฉด ์–ผ๋งˆ๋“ ์ง€ ํ™œ์šฉํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜คํ”ˆ ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ ์ฐธ์—ฌํ˜• ํ”„๋กœ๊ทธ๋žจ์—์„œ Fedify ํ”„๋กœ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ํ•  ๋ฉ˜ํ†  ํ™๋ฏผํฌ์ž…๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜์‹œ๊ฒŒ ๋œ ๊ฒƒ์„ ์ง„์‹ฌ์œผ๋กœ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์•ž์œผ๋กœ Fedify ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•Œ๊ณ  ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๊ธด ๋‚ด์šฉ์ด ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์–ด๋ณด์‹œ๊ณ  ๋”ฐ๋ผํ•ด์•ผ ํ•  ๊ณผ์ œ๋Š” ๋”ฐ๋ผํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์— ๋‚˜์˜จ ๊ณผ์ œ๋“ค์€ ๋ณธ๊ฒฉ์ ์ธ ๊ธฐ์—ฌ๋ฅผ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†Œํ†ต ์ฑ„๋„

์ค‘์š”

OSSCA ์ž์ฒด Discord ์„œ๋ฒ„์—๋„ ์ดˆ๋Œ€๋˜์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ, ๊ทธ๊ณณ์—์„œ๋Š” ํ–‰์‚ฌ์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋งŒ ์ฃผ๋กœ ํ•˜๊ฒŒ ๋  ๊ฒ๋‹ˆ๋‹ค. ์‹ค์ œ ๊ธฐ์—ฌ์™€ ๊ฐœ๋ฐœ์— ๊ด€๋ จ๋œ ์ด์•ผ๊ธฐ๋Š” ์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…ํ•  Fedify ํ”„๋กœ์ ํŠธ์˜ Discord ์„œ๋ฒ„์—์„œ ์ด๋ค„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ๊ฒƒ์€ Fedify ํ”„๋กœ์ ํŠธ์˜ Discord ์„œ๋ฒ„์— ์ž…์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์•„์ง Discord ๊ณ„์ •์ด ์—†๋‹ค๋ฉด ํ•˜๋‚˜ ๋งŒ๋“œ์„ธ์š”. ๊ฝค ๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์ด Discord์—์„œ ์†Œํ†ต์„ ํ•ฉ๋‹ˆ๋‹ค. Discord ๊ณ„์ •์„ ๋งŒ๋“ค์–ด ๋‘๋ฉด ์•ž์œผ๋กœ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•  ๋•Œ ์“ธ๋ชจ๊ฐ€ ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ์˜ Discord ์„œ๋ฒ„์— ์ž…์žฅํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ์ด ๋œน๋‹ˆ๋‹ค:

What language do you speak? ใฉใฎ่จ€่ชžใ‚’่ฉฑใ—ใพใ™ใ‹๏ผŸ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์“ฐ์‹œ๋‚˜์š”?

๊ทธ๋Ÿฌ๋ฉด ํ•œ๊ตญ์–ด๋ฅผ ํฌํ•จํ•ด ์ž์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋“ค์„ ์„ ํƒํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์—ฌ๋Ÿฌ ์ฑ„๋„๋“ค์ด ๋ณด์ด๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ์ค‘์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์ฃผ๋กœ ์ด์šฉํ•˜๊ฒŒ ๋  ์ฑ„๋„์€ #fedify-dev-ko ์ฑ„๋„์ž…๋‹ˆ๋‹ค.

๋ณธ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ๋”ฐ๋ผํ•˜๋ฉด์„œ ์ค‘๊ฐ„์— ์–ด๋ ค์›€์ด ์žˆ๊ฑฐ๋‚˜ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ฑ„๋„์—์„œ ํŽธํ•˜๊ฒŒ ์งˆ๋ฌธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ด€๋ จํ•ด์„œ ๊ถ๊ธˆํ•œ ์ ์€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ด๋ผ๋„ Discord ์„œ๋ฒ„์—์„œ ์งˆ๋ฌธ ์ฃผ์„ธ์š”. โ€œ์‹œ๊ฐ„์ด ๋‚  ๋•Œ ์ฒœ์ฒœํžˆ ํ•ด๊ฒฐํ•ด์•ผ์ง€โ€๋ณด๋‹ค๋Š” ์ผ๋‹จ ๋ฌผ์–ด๋ณด๋Š”๊ฒŒ ๋‚ซ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ดˆ๋ฐ˜์˜ ๋งŽ์€ ๋ฌธ์ œ๋Š”, ๋ณดํ†ต ์งˆ๋ฌธ์„ ๋งŽ์ด ํ•˜๋ฉด ๋นจ๋ฆฌ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ์ •ํ•ด๋‘์„ธ์š”. ์ด๋ฅผํ…Œ๋ฉด 30๋ถ„์œผ๋กœ ์ •ํ–ˆ์œผ๋ฉด 30๋ถ„ ๋‚ด๋กœ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋ฉด ์ผ๋‹จ ์งˆ๋ฌธ์„ ํ•ฉ์‹œ๋‹ค.

๊ณผ์ œ

Discord ์„œ๋ฒ„์— ์ž…์žฅํ•˜์‹  ๋’ค, #fedify-dev-ko ์ฑ„๋„์—์„œ ๊ฐ„๋‹จํžˆ ์ž๊ธฐ ์†Œ๊ฐœ๋ฅผ ํ•ด ์ฃผ์„ธ์š”. ๋ณธ์ธ์˜ ์ด๋ฆ„๊ณผ GitHub ์•„์ด๋””๋ฅผ ๊ผญ ์•Œ๋ ค์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ถŒ๊ณ 

์›ํ™œํ•˜๊ณ  ์ฆ‰์‹œ์ ์ธ ์†Œํ†ต์„ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ์ธ์˜ ์Šค๋งˆํŠธํฐ์— Discord ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•œ ๋’ค, ์•Œ๋ฆผ์„ ํ—ˆ์šฉํ•ด ์ฃผ์„ธ์š”. ๋žฉํ†ฑ ๋ฐ ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์—์„œ๋„ Discord ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ํ•ญ์ƒ ์‹คํ–‰ํ•ด ๋‘์‹ค ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ๊ณ 

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด Discord ๊ณ„์ •์˜ ์•„๋ฐ”ํƒ€๋ฅผ GitHub ๊ณ„์ •์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„๊ณผ ํ†ต์ผํ•ด ์ฃผ์„ธ์š”. ๋ฉ˜ํ‹ฐ๊ฐ€ ์›Œ๋‚™ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ์•„๋ฌด๋Ÿฐ ์ด๋ฏธ์ง€๋„ ์„ค์ •ํ•ด ๋‘์ง€ ์•Š์€ ๋ถ„๋“ค์€ ์•„๋ฌด ๊ทธ๋ฆผ์ด๋ผ๋„ ์ข‹์œผ๋‹ˆ ์‹œ์ธ์„ฑ์„ ์œ„ํ•ด ์„ค์ •์„ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์—ฐํ•ฉ์šฐ์ฃผ(fediverse)๋ž€?

์•ˆ๋‚ด

์ด๋ฏธ ์—ฐํ•ฉ์šฐ์ฃผ๋‚˜ ActivityPub์— ๋Œ€ํ•ด ์ต์ˆ™ํ•˜์‹  ๋ถ„๋“ค์€ ์„ค๋ช…์€ ๊ฑด๋„ˆ ๋›ฐ์‹œ๊ณ  ์ด ์„น์…˜ ๋งˆ์ง€๋ง‰์˜ ๊ณผ์ œ๋งŒ ํ•˜์…”๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์šฐ์„  ํŽ˜๋””๋ฒ„์Šค(fediverse), ์ฆ‰ ํ•œ๊ตญ์–ด๋กœ ์—ฐํ•ฉ์šฐ์ฃผ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋ฅผ ๊ฐ–์ถœ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…๋ž˜์˜ ์ค‘์•™์ง‘๊ถŒ์ ์ธ SNS๋“ค์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ๋กœ, SNS์— ์˜ฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ธฐ์—…์ด ์‚ฌ์œ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘˜์งธ๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ SNS๋ผ๋ฆฌ๋Š” ์†Œํ†ตํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๋‘๋ฒˆ์งธ ํŠน์ง•์€ ์ด๋ฉ”์ผ์„ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ์•„์ฃผ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„ ๋ฉ”์ผ์„ ์“ฐ๋Š” ์‚ฌ๋žŒ์ด Gmail์„ ์“ฐ๋Š” ์‚ฌ๋žŒ๊ณผ ์†Œํ†ตํ•  ์ˆ˜ ์—†์„๊นŒ์š”? ๊ทธ๋ ‡์ง€ ์•Š์ง€์š”. ํ•˜์ง€๋งŒ Instagram ์‚ฌ์šฉ์ž๋Š” X (่ˆŠ Twitter) ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋‚˜์˜จ ๋Œ€์•ˆ SNS๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. Mastodon์ด๋‚˜ Pixelfed ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ SNS๋“ค์€ ๋ˆ„๊ตฌ๋ผ๋„ ์ž์‹ ์˜ ์„œ๋ฒ„์— ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ™ˆ ์„œ๋ฒ„์—์„œ ๋Œ์•„๊ฐ€๋Š” Mastodon ์„œ๋ฒ„๋„ ๊ฝค ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋Œ€ํ˜• ์„œ๋ฒ„๋ผ๋Š” ์„ ํƒ์ง€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, Mastodon ์„œ๋ฒ„ ์ค‘์—์„œ ๊ฐ€์žฅ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ์„œ๋ฒ„์ธ mastodon.social์€ Mastodon ๊ฐœ๋ฐœ ํŒ€์ด ์ง์ ‘ ์šด์˜ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์˜๋ฌธ์ด ๋“œ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ํ™ˆ ์„œ๋ฒ„์— Mastodon์„ ์„ค์น˜ํ•ด๋ดค์ž ํ˜ผ์ž ์“ฐ๋Š” ์ผ๊ธฐ์žฅ์ด ์•„๋‹Œ๊ฐ€? ์‚ฌ์‹ค, Mastodon ์„œ๋ฒ„๋“ค์€ ์„œ๋กœ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ด๋ฉ”์ผ๊ณผ๋„ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ํ™ˆ ์„œ๋ฒ„์— ์ด๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ค์–ด๋„, ๋„ค์ด๋ฒ„ ๋ฉ”์ผ์ด๋‚˜ Gmail๊ณผ ์„œ๋กœ ๋ฉ”์ผ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”. ์‹ค์ œ๋กœ, Mastodon์˜ ๊ณ„์ • ์ด๋ฆ„์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค:

@username@server.com

์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ Mastodon ์„œ๋ฒ„๋ผ๋ฆฌ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ๋œ ํ‘œ์ค€์ด ๋ฐ”๋กœ ActivityPub ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ, ์ด ActivityPub ํ”„๋กœํ† ์ฝœ์€ Mastodon ํ”„๋กœ์ ํŠธ๊ฐ€ ๋…์ž์ ์œผ๋กœ ์ •ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ, W3C์—์„œ ์›น ํ‘œ์ค€์œผ๋กœ ์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Mastodon ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Pixelfed ๋“ฑ ActivityPub์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋“ค๋„ ์„œ๋กœ ์†Œํ†ต์ด ๋ฉ๋‹ˆ๋‹ค. Mastodon์—์„œ Pixelfed๋กœ ๋Œ“๊ธ€ ๋‹ค๋Š” ๊ฒƒ๋„ ๋˜๊ณ , Pixelfed ์‚ฌ์šฉ์ž๊ฐ€ Mastodon ์‚ฌ์šฉ์ž๋ฅผ ํŒ”๋กœํ•˜๋Š” ๊ฒƒ๋„ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ SNS ์†Œํ”„ํŠธ์›จ์–ด, ์‚ฌ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ผ๋ฆฌ ์ž์œ ๋กญ๊ฒŒ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์—ฐํ•ฉ(federation)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด, ์ด๋ ‡๊ฒŒ ์—ฐํ•ฉ๋œ ์„œ๋กœ ๋‹ค๋ฅธ SNS๋“ค์„ ๋ชจ๋‘ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ SNS๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ถ€๋ฅด๋Š” ๋ง์ด ๋ฐ”๋กœ ์—ฐํ•ฉ์šฐ์ฃผ, ํŽ˜๋””๋ฒ„์Šค์ž…๋‹ˆ๋‹ค.

์—ฐํ•ฉ์šฐ์ฃผ๋Š” ํ˜„์žฌ๋„ ๊พธ์ค€ํžˆ ์ปค ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์—๋Š” Meta์˜ Threads๋„ ActivityPub์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , WordPress๋„ ActivityPub ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ณต์‹์ ์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ธฐ์กด์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์€ ๊ฐ์ž์˜ ์„œ๋ฒ„์— ์ง์ ‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜€๋˜ ๊ฒƒ์— ๋ฐ˜ํ•ด, Threads๋Š” ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹˜์—๋„ ActivityPub์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ ์—์„œ ์ƒ๋‹นํžˆ ์ด๋ก€์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์˜ ์—ฐํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

์•ˆ๋‚ด

์—ฐํ•ฉ์šฐ์ฃผ์— ๊ด€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์–ด์ง€์…จ๋‹ค๋ฉด, ใ€ˆ์—ฐํ•ฉ์šฐ์ฃผ(fediverse)์™€ ActivityPub ํ”„๋กœํ† ์ฝœ ์ดํ•ดํ•˜๊ธฐ: ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ฐ€์ด๋“œใ€‰๋ผ๋Š” ๊ธ€๋„ ์ฝ์–ด๋ณด์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ณผ์ œ

์•„์ง ์—ฐํ•ฉ์šฐ์ฃผ๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณธ ์  ์—†๋‹ค๋ฉด, ๊ณ„์ •์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. ๊ณ„์ •์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์“ธ ์ง€ ๋จผ์ € ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Mastodon๊ณผ Misskey๋Š” ์ผ์ข…์˜ X์ฒ˜๋Ÿผ ๋‹จ๋ฌธ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ SNS์ž…๋‹ˆ๋‹ค. Pixelfed๋Š” Instagram์ฒ˜๋Ÿผ ์‚ฌ์ง„์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ SNS์ž…๋‹ˆ๋‹ค. Meta์˜ Threads๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฝ๊ณ  ๊ณ„์‹œ๋Š” ์ด ๊ธ€์ด ์˜ฌ๋ผ์˜จ Hackers' Pub๋„ ์‚ฌ์‹ค์€ ์—ฐํ•ฉ์šฐ์ฃผ์˜ ์ผ๋ถ€๋กœ์„œ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ SNS์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•˜์‹œ๋“  ์„œ๋กœ ์†Œํ†ตํ•˜๋Š” ๋ฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ Mastodon์ด๋‚˜ Misskey, Pixelfed๋ฅผ ์„ ํƒํ•˜์…จ๋‹ค๋ฉด, ์„œ๋ฒ„๋ฅผ ๊ณ ๋ฅด์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋ฌผ๋ก , ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜์‹œ๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ๋งŽ์€ ๊ฑธ ๋ฐฐ์šฐ์‹ค ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.) ๋ฌด์Šจ ์„œ๋ฒ„๋ฅผ ๊ณจ๋ผ์•ผ ํ•  ์ง€ ๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๋ฉด, Mastodon์˜ ๊ฒฝ์šฐ silicon.moe ์„œ๋ฒ„๋ฅผ, Misskey์˜ ๊ฒฝ์šฐ stella.place ์„œ๋ฒ„๋ฅผ, Pixelfed์˜ ๊ฒฝ์šฐ chueok.pics ์„œ๋ฒ„๋ฅผ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ Threads๋ฅผ ๊ณ ๋ฅด์…จ๋‹ค๋ฉด, ์„œ๋ฒ„๋ฅผ ๊ณ ๋ฅผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Threads๋Š” ์„ค์น˜ํ˜• ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ Meta์—์„œ ์šด์˜ํ•˜๋Š” ์ƒ์šฉ ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์„ค์ •์— ๊ฐ€์…”์„œ ํŽ˜๋””๋ฒ„์Šค ๊ณต์œ  ์„ค์ •์„ ์ผœ ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ Hackers' Pub์„ ๊ณ ๋ฅด์…จ๋‹ค๋ฉด, ์—ญ์‹œ ์„œ๋ฒ„๋ฅผ ๊ณ ๋ฅผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ดˆ๋Œ€์žฅ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฉ˜ํ† ์—๊ฒŒ ์ดˆ๋Œ€์žฅ์„ ์š”์ฒญํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ณผ์ œ

์—ฐํ•ฉ์šฐ์ฃผ ๊ณ„์ •์ด ์ƒ๊ธฐ์…จ๋‹ค๋ฉด, ์ด์ œ ์นœ๊ตฌ๋ฅผ ์‚ฌ๊ท€์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฉ˜ํ‹ฐ๋“ค์—๊ฒŒ ๊ณ„์ • ์ฃผ์†Œ๋ฅผ ๋ฌผ์–ด๋ณด๊ณ  ์„œ๋กœ ํŒ”๋กœ๋ฅผ ํ•ด ๋ณด์„ธ์š”. ๋ฉ˜ํ† ๋„ ํŒ”๋กœํ•ด ๋ณด์„ธ์š”. (๋ฉ˜ํ† ๋„ ๋งžํŒ” ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.) ๋ฉ˜ํ† ์˜ ์—ฐํ•ฉ์šฐ์ฃผ ๊ณ„์ • ์ฃผ์†Œ๋Š” @hongminhee@hackers.pub์ž…๋‹ˆ๋‹ค.

๊ณ„์ • ์ฃผ์†Œ๋กœ ํŒ”๋กœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์†Œํ”„ํŠธ์›จ์–ด๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์ฐฝ์— ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๊ณ„์ •์ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ณ„์ •์ด ๋ณด์ธ๋‹ค๋ฉด ํŒ”๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ณผ์ œ

์ƒ์„ฑํ•œ ๊ณ„์ •์œผ๋กœ ๋ฉ˜ํ† ์˜ ๊ณ„์ •์ธ @hongminhee@hackers.pub์„ ๋ฉ˜์…˜ํ•˜์—ฌ ๊ธ€์„ ์จ ์ฃผ์„ธ์š”. ๊ธ€ ๋‚ด์šฉ์€ ๋ญ๋“  ์ข‹์Šต๋‹ˆ๋‹ค.

JavaScript์™€ TypeScript

์•ˆ๋‚ด

์ด๋ฏธ JavaScript์™€ TypeScript์— ์ต์ˆ™ํ•˜์‹œ๋‹ค๋ฉด ์ด ์ฑ•ํ„ฐ๋Š” ๋„˜๊ธฐ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ๋Š” TypeScript๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. TypeScript๋Š” JavaScript์— ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•œ ์–ธ์–ด๋กœ, ๋Ÿฐํƒ€์ž„์— ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ฅผ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์— ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. TypeScript๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € JavaScript๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„์ง JavaScript์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹  ๋ถ„๋“ค์€ ใ€Š๋ชจ๋˜ JavaScript ํŠœํ† ๋ฆฌ์–ผใ€‹์˜ ํŒŒํŠธ 1์„ ์ฝ๊ณ  ๋”ฐ๋ผํ•ด ๋ณผ ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค. ํŒŒํŠธ 2 ์ดํ›„์˜ ๋‚ด์šฉ์€ Fedify ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐ์— ํฌ๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฝ์ง€ ์•Š์œผ์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

JavaScript์—๋Š” ์–ด๋А ์ •๋„ ์ต์ˆ™ํ•˜์ง€๋งŒ ์•„์ง TypeScript์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹  ๋ถ„๋“ค๊ป˜๋Š”, ใ€ŠThe TypeScript Handbookใ€‹์„ ์ฝ๊ณ  ๋”ฐ๋ผํ•ด ๋ณผ ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ํ•ธ๋“œ๋ถ ํŽ˜์ด์ง€ ์šฐ์ธก ์ƒ๋‹จ์— ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ์œผ๋กœ ๊ฐ€๋Š” ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ๊ทธ ํ”„๋กœ์ ํŠธ์—์„œ ์“ฐ์ด๋Š” ์–ธ์–ด๋ฅผ ์†์†๋“ค์ด ๊นŠ๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•  ๋•Œ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ดํ•ดํ•ด๋„ ์ข‹์œผ๋‹ˆ, ์–ด๋А ์ •๋„ ์–ธ์–ด ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•ด์กŒ๋‹ค ์‹ถ์œผ๋ฉด ์‹ค์ œ Fedify ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ์ข€ ๋” ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ์–ธ์–ด ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋”ฐ๋กœ ์กฐ์‚ฌํ•˜๋Š” ์‹์œผ๋กœ ์ตํžˆ์‹œ๋Š” ๊ฒŒ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ • ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ถ€๋‹ด ์—†์ด Fedify ํ”„๋กœ์ ํŠธ Discord ์„œ๋ฒ„์˜ #fedify-dev-ko ์ฑ„๋„์—์„œ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”.

Fedify๋ž€?

์—ฌ๋Ÿฌ๋ถ„์€ ์›น ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ HTTP๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์‹œ๋‚˜์š”? ์•„๋งˆ๋„ ๋Œ€๋ถ€๋ถ„์€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ์—” ํ•  ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋Œ€์‹  ์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ Express๋‚˜ Next.js, Django ๊ฐ™์€ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์—ฐํ•ฉ์šฐ์ฃผ SNS ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ, ActivityPub์„ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ํ•  ๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ํ•ด ์ค„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ Fedify์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“  ๊ฐ„์—, ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๊ทธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์จ๋ณด๊ณ  ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์ˆ™์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์จ๋ณด์ง€๋„ ์•Š์€ ์†Œํ”„ํŠธ์›จ์–ด์— ๊ธฐ์—ฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋„ Fedify์— ๊ธฐ์—ฌํ•˜๊ธฐ์— ์•ž์„œ Fedify๋ฅผ ์จ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Fedify๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๋„๊ตฌ์ด๋ฏ€๋กœ, Fedify๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค๋Š” ๋œป์ด ๋ฉ๋‹ˆ๋‹ค. Fedify๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์€ ActivityPub ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. Fedify๋ฅผ ์จ ๋ณด๋ฉด์„œ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ€๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ๋ง‰ํžˆ๋Š” ๊ฒŒ ์žˆ๋‹ค๋ฉด Discord ์„œ๋ฒ„์˜ #fedify-help-ko ์ฑ„๋„์—์„œ ์งˆ๋ฌธํ•˜์„ธ์š”.

๊ณผ์ œ

Fedify๋ฅผ ๋ฐฐ์šฐ๊ณ  ์จ๋ณด๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฝ๊ณ  ๋”ฐ๋ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Fedify ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์˜ ํ•œ๊ตญ์–ดํŒ์ธ ใ€ˆ๋‚˜๋งŒ์˜ ์—ฐํ•ฉ์šฐ์ฃผ ๋งˆ์ดํฌ๋กœ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐใ€‰๋ฅผ ์ฝ๊ณ  ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ์„œ ์ง„ํ–‰ํ•˜์„ธ์š”. ๋น ๋ฅด๋ฉด ํ•˜๋ฃจ, ๋А๊ธ‹ํ•˜๊ฒŒ ํ•˜๋ฉด ์‚ฌํ˜ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋ฉ˜ํ† ์—๊ฒŒ ๋ถ€๋‹ด ์—†์ด ์งˆ๋ฌธํ•˜์„ธ์š”.

์ €์žฅ์†Œ ํฌํฌ ๋ฐ ํด๋ก 

์ฃผ์˜

Windows ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜์‹ค ๋•Œ๋Š” (WSL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด) Git์˜ core.autocrlf ์„ค์ •์„ ๊บผ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค:

git config --global core.autocrlf false

์•ˆ๋‚ด

Fedify ํ”„๋กœ์ ํŠธ๋ฅผ Windows ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, Linux๋‚˜ macOS์— ๋น„ํ•ด ํŽธ์˜์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ๋„ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด WSL์„ ์„ธํŒ…ํ•˜์‹œ๊ณ  WSL ์•ˆ์—์„œ ์ž‘์—…ํ•˜์‹œ๋Š” ๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Fedify์˜ GitHub์— ์ €์žฅ์†Œ๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ €์žฅ์†Œ๋ฅผ ๊ฐ์ž ํฌํฌ(fork)ํ•˜์‹  ๋’ค, ํฌํฌํ•œ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ์— ํด๋ก ํ•˜์„ธ์š”. ํด๋ก ํ•˜์‹  ๋’ค, ํด๋ก ํ•œ ๋กœ์ปฌ ์ €์žฅ์†Œ ์•ˆ์— ๋“ค์–ด๊ฐ€ ์—…์ŠคํŠธ๋ฆผ ์ €์žฅ์†Œ๋ฅผ ๋ฆฌ๋ชจํŠธ๋กœ ์ถ”๊ฐ€ํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค:

git remote add upstream https://github.com/fedify-dev/fedify.git
git fetch upstream
git pull --set-upstream upstream main

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

Fedify์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์€ ์ผ๋ฐ˜์ ์ธ JavaScript ํ”„๋กœ์ ํŠธ๋“ค์— ๋น„ํ•ด ์กฐ๊ธˆ ๋ณต์žกํ•œ ํŽธ์ž…๋‹ˆ๋‹ค. Node.js ์ด์™ธ์—๋„ Deno์™€ Bun ๋“ฑ ์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”. Fedify์˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹œ์Šคํ…œ์— ๋ชจ๋‘ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • Node.js v22 ์ด์ƒ
  • Deno v2 ์ด์ƒ
  • Bun ์ตœ์‹  ๋ฒ„์ „
  • pnpm ์ตœ์‹  ๋ฒ„์ „

ํ•˜๋‚˜ํ•˜๋‚˜ ์ง์ ‘ ์„ค์น˜ํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค๋งŒ, ๊ท€์ฐฎ์œผ์‹œ๋‹ค๋ฉด mise๋ผ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค. mise๋Š” ์ •๋ง ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

sudo pacman -S mise      # Arch Linux
brew install mise        # macOS
winget install jdx.mise  # Windows
# ์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ์ง€์›

์„ค์น˜ํ•˜๊ณ  ๋‚˜์„œ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— mise๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋“ค์„ ์ถ”๊ฐ€ํ•˜๋„๋ก mise๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋–ค ์…ธ์„ ์‚ฌ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค:

zsh
echo 'eval "$(mise activate zsh)"' >> "${ZDOTDIR-$HOME}/.zshrc"
. "${ZDOTDIR-$HOME}/.zshrc"
Bash
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
. ~/.bashrc
PowerShell
echo 'mise activate pwsh | Out-String | Invoke-Expression' >> $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
. $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

ํŒ

๋Œ€๋ถ€๋ถ„์˜ Linux์˜ ๊ฒฝ์šฐ (๋˜๋Š” Windows์˜ WSL ์•ˆ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ) ๋ณ„ ๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด bash๋ฅผ ์“ฐ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. macOS๋ฅผ ์“ฐ์‹œ๊ณ  ๋ณ„ ๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ์…จ๋‹ค๋ฉด zsh์„ ์“ฐ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. (WSL์ด ์•„๋‹Œ) Windows์˜ ๊ฒฝ์šฐ์—๋Š” ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์•„๋‹Œ PowerShell ์•ˆ์—์„œ ์ž‘์—…ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mise๋ฅผ ์„ค์น˜ํ•˜์…จ๋‹ค๋ฉด, ๋กœ์ปฌ ์ €์žฅ์†Œ ์•ˆ์— ๋“ค์–ด๊ฐ€ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ•œ ๋ฒˆ์— ์„ค์น˜ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

mise install --yes

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Fedify ์ €์žฅ์†Œ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” mise ์„ค์ • ํŒŒ์ผ์„ ์‹ ๋ขฐํ•˜๊ฒ ๋ƒ๋Š” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋œน๋‹ˆ๋‹ค. Yes๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”:

mise config files in ~/fedify are not trusted. Trust them?


   Yes     No     All  

โ†/โ†’ toggle โ€ข y/n/a/enter submit

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ž˜ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Fedify์˜ ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค. ์ฒซ ์‹คํ–‰ ์‹œ ํ†ต์ƒ 5๋ถ„ ์ •๋„ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค:

deno task test-all

Git ํ›…๋„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

deno task hooks:install

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹ค์ œ ํŽธ์ง‘ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ๊ฐ™์€ Visual Studio Code ๊ณ„์—ด์ธ Cursor๋‚˜ Windsurf์—์„œ๋„ ๊ณผ์ •์€ ๋Œ€๋™์†Œ์ดํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

Visual Studio์™€ Visual Studio Code๋Š” ์„œ๋กœ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ณ„๊ฐœ์˜ ์ œํ’ˆ์ด๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”.

์•ˆ๋‚ด

์—ฌ๋Ÿฌ๋ถ„์ด Emacs๋‚˜ Vim์˜ ๋…์‹คํ•œ ์‹ ์ž๋ผ๋ฉด Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ, Deno์˜ ๊ณต์‹ ํ™˜๊ฒฝ ์„ค์ • ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Deno ๋žญ๊ท€์ง€ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์šฐ์„  ๋กœ์ปฌ ์ €์žฅ์†Œ ์•ˆ์—์„œ code ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Visual Studio Code๋ฅผ ๋„์›๋‹ˆ๋‹ค:

code .     # Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
cursor .   # Cursor๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
windsurf . # Windsurf๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

Visual Studio Code ์ฐฝ์ด ๋œจ๋ฉด, ํ™”๋ฉด ๊ฐ€์šด๋ฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค:

์ด ํด๋”์— ์žˆ๋Š” ํŒŒ์ผ์˜ ์ž‘์„ฑ์ž๋ฅผ ์‹ ๋ขฐํ•ฉ๋‹ˆ๊นŒ?

ํ”„๋กฌํ”„ํŠธ์—์„œ ์˜ˆ, ์ž‘์„ฑ์ž๋ฅผ ์‹ ๋ขฐํ•ฉ๋‹ˆ๋‹ค ๋ฒ„ํŠผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์€ ํ”„๋กฌํ”„ํŠธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค:

์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•ด ๊ถŒ์žฅ๋˜๋Š” Street Side Software, Red Hat ๋“ฑ์˜ ํ™•์žฅ์„(๋ฅผ) ์„ค์น˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ”„๋กฌํ”„ํŠธ์—์„œ ์„ค์น˜ ๋ฒ„ํŠผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ™”๋ฉด ๊ฐ€์šด๋ฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค:

๊ฒŒ์‹œ์ž โ€œStreet Side Softwareโ€ ์‹ ๋ขฐํ•˜๊ณ  ๋‹ค๋ฅธ 2?

ํ”„๋กฌํ”„ํŠธ์—์„œ ๊ฒŒ์‹œ์ž ์‹ ๋ขฐ ๋ฐ ์„ค์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Visual Studio Code์— Fedify ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํ™•์žฅ๋“ค์ด ์„ค์น˜๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋กœ์จ Fedify ๊ธฐ์—ฌ์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

JavaScript ๋Ÿฐํƒ€์ž„

Fedify๋Š” Deno, Node.js, Bun ๋“ฑ ๋‹ค์–‘ํ•œ JavaScript ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์—ฐ JavaScript ๋Ÿฐํƒ€์ž„์ด ๋ญ˜๊นŒ์š”?

JavaScript๋Š” ๋น„๊ต์  ์ž‘์€ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด process.exit() ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์‹  ์  ์žˆ๋‹ค๋ฉด, ์ด๋Š” JavaScript ์ž์ฒด์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ Node.js๋ผ๋Š” ํŠน์ •ํ•œ JavaScript ๋Ÿฐํƒ€์ž„์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” DOM API ์—ญ์‹œ JavaScript ์ž์ฒด์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์›น ๋ธŒ๋ผ์šฐ์ €๋ผ๋Š” (์ผ์ข…์˜) JavaScript ๋Ÿฐํƒ€์ž„์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript ๋Ÿฐํƒ€์ž„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค:

  • JavaScript ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • JavaScript ์–ธ์–ด๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ API๋กœ๋Š” console.log(), Node.js์˜ process.exit(), ์›น ๋ธŒ๋ผ์šฐ์ €์˜ window.alert() ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Node.js๋Š” node_modules/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด, Deno์—์„œ๋Š” ์ž„ํฌํŠธ ๋งต(import map) ๊ธฐ๋ฐ˜์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ๋Š” npm์ด๋‚˜ pnpm, Yarn ๋“ฑ์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ, Deno๋‚˜ Bun์€ ์ž์ฒด์ ์ธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋‚˜ Cloudflare Workers๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๋“ค๋ง์ด๋ผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์„ค๋ช…ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์†์†๋“ค์ด ์ดํ•ดํ•ด์•ผ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€, ๊ฐ™์€ JavaScript๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ์–ด๋А ๋Ÿฐํƒ€์ž„์—์„œ ์‹คํ–‰ํ•˜๋ƒ์— ๋”ฐ๋ผ ์ƒ๋‹นํžˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Fedify ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์–‘ํ•œ JavaScript ๋Ÿฐํƒ€์ž„์„ ์–ด๋–ป๊ฒŒ ๋™์‹œ์— ๋‹ค ์ง€์›ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ์ง€์›ํ•ด์•ผ ํ•˜๋Š” JavaScript ๋Ÿฐํƒ€์ž„ ๋ชจ๋‘์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” API๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ๋Ÿฐํƒ€์ž„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ง€์›ํ•˜๋Š” ๋ชจ๋“  JavaScript ๋Ÿฐํƒ€์ž„์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ Fedify์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๊ฐ JavaScript ๋Ÿฐํƒ€์ž„์—์„œ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Fedify ์ €์žฅ์†Œ์˜ ๊ตฌ์กฐ

2025๋…„ 7์›” ํ˜„์žฌ, Fedify ํ”„๋กœ์ ํŠธ์˜ ์ €์žฅ์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • fedify/ โ€” Fedify์˜ ํ•ต์‹ฌ์ธ @fedify/fedify ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” Deno, Node.js, Bun, Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • cli/ โ€” Fedify ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ CLI ๊ฐœ๋ฐœ ๋„๊ตฌ์ธ @fedify/cli ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” Deno๋กœ๋งŒ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • amqp/ โ€” AMQP/RabbitMQ ๋“œ๋ผ์ด๋ฒ„์ธ @fedify/amqp ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • express/ โ€” Express ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์—ฐ๋™ ๋ชจ๋“ˆ์ธ @fedify/express ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • h3/ โ€” h3 ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์—ฐ๋™ ๋ชจ๋“ˆ์ธ @fedify/h3 ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • postgres/ โ€” PostgreSQL ๋“œ๋ผ์ด๋ฒ„์ธ @fedify/postgres ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • redis/ โ€” Redis ๋“œ๋ผ์ด๋ฒ„์ธ @fedify/redis ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • docs/ โ€” Fedify์˜ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. https://fedify.dev/ ์›น์‚ฌ์ดํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. VitePress๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • examples/ โ€” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Fedify๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๋“ค์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • scripts/ โ€” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฑด๋“œ๋ฆด ์ผ์ด ์—†์„ ๊ฒ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ์ฃผ๋กœ fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ cli/ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฆฐํŠธ์™€ ํ…Œ์ŠคํŠธ

์—ฌ๋А ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์ด ๊ทธ๋ ‡๋“ฏ, Fedify ํ”„๋กœ์ ํŠธ๋„ ๋‚˜๋ฆ„์˜ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜๊ณผ ๊ทœ์น™๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ์ด๋“ค ๋Œ€๋ถ€๋ถ„์€ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๊ธฐ๊ณ„์ ์œผ๋กœ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๊ฐ€ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ์ž˜ ์ง€ํ‚ค๊ณ  ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค:

deno task check-all

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์•Œ์•„์„œ ์„œ์‹ํ™”ํ•ฉ๋‹ˆ๋‹ค:

deno fmt

์•ž์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” Fedify ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค:

deno task test-all

@fedify/fedify ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๊ฒฝ์šฐ, ์ˆ˜์ •๊ณผ ๊ด€๋ จ๋œ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด -f @fedify/fedify ์˜ต์…˜๊ณผ --filter ์˜ต์…˜์„ ํ•จ๊ป˜ ํ™œ์šฉํ•ด ๋ณด์„ธ์š” (ํƒœ์Šคํฌ ์ด๋ฆ„์ด test-all์ด ์•„๋‹ˆ๋ผ test์ž„์— ์ฃผ์˜ํ•˜์„ธ์š”):

deno task -f @fedify/fedify test --filter verifyRequest

ํ˜น์€ -f @fedify/fedify ์˜ต์…˜์„ ์“ฐ๋Š” ๋Œ€์‹  ์ง์ ‘ fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์—์„œ deno task test ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค:

cd fedify/
deno task test --filter verifyRequest

์ฐธ๊ณ ๋กœ --filter ์˜ต์…˜์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ด๋ฆ„์„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ:

test("anArbitraryTest", () => {
  // โ€ฆ ์ƒ๋žต โ€ฆ
});

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋‘ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

deno task -f @fedify/fedify test --filter anArbitraryTest
deno task -f @fedify/fedify test --filter   Arbitrary
deno task -f @fedify/fedify test --filter            Test

์•ž์„œ ์„ค๋ช…ํ•œ deno task test ๋ช…๋ น์–ด๋Š” Deno ๋Ÿฐํƒ€์ž„์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ๋„ ์ž˜ ๋Œ์•„๊ฐ€๋‚˜ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Node.js ๋Ÿฐํƒ€์ž„์—์„œ๋„ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์ชฝ์—์„œ pnpm test ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Node.js์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ๋Œ๋ ค ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

cd fedify/
pnpm test

์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ --test-name-pattern ์˜ต์…˜์„ ํ™œ์šฉํ•˜์„ธ์š”:

pnpm test --test-name-pattern verifyRequest

Bun์—์„œ๋„ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์ชฝ์—์„œ pnpm test:bun ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:

pnpm test:bun

์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ --test-name-pattern ์˜ต์…˜์„ ํ™œ์šฉํ•˜์„ธ์š”:

pnpm test:bun --test-name-pattern verifyRequest

๋งˆ์ง€๋ง‰์œผ๋กœ, Cloudflare Workers์—์„œ๋„ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” pnpm test:cfworkers ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜์„ธ์š”:

pnpm test:cfworkers

์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์ธ์ž๋กœ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ํ‚ค์›Œ๋“œ๋ฅผ ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค:

pnpm test:cfworkers verifyRequest

์‚ฌ์‹ค, ์•ž์„œ ์„ค๋ช…ํ–ˆ๋˜ deno task test-all ๋ช…๋ น์–ด๋Š” ํ•œ ๋ฒˆ์— Deno, Node.js, Bun, Cloudflare Workers ๋ชจ๋‘์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

์•ˆ๋‚ด

ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ ์‹คํŒจํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‚˜์š”? ๊ทธ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ธฐ์—ฌํ•  ์ข‹์€ ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋„๋ก ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์˜ฌ๋ฆฌ์…”๋„ ์ข‹๊ณ , ์ด์Šˆ ํŠธ๋ž˜์ปค์— ์ด์Šˆ๋ฅผ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•ด๋„ ์ข‹์€ ๊ธฐ์—ฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

@fedify/cli: Fedify CLI ๋„๊ตฌ

@fedify/cli ํŒจํ‚ค์ง€๋Š” Fedify๋ฅผ ์ด์šฉํ•˜์—ฌ ActivityPub ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ CLI ํŽธ์˜ ๋„๊ตฌ๋กœ์„œ, ์ฃผ๋กœ ActivityPub ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๋””๋ฒ„๊ทธ๋‚˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€์ธ @fedify/fedify์™€ ๋‹ค๋ฅด๊ฒŒ @fedify/cli๋Š” ํŒจํ‚ค์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๋’ค ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ตณ์ด ์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Deno ํ™˜๊ฒฝ๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ด์œ ๋กœ, @fedify/cli ํŒจํ‚ค์ง€๋Š” ์ฒ˜์Œ ๊ธฐ์—ฌํ•˜๊ธฐ์— ์ข‹์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ @fedif/cli๋Š” CLI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Cliffy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, ๊ด€๋ จํ•ด์„œ ๊ถ๊ธˆํ•œ ๊ฒŒ ์žˆ๋‹ค๋ฉด Cliffy ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์ผ๊ฐ ์ฐพ๊ธฐ

์ค‘์š”

์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•  ์ผ์„ ์ž๋ฐœ์ ์œผ๋กœ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง์žฅ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•  ์ผ์„ ํ• ๋‹นํ•ด ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์˜คํ”ˆ ์†Œ์Šค์—์„œ ํ™œ๋ฐœํ•˜๊ฒŒ ํ™œ๋™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ๋‹จ์ˆœํžˆ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹ค๋ ฅ์ด ์ข‹์€ ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ ์ ˆํ•œ ํ•  ์ผ์„ ์ž˜ ์ฐพ์•„๋‚ด๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ โ€œ์ ์ ˆํ•˜๋‹คโ€๋Š” ๊ฒƒ์€ ์ž์‹ ์˜ ์‹ค๋ ฅ์œผ๋กœ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„ ์ •๋„์˜ ๋‚œ์ด๋„๋ฉด์„œ๋„ ํ”„๋กœ์ ํŠธ์— ์ž„ํŒฉํŠธ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ํ•  ์ผ์„ ์ด์Šˆ ํŠธ๋ž˜์ปค์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Fedify ์—ญ์‹œ GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ์ด์Šˆ ํŠธ๋ž˜์ปค๋กœ ํ•  ์ผ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋Š” ํ•œ, ์ด์Šˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜์–ด๋กœ ์ž‘์„ฑ๋˜๊ฑฐ๋‚˜, ์ ์–ด๋„ ์˜์–ด๊ฐ€ ๋ณ‘๊ธฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜์–ด๊ฐ€ ์ต์ˆ™์น˜ ์•Š์€ ๋ถ„๋“ค์€ Kagi ๋ฒˆ์—ญ ๋“ฑ์„ ํ™œ์šฉํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ๋•Œ๋ฌธ์— ์–ด๋ ค์šฐ์‹  ๋ถ„์€ ๋ฉ˜ํ† ์—๊ฒŒ ๋„์›€์„ ์ฒญํ•˜์„ธ์š”.

์ด์Šˆ๋Š” ํฌ๊ฒŒ ์„ธ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

ํ”ผ์ฒ˜ (feature)
๋ง ๊ทธ๋Œ€๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.
๋ฒ„๊ทธ (bug)
๊ธฐ์กด์— ์žˆ๋˜ ๊ธฐ๋Šฅ์˜ ์˜ค์ž‘๋™์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.
ํƒœ์Šคํฌ (task)
์‹ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ด์™ธ์˜ ์ž‘์—…๋“ค์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ฌธ์„œ ์ˆ˜์ • ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•ฉ๋‹ˆ๋‹ค.
๋ฏธ๋ถ„๋ฅ˜ (no type)
์•„์ง ๋ถ„๋ฅ˜๋˜์ง€ ์•Š์€ ์ด์Šˆ๋“ค์ธ๋ฐ, ์ด์Šˆ๋Š” ์–ด๋–ป๊ฒŒ๋“  ๋ถ„๋ฅ˜๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ณดํ†ต์€ ์—†์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ถ„๋ฅ˜์™€๋Š” ๋ณ„๊ฐœ๋กœ, Fedify ์ด์Šˆ ํŠธ๋ž˜์ปค์—์„œ๋Š” ๋ ˆ์ด๋ธ”์„ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ ˆ์ด๋ธ”์€ ๋ฒ”๋ก€/๋ ˆ์ด๋ธ” ์ด๋ฆ„ ํ˜•์‹์„ ๋”ฐ๋ฅด๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค:

difficulty/beginner
์‰ฌ์šด ๋‚œ์ด๋„
good first issue
์ฒ˜์Œ ๊ธฐ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉ
help wanted
๋„์›€ ํ•„์š”
type/documentation
๋ฌธ์„œ ๊ด€๋ จ

์•ˆ๋‚ด

์ข€ ๋” ์ž์„ธํžˆ ํ™•์ธํ•˜์‹ค ๋ถ„์€ ์ „์ฒด ๋ ˆ์ด๋ธ” ๋ชฉ๋ก์„ ํ™•์ธํ•˜์„ธ์š”.

์—ฌ๊ธฐ์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐ€์žฅ ์ฃผ๋ชฉํ•˜์…”์•ผ ํ•  ๋ ˆ์ด๋ธ”์€ ๋ฐ”๋กœ good first issue์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ ˆ์ด๋ธ”์ด ๋ถ™์€ ์ด์Šˆ๋Š” ์ฒ˜์Œ ๊ธฐ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฒซ ๊ธฐ์—ฌ ๋•Œ ํ•  ์ผ์„ ์ฐพ์„ ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์Šˆ๋“ค์„ ์ฐฌ์ฐฌํžˆ ์ฝ์–ด๋ณด์‹œ๊ณ  ํ•ด ๋ณผ ๋งŒํ•œ ์ผ๊ฐ์„ ๊ณ ๋ฅด์„ธ์š”. ์ด์Šˆ๋ฅผ ์ฝ์–ด๋„ ์ดํ•ด๊ฐ€ ์•ˆ ๋  ๊ฒฝ์šฐ์—๋Š” ๋Œ“๊ธ€๋กœ ์งˆ๋ฌธ์„ ๋‚จ๊ธฐ๊ฑฐ๋‚˜ ๋ฉ˜ํ† ์—๊ฒŒ ์งˆ๋ฌธํ•˜์„ธ์š”.

๊ธฐ์—ฌํ•ด ๋ณผ ์ด์Šˆ๋ฅผ ์ฐพ์œผ์…จ๋‹ค๋ฉด, ํ•ด๋‹น ์ด์Šˆ๋ฅผ ์ด๋ฏธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ง„ํ–‰์ค‘์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ์•„๋ฌด๋„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ๋Œ“๊ธ€์„ ์ด์Šˆ์— ๋‹ฌ์•„์ฃผ์„ธ์š”.

๊ณผ์ œ

์ฒ˜์Œ ๊ธฐ์—ฌํ•  ์ด์Šˆ๋ฅผ ์ฐพ์•„ ์ด์Šˆ์— ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์„ธ์š”. ์ด์Šˆ๋ฅผ ๋ชป ์ฐพ๊ฒ ๋‹ค๋ฉด ๋ฉ˜ํ† ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”. ๋ฉ˜ํ† ๊ฐ€ ๊ธฐ์—ฌํ•  ๋งŒํ•œ ์ผ์„ ํ•จ๊ป˜ ์ฐพ์•„์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋‚ด

๊ตณ์ด ์ด์Šˆ ํŠธ๋ž˜์ปค์— ์ด๋ฏธ ์žˆ๋Š” ์ด์Šˆ ์ค‘์—์„œ๋งŒ ๊ณ ๋ฅผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Fedify๋ฅผ ์จ ๋ณด๋ฉด์„œ ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ•˜์…จ๋‹ค๋ฉด, ๊ทธ๊ฑธ ์ด์Šˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์ง์ ‘ ํ•ด๊ฒฐํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์˜คํ”ˆ ์†Œ์Šค์˜ ๋งŽ์€ ์ด์Šˆ๋“ค์ด ์ด์Šˆ๋ฅผ ์ œ๊ธฐํ•œ ์‚ฌ๋žŒ์— ์˜ํ•ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ •๋ณด ๋ฐ ์งˆ๋ฌธ

๋ณธ ๋ฌธ์„œ์—์„œ ๋‹ค๋ฃจ์ง€ ๋ชปํ•œ ๋‚ด์šฉ๋„ ๋งŽ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ฌธ์„œ๋“ค์€ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ์ข€ ๋” ๋ณด์ถฉํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋ณธ ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ํ˜น์€ ์ฝ๊ณ  ๋‚˜์„œ๋„ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๋ฉ˜ํ† ์—๊ฒŒ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”. Discord ์„œ๋ฒ„์—์„œ ์งˆ๋ฌธํ•˜์…”๋„ ์ข‹๊ณ , GitHub Discussions์— ์งˆ๋ฌธ ๊ธ€์„ ์˜ฌ๋ฆฌ์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social ยท Reply to ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s post

And just finished writing a comprehensive contributor guide for the mentees!

You can check it out hereโ€”it's Korean though: https://hackers.pub/@hongminhee/2025/ossca-fedify-contributors-guide.

It covers everything from setting up the accounts and development environment to finding good first issues. While it's primarily for the OSSCA participants, anyone interested in contributing to @fedify is welcome to use it as a reference.

Ready to onboard the next wave of developers!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee)'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee)

@hongminhee@hackers.pub

์•ˆ๋‚ด

์ด ๋ฌธ์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ ์ฐธ์—ฌํ˜• ํ”„๋กœ๊ทธ๋žจ์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ ๋ฉ˜ํ‹ฐ๋“ค์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ, Fedify ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์ด๋ผ๋ฉด ์–ผ๋งˆ๋“ ์ง€ ํ™œ์šฉํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜คํ”ˆ ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ ์ฐธ์—ฌํ˜• ํ”„๋กœ๊ทธ๋žจ์—์„œ Fedify ํ”„๋กœ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ํ•  ๋ฉ˜ํ†  ํ™๋ฏผํฌ์ž…๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜์‹œ๊ฒŒ ๋œ ๊ฒƒ์„ ์ง„์‹ฌ์œผ๋กœ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์•ž์œผ๋กœ Fedify ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•Œ๊ณ  ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๊ธด ๋‚ด์šฉ์ด ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์–ด๋ณด์‹œ๊ณ  ๋”ฐ๋ผํ•ด์•ผ ํ•  ๊ณผ์ œ๋Š” ๋”ฐ๋ผํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์— ๋‚˜์˜จ ๊ณผ์ œ๋“ค์€ ๋ณธ๊ฒฉ์ ์ธ ๊ธฐ์—ฌ๋ฅผ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†Œํ†ต ์ฑ„๋„

์ค‘์š”

OSSCA ์ž์ฒด Discord ์„œ๋ฒ„์—๋„ ์ดˆ๋Œ€๋˜์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ, ๊ทธ๊ณณ์—์„œ๋Š” ํ–‰์‚ฌ์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋งŒ ์ฃผ๋กœ ํ•˜๊ฒŒ ๋  ๊ฒ๋‹ˆ๋‹ค. ์‹ค์ œ ๊ธฐ์—ฌ์™€ ๊ฐœ๋ฐœ์— ๊ด€๋ จ๋œ ์ด์•ผ๊ธฐ๋Š” ์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…ํ•  Fedify ํ”„๋กœ์ ํŠธ์˜ Discord ์„œ๋ฒ„์—์„œ ์ด๋ค„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ๊ฒƒ์€ Fedify ํ”„๋กœ์ ํŠธ์˜ Discord ์„œ๋ฒ„์— ์ž…์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์•„์ง Discord ๊ณ„์ •์ด ์—†๋‹ค๋ฉด ํ•˜๋‚˜ ๋งŒ๋“œ์„ธ์š”. ๊ฝค ๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์ด Discord์—์„œ ์†Œํ†ต์„ ํ•ฉ๋‹ˆ๋‹ค. Discord ๊ณ„์ •์„ ๋งŒ๋“ค์–ด ๋‘๋ฉด ์•ž์œผ๋กœ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•  ๋•Œ ์“ธ๋ชจ๊ฐ€ ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ์˜ Discord ์„œ๋ฒ„์— ์ž…์žฅํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ์ด ๋œน๋‹ˆ๋‹ค:

What language do you speak? ใฉใฎ่จ€่ชžใ‚’่ฉฑใ—ใพใ™ใ‹๏ผŸ ์–ด๋–ค ์–ธ์–ด๋ฅผ ์“ฐ์‹œ๋‚˜์š”?

๊ทธ๋Ÿฌ๋ฉด ํ•œ๊ตญ์–ด๋ฅผ ํฌํ•จํ•ด ์ž์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋“ค์„ ์„ ํƒํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์—ฌ๋Ÿฌ ์ฑ„๋„๋“ค์ด ๋ณด์ด๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ์ค‘์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์ฃผ๋กœ ์ด์šฉํ•˜๊ฒŒ ๋  ์ฑ„๋„์€ #fedify-dev-ko ์ฑ„๋„์ž…๋‹ˆ๋‹ค.

๋ณธ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ๋”ฐ๋ผํ•˜๋ฉด์„œ ์ค‘๊ฐ„์— ์–ด๋ ค์›€์ด ์žˆ๊ฑฐ๋‚˜ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ฑ„๋„์—์„œ ํŽธํ•˜๊ฒŒ ์งˆ๋ฌธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ด€๋ จํ•ด์„œ ๊ถ๊ธˆํ•œ ์ ์€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ด๋ผ๋„ Discord ์„œ๋ฒ„์—์„œ ์งˆ๋ฌธ ์ฃผ์„ธ์š”. โ€œ์‹œ๊ฐ„์ด ๋‚  ๋•Œ ์ฒœ์ฒœํžˆ ํ•ด๊ฒฐํ•ด์•ผ์ง€โ€๋ณด๋‹ค๋Š” ์ผ๋‹จ ๋ฌผ์–ด๋ณด๋Š”๊ฒŒ ๋‚ซ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ดˆ๋ฐ˜์˜ ๋งŽ์€ ๋ฌธ์ œ๋Š”, ๋ณดํ†ต ์งˆ๋ฌธ์„ ๋งŽ์ด ํ•˜๋ฉด ๋นจ๋ฆฌ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ์ •ํ•ด๋‘์„ธ์š”. ์ด๋ฅผํ…Œ๋ฉด 30๋ถ„์œผ๋กœ ์ •ํ–ˆ์œผ๋ฉด 30๋ถ„ ๋‚ด๋กœ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋ฉด ์ผ๋‹จ ์งˆ๋ฌธ์„ ํ•ฉ์‹œ๋‹ค.

๊ณผ์ œ

Discord ์„œ๋ฒ„์— ์ž…์žฅํ•˜์‹  ๋’ค, #fedify-dev-ko ์ฑ„๋„์—์„œ ๊ฐ„๋‹จํžˆ ์ž๊ธฐ ์†Œ๊ฐœ๋ฅผ ํ•ด ์ฃผ์„ธ์š”. ๋ณธ์ธ์˜ ์ด๋ฆ„๊ณผ GitHub ์•„์ด๋””๋ฅผ ๊ผญ ์•Œ๋ ค์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ถŒ๊ณ 

์›ํ™œํ•˜๊ณ  ์ฆ‰์‹œ์ ์ธ ์†Œํ†ต์„ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ์ธ์˜ ์Šค๋งˆํŠธํฐ์— Discord ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•œ ๋’ค, ์•Œ๋ฆผ์„ ํ—ˆ์šฉํ•ด ์ฃผ์„ธ์š”. ๋žฉํ†ฑ ๋ฐ ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์—์„œ๋„ Discord ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ํ•ญ์ƒ ์‹คํ–‰ํ•ด ๋‘์‹ค ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ๊ณ 

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด Discord ๊ณ„์ •์˜ ์•„๋ฐ”ํƒ€๋ฅผ GitHub ๊ณ„์ •์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„๊ณผ ํ†ต์ผํ•ด ์ฃผ์„ธ์š”. ๋ฉ˜ํ‹ฐ๊ฐ€ ์›Œ๋‚™ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ์•„๋ฌด๋Ÿฐ ์ด๋ฏธ์ง€๋„ ์„ค์ •ํ•ด ๋‘์ง€ ์•Š์€ ๋ถ„๋“ค์€ ์•„๋ฌด ๊ทธ๋ฆผ์ด๋ผ๋„ ์ข‹์œผ๋‹ˆ ์‹œ์ธ์„ฑ์„ ์œ„ํ•ด ์„ค์ •์„ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์—ฐํ•ฉ์šฐ์ฃผ(fediverse)๋ž€?

์•ˆ๋‚ด

์ด๋ฏธ ์—ฐํ•ฉ์šฐ์ฃผ๋‚˜ ActivityPub์— ๋Œ€ํ•ด ์ต์ˆ™ํ•˜์‹  ๋ถ„๋“ค์€ ์„ค๋ช…์€ ๊ฑด๋„ˆ ๋›ฐ์‹œ๊ณ  ์ด ์„น์…˜ ๋งˆ์ง€๋ง‰์˜ ๊ณผ์ œ๋งŒ ํ•˜์…”๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์šฐ์„  ํŽ˜๋””๋ฒ„์Šค(fediverse), ์ฆ‰ ํ•œ๊ตญ์–ด๋กœ ์—ฐํ•ฉ์šฐ์ฃผ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋ฅผ ๊ฐ–์ถœ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…๋ž˜์˜ ์ค‘์•™์ง‘๊ถŒ์ ์ธ SNS๋“ค์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ๋กœ, SNS์— ์˜ฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ธฐ์—…์ด ์‚ฌ์œ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘˜์งธ๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ SNS๋ผ๋ฆฌ๋Š” ์†Œํ†ตํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๋‘๋ฒˆ์งธ ํŠน์ง•์€ ์ด๋ฉ”์ผ์„ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ์•„์ฃผ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„ ๋ฉ”์ผ์„ ์“ฐ๋Š” ์‚ฌ๋žŒ์ด Gmail์„ ์“ฐ๋Š” ์‚ฌ๋žŒ๊ณผ ์†Œํ†ตํ•  ์ˆ˜ ์—†์„๊นŒ์š”? ๊ทธ๋ ‡์ง€ ์•Š์ง€์š”. ํ•˜์ง€๋งŒ Instagram ์‚ฌ์šฉ์ž๋Š” X (่ˆŠ Twitter) ์‚ฌ์šฉ์ž์™€ ์†Œํ†ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋‚˜์˜จ ๋Œ€์•ˆ SNS๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. Mastodon์ด๋‚˜ Pixelfed ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ SNS๋“ค์€ ๋ˆ„๊ตฌ๋ผ๋„ ์ž์‹ ์˜ ์„œ๋ฒ„์— ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ™ˆ ์„œ๋ฒ„์—์„œ ๋Œ์•„๊ฐ€๋Š” Mastodon ์„œ๋ฒ„๋„ ๊ฝค ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋Œ€ํ˜• ์„œ๋ฒ„๋ผ๋Š” ์„ ํƒ์ง€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, Mastodon ์„œ๋ฒ„ ์ค‘์—์„œ ๊ฐ€์žฅ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ์„œ๋ฒ„์ธ mastodon.social์€ Mastodon ๊ฐœ๋ฐœ ํŒ€์ด ์ง์ ‘ ์šด์˜ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์˜๋ฌธ์ด ๋“œ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ํ™ˆ ์„œ๋ฒ„์— Mastodon์„ ์„ค์น˜ํ•ด๋ดค์ž ํ˜ผ์ž ์“ฐ๋Š” ์ผ๊ธฐ์žฅ์ด ์•„๋‹Œ๊ฐ€? ์‚ฌ์‹ค, Mastodon ์„œ๋ฒ„๋“ค์€ ์„œ๋กœ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ด๋ฉ”์ผ๊ณผ๋„ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ํ™ˆ ์„œ๋ฒ„์— ์ด๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ค์–ด๋„, ๋„ค์ด๋ฒ„ ๋ฉ”์ผ์ด๋‚˜ Gmail๊ณผ ์„œ๋กœ ๋ฉ”์ผ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”. ์‹ค์ œ๋กœ, Mastodon์˜ ๊ณ„์ • ์ด๋ฆ„์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค:

@username@server.com

์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ Mastodon ์„œ๋ฒ„๋ผ๋ฆฌ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ๋œ ํ‘œ์ค€์ด ๋ฐ”๋กœ ActivityPub ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ, ์ด ActivityPub ํ”„๋กœํ† ์ฝœ์€ Mastodon ํ”„๋กœ์ ํŠธ๊ฐ€ ๋…์ž์ ์œผ๋กœ ์ •ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ, W3C์—์„œ ์›น ํ‘œ์ค€์œผ๋กœ ์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Mastodon ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Pixelfed ๋“ฑ ActivityPub์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋“ค๋„ ์„œ๋กœ ์†Œํ†ต์ด ๋ฉ๋‹ˆ๋‹ค. Mastodon์—์„œ Pixelfed๋กœ ๋Œ“๊ธ€ ๋‹ค๋Š” ๊ฒƒ๋„ ๋˜๊ณ , Pixelfed ์‚ฌ์šฉ์ž๊ฐ€ Mastodon ์‚ฌ์šฉ์ž๋ฅผ ํŒ”๋กœํ•˜๋Š” ๊ฒƒ๋„ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ SNS ์†Œํ”„ํŠธ์›จ์–ด, ์‚ฌ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ผ๋ฆฌ ์ž์œ ๋กญ๊ฒŒ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์—ฐํ•ฉ(federation)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด, ์ด๋ ‡๊ฒŒ ์—ฐํ•ฉ๋œ ์„œ๋กœ ๋‹ค๋ฅธ SNS๋“ค์„ ๋ชจ๋‘ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ SNS๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ถ€๋ฅด๋Š” ๋ง์ด ๋ฐ”๋กœ ์—ฐํ•ฉ์šฐ์ฃผ, ํŽ˜๋””๋ฒ„์Šค์ž…๋‹ˆ๋‹ค.

์—ฐํ•ฉ์šฐ์ฃผ๋Š” ํ˜„์žฌ๋„ ๊พธ์ค€ํžˆ ์ปค ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์—๋Š” Meta์˜ Threads๋„ ActivityPub์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , WordPress๋„ ActivityPub ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ณต์‹์ ์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ธฐ์กด์˜ ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์€ ๊ฐ์ž์˜ ์„œ๋ฒ„์— ์ง์ ‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜€๋˜ ๊ฒƒ์— ๋ฐ˜ํ•ด, Threads๋Š” ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹˜์—๋„ ActivityPub์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ ์—์„œ ์ƒ๋‹นํžˆ ์ด๋ก€์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์˜ ์—ฐํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

์•ˆ๋‚ด

์—ฐํ•ฉ์šฐ์ฃผ์— ๊ด€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์–ด์ง€์…จ๋‹ค๋ฉด, ใ€ˆ์—ฐํ•ฉ์šฐ์ฃผ(fediverse)์™€ ActivityPub ํ”„๋กœํ† ์ฝœ ์ดํ•ดํ•˜๊ธฐ: ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ฐ€์ด๋“œใ€‰๋ผ๋Š” ๊ธ€๋„ ์ฝ์–ด๋ณด์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ณผ์ œ

์•„์ง ์—ฐํ•ฉ์šฐ์ฃผ๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณธ ์  ์—†๋‹ค๋ฉด, ๊ณ„์ •์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. ๊ณ„์ •์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์“ธ ์ง€ ๋จผ์ € ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Mastodon๊ณผ Misskey๋Š” ์ผ์ข…์˜ X์ฒ˜๋Ÿผ ๋‹จ๋ฌธ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ SNS์ž…๋‹ˆ๋‹ค. Pixelfed๋Š” Instagram์ฒ˜๋Ÿผ ์‚ฌ์ง„์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ SNS์ž…๋‹ˆ๋‹ค. Meta์˜ Threads๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฝ๊ณ  ๊ณ„์‹œ๋Š” ์ด ๊ธ€์ด ์˜ฌ๋ผ์˜จ Hackers' Pub๋„ ์‚ฌ์‹ค์€ ์—ฐํ•ฉ์šฐ์ฃผ์˜ ์ผ๋ถ€๋กœ์„œ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ SNS์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•˜์‹œ๋“  ์„œ๋กœ ์†Œํ†ตํ•˜๋Š” ๋ฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ Mastodon์ด๋‚˜ Misskey, Pixelfed๋ฅผ ์„ ํƒํ•˜์…จ๋‹ค๋ฉด, ์„œ๋ฒ„๋ฅผ ๊ณ ๋ฅด์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋ฌผ๋ก , ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜์‹œ๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ๋งŽ์€ ๊ฑธ ๋ฐฐ์šฐ์‹ค ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.) ๋ฌด์Šจ ์„œ๋ฒ„๋ฅผ ๊ณจ๋ผ์•ผ ํ•  ์ง€ ๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๋ฉด, Mastodon์˜ ๊ฒฝ์šฐ silicon.moe ์„œ๋ฒ„๋ฅผ, Misskey์˜ ๊ฒฝ์šฐ stella.place ์„œ๋ฒ„๋ฅผ, Pixelfed์˜ ๊ฒฝ์šฐ chueok.pics ์„œ๋ฒ„๋ฅผ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ Threads๋ฅผ ๊ณ ๋ฅด์…จ๋‹ค๋ฉด, ์„œ๋ฒ„๋ฅผ ๊ณ ๋ฅผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Threads๋Š” ์„ค์น˜ํ˜• ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ Meta์—์„œ ์šด์˜ํ•˜๋Š” ์ƒ์šฉ ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์„ค์ •์— ๊ฐ€์…”์„œ ํŽ˜๋””๋ฒ„์Šค ๊ณต์œ  ์„ค์ •์„ ์ผœ ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ Hackers' Pub์„ ๊ณ ๋ฅด์…จ๋‹ค๋ฉด, ์—ญ์‹œ ์„œ๋ฒ„๋ฅผ ๊ณ ๋ฅผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ดˆ๋Œ€์žฅ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฉ˜ํ† ์—๊ฒŒ ์ดˆ๋Œ€์žฅ์„ ์š”์ฒญํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ณผ์ œ

์—ฐํ•ฉ์šฐ์ฃผ ๊ณ„์ •์ด ์ƒ๊ธฐ์…จ๋‹ค๋ฉด, ์ด์ œ ์นœ๊ตฌ๋ฅผ ์‚ฌ๊ท€์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฉ˜ํ‹ฐ๋“ค์—๊ฒŒ ๊ณ„์ • ์ฃผ์†Œ๋ฅผ ๋ฌผ์–ด๋ณด๊ณ  ์„œ๋กœ ํŒ”๋กœ๋ฅผ ํ•ด ๋ณด์„ธ์š”. ๋ฉ˜ํ† ๋„ ํŒ”๋กœํ•ด ๋ณด์„ธ์š”. (๋ฉ˜ํ† ๋„ ๋งžํŒ” ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.) ๋ฉ˜ํ† ์˜ ์—ฐํ•ฉ์šฐ์ฃผ ๊ณ„์ • ์ฃผ์†Œ๋Š” @hongminhee@hackers.pub์ž…๋‹ˆ๋‹ค.

๊ณ„์ • ์ฃผ์†Œ๋กœ ํŒ”๋กœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์†Œํ”„ํŠธ์›จ์–ด๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์ฐฝ์— ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๊ณ„์ •์ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ณ„์ •์ด ๋ณด์ธ๋‹ค๋ฉด ํŒ”๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ณผ์ œ

์ƒ์„ฑํ•œ ๊ณ„์ •์œผ๋กœ ๋ฉ˜ํ† ์˜ ๊ณ„์ •์ธ @hongminhee@hackers.pub์„ ๋ฉ˜์…˜ํ•˜์—ฌ ๊ธ€์„ ์จ ์ฃผ์„ธ์š”. ๊ธ€ ๋‚ด์šฉ์€ ๋ญ๋“  ์ข‹์Šต๋‹ˆ๋‹ค.

JavaScript์™€ TypeScript

์•ˆ๋‚ด

์ด๋ฏธ JavaScript์™€ TypeScript์— ์ต์ˆ™ํ•˜์‹œ๋‹ค๋ฉด ์ด ์ฑ•ํ„ฐ๋Š” ๋„˜๊ธฐ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ๋Š” TypeScript๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. TypeScript๋Š” JavaScript์— ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•œ ์–ธ์–ด๋กœ, ๋Ÿฐํƒ€์ž„์— ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ฅผ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์— ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. TypeScript๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € JavaScript๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„์ง JavaScript์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹  ๋ถ„๋“ค์€ ใ€Š๋ชจ๋˜ JavaScript ํŠœํ† ๋ฆฌ์–ผใ€‹์˜ ํŒŒํŠธ 1์„ ์ฝ๊ณ  ๋”ฐ๋ผํ•ด ๋ณผ ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค. ํŒŒํŠธ 2 ์ดํ›„์˜ ๋‚ด์šฉ์€ Fedify ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐ์— ํฌ๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฝ์ง€ ์•Š์œผ์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

JavaScript์—๋Š” ์–ด๋А ์ •๋„ ์ต์ˆ™ํ•˜์ง€๋งŒ ์•„์ง TypeScript์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹  ๋ถ„๋“ค๊ป˜๋Š”, ใ€ŠThe TypeScript Handbookใ€‹์„ ์ฝ๊ณ  ๋”ฐ๋ผํ•ด ๋ณผ ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ํ•ธ๋“œ๋ถ ํŽ˜์ด์ง€ ์šฐ์ธก ์ƒ๋‹จ์— ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ์œผ๋กœ ๊ฐ€๋Š” ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ๊ทธ ํ”„๋กœ์ ํŠธ์—์„œ ์“ฐ์ด๋Š” ์–ธ์–ด๋ฅผ ์†์†๋“ค์ด ๊นŠ๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•  ๋•Œ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ดํ•ดํ•ด๋„ ์ข‹์œผ๋‹ˆ, ์–ด๋А ์ •๋„ ์–ธ์–ด ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•ด์กŒ๋‹ค ์‹ถ์œผ๋ฉด ์‹ค์ œ Fedify ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ์ข€ ๋” ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ์–ธ์–ด ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋”ฐ๋กœ ์กฐ์‚ฌํ•˜๋Š” ์‹์œผ๋กœ ์ตํžˆ์‹œ๋Š” ๊ฒŒ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ • ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ถ€๋‹ด ์—†์ด Fedify ํ”„๋กœ์ ํŠธ Discord ์„œ๋ฒ„์˜ #fedify-dev-ko ์ฑ„๋„์—์„œ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”.

Fedify๋ž€?

์—ฌ๋Ÿฌ๋ถ„์€ ์›น ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ HTTP๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์‹œ๋‚˜์š”? ์•„๋งˆ๋„ ๋Œ€๋ถ€๋ถ„์€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ์—” ํ•  ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋Œ€์‹  ์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ Express๋‚˜ Next.js, Django ๊ฐ™์€ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์—ฐํ•ฉ์šฐ์ฃผ SNS ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ, ActivityPub์„ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ํ•  ๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ํ•ด ์ค„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ Fedify์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“  ๊ฐ„์—, ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๊ทธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์จ๋ณด๊ณ  ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์ˆ™์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์จ๋ณด์ง€๋„ ์•Š์€ ์†Œํ”„ํŠธ์›จ์–ด์— ๊ธฐ์—ฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋„ Fedify์— ๊ธฐ์—ฌํ•˜๊ธฐ์— ์•ž์„œ Fedify๋ฅผ ์จ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Fedify๋Š” ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๋„๊ตฌ์ด๋ฏ€๋กœ, Fedify๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์—ฐํ•ฉ์šฐ์ฃผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค๋Š” ๋œป์ด ๋ฉ๋‹ˆ๋‹ค. Fedify๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์€ ActivityPub ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. Fedify๋ฅผ ์จ ๋ณด๋ฉด์„œ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ€๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ๋ง‰ํžˆ๋Š” ๊ฒŒ ์žˆ๋‹ค๋ฉด Discord ์„œ๋ฒ„์˜ #fedify-help-ko ์ฑ„๋„์—์„œ ์งˆ๋ฌธํ•˜์„ธ์š”.

๊ณผ์ œ

Fedify๋ฅผ ๋ฐฐ์šฐ๊ณ  ์จ๋ณด๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฝ๊ณ  ๋”ฐ๋ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Fedify ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์˜ ํ•œ๊ตญ์–ดํŒ์ธ ใ€ˆ๋‚˜๋งŒ์˜ ์—ฐํ•ฉ์šฐ์ฃผ ๋งˆ์ดํฌ๋กœ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐใ€‰๋ฅผ ์ฝ๊ณ  ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ์„œ ์ง„ํ–‰ํ•˜์„ธ์š”. ๋น ๋ฅด๋ฉด ํ•˜๋ฃจ, ๋А๊ธ‹ํ•˜๊ฒŒ ํ•˜๋ฉด ์‚ฌํ˜ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋ฉ˜ํ† ์—๊ฒŒ ๋ถ€๋‹ด ์—†์ด ์งˆ๋ฌธํ•˜์„ธ์š”.

์ €์žฅ์†Œ ํฌํฌ ๋ฐ ํด๋ก 

์ฃผ์˜

Windows ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜์‹ค ๋•Œ๋Š” (WSL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด) Git์˜ core.autocrlf ์„ค์ •์„ ๊บผ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค:

git config --global core.autocrlf false

์•ˆ๋‚ด

Fedify ํ”„๋กœ์ ํŠธ๋ฅผ Windows ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, Linux๋‚˜ macOS์— ๋น„ํ•ด ํŽธ์˜์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ๋„ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด WSL์„ ์„ธํŒ…ํ•˜์‹œ๊ณ  WSL ์•ˆ์—์„œ ์ž‘์—…ํ•˜์‹œ๋Š” ๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Fedify์˜ GitHub์— ์ €์žฅ์†Œ๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ €์žฅ์†Œ๋ฅผ ๊ฐ์ž ํฌํฌ(fork)ํ•˜์‹  ๋’ค, ํฌํฌํ•œ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ์— ํด๋ก ํ•˜์„ธ์š”. ํด๋ก ํ•˜์‹  ๋’ค, ํด๋ก ํ•œ ๋กœ์ปฌ ์ €์žฅ์†Œ ์•ˆ์— ๋“ค์–ด๊ฐ€ ์—…์ŠคํŠธ๋ฆผ ์ €์žฅ์†Œ๋ฅผ ๋ฆฌ๋ชจํŠธ๋กœ ์ถ”๊ฐ€ํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค:

git remote add upstream https://github.com/fedify-dev/fedify.git
git fetch upstream
git pull --set-upstream upstream main

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

Fedify์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์€ ์ผ๋ฐ˜์ ์ธ JavaScript ํ”„๋กœ์ ํŠธ๋“ค์— ๋น„ํ•ด ์กฐ๊ธˆ ๋ณต์žกํ•œ ํŽธ์ž…๋‹ˆ๋‹ค. Node.js ์ด์™ธ์—๋„ Deno์™€ Bun ๋“ฑ ์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”. Fedify์˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹œ์Šคํ…œ์— ๋ชจ๋‘ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • Node.js v22 ์ด์ƒ
  • Deno v2 ์ด์ƒ
  • Bun ์ตœ์‹  ๋ฒ„์ „
  • pnpm ์ตœ์‹  ๋ฒ„์ „

ํ•˜๋‚˜ํ•˜๋‚˜ ์ง์ ‘ ์„ค์น˜ํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค๋งŒ, ๊ท€์ฐฎ์œผ์‹œ๋‹ค๋ฉด mise๋ผ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒํ•ฉ๋‹ˆ๋‹ค. mise๋Š” ์ •๋ง ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

sudo pacman -S mise      # Arch Linux
brew install mise        # macOS
winget install jdx.mise  # Windows
# ์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ์ง€์›

์„ค์น˜ํ•˜๊ณ  ๋‚˜์„œ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— mise๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋“ค์„ ์ถ”๊ฐ€ํ•˜๋„๋ก mise๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋–ค ์…ธ์„ ์‚ฌ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค:

zsh
echo 'eval "$(mise activate zsh)"' >> "${ZDOTDIR-$HOME}/.zshrc"
. "${ZDOTDIR-$HOME}/.zshrc"
Bash
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
. ~/.bashrc
PowerShell
echo 'mise activate pwsh | Out-String | Invoke-Expression' >> $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
. $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

ํŒ

๋Œ€๋ถ€๋ถ„์˜ Linux์˜ ๊ฒฝ์šฐ (๋˜๋Š” Windows์˜ WSL ์•ˆ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ) ๋ณ„ ๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด bash๋ฅผ ์“ฐ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. macOS๋ฅผ ์“ฐ์‹œ๊ณ  ๋ณ„ ๋‹ค๋ฅธ ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ์…จ๋‹ค๋ฉด zsh์„ ์“ฐ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. (WSL์ด ์•„๋‹Œ) Windows์˜ ๊ฒฝ์šฐ์—๋Š” ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์•„๋‹Œ PowerShell ์•ˆ์—์„œ ์ž‘์—…ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mise๋ฅผ ์„ค์น˜ํ•˜์…จ๋‹ค๋ฉด, ๋กœ์ปฌ ์ €์žฅ์†Œ ์•ˆ์— ๋“ค์–ด๊ฐ€ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ•œ ๋ฒˆ์— ์„ค์น˜ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

mise install --yes

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Fedify ์ €์žฅ์†Œ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” mise ์„ค์ • ํŒŒ์ผ์„ ์‹ ๋ขฐํ•˜๊ฒ ๋ƒ๋Š” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋œน๋‹ˆ๋‹ค. Yes๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”:

mise config files in ~/fedify are not trusted. Trust them?


   Yes     No     All  

โ†/โ†’ toggle โ€ข y/n/a/enter submit

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ž˜ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Fedify์˜ ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค. ์ฒซ ์‹คํ–‰ ์‹œ ํ†ต์ƒ 5๋ถ„ ์ •๋„ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค:

deno task test-all

Git ํ›…๋„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

deno task hooks:install

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹ค์ œ ํŽธ์ง‘ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ๊ฐ™์€ Visual Studio Code ๊ณ„์—ด์ธ Cursor๋‚˜ Windsurf์—์„œ๋„ ๊ณผ์ •์€ ๋Œ€๋™์†Œ์ดํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

Visual Studio์™€ Visual Studio Code๋Š” ์„œ๋กœ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ณ„๊ฐœ์˜ ์ œํ’ˆ์ด๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”.

์•ˆ๋‚ด

์—ฌ๋Ÿฌ๋ถ„์ด Emacs๋‚˜ Vim์˜ ๋…์‹คํ•œ ์‹ ์ž๋ผ๋ฉด Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ, Deno์˜ ๊ณต์‹ ํ™˜๊ฒฝ ์„ค์ • ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Deno ๋žญ๊ท€์ง€ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์šฐ์„  ๋กœ์ปฌ ์ €์žฅ์†Œ ์•ˆ์—์„œ code ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Visual Studio Code๋ฅผ ๋„์›๋‹ˆ๋‹ค:

code .     # Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
cursor .   # Cursor๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
windsurf . # Windsurf๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

Visual Studio Code ์ฐฝ์ด ๋œจ๋ฉด, ํ™”๋ฉด ๊ฐ€์šด๋ฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค:

์ด ํด๋”์— ์žˆ๋Š” ํŒŒ์ผ์˜ ์ž‘์„ฑ์ž๋ฅผ ์‹ ๋ขฐํ•ฉ๋‹ˆ๊นŒ?

ํ”„๋กฌํ”„ํŠธ์—์„œ ์˜ˆ, ์ž‘์„ฑ์ž๋ฅผ ์‹ ๋ขฐํ•ฉ๋‹ˆ๋‹ค ๋ฒ„ํŠผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์€ ํ”„๋กฌํ”„ํŠธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค:

์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•ด ๊ถŒ์žฅ๋˜๋Š” Street Side Software, Red Hat ๋“ฑ์˜ ํ™•์žฅ์„(๋ฅผ) ์„ค์น˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ”„๋กฌํ”„ํŠธ์—์„œ ์„ค์น˜ ๋ฒ„ํŠผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ™”๋ฉด ๊ฐ€์šด๋ฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค:

๊ฒŒ์‹œ์ž โ€œStreet Side Softwareโ€ ์‹ ๋ขฐํ•˜๊ณ  ๋‹ค๋ฅธ 2?

ํ”„๋กฌํ”„ํŠธ์—์„œ ๊ฒŒ์‹œ์ž ์‹ ๋ขฐ ๋ฐ ์„ค์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Visual Studio Code์— Fedify ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํ™•์žฅ๋“ค์ด ์„ค์น˜๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋กœ์จ Fedify ๊ธฐ์—ฌ์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

JavaScript ๋Ÿฐํƒ€์ž„

Fedify๋Š” Deno, Node.js, Bun ๋“ฑ ๋‹ค์–‘ํ•œ JavaScript ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์—ฐ JavaScript ๋Ÿฐํƒ€์ž„์ด ๋ญ˜๊นŒ์š”?

JavaScript๋Š” ๋น„๊ต์  ์ž‘์€ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด process.exit() ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์‹  ์  ์žˆ๋‹ค๋ฉด, ์ด๋Š” JavaScript ์ž์ฒด์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ Node.js๋ผ๋Š” ํŠน์ •ํ•œ JavaScript ๋Ÿฐํƒ€์ž„์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” DOM API ์—ญ์‹œ JavaScript ์ž์ฒด์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์›น ๋ธŒ๋ผ์šฐ์ €๋ผ๋Š” (์ผ์ข…์˜) JavaScript ๋Ÿฐํƒ€์ž„์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript ๋Ÿฐํƒ€์ž„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค:

  • JavaScript ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • JavaScript ์–ธ์–ด๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ API๋กœ๋Š” console.log(), Node.js์˜ process.exit(), ์›น ๋ธŒ๋ผ์šฐ์ €์˜ window.alert() ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Node.js๋Š” node_modules/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด, Deno์—์„œ๋Š” ์ž„ํฌํŠธ ๋งต(import map) ๊ธฐ๋ฐ˜์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ๋Š” npm์ด๋‚˜ pnpm, Yarn ๋“ฑ์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ, Deno๋‚˜ Bun์€ ์ž์ฒด์ ์ธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋‚˜ Cloudflare Workers๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๋“ค๋ง์ด๋ผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์„ค๋ช…ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์†์†๋“ค์ด ์ดํ•ดํ•ด์•ผ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€, ๊ฐ™์€ JavaScript๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ์–ด๋А ๋Ÿฐํƒ€์ž„์—์„œ ์‹คํ–‰ํ•˜๋ƒ์— ๋”ฐ๋ผ ์ƒ๋‹นํžˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Fedify ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์–‘ํ•œ JavaScript ๋Ÿฐํƒ€์ž„์„ ์–ด๋–ป๊ฒŒ ๋™์‹œ์— ๋‹ค ์ง€์›ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ์ง€์›ํ•ด์•ผ ํ•˜๋Š” JavaScript ๋Ÿฐํƒ€์ž„ ๋ชจ๋‘์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” API๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ๋Ÿฐํƒ€์ž„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Fedify ํ”„๋กœ์ ํŠธ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ง€์›ํ•˜๋Š” ๋ชจ๋“  JavaScript ๋Ÿฐํƒ€์ž„์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ Fedify์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๊ฐ JavaScript ๋Ÿฐํƒ€์ž„์—์„œ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Fedify ์ €์žฅ์†Œ์˜ ๊ตฌ์กฐ

2025๋…„ 7์›” ํ˜„์žฌ, Fedify ํ”„๋กœ์ ํŠธ์˜ ์ €์žฅ์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • fedify/ โ€” Fedify์˜ ํ•ต์‹ฌ์ธ @fedify/fedify ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” Deno, Node.js, Bun, Cloudflare Workers ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • cli/ โ€” Fedify ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ CLI ๊ฐœ๋ฐœ ๋„๊ตฌ์ธ @fedify/cli ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” Deno๋กœ๋งŒ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • amqp/ โ€” AMQP/RabbitMQ ๋“œ๋ผ์ด๋ฒ„์ธ @fedify/amqp ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • express/ โ€” Express ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์—ฐ๋™ ๋ชจ๋“ˆ์ธ @fedify/express ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • h3/ โ€” h3 ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์—ฐ๋™ ๋ชจ๋“ˆ์ธ @fedify/h3 ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • postgres/ โ€” PostgreSQL ๋“œ๋ผ์ด๋ฒ„์ธ @fedify/postgres ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • redis/ โ€” Redis ๋“œ๋ผ์ด๋ฒ„์ธ @fedify/redis ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
  • docs/ โ€” Fedify์˜ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. https://fedify.dev/ ์›น์‚ฌ์ดํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. VitePress๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • examples/ โ€” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Fedify๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๋“ค์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • scripts/ โ€” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฑด๋“œ๋ฆด ์ผ์ด ์—†์„ ๊ฒ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ์ฃผ๋กœ fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ cli/ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฆฐํŠธ์™€ ํ…Œ์ŠคํŠธ

์—ฌ๋А ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋“ค์ด ๊ทธ๋ ‡๋“ฏ, Fedify ํ”„๋กœ์ ํŠธ๋„ ๋‚˜๋ฆ„์˜ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜๊ณผ ๊ทœ์น™๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ์ด๋“ค ๋Œ€๋ถ€๋ถ„์€ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๊ธฐ๊ณ„์ ์œผ๋กœ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๊ฐ€ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ์ž˜ ์ง€ํ‚ค๊ณ  ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค:

deno task check-all

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์•Œ์•„์„œ ์„œ์‹ํ™”ํ•ฉ๋‹ˆ๋‹ค:

deno fmt

์•ž์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” Fedify ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค:

deno task test-all

@fedify/fedify ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๊ฒฝ์šฐ, ์ˆ˜์ •๊ณผ ๊ด€๋ จ๋œ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด -f @fedify/fedify ์˜ต์…˜๊ณผ --filter ์˜ต์…˜์„ ํ•จ๊ป˜ ํ™œ์šฉํ•ด ๋ณด์„ธ์š” (ํƒœ์Šคํฌ ์ด๋ฆ„์ด test-all์ด ์•„๋‹ˆ๋ผ test์ž„์— ์ฃผ์˜ํ•˜์„ธ์š”):

deno task -f @fedify/fedify test --filter verifyRequest

ํ˜น์€ -f @fedify/fedify ์˜ต์…˜์„ ์“ฐ๋Š” ๋Œ€์‹  ์ง์ ‘ fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์—์„œ deno task test ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค:

cd fedify/
deno task test --filter verifyRequest

์ฐธ๊ณ ๋กœ --filter ์˜ต์…˜์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ด๋ฆ„์„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ:

test("anArbitraryTest", () => {
  // โ€ฆ ์ƒ๋žต โ€ฆ
});

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋‘ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

deno task -f @fedify/fedify test --filter anArbitraryTest
deno task -f @fedify/fedify test --filter   Arbitrary
deno task -f @fedify/fedify test --filter            Test

์•ž์„œ ์„ค๋ช…ํ•œ deno task test ๋ช…๋ น์–ด๋Š” Deno ๋Ÿฐํƒ€์ž„์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ๋„ ์ž˜ ๋Œ์•„๊ฐ€๋‚˜ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Node.js ๋Ÿฐํƒ€์ž„์—์„œ๋„ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์ชฝ์—์„œ pnpm test ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Node.js์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ๋Œ๋ ค ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

cd fedify/
pnpm test

์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ --test-name-pattern ์˜ต์…˜์„ ํ™œ์šฉํ•˜์„ธ์š”:

pnpm test --test-name-pattern verifyRequest

Bun์—์„œ๋„ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด fedify/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์ชฝ์—์„œ pnpm test:bun ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:

pnpm test:bun

์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ --test-name-pattern ์˜ต์…˜์„ ํ™œ์šฉํ•˜์„ธ์š”:

pnpm test:bun --test-name-pattern verifyRequest

๋งˆ์ง€๋ง‰์œผ๋กœ, Cloudflare Workers์—์„œ๋„ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” pnpm test:cfworkers ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜์„ธ์š”:

pnpm test:cfworkers

์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์ธ์ž๋กœ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ํ‚ค์›Œ๋“œ๋ฅผ ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค:

pnpm test:cfworkers verifyRequest

์‚ฌ์‹ค, ์•ž์„œ ์„ค๋ช…ํ–ˆ๋˜ deno task test-all ๋ช…๋ น์–ด๋Š” ํ•œ ๋ฒˆ์— Deno, Node.js, Bun, Cloudflare Workers ๋ชจ๋‘์—์„œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

์•ˆ๋‚ด

ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ ์‹คํŒจํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‚˜์š”? ๊ทธ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ธฐ์—ฌํ•  ์ข‹์€ ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋„๋ก ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์˜ฌ๋ฆฌ์…”๋„ ์ข‹๊ณ , ์ด์Šˆ ํŠธ๋ž˜์ปค์— ์ด์Šˆ๋ฅผ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•ด๋„ ์ข‹์€ ๊ธฐ์—ฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

@fedify/cli: Fedify CLI ๋„๊ตฌ

@fedify/cli ํŒจํ‚ค์ง€๋Š” Fedify๋ฅผ ์ด์šฉํ•˜์—ฌ ActivityPub ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ CLI ํŽธ์˜ ๋„๊ตฌ๋กœ์„œ, ์ฃผ๋กœ ActivityPub ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๋””๋ฒ„๊ทธ๋‚˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€์ธ @fedify/fedify์™€ ๋‹ค๋ฅด๊ฒŒ @fedify/cli๋Š” ํŒจํ‚ค์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๋’ค ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ตณ์ด ์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Deno ํ™˜๊ฒฝ๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ด์œ ๋กœ, @fedify/cli ํŒจํ‚ค์ง€๋Š” ์ฒ˜์Œ ๊ธฐ์—ฌํ•˜๊ธฐ์— ์ข‹์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ @fedif/cli๋Š” CLI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Cliffy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, ๊ด€๋ จํ•ด์„œ ๊ถ๊ธˆํ•œ ๊ฒŒ ์žˆ๋‹ค๋ฉด Cliffy ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์ผ๊ฐ ์ฐพ๊ธฐ

์ค‘์š”

์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•  ์ผ์„ ์ž๋ฐœ์ ์œผ๋กœ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง์žฅ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•  ์ผ์„ ํ• ๋‹นํ•ด ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์˜คํ”ˆ ์†Œ์Šค์—์„œ ํ™œ๋ฐœํ•˜๊ฒŒ ํ™œ๋™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ๋‹จ์ˆœํžˆ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹ค๋ ฅ์ด ์ข‹์€ ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ ์ ˆํ•œ ํ•  ์ผ์„ ์ž˜ ์ฐพ์•„๋‚ด๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ โ€œ์ ์ ˆํ•˜๋‹คโ€๋Š” ๊ฒƒ์€ ์ž์‹ ์˜ ์‹ค๋ ฅ์œผ๋กœ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„ ์ •๋„์˜ ๋‚œ์ด๋„๋ฉด์„œ๋„ ํ”„๋กœ์ ํŠธ์— ์ž„ํŒฉํŠธ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ํ•  ์ผ์„ ์ด์Šˆ ํŠธ๋ž˜์ปค์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Fedify ์—ญ์‹œ GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ์ด์Šˆ ํŠธ๋ž˜์ปค๋กœ ํ•  ์ผ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋Š” ํ•œ, ์ด์Šˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜์–ด๋กœ ์ž‘์„ฑ๋˜๊ฑฐ๋‚˜, ์ ์–ด๋„ ์˜์–ด๊ฐ€ ๋ณ‘๊ธฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜์–ด๊ฐ€ ์ต์ˆ™์น˜ ์•Š์€ ๋ถ„๋“ค์€ Kagi ๋ฒˆ์—ญ ๋“ฑ์„ ํ™œ์šฉํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ๋•Œ๋ฌธ์— ์–ด๋ ค์šฐ์‹  ๋ถ„์€ ๋ฉ˜ํ† ์—๊ฒŒ ๋„์›€์„ ์ฒญํ•˜์„ธ์š”.

์ด์Šˆ๋Š” ํฌ๊ฒŒ ์„ธ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

ํ”ผ์ฒ˜ (feature)
๋ง ๊ทธ๋Œ€๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.
๋ฒ„๊ทธ (bug)
๊ธฐ์กด์— ์žˆ๋˜ ๊ธฐ๋Šฅ์˜ ์˜ค์ž‘๋™์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.
ํƒœ์Šคํฌ (task)
์‹ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ด์™ธ์˜ ์ž‘์—…๋“ค์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ฌธ์„œ ์ˆ˜์ • ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•ฉ๋‹ˆ๋‹ค.
๋ฏธ๋ถ„๋ฅ˜ (no type)
์•„์ง ๋ถ„๋ฅ˜๋˜์ง€ ์•Š์€ ์ด์Šˆ๋“ค์ธ๋ฐ, ์ด์Šˆ๋Š” ์–ด๋–ป๊ฒŒ๋“  ๋ถ„๋ฅ˜๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ณดํ†ต์€ ์—†์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ถ„๋ฅ˜์™€๋Š” ๋ณ„๊ฐœ๋กœ, Fedify ์ด์Šˆ ํŠธ๋ž˜์ปค์—์„œ๋Š” ๋ ˆ์ด๋ธ”์„ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ ˆ์ด๋ธ”์€ ๋ฒ”๋ก€/๋ ˆ์ด๋ธ” ์ด๋ฆ„ ํ˜•์‹์„ ๋”ฐ๋ฅด๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค:

difficulty/beginner
์‰ฌ์šด ๋‚œ์ด๋„
good first issue
์ฒ˜์Œ ๊ธฐ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉ
help wanted
๋„์›€ ํ•„์š”
type/documentation
๋ฌธ์„œ ๊ด€๋ จ

์•ˆ๋‚ด

์ข€ ๋” ์ž์„ธํžˆ ํ™•์ธํ•˜์‹ค ๋ถ„์€ ์ „์ฒด ๋ ˆ์ด๋ธ” ๋ชฉ๋ก์„ ํ™•์ธํ•˜์„ธ์š”.

์—ฌ๊ธฐ์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐ€์žฅ ์ฃผ๋ชฉํ•˜์…”์•ผ ํ•  ๋ ˆ์ด๋ธ”์€ ๋ฐ”๋กœ good first issue์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ ˆ์ด๋ธ”์ด ๋ถ™์€ ์ด์Šˆ๋Š” ์ฒ˜์Œ ๊ธฐ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฒซ ๊ธฐ์—ฌ ๋•Œ ํ•  ์ผ์„ ์ฐพ์„ ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด์Šˆ๋“ค์„ ์ฐฌ์ฐฌํžˆ ์ฝ์–ด๋ณด์‹œ๊ณ  ํ•ด ๋ณผ ๋งŒํ•œ ์ผ๊ฐ์„ ๊ณ ๋ฅด์„ธ์š”. ์ด์Šˆ๋ฅผ ์ฝ์–ด๋„ ์ดํ•ด๊ฐ€ ์•ˆ ๋  ๊ฒฝ์šฐ์—๋Š” ๋Œ“๊ธ€๋กœ ์งˆ๋ฌธ์„ ๋‚จ๊ธฐ๊ฑฐ๋‚˜ ๋ฉ˜ํ† ์—๊ฒŒ ์งˆ๋ฌธํ•˜์„ธ์š”.

๊ธฐ์—ฌํ•ด ๋ณผ ์ด์Šˆ๋ฅผ ์ฐพ์œผ์…จ๋‹ค๋ฉด, ํ•ด๋‹น ์ด์Šˆ๋ฅผ ์ด๋ฏธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ง„ํ–‰์ค‘์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ์•„๋ฌด๋„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ๋Œ“๊ธ€์„ ์ด์Šˆ์— ๋‹ฌ์•„์ฃผ์„ธ์š”.

๊ณผ์ œ

์ฒ˜์Œ ๊ธฐ์—ฌํ•  ์ด์Šˆ๋ฅผ ์ฐพ์•„ ์ด์Šˆ์— ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์„ธ์š”. ์ด์Šˆ๋ฅผ ๋ชป ์ฐพ๊ฒ ๋‹ค๋ฉด ๋ฉ˜ํ† ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”. ๋ฉ˜ํ† ๊ฐ€ ๊ธฐ์—ฌํ•  ๋งŒํ•œ ์ผ์„ ํ•จ๊ป˜ ์ฐพ์•„์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋‚ด

๊ตณ์ด ์ด์Šˆ ํŠธ๋ž˜์ปค์— ์ด๋ฏธ ์žˆ๋Š” ์ด์Šˆ ์ค‘์—์„œ๋งŒ ๊ณ ๋ฅผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Fedify๋ฅผ ์จ ๋ณด๋ฉด์„œ ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ•˜์…จ๋‹ค๋ฉด, ๊ทธ๊ฑธ ์ด์Šˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์ง์ ‘ ํ•ด๊ฒฐํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์˜คํ”ˆ ์†Œ์Šค์˜ ๋งŽ์€ ์ด์Šˆ๋“ค์ด ์ด์Šˆ๋ฅผ ์ œ๊ธฐํ•œ ์‚ฌ๋žŒ์— ์˜ํ•ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ •๋ณด ๋ฐ ์งˆ๋ฌธ

๋ณธ ๋ฌธ์„œ์—์„œ ๋‹ค๋ฃจ์ง€ ๋ชปํ•œ ๋‚ด์šฉ๋„ ๋งŽ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ฌธ์„œ๋“ค์€ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ์ข€ ๋” ๋ณด์ถฉํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋ณธ ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ํ˜น์€ ์ฝ๊ณ  ๋‚˜์„œ๋„ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๋ฉ˜ํ† ์—๊ฒŒ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”. Discord ์„œ๋ฒ„์—์„œ ์งˆ๋ฌธํ•˜์…”๋„ ์ข‹๊ณ , GitHub Discussions์— ์งˆ๋ฌธ ๊ธ€์„ ์˜ฌ๋ฆฌ์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:'s avatar
ๆดช ๆฐ‘ๆ†™ (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

Excited to share that I've joined (Open Source Software Contribution Academy) as a mentor for the @fedify project!

OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.

We're currently in the process of selecting around 20 mentees who will start contributing to once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.

Looking forward to working with these new contributors and seeing what amazing things we can build together!

Pinky's avatar
Pinky

@Pinky@hooray.computer

Time for an post. Iโ€™m a (www.svloka.com) and full time who is also a . I play , , paint ( & ), and draw . I love and use to manage my . Got in 2020.

I am a recovering () and . I focused a lot on & effective , and I still enjoy people on those topics. I still tinker with tech on occasion.

A curly haired woman wearing sunglasses and a red shirt is steering a sailboat with hands on the helm. The cockpit of the boat is visible, featuring a navigation screen and various controls. Clear blue water can be seen through the windows.
ALT text detailsA curly haired woman wearing sunglasses and a red shirt is steering a sailboat with hands on the helm. The cockpit of the boat is visible, featuring a navigation screen and various controls. Clear blue water can be seen through the windows.
craignicol's avatar
craignicol

@craignicol@glasgow.social

New server, new post, so here's what's Important











Freya Blekman's avatar
Freya Blekman

@freyablekman@sciencemastodon.com

As an to me, and my career, I highly recommend this article in
@PhysicsWorld
with an interview reflecting on particle physics , using mine as an example

Also featuring: , and , , , and
physicsworld.com/a/freya-blekm

MCDuncanLab's avatar
MCDuncanLab

@MCDuncanLab@mstdn.social

Dear Graduate student,

Are you overdue for a thesis committee meeting, but feel like you have nothing to show since your last meeting? I'm begging you to schedule that meeting now!

Either, your research is languishing and you need help! This is what your thesis commitee is for.

Or, you are doing fine and the committee is there to tell you that.

Future you will thank you.

Craig Nicol's avatar
Craig Nicol

@craignicol@octodon.social

I think I missed an post when I first joined, so here's what's Important










Antรณnio Domingues's avatar
Antรณnio Domingues

@keyboardpipette@genomic.social

I have been doing a lot of helping people getting their first job out of academia
- into jobs - and thus decided to pen some of the ramblings I subject them to.

First one is the intro: adomingues.github.io/2023/02/1

Jonathan H. Harwell's avatar
Jonathan H. Harwell

@shqippy@deacon.social

Former . Co-editor, and (2019); & Theology and (2023), Lexington/Fortress Academic. at , opinions my own. If you're a , or an , or you believe in , or you like , or , or , you're more than welcome to connect. Bonus points if you also like , , , or people. Forming community here!

Dave's avatar
Dave

@zornslemmon@mathstodon.xyz

Hello! I'm Dave, a non-academic research physicist.

Likes: , , data visualization, , , open source software, , , command line interfaces, \(\LaTeX\ \), and using latin shortcuts, *e.g., *i.e.*, *e.g.*, *etc.*, *etc.*

Dislikes: seeing Q.E.D. used where Q.E.F. is needed.

I get anxiety making up hashtags and I obsess over maxing out my type in boxes when shown a decrementing character count.

bipolaron's avatar
bipolaron

@bipolaron@scholar.social ยท Reply to bipolaron's post

What I like to do is to help random students, staff, and faculty with clever science ideas and I help them convert science-lingo into engineering to actually get useful data. I also like helping strangers with projects, so feel free to tell me about yours!






I delete posts after 2 months unless someone tells me they find it useful for like tech tips. I don't need my random ideas online forever.

bipolaron's avatar
bipolaron

@bipolaron@scholar.social

Hi, I'm Brian.

I'm a PhD who works part time as an instructor/lab manager and as a consultant for various companies. I love people and helping companies turn scientific curiosities into devices.

I've also worked in and , , , , and

If a project addresses , , , or especially I am into it.