(younggeun0: π’) => dev
μλ
νμΈμ!
μ¬μ©μ κ²½νμ μ€μνλ νλ‘ νΈμλ κ°λ°μ "μ€μκ·Ό"μ
λλ€.
μΌ κ²½ν
λͺ°μ
ν μ μλ νκ²½μ μ νΈν©λλ€.
μν΅μ μ΅μ°μ μΌλ‘ μκ°ν©λλ€.
μ½λ리뷰, νμ΄ νλ‘κ·Έλλ°μ μ’μν©λλ€.
κ·Όκ±° μλ μ½λλ₯Ό μμ±νκΈ° μν΄ λ
Έλ ₯ν©λλ€.
νμ μ ν
μ€νΈ μ½λλ₯Ό μμ±ν©λλ€.
μμ±λ μ½λμ κ΄ν λ€μν μ견μ νμν©λλ€.
νμ€νμΌλ‘ μΌν΄ λ³Έ κ²½νλ μμ΅λλ€.
컀μ, ν΄λ‘λκ°μ AI λꡬλ₯Ό ν΅μ κ°λ₯ν λ²μλ‘ νμ©ν©λλ€.λ©λμΏΌν°μ€
2022.11 ~ νμ¬
FE Developer
MAU 100λ§ μΌλ³Έ μ»€λ¨Έμ€ νλ«νΌ nuguλ₯Ό κ°λ° μ€μ
λλ€.
νλ‘μ νΈ μ΄κΈ° νμ€νμΌλ‘ κ°λ°μ μ°Έμ¬νμ΅λλ€.
UIμ λ―Έλ¬ν μ°¨μ΄λ₯Ό λ°κ²¬νκ³ κ°μ νλ κ²μ 보λμ λκ»΄ νμ¬λ FE κ°λ°μ μ§μ€νκ³ μμ΅λλ€.const MEDIQUITOUS = {
fe: {
// nugu mall
react: [
'Next.js 14 page router',
'storybook',
'react-bootstrap',
'jotai',
'react-query',
'tanstack-virtual',
{
testing: ['vitest', 'testing-library/react'],
},
],
// back office
svelte: ['SvelteKit', 'svelte4'],
},
be: {
python: {
django: ['django-rest-framework'],
},
},
vcs: ['git', 'github'],
}
μλ²μ¨
2022.03 - 2022.10 (7κ°μ)
FE Developer
μ°¨μΈλ λ°±μ€νΌμ€ κΈ°λ₯ κ°λ°μ λ΄λΉνμ΅λλ€.
κΈ°λ°μ λ§λ€μ΄κ°λ κ²½νμ νμ΅λλ€.
μ μ½ μλ νκ²½μΌλ‘ BE κ°λ°λ ν΄λ³Ό μ μμμ΅λλ€.
κ°λ°λ¬Ένκ° μ±μν μ‘°μ§μμ μΌνκ³ μΆμ΄ μ΄μ§νμ΅λλ€.const EVERON = {
fe: {
js: ['typescript', 'es6'],
react: ['react-admin', 'mui'],
},
be: {
node: ['express'],
java: ['spring boot'],
},
vcs: ['git', 'gitlab'],
}
ν¬μμμ€
2019.06 - 2022.02 (2λ
8κ°μ)
Software Engineer
OZReport HTML λ·°μ΄ κΈ°λ₯μ κ°λ°νμ΅λλ€.
κ°λ° νλ‘μΈμ€μ λ§μΆ° μΌνλ λ²μ λ°°μ μ΅λλ€.
μ£Όμ΄μ§ κ³Όμ λ₯Ό μλλλ‘ κ΅¬ννλ κ²μ μ§μ€νμ΅λλ€.
μ€λλκ³ λ³΅μ‘ν μ루μ
μ½λλ₯Ό λ€λ£¨λ κ²½νμ νμ΅λλ€.
λ€μν κΈ°μ μ€νμ κ²½νν΄λ³΄κ³ μΆμ΄ μ΄μ§νμ΅λλ€.const FORCS = {
fe: {
html5: {
js: ['vanila js(ES5)', 'jQuery'],
},
flash: ['ActionScript'],
java: ['Applet'],
},
vcs: ['git', 'gitlab'],
}
κΈ°ν κ²½ν
μμ©κ΅μ‘μΌν° κ΅μ‘ κ³Όμ
Python Java μμ© SW μ€λ¬΄ κ°λ°μ μμ±κ³Όμ μλ£
2018.10 - 2019.05 (7κ°μ) λ―Έλμ΅ν©μ 보기μ μΈν΄
2018.01 - 2018.06 (5κ°μ)
μΈν΄μΌλ‘ κ°λ° μ€μ΄λ μ루μ
QA μ
무λ₯Ό μννμ΅λλ€.μκ΅ μνΉν리λ°μ΄
YMS(Youth Mobility Scheme) λΉμλ‘ ν΄μΈ 체λ₯νμ΅λλ€.
2015.06 - 2017.06 (2λ
) λκ΅λνκ΅ λ©ν°λ―Έλμ΄κ³΅νκ³Ό μ‘Έμ
2010.03 - 2018.08 μννΈμ€ν¬
ν¨κ» μλΌκΈ°λ₯Ό μ§ν₯ν©λλ€.
μ μμΌ μ μΈμ λ°λ₯΄κΈ° μν΄ λ
Έλ ₯ν©λλ€.
μꡬμ¬νμ΄ ν릴 μ μλ€λ μ μ μΌλμ λκ³ κ³ λ―Όν©λλ€.
μ κ·Ήμ μΌλ‘ μ§λ¬Ένκ³ μν©μ 곡μ ν©λλ€.
νΌμ ν΄κ²°νκΈ° μ΄λ €μ΄ λ¬Έμ λ λμμ μμ²ν©λλ€.
ν μμμ λ΄ μΌκ³Ό λ¨μ μΌμ κ²½κ³λ₯Ό λμ§ μμΌλ € ν©λλ€.νλ‘μ νΈ κ²½ν
λ©λμΏΌν°μ€ (2023 ~ νμ¬)
nugu λͺ° κΈ°νμ μμ½κ΅¬μ’ μλ²λ리λΈUI κ°μ (2025)
π€ λ°°κ²½
β
κΈ°νμ μμ½κ΅¬μ’ UIλ μ΄λλ―Όμμ μ΅μ
λν νλκ°μ μ‘°ν©ν΄μ μ€μ νλ ꡬ쑰μμ
β
λμνμ§ μλ μ΅μ
μ‘°ν©μ΄ μ묡μ μΌλ‘ μ‘΄μ¬
β
μ ν κ°λ₯ν μ‘°ν©μκ° λ무 λ§μμ Έ μΈμ§λΆνκ° μ»€μ‘κ³ μ κ· MDλΆλ€μ΄ μ¬μ©νκΈ° μ΄λ €μν¨
β
λμ UIλ₯Ό μν κΈ°νμ λͺ¨λΈ νλκ°λ€μ΄ λλ μ Έ μμ΄ UI μ΅μ
μΆκ° μ DB λ§μ΄κ·Έλ μ΄μ
μ΄ νμνμ
π§ μ§ν
β
μ©λ‘ λΆμμ ν΅ν΄ λ―Έλ―Ένκ² μ¬μ©λλ λΆνμν νλ μ΅μ
κ° μ κ±°
β
μμ£Ό μ¬μ©λλ κΈ°νμ μμ½κ΅¬μ’ UI μ€μ μ¬μ©κ°μ΄λλ₯Ό κΈ°νμμ²νκ³ μ¬μ©κ°μ΄λ λ²νΌμ μΆκ°νμ¬ νμ
λͺ¨λ¬λ‘ μ¬μ©κ°μ΄λλ₯Ό μ 곡
β
κΈ°ννκ³Ό λ
Όμ ν μ΄λλ―Όμμ μ€μ κ°λ₯ν λͺ¨λνμ
μ μ μ. λͺ¨λλ³λ‘ λμ μΌλ‘ μ€μ κ°λ₯ν νλλ§ λ
ΈμΆνλλ‘ λ³κ²½
β
κΈ°νμ λͺ¨λΈμ λμ UI κ΄λ ¨λ νλκ°λ€μ κ΄λ¦¬νλ JSONνλ μΆκ°
β
νμ΄μ¬ 쿼리μ
κ°±μ μ€ν¬λ¦½νΈ μμ±, λ°μ΄ν° λ§μ΄κ·Έλ μ΄μ
μ§ννμ¬ κΈ°μ‘΄ κ°λ³ UI νλλ€μ JSONνλλ‘ μΌμν
β
κΈ°μ‘΄ κ°λ³ UI μ΅μ
νλλ€μ deprecated μ²λ¦¬
β
λͺ°μμ κ°λ³ UI νλ 쑰건λ³λ‘ λμ λ λλ§νλ λΆλΆμ λͺ¨λ νμ
λ³λ‘ λ λλ§νλλ‘ λΆκΈ° λ¨μν
π κ²°κ³Ό
β
κΈ°νμ μμ½κ΅¬μ’ UI λͺ¨λμ ꡬλΆνκ³ λͺ¨λλ³ μ€μ κ°λ₯ν μ΅μ
κ°λ§ λμ λ
ΈμΆνμ¬ MDλΆλ€μ΄ μνλ UIλ₯Ό μ½κ² μ€μ νκ²λ¨
β
μ κ· μμ½κ΅¬μ’ λͺ¨λμ΄λ κΈ°λ₯ μμ²μ΄ λ€μ΄μμ λ FEλ 벨μμ μ μ°νκ² λμ² κ°λ₯νκ²λ¨nugu λͺ° μ΅μ ν(2025)
π€ λ°°κ²½
β
μΌλ³Έ μΈν°λ· μλκ° νκ΅μ λΉν΄ λλ € μλκ΄λ ¨ μ΄μλ€μ΄ μ£ΌκΈ°μ μΌλ‘ μΈμ
β
κΈ°μ‘΄ λͺ°μ ν¬λ‘¬ κ°λ°μλꡬ λΌμ΄νΈνμ°μ€, νΌν¬λ¨Όμ€ ν μΈ‘μ κ²°κ³Όκ° μ’μ§ μμ
π§ μ§ν
β
ν° μ»΄ν¬λνΈλ₯Ό μμ μ»΄ν¬λνΈλ‘ λΆλ¦¬νμ¬ κ΄λ ¨ μνμ ν
λΆλ¦¬
β
λΆνμν νλ‘ λλ¦΄λ§ μ κ±°: μ μ μν 곡μ λ jotai Atom, μ€μ²©λ μ»΄ν¬λνΈ μν 곡μ λ 컨ν
μ€νΈ API νμ©
β
react-hook-form λͺ¨λ μ μ©: μνκ° κ΄λ¦¬ μμ, νλ μ»΄ν¬λνΈ λ΄ μ ν¨μ± κ²μ¬ μ½λ ν¬ν¨μΌλ‘ μμ§λ ν₯μ
β
react-queryλ‘ μλ² μν κ΄λ¦¬νμ¬ μΊμ νμ©, λΆνμν μμ² μ κ±°
β
μλμ° κ°μν(tanstack/react-virtual) μ μ©νμ¬ λ·°ν¬νΈ λ° μμ λ λλ§ μ κ±°
β
λ²λ€ μ¬μ΄μ¦ κ°μλ₯Ό μν΄ λμΌ κΈ°λ₯ λͺ¨λ κ΅μ²΄ (classNames β clsx, react-virtualized β tanstack/react-virtual)
β
next/script λ‘λ μ λ΅ λ³κ²½(beforeInteractive β afterInteractive)νμ¬ Total Blocking Time κ°μ
β
CDN ν리컀λ₯νΈ λ§ν¬ μΆκ°νμ¬ μ°κ²°μκ° λ¨μΆ
β
LCP κ°μ μ μν΄ κ°μ₯ ν° λ λλ§ μμμΈ μ΄λ―Έμ§μ fetchPriority high μΆκ°
β
CLS λ°©μ§λ₯Ό μν΄ λ λλ§ μμμ λμΌν νλ μ΄μ€ νλ μΆκ° λ° μ΅μ λμ΄ μ€μ
β
μν μ¬λ°± μ μ© μ»΄ν¬λνΈ μ κ±°, μ£Όλ³ μμ margin/padding μ‘°μ μΌλ‘ DOM μμ κ°μ
β
SSR λμ ISR νμ΄μ§λ‘ λ³κ²½ (μλ² λ λλ§μ΄ λ§€λ² νμνμ§ μκ±°λ λ°μ΄ν° λ³κ²½μ΄ λΉλ²νμ§ μμ νμ΄μ§)
π κ²°κ³Ό
β
μ»΄ν¬λνΈ λΆλ¦¬λ‘ λ¬Έμ λ°μ μ νμΈν΄μΌ ν μ»΄ν¬λνΈ μ½λ κ°μ, DX κ°μ
β
λ²λ€ μ¬μ΄μ¦ μ½ 0.5MB κ°μ
β
λͺ° νμ΄μ§ λ‘λ© μλ κ°μ
β
λ©μΈ νμ΄μ§ κΈ°μ€ μΈ‘μ κ²°κ³Ό
β
FCP μ΄μ μΈ‘μ κΈ°λ‘ κΉλΉ‘ π« β 404ms
β
LCP μ΄μ μΈ‘μ κΈ°λ‘ κΉλΉ‘ π« β 0.48s
β
Total Blocking Time μ΄μ μΈ‘μ κΈ°λ‘ κΉλΉ‘ π« β 600ms
β
νΌν¬λ¨Όμ€ μ μ 28 β 43
β
CLS 0 λ¬μ± π
β
μλμ° κ°μν μ μ© ν μ΅μ΄ μν μΉ΄λ λ λλ§ μμ μ΅λ 95% κ°μ (μ΅λ κ°μ νμ΄μ§: 1403κ° β 64κ°)nugu λͺ° μ€νμΌλ§ μλΉμ€ κ°λ°(2025)
π€ λ°°κ²½
β
μΈμ€ν μ€ν 리μ²λΌ λΈλλμ μΈν루μΈμλ€μ μ€νμΌ μ»¨ν
μΈ λ₯Ό μ¬λ¦΄ μ μλ μλΉμ€ λμ¦
π§ μ§ν
β
κΈ°ν 1λͺ
, BE 1λͺ
, FE 3λͺ
TFν ꡬμ±, FE 리λ μν
β
μ£Όλμ΄ κ°λ°μλ€κ³Ό νμ΄ νλ‘κ·Έλλ°μΌλ‘ μ§ννλ©° μ½μΉ λ° μ½λ리뷰
β
λμμ μ€νΈλ¦¬λ° κΈ°λ₯ ꡬν(hls.js)
β
μΈνΌλν° μ€ν¬λ‘€ μ λΉλμ€ λμ μΌλ‘ μΈν λ©λͺ¨λ¦¬ μ€λ²νλ‘μ° μ΄μ ν΄κ²°: μλμ° κ°μν ꡬν(react-virtualized)
π κ²°κ³Ό
β
μμ κΈ°νμ λ§μΆ° μ΄μ μμ΄ μλΉμ€ μΆμ
β
λ¦΄λ¦¬μ¦ 4κ°μ κ²½κ³Ό ν 7μ κΈ°μ€ μ½ 500λͺ
μ μΈν루μΈμκ° 4000κ° μ΄μμ 컨ν
μΈ λ±λ‘, νκ· 10% μ₯λ°κ΅¬λ μ νμ¨ λ¬μ±nugu λͺ° νλ‘λͺ¨μ νμ΄μ§ κ°λ°(2025)
π€ λ°°κ²½
β
λ§μΌν
νμμ μ£ΌκΈ°μ μΌλ‘ μΈν°λ ν°λΈν μμκ° ν¬ν¨λ νλ‘λͺ¨μ
νμ΄μ§ κ°λ°μμ²
π§ μ§ν
β
λ§μΌν
, κΈ°ν, λμμΈνκ³Ό νμ
β
μ€ν 리 보λ μ°Έκ³ νμ¬ μΈν°λ ν°λΈν νλ‘λͺ¨μ
νμ΄μ§ κ°λ°
β
μΆμ체ν¬, λλ€μΏ ν° λ°κΈ λ± νλ‘λͺ¨μ
API λ°±μ€λ κ°λ°
β
TDDλ‘ νλ‘λͺ¨μ
μ ν μ£μ§ μΌμ΄μ€ ν
μ€νΈ μμ±, μμ μ± ν보
β
λ°λ³΅λλ νλ‘λͺ¨μ
UI ν¨ν΄μ νμ
, κ³΅ν΅ μ»΄ν¬λνΈ, ν
μΌλ‘ μΆμΆνμ¬ μ¬μ¬μ©μ± ν보
β
νλ‘λͺ¨μ
κΈ°κ°μ λ§μΆ° λ©μΈνμ΄μ§ μλ κ΅μ²΄ κΈ°λ₯ μΆκ°νμ¬ λΆνμν λ°°ν¬ μ κ±°
β
νλ‘λμ
νκ²½μμ μ€μ ν νλ‘λͺ¨μ
λ°μ΄ν°λ₯Ό λ‘컬 κ°λ°νκ²½μμ μ¬μ©νκΈ° μν΄ λ°μ΄ν° dump μ€ν¬λ¦½νΈ ꡬν
β
λ‘컬 νκ²½μμ νλ‘λμ
λ°μ΄ν° κΈ°μ€μΌλ‘ μμ
μ νκ³ λ°λ‘ λ°°ν¬ν μ μλ κΈ°λ° λ§λ ¨
π κ²°κ³Ό
β
λ€μν νλ‘λͺ¨μ
μꡬμ¬νμ μν, ν° μ΄μ μμ΄ λΆκΈ°λ³ νλ‘λͺ¨μ
μ§νμ€
β
λ°λ³΅ μ¬μ©λλ μ»΄ν¬λνΈ, ν
μ½λλ₯Ό κ°μ νμ¬ νλ‘λͺ¨μ
νμ΄μ§ κ°λ° μλ ν₯μμ 무 μΈ μλ°μ κΈ°μ¬ λ° κ°μ
λΉλνμ ν₯μ
π€ λ°°κ²½
β
μμ±ν μ½λλ₯Ό 리뷰λ°μ λ νμ
import type ν€μλ μΆκ° μμ²μ΄ λ§μ΄ λ°μ
β
type ν€μλλ₯Ό κ°μ νλ TS μ»΄νμΌλ¬ μ΅μ
νμ
π§ μ§ν
β
TS verbatimModuleSyntax μ»΄νμΌλ¬ μ΅μ
μΆκ°
β
208κ°μ νμΌ import μ 리
π κ²°κ³Ό
β
λΉλνμ μ½ 8% λΉλ μλ ν₯μκ°λ°νκ²½ CDN 리μμ€ λΉμ© μ κ°
π€ λ°°κ²½
β
κ°λ° νκ²½μμ λ μ΄μμμ΄λ UI μ»΄ν¬λνΈ μμ
μ CDN μ΄λ―Έμ§ 리μμ€λ€μ μΈ νμκ° μλ€ μκ°ν¨
π§ μ§ν
β
κ°λ°νκ²½μμ λλ―Έ μ΄λ―Έμ§λ₯Ό μ¬μ©νλ νκ²½λ³μ μΆκ°
π κ²°κ³Ό
β
κ°λ°νκ²½μμ λΆνμν CDN μ΄λ―Έμ§ μμ² μ κ±°git PR template λμ
π€ λ°°κ²½
β
PR μμ² μ κ°λ°μλ§λ€ λ€λ₯Έ λ΄μ©μ μ 곡νμ¬ λ§₯λ½ νμ
μ μ΄λ €μ
π§ μ§ν
β
git PR template MDνμΌ μΆκ°
β
κ°μ, μ£Όμ μμ
λ΄μ©, 리뷰 μμ²μ¬ν, μ°Έκ³ λ§ν¬ κΈ°μ
μλ΄
π κ²°κ³Ό
β
PR μ½λ리뷰 μ λ§₯λ½ νμ
μ©μ΄, 리뷰μμ²μμκ² μ§λ¬Έ λΉλ κ°μμμ¬λͺ° ν¨μ λΈλλλ₯Ό λͺ¨μ보λ μΉμ± ꡬμΆ
π€ λ°°κ²½
β
μμ¬λͺ° ν¨μ
λΈλλ μΌνλͺ°μ΄ λ§μ μ μ ꡬ경μ μ΄λ €μ
π§ μ§ν
β
μμ¬λͺ° ν¨μ
λΈλλ μ μμ λͺ¨μλ³΄κ³ ν μΈκ°, μ¦κ²¨μ°ΎκΈ°λ₯Ό ν μ μλ ν μ΄νλ‘μ νΈ μ§ν
π κ²°κ³Ό
β
λμ λλ£λ€μ΄ νΈνκ² μ μνμ ꡬ경ν μ μκ² λ¨2023 ~ 2024 μμ λ΄μ© μμ½
nugu λͺ° UI κ³ λν
β
nextjs12β14λ‘ λ²μ μ
: nextjs λ§μ΄λ μ΄μ ν΄κ²°, μ± λΌμ°ν°λ‘ μ ν κ°λ₯ν κΈ°λ° κ΅¬μΆ
β
Figma λμμΈ κΈ°λ° λμμΈ λ¦¬λ΄μΌ: κΈ°ν, λμμΈ νκ³Ό νμ
νμ¬ UI/UX κ°μ
β
Storybookμ λμ
νμ¬ μΌλΆ κ³΅μ© μ»΄ν¬λνΈλ€μ μ€ν λ¦¬λ‘ μΆμΆ: ꡬνμ΄ ννΈνλ κ³΅μ© μ»΄ν¬λνΈλ€μ νλμ μ»΄ν¬λνΈλ‘ ν΅ν©
β
vitest, react testing libraryλ‘ λ¦¬ν©ν°λ§ μ§νν μΌλΆ μ»΄ν¬λνΈλ€ TDD μ§ν: ν
μ€νΈ μ½λ μμ±μΌλ‘ μ»΄ν¬λνΈ μμ μ± ν보
nugu κΈ°νμ νΌλΈλ¦¬μ±
β
λμμΈ μꡬμ¬νμ λ§μΆ° flex, gridλ₯Ό μ΄μ©νμ¬ λ€μν λ μ΄μμ ꡬμ±, μμ, μ λλ©μ΄μ
λ± μꡬμ¬νμ λ§μΆκΈ° μν΄ vimeo sdk, aos λ± λͺ¨λμ μ¬μ©
nugu λͺ°, μ΄λλ―Ό(Back Office) κ°λ°
β
cafe24 λͺ°κ³Ό μ΄λλ―Όμ μμ¬ λͺ°, μ΄λλ―ΌμΌλ‘ μ΄κ΄: cafe24 μ’
μμ± μ κ±°
β
μ€ν¬λνμ ν΅ν΄ cafe24 λ°μ΄ν° λ§μ΄κ·Έλ μ΄μ
β
κ²μλ¬Ό κ΄λ¦¬ κΈ°λ₯(tinymce, ace editor, dropzone) ꡬν
β
μΉ΄ν
κ³ λ¦¬ κ΄λ¦¬ κΈ°λ₯(fancytree) ꡬν
β
μν κ΄λ¦¬ κΈ°λ₯ ꡬν
β
μ
λ©μ΄νΈ μν λκΈ°ν κΈ°λ₯ κ°λ°μλ²μ¨ (2022)
μ°¨μΈλ λ°±μ€νΌμ€ κΈ°λ₯ κ°λ°
β
react-admin νλ μμν¬λ₯Ό μ΄μ©ν μ΄λλ―Ό νμ΄μ§ ꡬν
β
Keycloakμ μ΄μ©ν RBAC SSO ꡬν
β
Dooray! κ·Έλ£Ήμ¨μ΄ μ°λ
β
nivo κ·Έλν λͺ¨λμ μ΄μ©ν ν΅κ³ λμ보λ ꡬμΆ
β
κ²μνμΌλ‘ κ΄λ¦¬λλ κ³ κ° λ¬Έμλ₯Ό μΉΈλ°λ³΄λ UIλ‘ μ΄κ΄: κ³ κ° λ¬Έμ κ΄λ¦¬ νκ²½ κ°μ
β
SVNμΌλ‘ κ΄λ¦¬νλ μμ€μ½λλ₯Ό GitlabμΌλ‘ μ΄κ΄: μμ€μ½λ κ΄λ¦¬ νκ²½ κ°μ ν¬μμμ€ (2019 ~ 2022)
μ€μ¦λ¦¬ν¬νΈ HTML5 λ·°μ΄ μ루μ κ°λ°
β
λ€μν λΈλΌμ°μ νΈνμ±(IE8~)μ κ³ λ €νλ κ°λ° κ²½ν
β
λμΌ λ‘μ§μ μ¬μ©νλ λ€μν μΈμ΄(C++, C#, Applet, ActionScript)μ μ νλ€μ΄ μμ΄ λ€μν κ°λ° μΈμ΄λ‘ κΈ°λ₯ ν¬ν
κ²½ν
β
λ·°μ΄ λ΄μ©μ μ€ν¬λ¦° 리λ(μΌμ€λ¦¬λ)λ‘ μ½μ μ μλλ‘ μ κ·Όμ± κ°μ
β
μ μλ¬Έμ μΆλ ₯ μ μΈμ¦ λ°μ½λ μ루μ
μ°λ(MarkAny, SGA)
β
opencv-js, zxing λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄μ©νμ¬ μΈκ° μ€μΊ, μΉ΄λ μ€μΊ κΈ°λ₯ ꡬν
β
λ·°μ΄ λκΈ°ν μ€κ³ μλ² λͺ¨λ κ°λ°
β
WYSIWYG νΈμ§κΈ°(summernote) μλ² λ© κΈ°λ₯ κ°λ°ν μ΄νλ‘μ νΈ
π λͺ¨λ°μΌ μ²μ²©μ₯(2025)
λͺ¨λ°μΌ μ²μ²©μ₯ κ°λ°νμ΅λλ€. λ°©λͺ
λ‘, κΈΈμ°ΎκΈ° κΈ°λ₯μ μ 곡νμ΅λλ€.
π οΈ μ¬μ©
β
NextJS app router RSC
β
tanstack query
β
tailwindcss
β
firebase
β
NAVER map API # λΌμ΄μΌμ€ λ³κ²½μΌλ‘ νμ¬λ μ κ±°
π λ°°ν¬
β
Vercelπ λ©λμΏΌν°μ€ μμ¬λͺ° μν λͺ¨μ보λ νμ΄μ§(2025)
μμ§μμ© μμ¬λͺ° ν μΈ μνμ λͺ¨μλ³Ό μ μλ νμ΄μ§λ₯Ό κ°λ°νμ΅λλ€.
cafe24λ‘ μ΄μμ€μΈ μ¬λ¬ μμ¬λͺ° μνλ€μ λͺ¨μλ³Ό μ μκ² νμ΅λλ€.
π οΈ μ¬μ©
β
NextJS app router RSC
β
tanstack query
β
tailwindcss
π λ°°ν¬
β
Vercelπ domado(2024)
κ°μΈμ μΌλ‘ λ½λͺ¨λλ‘λ₯Ό μ¬μ©νκΈ° μν΄ μΌλ νΈλ‘ λ½λͺ¨λλ‘ μ±μ λ§λ€μμ΅λλ€.
π οΈ μ¬μ©
β
electron-react-boilerplate
π λ°°ν¬
β
github releaseπ°π· react-simple-south-korea-map-chart(2022)
μ§μλ³ ν΅κ³ μ 보λ₯Ό 보μ¬μ€ μ μλ κ°λ¨ν νκ΅ μ§λ μ°¨νΈ μ»΄ν¬λνΈλ₯Ό λ§λ€μμ΅λλ€.
π οΈ μ¬μ©
β
React
π λ°°ν¬
β
npmπ§ Pick Your Holds(2022)
μ¬μ§ 촬μ ν ν΄λΌμ΄λ° λ¬Έμ λ₯Ό λ§λ€μ΄ μ΄λ―Έμ§λ₯Ό 곡μ ν μ μλ μΉμ±μ λ§λ€μμ΅λλ€.
π οΈ μ¬μ©
β
vanilaJS(jQuery), React
π λ°°ν¬
β
μ΄μ λΈλ‘κ·Έ(github.io)μ λ°°ν¬