개발자감성 듬뿍 포트폴리오 만들기 - 타이핑 애니메이션

잔나비·2025년 8월 3일

jannabee로그

목록 보기
4/14

메인 히어로 섹션 - 타이핑 애니메이션 구현기

포트폴리오의 첫 인상, 히어로 영역

개발자가 봤을 때 매력적일 수 있도록 VS코드 감성을 녹인 포트폴리오 페이지를 만들기로 했다.
해서, 페이지의 첫 인상인 히어로 영역에 타이핑 애니메이션을 구현했다.

🎯 구현 목표

  • 첫 진입 시, 자동으로 텍스트가 순차적으로 타이핑되도록
  • 형광색 커서가 깜박이며 실제 코드 에디터 같은 느낌을 줄 것
  • 3줄 메시지를 순서대로 나타나게 하여 "나를 소개"하는 효과
  • 텍스트 스타일과 배경 모두 개발자 감성으로 통일

🎨 CSS 스타일링

#typing-title {
  font-family: 'PF Stardust ExtraBold', sans-serif;
  font-size: 5rem;
  color: #C7FF3D;
  white-space: pre;
  overflow: hidden;
}

#typing-line1, #typing-line2 {
  font-family: 'PF Stardust', sans-serif;
  color: #C7FF3D;
  font-size: 1.5rem;
  white-space: pre;
}

.cursor {
  display: inline-block;
  animation: blink 1s step-end infinite;
  color: #caff68;
}
  • 커서가 깜박이는 애니메이션을 주기 위해 @keyframes blink 사용
  • white-space: pre 로 줄바꿈과 공백 유지
  • 폰트는 레트로스럽고 개발자 에디터 감성인 Stardust 계열 사용

특히, white-space: pre는 의외로 타이핑 연출의 필수요소였다.

1. 줄을 나누는 효과를 만들 때, \n 또는 줄바꿈을 인식시켜야 했고,
2. 커서 오른쪽에 여백이 들어갈 때, 브라우저가 그 공백을 없애지 않아야 했기 때문.
(에디터처럼 보이려면 공백과 줄바꿈이 보이는 게 자연스럽다)

폰트 선택에 있어서도 예상 외로 많은 시행착오가 있었다.

처음에는 실제 개발자들이 많이 사용하는 네이버 D2Coding이나 JetBrains Mono 같은 폰트를 적용해봤다.

그러나 이들 폰트는 한글과 영문 조합에서의 시각적 밸런스가 부족했고, 특히 <잔나비>처럼 한글을 강조해야 할 때는 디자인 톤이 깨지는 느낌이 강했다.

여러 레트로 폰트를 테스트한 끝에, 최종적으로 개성 있으면서도 에드터 느낌을 줄 수 있는 'Stardust'계열 폰트를 선택하게 되었다.


🧠 JavaScript 구현 (jQuery 사용)

function typeTextBySpan(spanId, text, delay, callback) {
  const textEl = document.getElementById(spanId);
  textEl.textContent = '';
  const cursor = document.createElement('span');
  cursor.className = 'cursor';
  cursor.textContent = '|';
  textEl.appendChild(cursor);

  let i = 0;
  const timer = setInterval(() => {
    cursor.insertAdjacentText("beforebegin", text.charAt(i));
    i++;
    if (i >= text.length) {
      clearInterval(timer);
      if (callback) callback();
    }
  }, delay);
}

// 순차 타이핑 실행
typeTextBySpan("typing-title", "<잔나비>", 250, () => {
  typeTextBySpan("typing-line1", "// 기획부터 인터렉션까지 -", 100, () => {
    typeTextBySpan("typing-line2", "// 홍보&기획 7년 기반의 - 프론트엔드 개발자", 100);
  });
});
  • 타이핑은 한 글자씩 삽입되며 setInterval로 딜레이 제어
  • 콜백 함수로 줄 단위 순차 실행
  • 마지막 줄까지 완성되면 히어로 영역 텍스트 노출 완료!

이 방식은 document.createElement로 커서를 직접 DOM에 삽입하고,
insertAdjacentText()커서 앞에 글자를 하나씩 밀어 넣는 구조라 꽤 직관적이면서도 깔끔한 연출이 가능하다.

이 방법을 구현하기까지 커서가 줄바꿈이 안되거나,
3개 커서가 동시에 보이거나,
커서가 커서답지 않게 굴거나....
시간을 갈아넣으며 디버깅했다 ㅠㅠ


처음에는 jQuery 문법으로 좀 더 간단하게 쓸까도 고민했지만,
향후 텍스트 동적 변경이나 다국어 대응 등을 고려해 바닐라 JS로 구성했다.
꿈만 크다... 하지만 구현 했으니까 된 거지 뭐 ㅋㅋ큐ㅠㅠ


💡 의도했던 감성

히어로 영역은 방문자가 가장 먼저 보는 부분이다.
나는 이 공간을 단순 소개가 아닌,
"브랜드 슬로건 같은 개발자 메시지"로 연출하고 싶었다.
그래서 그래서 텍스트는 단순히 'About me'가 아닌
<, >, // 등의 코딩 문법을 활용

<잔나비>
// 기획부터 인터랙션까지 - 
// 홍보&기획 7년 기반의 - 프론트엔드 개발자

처럼, 나만의 정체성을 드러낼 수 있는 문구로 구성했다.

🎈마무리하며

히어로 영역을 만들면서 가장 많이 고민한 건,
나를 표현하는 대표소갯글을 과하지 않으면서도 확실하게 강조하는 것이었다.

VS코드개발자감성을 고려해 타이핑 애니메이션 이라는 방식을 선택했고,

이를 구현하며 마주친 끊임없는 시행착오로 나의 한계를 뚜렷이 경험했다 ㅠㅠ
하지만 어떻게든 된다 ! 란 ㅋㅋ 성취감도 동시에 얻을 수 있었고,
결과적으로 이 영역은, 내 포트폴리오에서 가장 뿌듯한 결과물 중 하나가 되었다.

물론.. 아직 프론트엔드 '개발자'라는 정체성
나를 표현하는 단어가 될 수 있을지에 대해서는 잘 모르겠다. 자신감 부족..쭈글쭈글

나는 과연 프론트엔드 개발자인가?
아니면 UX·UI 디자이너, 웹기획자인가? 마케터인가?

이런 질문은 앞으로도 계속될 것이다.

하지만 이 고민이, 성장을 이끄는 나침반이 되어줄 것이라 믿는다.

profile
“브랜드를 잇고, 감성을 설계하며, 기능을 실현하는 연결자”로 성장하고픈^.^

0개의 댓글