채용공고 올리기

정상진님을 응원해보세요!

지금 만족하고 있어요

미리보기

기본 정보

이름
정상진
직업
“나”라는 팔레트에 “경험”이란 색을 담다, 배움러버 개발자 정상진입니다.
간단 소개

저의 가치관을 자세히 나타내는 노션 이력서입니다! - 노션 이력서 : https://tangjin.notion.site/c19c7228d04e4ba89adb70663f3b6c6f?pvs=4 - Web Portfolio : https://tanglog.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 안녕하세요. 끊임없이 도전하고 또, 도전하는 프론트엔드 개발자 정상진입니다 저는 서비스 사용자가 불편함을 느끼지 않도록, React / Nextjs / TypeScript 등의 스택을 바탕으로, 더 나은 사용자 친화적인 UX를 제공하기위해 섬세한 서비스를 만들고자 노력합니다. 또한, 좋은 서비스는 좋은 팀 분위기에서부터 시작한다고 생각하기에, 항상 팀원과 소통하며 팀의 생산성을 높이기 위해 노력하고 있습니다.

기술 스택

기술 스택

React, Next.js, TypeScript, JavaScript, Socket.io, tailwind-css, Docker, github-actions, CI/CD, Jest, react-query, Figma, scss

프로젝트

프로젝트명

면접어때

소속/기관명

개인 팀프로젝트

프로젝트 기간

2023.09. ~ 진행 중

프로젝트 내용

[팀 구성] : 프론트엔드 2 / 백엔드 1

  • 컴포넌트의 재사용성과 유지보수의 용이성을 위해 Atomic Design 패턴 적용
  • 배포시간 단축과 동일한 배포 환경 보장을 위해 Docker + github-actions를 사용해 CI/CD 자동화
  • 예기치못한 에러 발생으로인한 사용자 경험 저하를 막기위해 ErrorBoundary 적용
    • 해당 api의 책임만을 가지도록 <ApiErrorBoundary /> 컴포넌트로 감싸주고, 처리하지못하는 에러는 다시 throw해서 최상위
      <GlobalErrorBoundary />에서 캐치하도록 구현
  • 의도한 상황에서 새로고침뒤로가기 시, Confirm Modal을 띄우고 재사용성을 위해 useRouteControl + useModal 훅 구현
    • 새로고침 감지를 위해 window.addEventListener('beforeunload') 적용
      뒤로가기 시, 취소할 경우 history stack이 삭제되는 것을 보완하기 위해 window.history.pushState로 history stack 추가
  • mixin과 variables로 공통 스타일링 요소를 쉽게 사용하기 위해 SCSS 사용
  • 실시간으로 유저의 답변에 대한 피드백을 주기 위해 chatGPT 사용
  • 예기치 못한 에러를 사전에 방지하고 앱의 안정성을 높이기 위해 Jest를 사용한 TDD 방식 개발 적용

[성과]

  • Atomic Design 패턴 적용, 재사용성을 고려한 Hook 설계 등 추후 코드의 유지보수와 앱의 최적화를 위해 심도있게 고민해볼 수 있는 계기가 되었음
  • github-actions을 이용한 CI/CD 자동화 구현으로 DX를 상당히 높일 수 있었음
  • Jest 를 사용한 테스트 주도 개발로 테스트 로직 작성 조금 더 익숙해 질 수 있었음
프로젝트명

아코하 (아-코딩하고싶다)

소속/기관명

개인 팀프로젝트

프로젝트 기간

2023.01. ~ 2023.06.

프로젝트 내용

[프론트엔드 담당역할] : 앱 UI 스타일링 및 전반적인 기능 개발

  • 검색엔진 SEO 최적화 및 빠른 로딩을 위해 Next.js + ReactQuery(hydrate, prefetchQuery)를 사용
  • 랜딩페이지의 섬세한 스크롤 애니메이션을 위해 AOS 라이브러리 대신, 스크롤위치 계산을 위한 순수 JS 함수를 만들어 사용, 랜딩페이지 전체 제작
  • Redux에 비해 boilerplate 코드가 적으면서 손쉬운 전역 상태관리를 위해 Recoil을 도입
  • 테스팅을 위해 백엔드 서버 배포 전, MSW 라이브러리를 공부해서 팀원들에게 사용법을 공유하고 프로젝트에 도입
  • 앱의 배포 시 번들사이즈를 줄이고 최적화하기 위해 next-analyze-bundler 를 사용한 분석
    • next.js 13버전의 swc 컴파일러를 이용한 next.config.js - swcMinify: true 세팅
    • package.json - "sideEffects": false 세팅으로 tree shaking
  • 앱의 identity 및 보안을 위해 domain 구입 및 AWS EC2 최적화 세팅
    • nginx reverse-proxy 설정으로 보안성을 높임
    • cloudFlare를 이용한 https 설정
    • og 데이터 세팅으로 앱 공유 시 접근성을 높임
  • UI 스타일링의 로직 구현시간을 절약하기 위해 Headless UItailwindCSS를 사용, 세부 스타일링은 Emotion 라이브러리로 구현
  • 서비스의 접근성과 편리성을 높이기위해 github OAuth 2.0을 사용
    로그인 시 서버에서 받은 JWT 토큰을 Next.js의 getInitialProps로 cookie에 저장, 페이지 이동시 로그인 유지되도록 구현하는 과정에서 SameSite CORS 에러 발생
    • → 기존 passport 로직에서 top-level navigation인 Link 태그 방식으로 변경하고 추가로 서버에서 프론트 host를 CORS 허용하도록 설정해서 해결
  • 프로젝트 정보 공유 페이지에서 기록한 정보의 수정을 용이하게 하기위해 HTML- contentEditable 속성 과 라이브러리를 사용해, 블럭단위의 드래그가 가능하도록 구현
  • 빠른 정보 공유와 소통을 위해 Socket.io 를 사용한 실시간 채팅 구현
    • 코드와 같이 기본 텍스트 외에 다양한 정보공유를 위해 react-markdown 라이브러리 사용
  • 장기적인 관점으로 익숙하지만 비효율적인 방법 대신 새로운 기술스택을 배워 팀원에게 공유
    • 기존 백엔드 vercel 배포 소요시간 : 5분 대 → Docker-compose 배포 : 1분 대
    • 기존 무거운 node_modules의 yarnyarn-berry(pnpMode) 도입으로 용량 1/3 수준으로 줄임
프로젝트명

위칭 (우리 모두의 칭찬 타임)

소속/기관명

엘리스 SW 트랙 3기 / (주)엘리스그룹

프로젝트 기간

2022.12. ~ 2022.12.

프로젝트 내용

[팀 구성] : 프론트엔드 5 / 백엔드 2

[프론트엔드 담당역할] : 로그인 & 로그아웃 / 내가 쓴 글 목록 & 내가 쓴 글 상세 페이지 및 서비스 기획

  • [Styled-Components]

    • 회원 / 비회원 로그인 페이지 UI
    • 구글 로그인 커스텀 버튼, 로그아웃 버튼
    • 내가 쓴 글 전체 목록 페이지 UI
    • 내가 쓴 글 상세 페이지 UI
    • 신고 modal UI
  • [기능구현]
    〔로그인〕

    • OAuth 2.0 google 로그인으로 사용자에게서 받는 정보 최소화, 서비스에대한 사용자 접근성 ↑ : @react-oauth/google 라이브러리 사용
    • JWT 토큰을 Cookie에 저장해서 회원만 이용가능한 컨텐츠 클릭시 검증 → 비회원일시 로그인 유도

    〔내가 쓴 글〕

    • 전체 목록에서 개별 글 마다 아직 확인하지않은 칭찬이 있다면 → 초록색 테두리로 표시, 읽으면 회색 테두리로 초기화 : 목록 조회 API response로 받은 isClicked 속성을 체크
    • 받은 칭찬 개수를 라벨로 표시 직관적인 확인이 가능하도록 구현 : " response의 받은 칭찬.length를 이용
    • 별점 평가 : form & input[type='radio'] , e.currentTarget으로 데이터 추출 후 API 요청
    • 북마크 : props로 받아온 해당 칭찬의 ID 값을 가지고 클릭 시 API 요청
    • 신고 : selectBox의 신고 타입과 textarea로 받은 신고 사유, 해당 칭찬 ID로 API 요청 → 신고 후 ::before 를 사용해 블러처리

[성과]

  • repo를 나눠 front/back 따로 개발 시 마주칠 수 있는 악명높은 CORS 에러를 해결했던 소중한 경험
  • 첫 React, TypeScript를 활용한 프로젝트로 앞으로의 개발 주요 스택을 미리 경험해볼 수 있었음

포트폴리오

URL

link

notion 이력서

노션
link

web portfolio

URL 링크
link

github

깃허브
link

[전지적 문제 해결 시점] 아코하 포트폴리오

노션
link

개발 블로그

티스토리

첨부파일

첨부파일명

[프론트엔드 지원] - 정상진 자기소개서.pdf

첨부파일명

포트폴리오 [전지적 문제 해결 시점].pdf

첨부파일명

[프론트엔드 정상진] - 노션 이력서.pdf

교육

소속/기관명

엘리스 SW 트랙 3기 / (주)엘리스그룹

종류 | 전공

사설 교육 | Software Engineer

재학 기간 | 재학 상태

2022.08. ~ 2022.12. | 졸업

자기소개

자기소개

안녕하세요! 저는 사용자가 불편함을 느끼지 않도록, React / Nextjs / TypeScript 환경에서
더 나은 사용자 친화적인 UX를 제공하기위해 섬세한 앱을 만들고자 노력합니다.
또한, 좋은 서비스는 좋은 팀 분위기에서부터 시작한다고 생각하기에, 항상 팀원과 소통하며 팀의 생산성을 높이고자 했습니다.
그러한 ‘좋은 서비스’를 만들기 위해, 다음의 가치를 추구하고 있습니다.

끊임없는 탐구

적극적인 소통

겸손한 태도

저는 위 3가지 요소가 이른바 우수한 개발자가 가져야 할 필수 소양이라고 생각하며, 여기서 우수한 개발자란 팀원과 좋은 시너지를 내며,
자신의 능력으로 프로젝트에 기여할 수 있는 개발자를 뜻합니다.
그런 우수한 개발자들이 모여, ‘좋은 서비스’를 만든다고 생각합니다.
따라서 저는 우수한 개발자로 거듭나기 위해, 위 3가지 요소를 의식적으로 지향하고 있습니다.

제가 생각하는 좋은 서비스를 좀 더 자세히 표현하면, 사용자에게 서비스를 더 쉽고 편하게 제공하며, 지속적인 이용이 가능한 서비스입니다.
이를 프로젝트에서 실현하기 위해 끊임없는 탐구 의 과정으로 서비스에 적합한 기술을 채택하고,
이 과정에서 팀원 과의 적극적인 소통 으로 개인적인 생각에 매몰되지 않았는지 검증할 수 있었으며,
전체적인 소통은 겸손한 태도로 이루어졌기에 좋은 팀 분위기 또한 자연스레 가져갈 수 있었습니다.
이 모든 과정을 의식적으로 지키려했기 때문에 좋은 결과가 있었다고 생각합니다.

저는 개발이 레고와 비슷하다고 생각합니다. 레고가 무수히 많은 블럭들을 올바른 하나의 결과물로 조립하기위해 요리조리 고민하는것처럼,
개발 과정에서 겪는 트러블슈팅은 저에게 도전의식을 불태우게하고, 마침내 해결하는 순간 느끼는 뚜렷한 성취감
저에게 지치지않고 계속해서 나아가게 하는 동기부여가 되고 있습니다 :)

댓글