청년
개발자
외길
프론트

안녕하세요.
개발자 안세혁입니다.

[ 인사말 ]

안녕하세요. 개발자 안세혁입니다.

스스로 코드 앞에 당당하기 위해 더 읽기 좋은 코드, 효율적인 코드를 목표로 개발하고 있습니다.

[외길 프론트] 라는 슬로건은 개발자로서의 정체성입니다.

" 개발 경험 중 가장 즐거웠던 것은 무엇인가? "
라는 질문에 프론트엔드라 답하며, 그 이유는 사용자 경험과 디자인을 중요시하는 가치관을 가졌기 때문입 니다.

사용자에게 더 나은 경험을 제공할 때 개발자로서 보람과 성취감을 느낍니다.
  • [ 학업 ]
  • 삼성 SW 아카데미 수료

  • 금오공과대학교 컴퓨터공학과 졸업

  • NPLAB 인공지능 연구실 학부연구생

  • [ 팀 프로젝트 이력 ]
  • 학생용 협업 툴, dddev

  • 뇌질환자 언어 재활 어플리케이션, 내쉬다

  • 실시간 화상 스터디 플랫폼, STVDY

  • 기업 연계 프로젝트 감정 분석 스마트 라이트

  • 삼성 과제 RDBMS, 시계열 DB 성능 비교

  • [ 안세혁 · 연락처 ]
  • he2kape@gmail.com

  • 010 · 2991 · 1153

깃허브 프로필개인 프로젝트

[ 개인 프로젝트 상세 ]

roook하루하루 다이어이를 쓰는 것이 귀찮거나, 힘들거나,
그저 시간이 없는 직장인 들을 위한 어플리케이션.
Google Play
직접 다이어리를 에디터를 통해 작성할 수 있고 오늘의 투두를 관리하는 기본 적인 기능. 그리고 오늘의 투두 혹은 대화를 기반으로 Ai가 작성해주는 다이어리를 제공한다.
주요 기능
  • 다이어리 : 웹뷰 리치텍스트 에디터를 활용하여 사용자가 원하는 글씨크기, 데코레이션으로 작성할 수 있다. 내용 사이 원하는 곳에 사진을 삽입하여 다이어리를 풍부하게 작성할 수 있다.
  • 투두 : 오늘의 투두리스트를 작성하고 달성할 수 있다. 이전 투두를 상세히 볼 때는 타임라인을 통해 사용자가 언제 투두를 작성하고 완료하였는지 확인할 수 있다.
  • Ai 다이어리 : 사용자가 작성한 투두를 기반으로 오늘 하루를 과정으로 남기거나 Ai 모델과의 대화를 통해 하루를 알아가며 마지막에는 다이어리로 기록할 수 있다.
  • 소셜 : 원하는 사용자와 서로를 친구로 등록하여 다이어리, 투두 등을 공유할 수 있다.
  • 소셜 로그인 : 구글, 카카오, 일반 이메일 중 원하는 가입, 로그인 방식을 선택하여 이용할 수 있다. 이미 생성된 계정에도 다른 소셜 계정 로그인 방식을 연동할 수 있다.
  • 캘린더 : 캘린더를 통해 사용자의 다이어리, 투두를 한눈에 확인하거나 미래의 투두를 미리 계획할 수 있다.
사용 기술 스택
상태 관리 및 API : Zustand, React query / 프론트 엔드 : React native, Expo, Javascript / 리치텍스트 에디터 : 10-tap, tip-tap / 백 엔드 : Express, PostgreSQL, Typescript / Ai 모델 : OpenAI API / 포맷팅 : ESLint, Prettier
회고
1. 프로젝트 중 백엔드 팀원의 이탈
백엔드 서버 및 모든 API를 쓸 수 없게 되었을 때는 막막하였습니다. 급하게 오라클 인스턴스를 추가, 당장 본인이 강한 언어는 JavaScript 였기에 Express로 서버를 구현하고 DB를 설정하였습니다. 5일의 기간 내에 이전 API들을 동일하게 구현할 수 있었고 이후 프론트엔드, 백엔드를 병행해야 했지만 원하던 기능들을 모두 구현할 수 있었습니다.
처음으로 팀원의 부제 잠시 혼란스러웠지만 어플리케이션 필수 기능들을 직접 설계 하였기에 유연하게 대응할 수 있었습니다. 서버를 구현하며 데이터를 처리 시점에 대한 깊은 고민을 하며 대처능력과 데이터 핸들링 역량을 기를 수 있었습니다.

2. 안정적이지 않은 라이브러리
Native에는 아직 안정적인 리치텍스트 에디터가 없어, tip-tap을 기반의 10-tap 라이브러리를 선택하였습니다. 그러나 사용 과정에서 여러 가지 문제점이 있었고 그 중 크게 2가지가 발목을 잡았습니다.
지원되지 않는 기능의 경우 직접 WebView 코드를 tip-tap의 문서와 비교를 통해 적용할 수 있었으나 네이티브 환경에서 렌더링 된 에디터가 준비 상태로 변하지는 않는 고질적인 문제가 남았습니다. 라이브러리 코드 내에서는 해결이 어려워, React에서 렌더링 상태를 지속적으로 확인하고 가장 빠른 시점에 재렌더링을 수행하는 방식으로 문제를 해결했습니다.
목표 기능에 미치지 못한 상태로 타협하려는 순간도 있었지만, GitHub 이슈를 참고하며 스스로 해결할 수 있을 것이라는 확신을 가지고 시간을 투자한 끝에 목표 기능을 구현하며, 큰 성취감을 느낄 수 있었습니다.

3. OpenAI 토큰
Ai 대화에서는 비용적인 면을 고려하여 GPT 4.1 mini 모델을 선택하였으나 생각 이하의 성능을 보여주며 자연스러운 대화가 힘들었습니다. 비용과 성능의 최적화를 원했기에 관련한 키워드들을 검색하던 중 한글은 토큰이 글자 수에 비례하여 비용이 더 많이 발생하고 복잡한 지시의 경우 제대로 적용되지 않는 다는 것을 알 수 있었습니다.
프롬프트를 영문으로 작성하여 토큰을 단어 단위로 줄임과 동시에 gpt가 학습된 원어이기에 '3번이상 동일주제 질문금지', '친절한 존댓말 한국어' 등과 같은 복잡한 지시도 영문일 때 가장 높은 성능을 보여주었습니다.

[ 팀 프로젝트 상세 ]

dddevGitHub-dddev학생 개발자들의 협업 툴,
협업에 필요한 모든 것을 하나의 툴로 담아낸 프로젝트.
GitHub-dddev
개발자가 프로젝트 진행에 최소 2~3개의 협업 툴을 필요로 하는 시대, 초보 개발자 들도 프로젝트에 바로 활용할 수 있는 올인원 협업 툴 개발을 목표로 하였다.
주요 기능
  • 문서 기반 : 모든 협업 문서는 트리 구조로 되어 부모와 자식이 존재하며 자식은 부모 속성에 의해 정렬되고 그 역할이 정의 된다. 사용자는 원하는 형태로 문서 카테고리 및 환경을 구성할 수 있다.
  • 실시간 협업 문서 작성 : 웹 소켓을 활용한 실시간 협업 기능을 통해 모든 사용자가 동시에 하나의 문서를 작성할 수 있다.
  • 서버 로그 분석 : 서버에서 전송된 로그를 시계열 데이터로 저장, 엘라스틱 서치를 활용하여 사용자가 원하는 형태로 볼 수 있다. GPT를 활용하여 로그의 원인 및 해결방안을 솔루션으로 받아볼 수 있다.
  • 실시간 알림 : Firestore와 GitHubAPI를 통해 사용자가 소속된 리포지터리의 이벤트 (커밋, 리퀘스트 등) 알림을 받아볼 수 있으며 특정 키워드를 구독할 수 있다.
  • GitHub 연동 : GitHub 계정으로 로그인, GitHub 리포지터리의 정보를 연동시키며 이를 활용해 프로젝트 협업 공간을 생성한다.
사용 기술 스택
상태 관리 : Redux / 기능 구현 및 API 객체 구현 : Javascript, React / 실시간 문서 협업 : WebSocket, Quill / 포맷팅 : ESLint, Prettier
기여
  • 프로젝트 기획 : 프로젝트의 컨셉부터 세부 기능에 이르기까지 모든 기능에 직접 기획 및 참여 하였습니다. 아이디어가 팀원들의 마음에 들어 본인의 기획이 원하는 모습으로 실제 구현되는 모습을 볼 수 있어 좋은 경험이 되었습니다.
  • API 객체 관리 : 웹 JWT의 토큰 유효성 및 보안을 확보하기 위해 전체 API를 객체로 관리하였으며, 재사용성 및 활용성을 높임.
  • Redux 상태 관리 : 리덕스를 활용하여 사용자, 그라운드, UI 상태관리.
  • UX/UI 및 컨셉 디자인, 스토리보드 제작 : GitHub을 레퍼런스로 Figma를 활용하여 어플리케이션 디자인 및 스토리보드 제작.
  • 대시보드 : 번다운 차트, 이슈 평균 소비 시간 등의 프로젝트 분석 그래프와 최신 요청 등의 정보를 한눈에 확인할 수 있는 대시보드를 구현.
  • 페이지 구현 : 프로젝트 내 전체 페이지 구현.
  • 실시간 문서 협업 : 웹 소켓 서버와 Quill 에디터를 활용하여 실시간 문서 협업 기능을 구현. 기존 웹 소켓 서버와 Quill에서 지원하지 않는 실시간 멤버 확인 기능, 사용자 영역 잠금 기능, 실시간 작성자 위치 태그, DB 연동 등의 기능을 추가 구현 하였습니다.
회고
1. 개선 프로젝트
Nashda 프로젝트를 진행하며 Notion, Jira와 같은 협업 툴을 사용했지만, 기능이 복잡해 팀원 모두가 해당 툴에 익숙해져야만 제대로 활용할 수 있다는 한계를 느꼈습니다. 이에, 아무런 사전 지식이 없어도 직관적으로 사용할 수 있는 협업 툴을 만들고자 개선 프로젝트를 진행했습니다.
프로젝트 중반 이후에는 완성된 협업 요청 탭을 통해 실제 협업이 활발히 이루어졌고, 이를 보며 큰 성취감을 느낄 수 있었습니다.

2. 협업 기능 개선
Quill 라이브러리는 웹소켓을 통해 실시간 협업이 가능하지만, 사용자의 활동을 추적하기 어려웠습니다. 이를 해결하기 위해 라이브러리의 유저 데이터 수정 코드를 활용하여 다음 기능을 직접 구현했습니다.
  a. 사용자가 데이터를 수정하는 시점 실시간 추적
  b. 접속 및 이탈 여부 체크
  c. 수정 중인 영역을 다른 사용자가 동시에 수정할 수 없도록 잠금
  d. 사용자가 수정 중인 위치에 마크 표시
라이브러리에서 지원하지 않는 기능을 처음으로 직접 구현하면서, 단순히 제공된 기능을 사용하는 것을 넘어 목표한 기능을 스스로 구현할 수 있다는 자신감과 역량을 키울 수 있었습니다.

3. 1인 프론트엔드 경험
6인 팀에서 홀로 프론트엔드를 맡게 되었을 때, 프로젝트 초반에는 많은 어려움이 있었습니다. 첫 번째는 아이디어 제안자로서 다양한 기능의 방향을 제시해야 했고, 처음 구현해 보는 팀원에게 예시 코드를 제공해야 했습니다. 두 번째는 완성된 API 테스트 요청이 동시에 몰리면서 우선순위 설정에 어려움을 겪었습니다
그러나 프로젝트 중반 이후, 지속적인 스크럼과 문서화 요청을 통해 정리된 형태의 요청을 받게 되면서 개발 속도가 크게 향상되었습니다.
이 경험을 통해 여러 태스크가 동시에 발생할 때 우선순위를 정하는 방법과 문서화의 중요성을 깊이 깨달을 수 있었습니다.
내쉬다GitHub-nashda뇌질환 환자들을 위한 발음 재활 어플리케이션.
GitHub-nashda
발음 및 대화에 어려움이 생기는 등, 후유증이 발생한 실제 뇌질환 환자의 열악한 재활 과정을 보고 더 좋은 재활 환경을 제공하기 위해 진행한 프로젝트이다.
주요 기능
  • 음성 인식 : 직접 비교, 학습한 음성 인식 모델을 사용하여 사용자의 발음을 그대로 인식하여 발음 교정에 사용할 수 있게 하였다.
  • 발음 연습 : 단어, 단락, 단순절 및 난이도를 선택, 발음 연습을 진행할 수 있다. 올바른 발음과 사용자의 발음을 비교하여 확인할 수 있다.
  • 대화 연습 : GPT 모델을 사용하여 실제 상황처럼 대화가 가능하다. 상황에 맞지 않는 답변은 기록되며 복습이 가능하다.
  • 드라마 플레이 : 사진을 보고 빈칸의 단어를 맞춰 문장을 채워가는 게임으로 난이도 선택을 통해 플레이 가능하다.
  • 주간 시험 : 위 3가지 연습 및 놀이를 통합하여 주간 테스트를 진행할 수 있으며 이를 통해 사용자의 발음 수준 및 재활 진행도를 파악할 수 있다.
  • 스피드 게임 : 단어 하나와 4장의 사진을 본 후 단어에 맞는 사진을 빠르게 선택하는 게임.
  • 스트릭 : 최근 연습 동향, 로그인 등을 스트릭을 통해 확인 및 동기부여, 조건이 달성되면 업적이 해금되어 스트릭을 꾸밀 수 있다.
  • 통계 : 4가지 정보를 확인할 수 있다. 사용자가 많이 틀린 발음 순 통계, 주간 시험의 분석 결과를 정답과 발음 복습을 통해 확인, 대화 연습의 부자연스러운 대화, 달성한 업적 등의 정보 확인이 가능하다.
사용 기술 스택
상태 관리 : Redux / 기능 구현 및 API 객체 구현 : Javascript, React / 포맷팅 : ESLint, Prettier / 차트 : Nivo
기여
  • 프로젝트 기획 : 프로젝트의 시작은 가족의 재활 과정 중 불편함을 바로 옆에서 지켜보고 느낀 작은 불편함이었습니다. 본인의 아이디어 이기에 책임감을 가지고 기획에 중심이 되어 프로젝트를 진행 하였습니다.
  • UX/UI 디자인 : 애플과 네이버, 백준 등의 화이트 계열 웹 사이트들을 레퍼런스로 삼아 UX/UI 디자인을 하였으며 인지에 어려움이 있는 뇌질환자들에 적합한 어고노믹 디자인을 적용하였습니다.
  • 통계 : Nivo 차트와 직접 작성한 그래프를 활용하여 사용자의 현재 수준을 파악 가능한 통계 페이지를 구현. 이 또한 뇌질환자의 상태를 고려하여 상단에서 하단으로 내려가며 확인할 수 있도록 레이아웃을 구성하였습니다.
  • API 객체 관리 : 웹 JWT 의 토큰 유효성과 보안을 확보하기 위해 전체 API를 객체로 관리하여 코드를 간결하게 함과 동시에 재사용성 및 효율성을 높였습니다.
  • 사용자 페이지 : 웹 사용자 정보 조회 및 수정, QnA, 통계 조회 등이 가능한 사용자 페이지를 구현.
회고
1. 첫 React 사용
팀원의 권유로 React를 처음 도입하며, 강력한 기능만큼 최적화를 요구하는 특성 때문에 일정한 학습이 필요했습니다. 초반에는 프롭 드릴링, 불필요한 재렌더링, 마운트 과정 등에서 어려움을 겪었지만, 다양한 최적화 기법을 익히고 적용하여 문제를 해결했습니다.
React의 가상 DOM과 컴포넌트 구조를 이해하면서, 사용자에게 더 다양한 방식의 인터랙티브한 경험을 제공할 수 있게되어 프로젝트에 큰 만족감을 느꼈습니다.

2. 방대한 라이브러리와 커뮤니티
React는 방대한 라이브러리를 갖추고 있어 많은 기능을 직접 구현하지 않고도 라이브러리를 활용해 구현할 수 있었습니다.
예를 들어, 차트 생성이나 입력된 음성 데이터의 파형 시각화 같은 기능은 라이브러리를 통해 쉽게 구현할 수 있었습니다. 다만, 문서를 충분히 확인하지 않으면 최적화 문제나 원하는 형태로 적용하기 어려운 경우도 있었습니다.
이를 극복하기 위해 공식 문서와 GitHub 이슈를 적극적으로 참고하며 목표 기능을 구현했고, 그 과정에서 능동적으로 문제를 해결하는 역량을 키울 수 있었습니다.
STVDYGitHub-stvdy그룹원들과 함께 실시간 스터디 진행이 가능한 화상 스터디 플랫폼.
GitHub-stvdy
현대인들의 기본 소양이 된 자기 계발에 동기부여 하기 위해 그룹으로 스터디를 진행하며 실시간 화상 회의가 가능하다.
주요 기능
  • 화상 스터디 : Web-RTC 기술을 활용하여 스터디 그룹원들은 실시간으로 화상 스터디를 할 수 있다.
  • 질문 및 답변 : 태그를 설정하여 본인이 원하는 카테고리로 질문이 가능하며 동시에 답변을 작성할 수 있다.
  • 커스텀 테마 : json 포맷으로 색상을 지정하여 사용자의 취향에 맞춰 테마를 설정할 수 있다.
  • 인기 키워드 : 질문에 사용된 태그를 분석하여 최근 인기 키워드를 확인할 수 있다.
사용 기술 스택
프레임워크 : Vue3 / 상태 관리 : pinia / 기능 구현 및 API 객체 구현 : Javascript / 포맷팅 : Prettier
기여
  • UX/UI 디자인 : 최근 가장 점유율이 높은 플랫폼 디스코드를 레퍼런스로 드라큘라 색상 스키마를 채택하여 디자인하였습니다.
  • 메인 : 새로운 질문 등을 확인할 수 있는 메인페이지를 구현. 다양한 플랫폼의 메인처럼 한눈에 최신 동향을 한눈에 확인 가능하도록 레이아웃을 구성하였습니다.
  • 질문 게시판 : 웹 질문 및 답변, 게시판 페이지 구현.
  • 사용자 페이지 : 웹 개인 프로필 조회 및 수정, 커스텀 테마 수정이 가능한 페이지 구현.
  • 커스텀 테마 : json 포맷으로 UI의 색상을 사용자 취향에 맞게 수정 가능한 기능을 구현. 다크 모드를 기본으로 하며 라이트 모드를 json 포맷 예시로 제공하였습니다.
  • 스켈레톤 코드 작성 및 pinia 상태 관리 구현 : 프론트엔드 팀원들이 사용할 Vue3 Composition API를 기반으로 한 스켈레톤 코드 작성, pinia 상태 관리 구현.
회고
1. 상태 관리 및 유연한 코드 작성
프로젝트 초기 목표 중 하나는 사용자가 직접 커스텀할 수 있는 색상 테마를 구현하는 것이었습니다. 하지만 이전까지 상태 관리를 본격적으로 활용해 본 경험이 없었기에, 초반에는 다소 학습 곡선을 겪었습니다.
해당 기능 구현 과정에 전역 상태 관리를 적용하고, 사용자가 입력한 색상을 실제 컴포넌트에 반영하는 로직을 작성하며 확장 가능한 기능 구현 방식을 익힐 수 있었습니다.

2. 첫 프론트엔드 팀 프로젝트
프론트엔드를 시작하고 처음 진행한 팀 프로젝트였으며, 팀 구성은 프론트엔드 3명과 백엔드 3명이었습니다. 그러나 프론트엔드 담당 중 2명은 백엔드 경험만 있었기에, 모든 페이지의 스켈레톤 코드를 직접 작성하고 Vue 사용법을 교육해야 했습니다.
이 과정에서 기초부터 구현까지 팀원들을 지원하며, 동시에 본인도 빠르게 역량을 확장할 수 있었습니다. 결과적으로 기술 공유와 협업 속에서 성장하는 경험을 얻을 수 있었던 프로젝트였습니다.

[ 사이드 프로젝트 상세 ]

MarkaGitHub-marka단순한 상호작용, 다이어리 & 투두리스트 어플리케이션.
GitHub-marka
다이어리 & 투두리스트 어플리케이션이 필요하여 직접 만들어 보았다. 서버 환경 구축부터 시작하여 Next.js 사이드 프로젝트를 스스로 완성, 풀스택 개발 능력을 키울 수 있었다.
추가
주요 기능
  • 데이터 연동 : 비연동 상태에서는 로컬 indexedDB에 데이터를 저장, 연동 상태에서는 서버에 데이터를 저장한다. 연동 상태에서 어플리케이션 실행 시 서버와 로컬 데이터를 비교하여 각각의 데이터를 최신화한다.
  • 팔로우 : 다른 사용자를 팔로우하고 해당 사용자의 투두리스트를 확인할 수 있다.
  • 하이라이트 : 다이어리에서 특정 문장을 하이라이트 처리한 후 투두리스트로 변환할 수 있다. 사용자 경험을 높이기 위해 더블클릭시 단어 뒤 빈칸과 함께 선택되는 브라우저의 기본 텍스트 선택을 javascript로 수정하였다.
  • 색상 커스텀 : 하이라이트 색상을 개인 취향에 맞게 설정할 수 있다.
사용 기술 스택
상태 관리 : Recoil / 프레임워크 : Javascript, Next.js / 데이터베이스 : PostgreSQL / 텍스트 에디터 : Slate / 포맷팅 : ESLint, Prettier
회고
1. 데이터 연동
해당 프로젝트는 게스트 모드와 사용자 모드 두 가지 환경을 지원하기에 게스트 환경에서 작성된 콘텐츠를 사용자가 로그인했을 때 계정에 자연스럽게 반영하는 동기화 알고리즘이 필요했습니다.
여러 접근 방식을 고민하던 중, 자주 사용하는 Git의 commit 기록 방식에서 아이디어를 얻어 각 DB에 데이터 변동 이력을 기록하고, 존재 여부와 업데이트 시점을 비교하여 최신 상태를 유지하는 알고리즘을 구현했습니다.
단순한 프론트엔드 렌더링이나 백엔드 API 구현과 달리, 이 과정에서는 데이터 동기화 문제를 직접 다뤄야 했습니다. 이를 통해 평소 익숙하게 사용하던 프로그램의 동작 원리를 깊이 이해할 수 있었고, 알고리즘 학습의 필요성과 중요성을 체감할 수 있었습니다.

2. 더블클릭
브라우저 기본 동작으로 단어를 더블클릭하면 단어 뒤의 **공백(trailing space)**까지 함께 선택되는 문제가 있었습니다. 그러나 제가 구현하려던 기능에서는 단어만 정확히 선택되어야 했습니다.
관련 자료를 찾아보았지만 이 문제를 다루는 사례가 거의 없어, 직접 해결책을 고안했습니다.
  a. 단어 선택 전에는 selection 색상을 투명하게 유지
  b. 선택 시 trailing space 포함 여부를 판별 후 제거
  c. 수정된 selection에 다시 색상을 적용
이 과정을 통해 사용자는 선택 영역이 바뀌었다는 인식 없이 자연스럽게 단어만 선택할 수 있게 되었습니다.
개발 중 문제가 발생하였을 때 다른 개발자들은 문제 삼지 않는 경우가 있으면 굉장히 당황스러웠습니다. 하지만 본인이 처음이 되어 해당 문제를 원하는 목표에 맞춰 해결하는 과정을 통해 언어를 더 깊게 이해하고 해결 능력을 키울 수 있는 좋은 기회가 되었습니다.
POLORSGitHub-polors고전 명화의 색상 분석 및 색상 스키마 생성 어플리케이션.
GitHub-polors
저작권이 만료된 명화들을 크롤링 하여 하루 1장의 명화를 보여주고 해당 명화의 색상을 분석하여 색상 스키마를 생성하는 어플리케이션.
POLORS

시간을 팔레트로 옮기다.

주요 기능
  • 크롤링 : Artvee 에서 저작권이 만료된 구상 미술 명화 이미지 4만 여장 중 1장의 이미지를 중복 없이 랜덤으로 크롤링 하여 보여준다. 매일 자정 새로운 이미지가 업로드된다.
  • 색상 스키마 : 이미지를 영역으로 나누어 색상을 분석한다. 사전 설정된 값에 따라 유사한 색상은 합쳐지고 다른 색상은 분리된다. 이를 통해 색상 스키마를 생성한다.
  • 자동화 : 매일 자정 새로운 이미지가 업로드되며 색상 스키마가 자동으로 생성된다. cron을 활용하여 자동화하였으며 에러와 관련된 로그를 파일로 리다이렉션 하여 에러를 추적할 수 있도록 하였다.
사용 기술 스택
프레임워크 : Javascript, Next.js / 데이터베이스 : PostgreSQL / 크롤링 : Puppeteer / 색상 스키마 생성 : extractColors / 포맷팅 : ESLint, Prettier
회고
1. 크롤링
Rocky 리눅스에서 크롬과 라이브러리 몇 가지가 제대로 실행되지 않는 경우가 있었습니다.
크롬의 경우 일반적으로 설치되는 버전이 아닌 디스플레이 없이 실행할 수 있는 크롬을 따로 설치하여 해결 할 수 있었고 라이브러리의 경우 특이하게도 https 주소임에도 http 라이브러리로 변경 뒤 해결되었지만 장기적으로 보았을 때 문제가 발생 할 가능성이 있어 최근 수정하였습니다.

2. 다른 실행 환경
크롤링 코드의 경우 가상 브라우저 내에서 실행되는 코드와 크롤링 코드 내에서 실행되는 코드를 잘 분리해야 했습니다. 격리된 쓰레드에서 실행 시점에 대한 좋은 공부가 되었습니다.

3. 라이브러리
색상 스키마를 생성하는 라이브러리의 도큐먼트를 그대로 따랐음에도 특정 영역 색상이 추출이 되지 않는 문제가 발생하였습니다.
확인 결과 이미지의 색상 정보추출 과정에서 ImageData object가 요구하는 실제 영역과 도큐먼트의 영역추출 과정이 다름을 확인, GitHub 이슈를 등록하여 라이브러리 개발자와의 소통을 통해 도큐먼트를 수정할 수 있었습니다.
  • [ 프론트엔드 스택
    JavaScript
    React + Native + Query
    Expo
    Next.js
    Redux
    RecoilRecoil
    Zustand
    Styled Components
     ]
    * React, Expo, Next를 메인으로 사용합니다.
    CSS 디자인 및 컴포넌트 작성 등 기초부터 프로젝트 유지 보수 및 배포까지 전반에 기여할 수 있습니다.
    상태 관리는 프로젝트의 규모와 상황에 따라 Redux, Recoil, Zustand 중 선택하고 있습니다.
    프로젝트를 진행할 때는 SSR, CSR과 같은 렌더링 방식,
    메모이제이션, 캐싱 등의 상황에 따른 최적화를 최우선으로 고려하여 개발합니다.
    CSS-in-CSS 방식과 module.css 를 선호합니다.
    상태 공유 및 인터렉션을 위한 컴포넌트 디자인에는 styled-components를 사용합니다.
    * 백엔드 경험을 기반으로 백엔드 API 연동과 같은 협업에 적극적으로 임할 수 있습니다.
  • [ 백엔드 스택
    TypeScript
    Express
    Java
    Spring
    Swagger
    Python
    PostgreSQLPostgreSQL
     ]
    * TypeScript, Express, Next를 백엔드 서버 및 API 구현에 사용하고 있습니다.
    다수의 프로젝트 경험을 통해 얻은 백엔드 REST API 설계 및 구현 지식으로 백엔드 개발자와 원활한 협업이 가능합니다.
    Java, Spring 프레임워크 백엔드 서버를 구축 경험이 있으며, 현재는 TypeScript를 선호합니다.
    Python, Pandas 등을 활용하여 데이터를 전처리하거나, 데이터베이스 과제를 진행한 경험이 있습니다.
    PostgreSQL, MySQL, MsSQL 및 influxDB 등 프로젝트에 적합한 데이터베이스를 선택하여 사용합니다.
  • [ 코드 관리
    Git
    Github
    Gitlab
    GerritGerrit
    ESLint
    Prettier
     ]
    * 1구현 1커밋을 좌우명으로 Git을 통해 코드를 관리하고 있습니다.
    현재는 GitHub으로 프로젝트 코드를 관리 중이며 이외 코드는 팀 GitLab을 통해 관리하였습니다.
    코드 스타일을 유지하는 일관성, 컨벤션을 준수하는 것을 중요시하며, 코드 리뷰를 통해 코드의 품질을 높이고자 합니다.
    팀 프로젝트를 진행할 때는 Gerrit을 사용하여 코드 리뷰를 강제하는 방식으로 코드의 품질을 높이고자 하였습니다.
  • [ 서버
    Linux
    Ubuntu
    Rocky Linux
    Docker
     ]
    프로젝트를 진행하며 서버를 구축하고 운영한 경험이 있습니다.
    개인 프로젝트의 경우 오라클 인스턴스로 Ubuntu를 사용 중이며, 학부 연구생 시절에는 Rocky Linux를 사용한 경험이 있습니다.
    현재 포트폴리오, 블로그 및 개인 프로젝트들은 모두 개인 서버에서 배포 중입니다.
  • [ 협업
    Jira
    Slack
    MatterMost
    Notion
    Figma
     ]
    * 협업에서 소통을 가장 중요시하며, 문서화는 협업의 정수라 생각합니다.Jira로 이슈를 관리하며 팀원들 간 대화는 Slack 또는 MatterMost, 간단한 소통용 문서는 Notion을 주로 활용합니다.
    스크럼과 같은 짧은 미팅을 통해 프로젝트 진행 상황을 파악하고, 팀원들의 의견 적극 반영하며 프로젝트를 진행하길 선호합니다.
깃허브 프로필