채용공고 올리기

한상원님을 응원해보세요!

지금 만족하고 있어요

미리보기

기본 정보

이름
한상원
직업
프론트엔드 개발자
간단 소개

아이디어를 구체화하여 실제 프로덕트로 만들어내는 과정에 매력을 느껴 프론트엔드 개발을 시작하게 되었습니다. 사용자와 직접 소통하는 화면을 구현하고, 즉각적인 피드백을 통해 제품을 개선하는 과정에서 프론트엔드 개발만의 매력을 느끼고 계속해서 도전을 이어오고 있습니다. 매일 새로운 기술이 생겨나는 프론트엔드 생태계에서 살아남기 위해선 새로운 기술을 빠르게 배우고 적용하는 능력이 필수라고 생각해 꾸준히 새로운 기술에 대한 탐구와 공부를 하고 있습니다. 거기서 그치지 않고 작은 프로젝트라도 만들어보면서 기술을 체화하고 끊임없이 성장하는 개발자가 되기 위해 노력하고 있습니다.

자기소개

자기소개

실무경험

  • React를 활용하여 서비스를 구현하는 데에 능숙합니다.

  • Redux, Zustand, Recoil로 상태 관리 기술을 사용한 경험을 보유하고 있습니다.

  • REST API 인터페이스를 사용하여 개발할 수 있습니다.

개발자의 자질

  • 취미로 개발하는 토이 프로젝트가 있습니다. 자체적으로 기술 블로그를 만들어 Vercel을 통해 배포하고 있으며, 최근에는 제가 즐기는 게임에서 제가 필요하다고 느끼는 기능을 추가한 웹서비스를 만들고 있습니다.

  • 함수나 변수의 이름을 정할 때 다른 사람이 봐도 금방 이해할 수 있는 이름을 찾으려 노력합니다.

  • 코드가 길어지면 반복되는 코드를 컴포넌트로 만들 수 있는지, 다른 방법은 없는지 고민합니다. 한번 만든 코드도 계속해서 다시 들여다보며 좀 더 좋은 코드로 바꿀 방법이 없는지 고민합니다.

커뮤니케이션 능력

  • 삼성 청년 SW 아카데미에서 애자일 프로세스로 팀 프로젝트를 진행한 바 있습니다.

    이후에도 공모전 등에 참여하며 기획자나 동료 개발자와의 원활한 커뮤니케이션을 통해 서비스를 개발했습니다.

  • 팀 프로젝트를 진행할 때는 공유문서에, 개인 프로젝트를 진행할 때는 개인 블로그에 제가 겪었던 문제와 해결 방법을 공유하고 있습니다.

기술 스택

기술 스택

React, JavaScript, TypeScript, nextjs, tailwind-css

프로젝트

프로젝트명

개인 기술 블로그

소속/기관명

개인

프로젝트 기간

2024.08. ~ 진행 중

프로젝트 내용

개인 기술 블로그를 Next.js + Typescript로 구현해 Vercel을 통해 배포하여 운영중입니다. 배운 것이나 문제를 겪은 내용을 글로 포스팅하여 공유하고 있으며, 다른 웹사이트를 보면서 재밌어보이는 기능을 직접 구현해보기 위한 Playground로도 사용하고 있습니다.

게시글 목록 페이지

  • Next.js의 App router의 동적 세그먼트로 페이지 디렉토리 구현, 라우트를 빌드 타임에 생성

  • generatetaticParams()로 동적인 경로를 받아와 게시글 카테고리 분류

게시글 상세 페이지

  • 게시글을 사전에 서버에서 렌더링되도록 구성

  • react-mdx-remote를 활용 사전에 작성한 mdx 파일을 HTML로 파싱 후 렌더링

목차 사이드 바(ToC)

  • Intersection Observer API를 사용하여 DOM 요소 관찰

  • 특정 DOM 요소(포스트의 h2, h3 태그)로 이동할 수 있는 ToC 사이드바 구현

  • 로딩 시 trasition 애니메이션 구현

검색엔진 최적화(SEO)

  • generateMetadata()로 동적 metadata 생성

  • Static Site Generation으로 정적인 페이지 구성

  • 시맨틱 태그를 사용하여 페이지 구조 표현

  • Image 태그의 alt 속성 활용

그 외

  • 댓글 기능

  • 다크모드 / 라이트모드

  • 글 목록 리스트 그리드형 / 리스트형 분리

  • 반응형 레이아웃 (sm, md)

프로젝트명

Webp Converter Bot

소속/기관명

개인

프로젝트 기간

2024.07. ~ 2024.07.

프로젝트 내용

문제 정의

Discord는 Skype 이래로 가장 많은 사람들이 이용하는 인스턴트 메신저 프로그램 중 하나로, 저 또한 친구들과 게임을 하거나 소통할 때 디스코드를 사용하고 있습니다. 친구가 움직이는 이미지를 공유해주려 하였는데, 이미지가 움직이지를 않았습니다. Discord는 아직 움직이는 webp, 이른바 Animated webp 파일에 대한 지원을 하지 않는다는 것을 알게 되었습니다. 이 문제를 해결하기 위한 봇을 만들어보기로 했습니다.

개발 과정

Discord.js 가이드 문서를 통해 기본적인 봇 프로그램 제작 방법에 대해 공부하면서 어떤 방식으로 문제를 해결할지 고민을 시작했습니다. Discord 자체에서 Animated webp 형식에 대한 지원을 하지 않는 이상, 봇 프로그램으로 할 수 있는 방식에는 한계가 있다고 판단했습니다. Discord는 Animated webp는 지원하지 않지만, Animated gif는 지원하고 있었습니다. 저는 이 점에 착안해서 webp 파일을 gif로 자동 변환해주는 봇 프로그램을 만들어보기로 했습니다.

webp 파일을 디스코드 서버에 업로드하면, 이를 봇이 감지하고 중간에 가로채서 node.js의 writeFileSync() 모듈을 통해 webp파일을 서버단에 생성하고, 그 파일을 이미지를 변환해주는 라이브러리인 sharp를 활용하여 gif형식으로 변환한 후에 디스코드 서버로 올리는 방식입니다.

기존에 이미지를 변환해주는 라이브러리는 많았으나, 가장 좋은 이미지 압축률과 변환 속도를 갖춘 것이 sharp 였습니다. Next.js의 이미지 최적화에도 사용되는 라이브러리로, 그 성능은 검증되어 있습니다. 크기가 큰 파일은 resizing을 통해 변환과정에 걸리는 시간을 줄였습니다. 파일 크기에 따라 다르지만, 예시로 올린 webp 파일의 경우 변환하고 다시 업로드 되는 데까지 0.5초 가량밖에 걸리지 않습니다. 이로써 움직이는 webp 파일을 올려도 더이상 멈춰있는 이미지를 보지 않을 수 있게 되었습니다. 누군가가 실제로 직면한 문제를 해결하고 도움을 줄 수 있게 된, 저에겐 작지만 아주 뜻깊은 경험이었습니다.

프로젝트명

OnU / 영양제 추천 서비스

소속/기관명

삼성 청년 SW 아카데미

프로젝트 기간

2023.04. ~ 2023.05.

프로젝트 내용
  • 방대한 양의 영양제 이미지를 불러와야 했는데, Next.js의 Image 최적화 기능을 활용하여 로딩시간을 줄였습니다.

  • 화면이 깜빡이는 일이 없도록 페이지 라우팅을 활용하였고, 검색창 애니메이션 및 로딩스피너를 활용하여 사용자 경험을 끌어올리고자 하였습니다.

  • Axios의 Interceptor, 인스턴스를 활용한 코드의 모듈화 과정을 거쳤고, 컴포넌트 단위로 개발을 진행하였습니 다. TypeScript에서 자주 쓰는 Type의 경우 따로 Interface화 하여 코드의 가독성을 끌어올리고자 하였습니다.

  • 상태관리를 활용하여 선택한 두 개의 제품을 비교할 수 있는 서랍기능을 만들었으며, 이로 인해 페이지가 바뀌어도 선택한 제품이 유지되어 비교할 수 있도록 구현하였습니다.

프로젝트명

몽땅연필 / 블록체인 도메인 기반 e-book 플랫폼 서비스

소속/기관명

삼성 청년 SW 아카데미

프로젝트 기간

2023.02. ~ 2023.04.

프로젝트 내용
  • 많은 이미지 뷰어 관련 라이브러리들을 연구하여 동화책을 읽는 듯한 느낌을 줄 수 있는 저희만의 e-book 뷰어를 만들어냈습니다.

  • 서비스 특성 상 중복되는 부분은 컴포넌트화하여 개발의 효율성을 끌어올리고자 하였습니다.

  • 유저 프로필 이미지를 AWS s3 스토리지에 저장하고 이미지 url을 받아오는 방식으로 구현하였는데, 새로 이미지 를 업로드할 경우 바로 적용되지 않는 문제가 발생했습니다. 이미지 업로드 후 새로고침을 통해 해결할 수도 있었지 만 팀원들과 토의하고 알아본 결과 s3에서 같은 url에 이미지를 저장하고 삭제하는 경우 캐싱기능이 작동해서 이미 지가 실시간으로 반영되지 않는다는 것을 알게 되었습니다. 이후 프로필 updateTime에 맞춰서 url을 생성하는 것으로 문제를 해결하였습니다.

프로젝트명

우리끼니 / WebRTC 도메인 기반 웹 화상채팅 서비스

소속/기관명

삼성 청년 SW 아카데미

프로젝트 기간

2023.01. ~ 2023.02.

프로젝트 내용
  • 로그인 시 회원정보를 전역상태로 관리하려 하였으나, 새로고침 시 상태가 초기화되어 로그인이 풀리는 문제가 발 생하였습니다. JWT Token을 사용하여 로그인을 구현하였는데, accessToken 및 유저 ID를 로컬스토리지에 저 장하는 것으로 이 문제를 해결하였습니다. refreshToken을 나누어 이는 백엔드 세션에 저장하는 것으로 보안상 의 문제도 고려하였습니다.

  • WebRTC의 오픈소스 라이브러리 중 하나인 OpenVidu를 활용하여 화상채팅 서비스를 구현하였습니다. 백엔드 서버에 방 생성요청 시 받아오는 방 ID로 WebRTC 중계서버에 세션 생성 요청을 하면 화상채팅방 세션에 접속되 는 구조로 구현하였습니다. 같은 방 ID로 요청 시 같은 세션에 접속되는 것을 확인하였습니다.

  • 실시간 투표 기능을 구현하였습니다. WebSocket 기능을 활용해야 했는데, OpenVidu에서 소켓통신을 지원한 다는 것을 알게 되었습니다. 이벤트가 발생하면 다른 사용자가 그 이벤트를 수신하는 기능을 응용하여 투표기능을 구현하였습니다.

포트폴리오

URL

link

직접 만들어 운영하고 있는 기술 블로그입니다

URL 링크
link

깃허브

깃허브

교육

소속/기관명

삼성 청년 SW 아카데미 8기

종류 | 전공

사설 교육

재학 기간 | 재학 상태

2022.07. ~ 2023.05. | 졸업

소속/기관명

Nagoya Institute of Technology

종류 | 전공

대학교(학사) | 전기전자공학과

재학 기간 | 재학 상태

2015.04. ~ 2022.02. | 졸업

소속/기관명

일산대진고등학교

종류 | 전공

고등학교

재학 기간 | 재학 상태

2011.03. ~ 2014.02. | 졸업

외국어

외국어명

일본어

점수

원어민 수준

외국어명

영어

점수

일상 회화 가능

댓글