← 포트폴리오로 돌아가기

ArtTalkTalk

기간: 2024.01 ~ 2024.02

개발 인원: 7명 (프론트엔드 4명, 백엔드 2명, 디자이너 1명)

프로젝트 소개

ArtTalkTalk신진 작가들이 자신의 작품을 전시하고, 피드백을 받으며, 자유롭게 소통할 수 있는 온라인 플랫폼입니다. 작품 구매 및 나눔, 기부 기능도 지원하여 예술 생태계 형성을 목표로 합니다.

담당한 기능

공통 컴포넌트 개발, 마이 페이지 / 프로필 수정 페이지 / 계정 정보 페이지 구현, 탈퇴 기능 구현, 댓글 CRUD 구현

기술 스택

Tailwind logoTailwind
TypeScript logoTypeScript
React logoReact
NextJs logoNextJs
ReactQuery logoReactQuery
Zustand

주요 작업

Next.js의 Parallel Routes를 활용한 내 계정 페이지 탭 구조 구현

Next.js의 Parallel Routes 기능을 활용하여 내 계정 페이지 내에서 계정 편집/계정 삭제 탭 전환 UI를 구현했습니다. URL은 유지하면서, 각 탭에 대응하는 페이지 컴포넌트를 병렬로 렌더링할 수 있도록 구성했습니다.

  • @editProfile, @deleteProfile 구조를 통해 서로 다른 페이지 컴포넌트를 독립적으로 병렬 구성할 수 있도록 디렉토리 구조를 설계
  • layout.tsx에서 editProfile, deleteProfile을 props로 받아 탭 전환 시 필요한 컴포넌트만 조건 렌더링되도록 구현하여, 라우팅 성능과 사용자 경험을 향상시킴
  • React의 상태 기반 탭 전환 로직Next.js 병렬 라우팅 기능을 결합하여 불필요한 리렌더링 없이 빠른 탭 전환이 가능한 구조를 설계

Controller를 활용한 react-hook-form 입력 필드 최적화

react-hook-formController를 사용해 입력 상태 관리와 유효성 검사를 통합하고, 성능을 개선했습니다.

  • Controller를 통해 외부 컴포넌트와의 폼 연동 로직 간소화
  • 불필요한 리렌더링 제거렌더링 성능 최적화
  • 입력 필드 재사용성 향상폼 코드 유지 보수성 개선

이미지 최적화를 통한 페이지 로드 성능 개선

고화질 PNG 이미지로 인해 느려졌던 초기 페이지 로드 성능을 최적화했습니다.

  • Next.js의 Image 컴포넌트에 formats: ['image/avif', 'image/webp'] 옵션을 적용하여 자동 포맷 변환브라우저 최적 형식 제공
  • lazy loading, placeholder 기능을 함께 사용해 사용자 체감 성능 향상

React Query 기반 API 통신 최적화

API 요청 최적화를 통해 성능 향상데이터 동기화 효율화했습니다.

  • React Query를 도입하여 API 응답 캐싱, 중복 요청 방지, 자동 리페칭 구현
  • 비동기 상태 관리 일관성 확보UX 지연 최소화를 통한 사용자 만족도 향상

공통 컴포넌트 및 사용자 계정 관련 페이지 구현

계정 관련 핵심 페이지(Mypage, 프로필 수정, 회원 탈퇴 등 사용자 계정 기능)를 일관된 UI/UX로 구축했습니다.

  • 공통 컴포넌트 설계재사용 구조 구현
  • 계정 관련 주요 페이지 개발탈퇴 기능 포함 전체 흐름 완성

반응형 UI 구현으로 다양한 디바이스 지원

모바일, 태블릿, 데스크탑 환경에서도 일관된 사용자 경험을 제공하는 반응형 UI를 구현했습니다.

  • Tailwind CSS를 활용한 반응형 레이아웃 및 유연한 그리드 시스템 구축
  • 접근성과 사용 편의성을 고려한 뷰포트별 최적화 작업 수행

트러블슈팅

복잡한 입력 필드 상태 관리 및 유효성 검사로 인한 코드 복잡도 증가

📌 문제 배경

프로젝트에서 다양한 입력 폼을 처리할 때, 각 입력 필드의 상태를 useState로 개별적으로 관리하고 유효성 검사 로직을 직접 구현했습니다. 그러나 입력 필드가 많아질수록 코드의 복잡도가 증가하고, 중복 코드가 발생하여 가독성과 유지보수성이 저하되었습니다. 또한, 불필요한 리렌더링이 발생하면서 폼의 성능 저하가 우려되는 문제도 있었습니다.

🔍 원인 분석

  • useState를 이용한 개별 상태 관리로 인한 코드 중복과 복잡도 증가
  • 입력 필드 수가 많아질수록 리렌더링과 로직 분산 발생
  • 유효성 검사 로직이 분산되어 유지보수가 어려움

🛠 해결 과정

  1. react-hook-form의 Controller 도입으로 상태 관리 최적화
    • react-hook-form을 활용하여 각 입력 필드의 상태를 중앙에서 관리하고, 불필요한 useState 사용을 줄여 코드 구조를 단순화
    • Controller를 통해 입력 값과 폼 상태를 효과적으로 연동하고 이벤트 핸들러를 간결하게 처리
    • 중복 코드 제거 및 재사용성 향상으로 유지보수성과 성능 최적화 달성

✅ 결과

  • 입력 필드 변경 시 불필요한 리렌더링이 줄어들며 렌더링 성능 향상
  • react-hook-form 도입으로 유효성 검사 로직을 일관되게 유지하며 가독성 향상

🧠 배운 점

이 경험을 통해 폼 상태 관리 및 유효성 검사 최적화의 중요성을 배웠습니다. react-hook-form을 적용하면서 코드의 복잡도를 줄이고 유지보수성을 높일 수 있었으며, 성능 최적화를 통해 사용자 경험을 개선할 수 있었습니다.

팀 간 소통 구조 개선을 통한 협업 효율 향상

📌 문제 배경

프로젝트 초기에는 프론트엔드, 백엔드, 디자이너 간의 원활하지 않은 소통으로 인해 작업 지연 및 요구사항 전달 문제가 발생했습니다. 각 팀의 작업 타임라인과 우선순위가 일치하지 않아 협업이 비효율적으로 이루어졌으며, 즉각적인 피드백이 어려워 개발 과정에서 요구사항 변경이 생길 때 대응 속도가 느려졌고, 프로젝트 일정에 부정적인 영향을 미쳤습니다.

🔍 원인 분석

  • 역할별 커뮤니케이션 채널이 명확하지 않아 작업 우선순위 공유에 어려움
  • 요구사항 변경 시 실시간 소통 부족으로 개발 일정 지연 발생
  • 팀 간 협업 구조가 정립되지 않아 작업 흐름 불일치

🛠 해결 과정

  1. 코어타임(19–22시) 설정으로 실시간 협업 시간 확보
    • 모든 팀원이 동시에 접속하여 피드백을 주고받을 수 있도록 코어타임을 지정하여 즉각적인 의사소통 가능
  2. 데일리 스크럼을 통한 업무 공유 및 병목 제거
    • Block / Done / To-do 형식으로 매일 각자의 업무 상황을 공유하며, 필요한 협업을 빠르게 파악하고 문제를 조기에 해결
    • GitHub Discussions 기능을 활용해 비동기적으로도 진행상황을 확인할 수 있도록 환경 구성
    • https://github.com/ArtTalkTalk/ArtTalkTalk_frontend/discussions

✅ 결과

  • 코어타임을 통해 빠른 피드백 루프 형성 및 결정 지연 최소화
  • 데일리 스크럼으로 각 팀원 업무 현황 공유가 명확해지며 협업 효율 증가
  • 작업 우선순위 조율이 수월해져 일정 관리의 정확도가 향상됨

🧠 배운 점

이 경험을 통해 팀 간 소통의 중요성을 실감했습니다. 코어타임을 활용한 실시간 피드백 덕분에 의사결정이 신속하게 이루어졌고, 데일리 스크럼을 통해 개발 진행 상황을 명확하게 공유하면서 협업의 효율성이 향상되었습니다. 이러한 경험을 바탕으로 앞으로도 효과적인 협업 환경을 구축하는 데 집중하고, 팀워크를 극대화할 수 있는 소통 방식을 지속적으로 적용할 계획입니다.