์›น ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ: Transition, Keyframes, rAF, WAAPI ๋น„๊ต์™€ ํ™œ์šฉ๋ฒ•

2025. 9. 24. 22:56ยท๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
728x90

์›น ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ๊ฐ•ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ž‘์€ ๋ฒ„ํŠผ ํ˜ธ๋ฒ„ ํšจ๊ณผ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์‹œ๊ฐํ™”๊นŒ์ง€, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ๊ณผ ๊ฐ€๋…์„ฑ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Transition/Transform/Opacity, Keyframes, requestAnimationFrame(rAF), Web Animations API(WAAPI) ๋„ค ๊ฐ€์ง€ ๋Œ€ํ‘œ์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ๋น„๊ตํ•˜๊ณ , ์‹ค์ œ๋กœ ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์“ฐ๋ฉด ์ข‹์€์ง€ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 


1. CSS Transition + Transform / Opacity

 

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_transitions/Using_CSS_transitions

 

CSS ํŠธ๋žœ์ง€์…˜ ์‚ฌ์šฉํ•˜๊ธฐ - CSS: Cascading Style Sheets | MDN

์›น ์ž‘์„ฑ์ž๋Š” ์–ด๋–ค ์†์„ฑ์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์›€์ง์ผ์ง€๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ณต์žกํ•œ ํŠธ๋žœ์ง€์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์†์„ฑ์€ ์›€์ง์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ง์ด ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์• ๋‹ˆ๋ฉ”์ด์…˜

developer.mozilla.org

 

transition: <property> <duration> <timing-function> <delay>;

 

Transition์€ ์ƒํƒœ ๋ณ€ํ™”(hover, active ๋“ฑ)๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋ฐ ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ transform๊ณผ opacity๋Š” GPU ํ•ฉ์„ฑ ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ƒ ์ด์ ์ด ํฝ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‡ผํ•‘๋ชฐ ์นด๋“œ hover ์‹œ ํ™•๋Œ€๋˜๋ฉด์„œ ๊ทธ๋ฆผ์ž๊ฐ€ ๊ฐ•์กฐ๋˜๊ฑฐ๋‚˜, ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‚ด์ง ํŠ€์–ด๋‚˜์˜ค๋Š” ํšจ๊ณผ๋Š” transition์œผ๋กœ ๊ฐ„๋‹จํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

button {
  transition: transform 0.2s ease, opacity 0.2s ease;
}
button:hover {
  transform: scale(1.05);
  opacity: 0.9;
}

 

 

transition์€ ํ•ด๋‹น ์†์„ฑ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ์ˆœ๊ฐ„์— ๋ฐœ๋™ํ•ฉ๋‹ˆ๋‹ค.


์ฆ‰,

  • DOM ์š”์†Œ์˜ ์Šคํƒ€์ผ์ด ์ดˆ๊ธฐ๊ฐ’ → ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๋€Œ๋Š” ์‹œ์ 
  • ํ˜น์€ ํด๋ž˜์Šค ํ† ๊ธ€/์Šคํƒ€์ผ ์†์„ฑ ๋ณ€๊ฒฝ์œผ๋กœ CSS ์†์„ฑ์ด ๋ณ€ํ•  ๋•Œ

์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‘ ๊ฐ’ ์‚ฌ์ด๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณด๊ฐ„ํ•ฉ๋‹ˆ๋‹ค.

 

=> ์ฆ‰, .class ์ถ”๊ฐ€/์ œ๊ฑฐ, JS์—์„œ style.height = ... ๊ฐ™์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ ์ˆœ๊ฐ„์ด ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


์˜ˆ์‹œ ํ๋ฆ„

.box {
  height: 0;
  transition: height 0.6s ease;
}

.box.expand {
  height: 200px;
}
  • ์ฒ˜์Œ์—” .box → height: 0
  • JS์—์„œ .expand ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด → height: 200px
  • ์ด ์‹œ์ ์— transition์ด ๋ฐœ๋™ํ•˜์—ฌ 0 → 200px์œผ๋กœ 0.6์ดˆ ๋™์•ˆ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ์ 

  • transition์€ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ์—๋Š” ๋ฐœ๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    (DOM์ด ๊ทธ๋ ค์งˆ ๋•Œ ์ด๋ฏธ ๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉด “๋ณ€ํ™””๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—†์Œ)
  • ๋ฐ˜๋“œ์‹œ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ์ˆœ๊ฐ„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • display์ฒ˜๋Ÿผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ์†์„ฑ์€ transition์ด ๋ฐœ๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • height: auto → height: 0 ๊ฐ™์€ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ, ์ง์ ‘ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’(auto)์€ ๋ฐœ๋™ํ•˜์ง€ ์•Š์Œ. → ๊ทธ๋ž˜์„œ ๋ณดํ†ต scrollHeight(px)๋กœ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.

 


2. CSS Keyframes Animation: ๋ฐ˜๋ณต ๋™์ž‘๊ณผ ํŒจํ„ด ์• ๋‹ˆ๋ฉ”์ด์…˜์— ์ตœ์ ํ™”

https://developer.mozilla.org/ko/docs/Web/CSS/@keyframes

 

@keyframes - CSS: Cascading Style Sheets | MDN

ํ‚คํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด @keyframes ๋ฃฐ์„ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ํ‚คํ”„๋ ˆ์ž„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งค์นญ์‹œํ‚ฌ animation-name ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ @keyframes ๋ฃฐ์€ ํ‚คํ”„๋ ˆ์ž„ ์„ ํƒ์ž์˜ ์Šคํƒ€์ผ ๋ฆฌ์ŠคํŠธ๋ฅผ ํฌ

developer.mozilla.org

 

 

 

Transition์€ ํ•œ ๋ฒˆ์˜ ์ƒํƒœ ๋ณ€ํ™”์— ์ ํ•ฉํ•˜์ง€๋งŒ, ์ฃผ๊ธฐ์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•„์š”ํ•  ๋• Keyframes๊ฐ€ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ, ๋ฐฐ๋„ˆ ๋กค๋ง, ์ฃผ๊ธฐ์  ๊ฐ•์กฐ ํšจ๊ณผ ๋“ฑ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

@keyframes scaleAnimation {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.2); }
  100% { transform: scale(1); }
}

.loader {
  width: 40px; height: 40px;
  background: steelblue;
  animation: scaleAnimation 2s ease-in-out infinite;
}

 

ํŠน์ง•

  • @keyframes ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์†์„ฑ์ด ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋‹จ์ˆœํžˆ ํ•œ ๋ฒˆ์˜ ์ƒํƒœ ์ „ํ™˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” transition๊ณผ ๋‹ฌ๋ฆฌ, ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋ณต(loop) ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS๋งŒ์œผ๋กœ๋„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†์–ด๋„ ์ž๋™์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌธ๋ฒ•

@keyframes myAnimation {
  0%   { transform: translateY(0);   opacity: 0; }
  50%  { transform: translateY(-10px); opacity: 1; }
  100% { transform: translateY(0);   opacity: 1; }
}

.box {
  animation: myAnimation 1s ease-in-out infinite;
}
  • @keyframes → ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด๋ฆ„ ์ •์˜
  • 0%, 50%, 100% → ์‹œ๊ฐ„ ์ถ•์—์„œ ์†์„ฑ ๊ฐ’ ๋ณ€ํ™” ์ •์˜
  • .box์— animation ์†์„ฑ ์ ์šฉ → ์ด๋ฆ„/์‹œ๊ฐ„/ํƒ€์ด๋ฐ ํ•จ์ˆ˜/๋ฐ˜๋ณต ์—ฌ๋ถ€ ์„ค์ •

 

์†์„ฑ

  • animation-name → @keyframes ์ด๋ฆ„ ์ง€์ •
  • animation-duration → ์žฌ์ƒ ์‹œ๊ฐ„ (์˜ˆ: 2s)
  • animation-timing-function → ์†๋„ ๊ณก์„  (์˜ˆ: ease-in-out, cubic-bezier)
  • animation-delay → ์‹œ์ž‘ ์ง€์—ฐ ์‹œ๊ฐ„
  • animation-iteration-count → ๋ฐ˜๋ณต ํšŸ์ˆ˜ (์˜ˆ: infinite)
  • animation-direction → normal, reverse, alternate ๋“ฑ (์™•๋ณต ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ€๋Šฅ)
  • animation-fill-mode → ์‹œ์ž‘ ์ „/๋๋‚œ ํ›„ ์ƒํƒœ ์œ ์ง€ ์—ฌ๋ถ€ (forwards, backwards, both)

 

 


3. requestAnimationFrame (rAF): ์ •๊ตํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ, ํŠนํžˆ ์Šคํฌ๋กค, ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”, ์ƒํ˜ธ์ž‘์šฉ ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์—๋Š” requestAnimationFrame์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

rAF๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฆฌํŽ˜์ธํŠธ ์ฃผ๊ธฐ(VSync)์— ๋งž์ถฐ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ, setInterval๋ณด๋‹ค ํ›จ์”ฌ ๋ถ€๋“œ๋Ÿฝ๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

const box = document.getElementById('box');
let start = null;

function step(timestamp) {
  if (!start) start = timestamp;
  const progress = timestamp - start;

  box.style.transform = `translateX(${Math.min(progress / 10, 200)}px)`;

  if (progress < 2000) {
    requestAnimationFrame(step);
  }
}
requestAnimationFrame(step);

ํ™œ์šฉ ์˜ˆ์‹œ

  • ํŒจ๋Ÿด๋ž™์Šค ์Šคํฌ๋กค
  • ์ฐจํŠธ ์ ์ง„์  ๊ทธ๋ฆฌ๊ธฐ
  • ์ง€๋„์—์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด ์ด๋™

4. Web Animations API (WAAPI): ์ •๋ฐ€ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ

WAAPI๋Š” JS์—์„œ CSS Keyframes์ฒ˜๋Ÿผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ •์˜ํ•˜๊ณ , pause/play/reverse/finish ๋“ฑ ์ •๋ฐ€ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ์‹œ์Šคํ…œ์ด๋‚˜ ๋Œ€์‹œ๋ณด๋“œ์ฒ˜๋Ÿผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ƒํƒœ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

const el = document.getElementById('animatedElement');
const anim = el.animate(
  [
    { transform: 'scale(1)' },
    { transform: 'scale(1.5)' }
  ],
  { duration: 1000, iterations: Infinity, direction: 'alternate' }
);

// ํ•„์š” ์‹œ ์ œ์–ด ๊ฐ€๋Šฅ
anim.pause();
anim.play();

์žฅ์ 

  • ๋Ÿฐํƒ€์ž„ ์ œ์–ด (์ค‘๊ฐ„์— ๋ฉˆ์ถ”๊ธฐ, ๋˜๊ฐ๊ธฐ, ์†๋„ ๋ณ€๊ฒฝ)
  • CSS + JS ํ˜ผํ•ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „๋žต ์ˆ˜๋ฆฝ ๊ฐ€๋Šฅ

๊ฒฐ๋ก 

 

  • Transition/Transform/Opacity → UI ํ”ผ๋“œ๋ฐฑ (๋ฒ„ํŠผ, hover, ๋ชจ๋‹ฌ ๋“ฑ์žฅ)
  • Keyframes → ๋ฐ˜๋ณต์ /์ง€์†์  ๋™์ž‘ (์Šคํ”ผ๋„ˆ, ๋ฐฐ๋„ˆ)
  • requestAnimationFrame → ์ƒํ˜ธ์ž‘์šฉ/๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ (์Šคํฌ๋กค, ์ฐจํŠธ)
  • WAAPI → ์กฐ๊ฑด๋ถ€/์ •๋ฐ€ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ (๋Œ€์‹œ๋ณด๋“œ, ๋””์ž์ธ ์‹œ์Šคํ…œ)

 

์›น ์• ๋‹ˆ๋ฉ”์ด์…˜์€ “์˜ˆ์˜๊ฒŒ ๊พธ๋ฏธ๊ธฐ” ์ˆ˜์ค€์„ ๋„˜์–ด, ์‚ฌ์šฉ์ž์˜ ์‹œ์„ ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋Œ๊ณ  ์ธํ„ฐ๋ž™์…˜์„ ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ UI ํ”ผ๋“œ๋ฐฑ์€ Transition/Keyframes๋กœ, ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ˜น์€ ์กฐ๊ฑด ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด rAF๋‚˜ WAAPI๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ถ๊ทน์ ์œผ๋กœ ์ค‘์š”ํ•œ ๊ฑด ๋งฅ๋ฝ์— ๋งž๋Š” ๋„๊ตฌ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์˜คํžˆ๋ ค UX๋ฅผ ํ•ด์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ, “์™œ ์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•„์š”ํ•œ๊ฐ€?”๋ฅผ ๋จผ์ € ๊ณ ๋ฏผํ•˜๋Š” ์Šต๊ด€์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค

 

'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Next.js 16 + Turbopack + pnpm ๋ชจ๋…ธ๋ ˆํฌ: Docker ๋นŒ๋“œ ์™„์ „ ์ •๋ณต  (0) 2026.01.17
์ง€๋„ ๋ทฐํฌํŠธ ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ˆ™์†Œ ๊ฒ€์ƒ‰ ๊ตฌํ˜„  (0) 2026.01.14
Webpack Tree Shaking ๋™์ž‘ ์›๋ฆฌ  (0) 2025.09.17
Webpack + Babel + TypeScript ์„ค์ • ๊ฐ€์ด๋“œ  (0) 2025.09.16
MVC ๊ตฌ์กฐ - ์˜ต์ €๋ฒ„ ํŒจํ„ด ( Observer Pattern )  (0) 2025.09.08
'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Next.js 16 + Turbopack + pnpm ๋ชจ๋…ธ๋ ˆํฌ: Docker ๋นŒ๋“œ ์™„์ „ ์ •๋ณต
  • ์ง€๋„ ๋ทฐํฌํŠธ ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ˆ™์†Œ ๊ฒ€์ƒ‰ ๊ตฌํ˜„
  • Webpack Tree Shaking ๋™์ž‘ ์›๋ฆฌ
  • Webpack + Babel + TypeScript ์„ค์ • ๊ฐ€์ด๋“œ
์—ฐ์žŽ(lotus leaf)
์—ฐ์žŽ(lotus leaf)
  • ์—ฐ์žŽ(lotus leaf)
    lotus' s develog ๐Ÿƒ
    ์—ฐ์žŽ(lotus leaf)
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (79)
      • โœ๏ธ ๊ฐœ๋ฐœํšŒ๊ณ ๋ก (5)
      • ๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (3)
      • ๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE) (19)
        • HTML (0)
        • CSS (0)
        • Javascript (0)
        • React (0)
        • Next.js (0)
        • webpack & babel (0)
      • ๐Ÿ’ป ๋ฐฑ์—”๋“œ(BE) (2)
        • Nest.js (0)
        • Express.js (0)
        • MySQL (1)
      • โš™๏ธ ์ธํ”„๋ผ(Devops) (2)
      • ๐Ÿค– AI (1)
      • ๐ŸŒ WEB (8)
      • ๐Ÿ’ป CS (16)
        • ์ž๋ฃŒ๊ตฌ์กฐ (0)
        • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (1)
        • ์šด์˜์ฒด์ œ (0)
        • ์ธ๊ณต์ง€๋Šฅ (8)
        • ์›น ๋ณด์•ˆ (1)
        • ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… (6)
      • ๐Ÿ–‹๏ธ DevLog (1)
      • ๐Ÿฆพ ๋กœ๋ณดํ‹ฑ์Šค (4)
      • ๐Ÿ“— ๋„ค์ด๋ฒ„๋ถ€์ŠคํŠธ์บ ํ”„ ์›น ๋ชจ๋ฐ”์ผ (0)
      • ๐ŸŽฎ Unity(C#) (10)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (4)
        • C (4)
        • C++ (0)
        • Java (0)
        • Python (0)
      • MSA (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ฝ”๋”ํŒจ๋“œ
    advaned detail
    client-streaming
    soft margin svm
    AWS
    ๋ฐฑ์ค€
    C#
    auto-scaling
    ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต #๋„์ „ํ•™๊ธฐ์ œ
    ์กฐํ•ฉ
    ros workspace
    ๊ธฐ์ดˆ์•Œ๊ณ ๋ฆฌ์ฆ˜
    isaac automator
    c++
    c์–ธ์–ด
    ํŒŒ์ผํŠธ๋ฆฌ
    hard margin svm
    ros bridge
    nav2
    gaussian rbf svm
    C
    ์ŠคํŒธ๋ถ„๋ฅ˜๊ธฐ
    Devops #๋Œ€๊ทœ๋ชจํŠธ๋ž˜ํ”ฝ์ฒ˜๋ฆฌ
    turtlebot
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ŠคํŒธ๋ฉ”์ผ๋ถ„๋ฅ˜๊ธฐ
    deploy-aws
    ์ˆœ์—ด
    next.js12
    ๋ฆฌ์•กํŠธ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์—ฐ์žŽ(lotus leaf)
์›น ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ: Transition, Keyframes, rAF, WAAPI ๋น„๊ต์™€ ํ™œ์šฉ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”