[Fedify] ์ฒซ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ฅผ ํ•ด๋ณด์ž
ยท
Fedify
์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ ๋ฐœ๋Œ€์‹์ด ๋๋‚˜๊ณ , Fedify์— ๊ธฐ์—ฌ๋ฅผ ํ•ด๋ณด๊ธฐ๋กœ ๋‹ค์งํ–ˆ๋‹ค. Fedify์˜ Issue ํƒญ์— ๋“ค์–ด๊ฐ€ ๋‚ด๊ฐ€ ์‹œ์ž‘ํ•ด๋ณผ๋งŒํ•œ ์ด์Šˆ๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ, ‘good first issue’ ํƒœ๊ทธ๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ์ด์Šˆ๋“ค์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ๊ทธ ์ค‘ ๊ดœ์ฐฎ์•„ ๋ณด์ด๋Š” ์ด์Šˆ๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ๋Œ“๊ธ€๋กœ ์ด ์ด์Šˆ๋ฅผ ๋งก๊ณ  ์‹ถ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด๋ฏธ ์ด ์ด์Šˆ๋ฅผ ๋งก๊ณ  ๊ณ„์‹ ๋ถ„์ด ์žˆ๋‚˜? ํ•˜๋Š” ์ƒ๊ฐ์ด ์ž ์‹œ ๋“ค์—ˆ์ง€๋งŒ, ์ž ์‹œ ํ›„ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ์ง„ํ–‰ํ•ด๋„ ๋œ๋‹ค๋Š” ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์…จ๋‹ค. ์ด์ œ ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด์ž. 1. ๋จผ์ € CONTRIBUTING.md๋ฅผ ์ฝ์–ด๋ณด์ž๋ฐœ๋Œ€์‹์—์„œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ์ž๋“ค์„ ์œ„ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฐ”๋กœ CONTRIBUTING.md์ธ๋ฐ, ๋“ค์–ด๊ฐ€์ž๋งˆ์ž ์ „๋ถ€ ์˜์–ด๋กœ ๋œ ๋ฌธ์„œ์— ์ž ์‹œ ๊ธด์žฅ์„ ํ•˜๊ธดํ–ˆ์ง€๋งŒ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด์„œ..
[Fedify] ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผํ•˜๋ฉฐ ๋‚˜๋งŒ์˜ ์—ฐํ•ฉ์šฐ์ฃผ ๋งˆ์ดํฌ๋กœ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์ž
ยท
Fedify
์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ 2025 ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์ฐธ์—ฌํ˜• ํ”„๋กœ์ ํŠธ fedify์˜ ๋ฉ˜ํ‹ฐ๋กœ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฐธ์—ฌ๊ฐ€ ๊ฒฐ์ •๋œ ๋‚ , ๋ฉ˜ํ† ๋‹˜์œผ๋กœ๋ถ€ํ„ฐ fedify์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‹ด๊ธด ๋ฉ”์ผ์„ ๋ฐ›์•˜๋‹ค. ์ฒจ๋ถ€๋œ ๋งํฌ์—๋Š” fedify์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ fedify๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งˆ์ดํฌ๋กœ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“œ๋Š” ํŠœํ† ๋ฆฌ์–ผ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.๐Ÿ”— https://hackers.pub/@hongminhee/2025/fedify-tutorial-ko fedify์— ๋Œ€ํ•œ ์‚ฌ์ „์ง€์‹์ด ๋งŽ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„๊นŒ ๊ฑฑ์ •ํ–ˆ์ง€๋งŒ ์„ค๋ช…์ด ๋งค์šฐ ์ž์„ธํ•˜๊ฒŒ ์จ์ ธ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์„ ์ง„ํ–‰ํ•˜๋ฉฐ fedify์™€ ์—ฐํ•ฉ์šฐ์ฃผ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋‚ด์šฉ๋“ค์„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ์ง€์‹๋“ค์€ ์•ž์œผ๋กœ ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ํ•  ๋•Œ ๋งŽ์€ ๋„..
[Node.js ๊ฐ•์˜ ์ •๋ฆฌ] Call stack, Event Loop, EventEmitter, child_process, cluster, worker_threads ๋“ฑ์— ๊ด€ํ•˜์—ฌ
ยท
Study/Node.js
์–„์ฝ”๋‹˜์˜ '์–„์ฝ”์˜ Node.js (Korean ver.)' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๊ฐ•์˜ ๋งํฌ: https://www.inflearn.com/course/%EC%96%84%EC%BD%94-node-js?srsltid=AfmBOopKCXPw7NK1HS79aeI2BufjFmy-iOHOM9eHCl2q_BVo1UNRMURr ์–„์ฝ”์˜ Node.js (Korean ver.) ๊ฐ•์˜ | ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ - ์ธํ”„๋Ÿฐ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ | , ๐Ÿ‡ฐ๐Ÿ‡ท This course is designed for Korean-speaking learners. If you speak English, Japanese, Vietnamese, or any other language, please take twww.inflearn.com 1. ..
[Node.js ๊ฐ•์˜ ์ •๋ฆฌ] ํŒŒ์ผ ์‹œ์Šคํ…œ, TCP/UDP, HTTP, ๋ฒ„ํผ์™€ ์ŠคํŠธ๋ฆผ, ๊ฐ์ข… ๋ชจ๋“ˆ์— ๊ด€ํ•˜์—ฌ
ยท
Study/Node.js
์–„์ฝ”๋‹˜์˜ '์–„์ฝ”์˜ Node.js (Korean ver.)' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๊ฐ•์˜ ๋งํฌ: https://www.inflearn.com/course/%EC%96%84%EC%BD%94-node-js?srsltid=AfmBOopKCXPw7NK1HS79aeI2BufjFmy-iOHOM9eHCl2q_BVo1UNRMURr ์–„์ฝ”์˜ Node.js (Korean ver.) ๊ฐ•์˜ | ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ - ์ธํ”„๋Ÿฐ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ | , ๐Ÿ‡ฐ๐Ÿ‡ท This course is designed for Korean-speaking learners. If you speak English, Japanese, Vietnamese, or any other language, please take twww.inflearn.com1. ํŒŒ..
[Node.js ๊ฐ•์˜ ์ •๋ฆฌ] Node.js, REPL, Promise, async/await, Module, Nodemon์— ๊ด€ํ•˜์—ฌ
ยท
Study/Node.js
์–„์ฝ”๋‹˜์˜ '์–„์ฝ”์˜ Node.js (Korean ver.)' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๊ฐ•์˜ ๋งํฌ: https://www.inflearn.com/course/%EC%96%84%EC%BD%94-node-js?srsltid=AfmBOopKCXPw7NK1HS79aeI2BufjFmy-iOHOM9eHCl2q_BVo1UNRMURr ์–„์ฝ”์˜ Node.js (Korean ver.) ๊ฐ•์˜ | ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ - ์ธํ”„๋Ÿฐ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „ | , ๐Ÿ‡ฐ๐Ÿ‡ท This course is designed for Korean-speaking learners. If you speak English, Japanese, Vietnamese, or any other language, please take twww.inflearn.com1. N..
[Next.js ๊ฐ•์˜ ์ •๋ฆฌ] ์„œ๋ฒ„ ์•ก์…˜, Parallel Route, ์ตœ์ ํ™”์— ๊ด€ํ•˜์—ฌ
ยท
Frontend
์ด์ •ํ™˜๋‹˜์˜ 'ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(v15)' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๊ฐ•์˜ ๋งํฌ: https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-nextjs?srsltid=AfmBOoryPUbZjBwZDQne9kDfuiHCFu7VdxmeCNFtMqj4F58vfjIaezUX ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(v15) ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ์ด์ •ํ™˜ Winterlood | , [์ž„๋ฒ ๋”ฉ ์˜์ƒ]ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js | Official Traillerํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(15+)15์‹œ๊ฐ„์˜ ๋ถ„๋Ÿ‰์œผ๋กœ Page Router๋ถ€ํ„ฐ App Router๊นŒ์ง€๐Ÿ’ก Page Router๋ž€?Nex..
[Next.js ๊ฐ•์˜ ์ •๋ฆฌ] App Router์— ๊ด€ํ•˜์—ฌ
ยท
Frontend
์ด์ •ํ™˜๋‹˜์˜ 'ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(v15)' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๊ฐ•์˜ ๋งํฌ: https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-nextjs?srsltid=AfmBOoryPUbZjBwZDQne9kDfuiHCFu7VdxmeCNFtMqj4F58vfjIaezUX ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(v15) ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ์ด์ •ํ™˜ Winterlood | , [์ž„๋ฒ ๋”ฉ ์˜์ƒ]ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js | Official Traillerํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(15+)15์‹œ๊ฐ„์˜ ๋ถ„๋Ÿ‰์œผ๋กœ Page Router๋ถ€ํ„ฐ App Router๊นŒ์ง€๐Ÿ’ก Page Router๋ž€?Nex..
[Next.js ๊ฐ•์˜ ์ •๋ฆฌ] Next.js์™€ Page Router์— ๊ด€ํ•˜์—ฌ
ยท
Frontend
์ด์ •ํ™˜๋‹˜์˜ 'ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(v15)' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๊ฐ•์˜ ๋งํฌ: https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-nextjs?srsltid=AfmBOoryPUbZjBwZDQne9kDfuiHCFu7VdxmeCNFtMqj4F58vfjIaezUX ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(v15) ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ์ด์ •ํ™˜ Winterlood | , [์ž„๋ฒ ๋”ฉ ์˜์ƒ]ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js | Official Traillerํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js(15+)15์‹œ๊ฐ„์˜ ๋ถ„๋Ÿ‰์œผ๋กœ Page Router๋ถ€ํ„ฐ App Router๊นŒ์ง€๐Ÿ’ก Page Router๋ž€?Nex..
useRef๋ฅผ ํ™œ์šฉํ•˜์—ฌ stale closure๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž
ยท
Intern
์ฃผ์˜: ์ •ํ™•ํ•˜์ง€ ์•Š์€ ์„œ์ˆ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ A์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด recoil state๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ , Hook B์˜ useEffect์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์— ํ•ด๋‹น recoil state๊ฐ€ ์žˆ์–ด์„œ Hook B์—์„œ ๋™์ž‘์ด ์ˆ˜ํ–‰๋˜๊ฒŒ ์„ค๊ณ„๋ฅผ ํ–ˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ Hook B์—์„œ recoil state์˜ ๋ณ€๊ฒฝ์„ ์ž˜ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ , ๋”ฐ๋ผ์„œ ์˜๋„์น˜ ์•Š๊ฒŒ ์ž‘๋™์ด ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฒŒ์–ด์กŒ๋‹ค.1. ์™œ recoil state์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ–ˆ์„๊นŒ? // Component A const [something, setSomething] = useRecoilState(somethingState); const handleItemClick = (e: React.MouseEvent) => { set..
๋ฐฐ๊ฒฝ์ด ๋”ฐ๋ผ์˜ค๋Š” ๋ฉ”๋ชจ์žฅ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด contentEditable์„ ์‚ฌ์šฉํ•ด๋ณด์ž
ยท
Intern
์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋ณดํ†ต input์ด๋‚˜ textarea๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ๋””์ž์ด๋„ˆ๋‹˜๊ป˜์„œ ์ƒˆ๋กœ ๋ฉ”๋ชจ์žฅ ๋””์ž์ธ์„ ์ „๋‹ฌํ•ด์ฃผ์…จ๋Š”๋ฐ,๊ธ€์ด ํ•œ ์ค„์ผ ๋•Œ๋Š” ๋’ค์˜ ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์ด ๊ธ€์ž์™€ ๋”ฑ ๋งž๊ฒŒ ์ž…๋ ฅํ•ด์•ผํ•  ๋•Œ๋งˆ๋‹ค ๋”ฐ๋ผ์™€์•ผ ํ•˜์ง€๋งŒ,๋‘ ์ค„ ์ด์ƒ์ผ ๋•Œ๋ถ€ํ„ฐ๋Š” ๋ฐฐ๊ฒฝ์ด ๋ฉ”๋ชจ์žฅ์˜ ์ตœ๋Œ€ width๋กœ ์œ ์ง€๋˜๋ฉด์„œ ์ค„ ์ˆ˜ ๋งŒํผ height๊ฐ€ ๋Š˜์–ด๋‚˜์•ผํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” textarea๋ฅผ ํ™œ์šฉํ•ด๋ณด์•˜๋Š”๋ฐ, ๋’ค์˜ ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์ด ๊ธ€์ž๋ฅผ ๋”ฐ๋ผ์˜ค๊ฒŒ ๋งŒ๋“œ๋Š”๋ฐ ์‹คํŒจํ–ˆ๋‹ค (fit-content ์†์„ฑ์„ ์ฃผ์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ) ๊ทธ ๋‹ค์Œ์—๋Š” input์„ ํ™œ์šฉํ•ด๋ณด์•˜๋Š”๋ฐ, ๋’ค์˜ ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์ด ๊ธ€์ž๋ฅผ ๋”ฐ๋ผ์˜ค๊ธด ํ•˜์˜€์ง€๋งŒ, ๊ธ€์ด ๋‘ ์ค„์ผ ๋•Œ ๋’ค์˜ ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์ด ๋‹ค์Œ ์ค„๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ div์— contentEditable ์†์„ฑ์„ ์ฃผ์–ด ์›ํ•˜๋Š” ๋™์ž‘..