미리보기
기본 정보
강력한 소통 능력과 목표 설정, 실행력으로 팀 과제에 특화되었습니다. 사용자 경험을 최우선으로 생각하며 UI/UX 최적화와 데이터 검증에 강점을 가지고 있습니다. React, TypeScript, TailwindCSS 등 다양한 기술 스택을 활용해 효율적이고 직관적인 인터페이스를 구현합니다. 창의적 사고와 디자이너와의 원활한 협업 경험을 통해 사용자 중심의 서비스를 만드는 데 기여하고자 합니다.
기술 스택
React, JavaScript, GitHub, TailwindCSS, styled-components, supabase, Next.js, TypeScript
교육
스파르타코딩부트캠프
사설 교육 | 프론트엔드
2024.07. ~ 2024.11. | 졸업
성신여자대학교
대학교(학사) | 문화예술경영학과
2016.03. ~ 2020.02. | 졸업
프로젝트
Smit
프로젝트 팀장 / 프론트엔드 5명, 디자이너 2명
2024.11. ~ 진행 중
Description
기존 플랫폼의 한계를 극복, 모집과 관리 기능을 통합한 스터디 서비스
Experience
회원가입 유효성 검사와 타입 안정성 강화
데이터 검증과 타입 안정성 개선
React Hook으로 유효성 검사를 진행했으나 코드가 많아지고 복잡해지는 문제 발생
Zod를 선택 : 스키마 기반의 데이터 유효성 검사, TypeScript와의 우수한 호환성 때문에 선택
코드가 간결해지고 코드량 60% 감소
폼 상태 관리와 유효성 검사를 간편화하며 성능을 최적화
사용자가 비밀번호를 입력할 때 마다 실시간으로 정교한 유효성 검사가 진행되어야 할 필요성 확인
React Hook Form 도입 : trigger와 resolver를 활용해 필드별 동적 유효성 검사를 구현
이메일, 비밀번호, 생년월일 등의 입력값 스키마를 정의하고, 유효성 검증 코드를 통합하여 코드 중복 제거
상태 관리 및 API 최적화
웹 사이트의 성능 향상과 검색 엔진 최적화를 위해 SSR 도입
SSR을 도입하기 위해 Next.js를 사용
Zustand를 사용
Context나 Redux를 사용하기엔 보일러 플레이트가 너무 많고 코드가 복잡하였기 때문에 간단한 상태 관리 도구 선택
사용성과 코드 간소화 측면에서 다른 상태 관리보다 유리하다고 생각
Props를 내릴 필요나 과도한 보일러 플레이트를 작성할 필요가 없어지는 효과
React Query 사용
Next.js로 코드를 짰더니 API 함수가 복잡하고 양이 많아지는 현상 발견
코드가 간소화되고 쉬워짐, isError나 isLoading을 통해 에러나 로딩도 관리할 수 있게 되어 코드의 안전성 증가
두 상태 관리 도구를 결합하여 클라이언트 및 서버 상태를 체계적으로 관리
Zustand로 Client 쪽 상태를, 서버 상태 관리에 특화된 React Query로 Server 쪽 상태만을 관리하는 방식 사용
Supabase API를 활용해 사용자 인증 상태와 데이터를 효율적으로 동기화
소셜 로그인 도입
백엔드 개발자가 없어 BaaS 플랫폼 사용 : Firebase와 Supabase 두 개 비교
Supabase 채택 :
Next.js를 활용한 Server Component의 이점을 최대한 활용할 의도
자체 라이브러리를 제공
app router server, Client component에서 더 잘 작동하고 가이드 문서를 참고하기 용이한 효과
Google 및 Kakao OAuth 사용
사용자 편의성을 극대화할 수 있는 필수 기능
Supabase와의 높은 호환성
signInWithOAuth API를 사용
소셜 로그인 기능을 구현
Supabase Auth와 클라이언트 상태를 연동하여 인증 흐름을 간소화
배포 환경에서 발생한 리다이렉트 URI 설정 문제
배포 환경과 개발 환경의 환경 변수 설정을 통해 해결
UI/UX 최적화
Tailwind CSS
TailwindCSS를 활용한 스타일링
대규모 프로젝트에 적합한 유틸리티 기반 스타일링 구현.
반응형 디자인을 통해 모바일 및 데스크톱 환경에서 최적화된 UI 제공.
사용자 피드백 반영
총 12건의 피드백을 바탕으로 UI를 개선하고 설문조사를 통해 90% 이상의 사용자 만족도를 달성.
트러블 슈팅
문제:
Supabase auth.signUp에서 사용자 정보가 user 테이블에 저장되지 않는 오류 발생
해결 과정:
트랜잭션 문제를 확인
Supabase의 상태 동기화 로직을 재구성하여 데이터 불일치를 해결
성과:
사용자 등록 프로세스 안정화
가취뽀(같이취뽀해요)
팀원 / 프론트엔드 5명
2024.10. ~ 2024.10.
Description
취업에 대한 여러 서비스를 제공하는 서비스
Experience
포인트 상점 구현
Supabase 사용
백엔드가 없는 작은 프로젝트였기 때문에 백엔드 작업을 가능하게 해 주는 BaaS 플랫폼이 필요
포인트 상점의 포인트가 실시간으로 동기화될 필요성 확인
프로젝트 규모가 작더라도 유료화하여야 하는 Firebase는 부적합
Supabase 선택
인증 및 API 생성을 통해 서버 구축 없이 백엔드 작업을 가능하게 하고 작은 프로젝트는 무료로 제공
실시간 동기화 기능 제공
Supabase를 사용하여 프로젝트 구현 비용 감소
실시간 동기화 기능 구현
Zustand 도입
사용자 포인트와 상품 데이터를 전역 상태로 관리할 필요성 확인
Zustand 사용
Redux 대비 학습 비용이 적고 상태 전역 관리에서 유연성을 제공
Zustand를 사용하여 컴포넌트 간 상태 공유를 간소화
포인트 상점 시스템 구현
Supabase의 insert 및 update 기능을 사용
포인트 데이터를 추가 및 갱신
로직 최적화
Supabase와 Zustand를 활용해 포인트 거래 시스템 구축
실시간 데이터 동기화를 통해 사용자 포인트 즉시 반영
상품 구매 로직 최적화로 API 호출을 줄이고, 클라이언트-서버 상태 일원화
도구 선택 시 필요성과 대안을 고민하는 습관을 형성하며, 팀원들과 효율적인 문제 해결 방안을 도출
트러블 슈팅
RLS 문제 해결:
포인트 거래 도중 발생한 Update 로직 문제를 해결하기 위해 검색으로 오류가 날 수 있는 요인들을 검토하였고, Supabase의 Row-Level Security(RLS)를 검토하여 테이블 구조를 재구성
가을축제핑
팀원 / 프론트엔드 5명
2024.09. ~ 2024.09.
Description
카카오 지도, 전국 문화 축제 표준 데이터, 유튜브의 API를 활용하여 지도에서 축제들의 위치와 정보를 찾아 볼 수 있으며 관련된 영상에도 손쉽게 접근 가능한 서비스
Experience
위치 기반 축제 정보 제공
카카오 지도 API 사용
사용자 위치 데이터를 기반으로 한 지도 시각화에 최적화
한국에서의 높은 접근성과 신뢰성을 제공
사용할 수 있는 API의 종류가 많아 자율성이 높다고 판단하여 채택
클러스터링 방식으로 데이터를 시각화, 축제 정보 직관적으로 제공
React 사용
지도, 마커, 정보 창 등 각 요소를 독립적으로 관리할 필요성 확인
컴포넌트 기반 개발과 상태 관리의 효율성을 제공
RESTful API 이용
축제 데이터를 수집
반응형 UI를 설계
모바일 및 데스크톱 환경 모두에 최적화
북마크 기능 개발
Json-server 사용
개발 초기 로컬 환경에서 API 테스트와 데이터 관리를 빠르게 실행
북마크 데이터를 저장
TanStack Query 활용
데이터 캐싱과 비동기 상태 관리에 강점
캐싱 및 데이터 동기화를 구현
북마크 데이터를 효율적으로 관리
delete 기능을 관리할 때 TanStack Query를 사용했을 때 효율성 증가
불필요한 API 호출을 최소화
애플리케이션 성능 최적화
트러블슈팅
문제
데이터 삭제의 어려움 발생 : Json-server가 DELETE 메서드에서 다중 조건 삭제 미지원
해결
데이터 구조를 재구성
단일 조건으로도 삭제가 가능하도록 API 호출 방식을 변경
성과:
데이터 삭제 로직의 안정성 확보
포트폴리오
자기소개
문제 해결과 성장을 통해 가치를 만들어가는 개발자, 강수진입니다.
저는 새로운 도전에 주저하지 않고, 문제를 해결하며 목표를 달성하는 데에서 큰 보람을 느낍니다. 다양한 팀 프로젝트와 개인 과제를 통해 협업의 중요성과 꾸준한 학습의 가치를 경험했으며, 이를 바탕으로 실력을 꾸준히 쌓아왔습니다. 특히 팀원들과 함께 문제를 해결하며 더 나은 결과를 만들어내는 과정은 제가 개발자로서 추구하는 방향성과 일치합니다.
1. 부트캠프 1달만에 100명 앞에서 강의하다
프로그래밍 부트캠프에서 제가 실천했던 학습법을 발표하며 100명 이상의 동료와 경험을 나눈 적이 있습니다. 발표 준비 과정에서 동료들이 공감할 수 있도록 학습법과 질문 방법을 체계적으로 정리하고, 자료를 명확히 구성해 전달력을 높이고자 노력했습니다.
발표는 큰 호응을 얻었고, 이후 동료들이 제 학습법을 응용하여 이용하기도 하고 부트캠프에서 수강생 전체에 제 학습법을 응용해서 적용하기도 했습니다. 그러한 모습을 보며 내가 공유한 지식이 다른 사람의 성장에 기여할 수 있다는 점에서 보람을 느꼈습니다. 이 경험은 명확한 소통의 중요성과 함께 지식을 나누는 즐거움을 배우는 계기가 되었습니다.
2. 팀 프로젝트에서 발휘한 리더십과 문제 해결 능력
최종 프로젝트에서 팀장으로 활동하며 팀원 간 의견 조율과 일정 관리에 주력했습니다. 예상치 못한 작업 지연 상황에서도 팀원들과 주기적으로 진행 상황을 점검하며 우선순위를 재조정했고, 업무를 세분화해 각자의 역할을 명확히 했습니다.
그 결과 프로젝트를 성공적으로 완수했으며, 작업 효율이 약 20% 개선되는 성과를 얻었습니다. 이 경험을 통해 협업과 소통의 중요성을 다시 한번 체감하며, 주도적으로 팀을 이끄는 리더십을 키울 수 있었습니다.
3. 개인 프로젝트에서 경험한 실력의 도약
포켓몬 도감 프로젝트를 진행하며 처음으로 백지 상태에서 모든 기능을 구현하는 경험을 했습니다. 초기에는 기능 구현 과정에서 많은 어려움을 겪었지만, 데이터를 추적하고 로직을 세부적으로 점검하며 문제를 하나씩 해결해 나갔습니다.
결국 필수 기능을 완벽히 구현하며 과제를 제출했고, 이 과정에서 꼼꼼하게 문제를 분석하고 기본기에 충실하는 것이 얼마나 중요한지 깨달았습니다. 이 경험은 제가 꾸준히 성장할 수 있다는 자신감을 심어주었고, 이후 프로젝트에서도 동일한 방식을 적용하며 실력을 발전시켜 나가고 있습니다.
저는 목표를 달성하기 위해 꾸준히 노력하며, 팀과 함께 더 나은 결과를 만들어가는 개발자입니다. 발표와 프로젝트 경험을 통해 쌓아온 협업 능력과 문제 해결 역량은 앞으로 제가 맡은 모든 프로젝트에서 긍정적인 영향을 미칠 것입니다.
배움과 성장을 멈추지 않고, 회사와 팀의 발전에 기여하는 개발자가 되겠습니다.