돌멩이 하나 50

styled-components에서 custom props 사용하기

기술 과제를 진행하면서 styled-components를 사용해 공통 ui 컴포넌트를 만들던 중 input 입력란의 텍스트 정렬을 다르게 가져가야 할 필요가 생겼다. 아래의 화면 이미지와 같이 우편번호 input은 중앙정렬, 그 외에 input은 일반적인 좌측 정렬로 화면 디자인이 구성되어 있었다. 이를 위해 input ui 컴포넌트에서 prop으로 textAlign 값을 줘서 제어하려고 시도했다. // 공통 ui 컴포넌트 선언부 export const Input = styled.input` box-sizing: border-box; width: ${(props) => props.width || 'inherit'}; height: 40px; padding: 9px 13px; border: 1px soli..

회고 - 비전공자로서 FE 개발자로 취업하기까지의 여정

지난 여정을 먼저 간단하게 소개해 보면 아래와 같다. 2022. 10. - 2023. 04. 부트캠프(코드스테이츠) 6개월 과정 2023. 04. (3주) 포르투갈 여행 (부트캠프 수료식 바로 다음날 비행길에 올랐다) 2023. 05. (2주) 병원 투어 (부트캠프 막바지 프로젝트 때 무리한 벌을 달게 받았다) 2023. 05. (2주) 이력서 준비: 커리어 코칭 및 이력서 멘토링 서비스 참가 2023. 05. 30. 서류 지원 시작 2023. 06. 29. 최종 합격 통보 및 처우 협상 2023. 07. 10. 첫 출근 예정 신입이 발디딜 곳 없는 험난한 취업 시장에서 감사하게도 딱 한 달만에 구직 과정을 끝냈다. 여러 채용 플랫폼을 다 합치면 최종적으로 160건 가량을 지원했고, 그 중에 서류 통과를..

돌멩이 하나 2023.07.04

다크 모드 - 화면 깜빡임(FOUC) 이슈 해결 및 시스템 설정과 연동

온라인 셀러 계산기 사이트: https://seller-calculator.vercel.app/ 개인 프로젝트로 마진, 판매가, 행사가 환원 등을 구할 수 있는 온라인 셀러 계산기를 뚝딱 만들어 보았다. 요구사항에는 없었지만 지난주 기능 구현 챌린지에서 만들었던 다크 모드 토글 컴포넌트를 가져와서 적용해 보았다. 그 과정에서 생긴 이슈와 해결책을 정리해 보기로 한다. 1. useEffect hook tailwind css를 사용하면 다크 모드를 굉장히 손쉽게 구현할 수 있다. 새로고침 시에도 테마가 유지될 수 있도록 사용자가 선택한 테마를 로컬 스토리지에 저장하기로 했다. 그리고 공식문서에서 알려준 대로 시스템 설정도 체크할 수 있도록 window.matchMedia() api를 사용했다. if ( lo..

[기능 구현 챌린지] 무한 스크롤 UI

TMDB API를 통해 영화 데이터를 받아와 무한 스크롤을 구현해 보았다. 먼저 고전적인 스크롤 이벤트를 사용하는 방식으로 구현해 본 후, Intersection Observer API를 사용하는 방식으로 리팩토링했다. - GitHub 레포: https://github.com/Ah-ae/infinite-scroll - 배포 링크: https://infinite-scroll-practice.vercel.app 구현 화면 영상 1. 스크롤 감지 방식 핵심은 다음과 같다. 1) window.scrollY로 스크롤 위치를 기억한 다음, window.scrollTo() 메소드를 사용해 해당 위치로 보내주기 2) 스크롤이 바닥에 닿았는지를 판별해 바닥에 닿았다면 다음 데이터를 fetch하기 3) scroll 이벤트..

[기능 구현 챌린지] Chart Component

Frontend Mentor | Expenses chart component coding challenge In this challenge, you'll create a bar chart component from scratch. We provide a local JSON file, so you can add the chart data dynamically if you choose. www.frontendmentor.io 💡 기능 구현 목표: - Bar 차트를 보고 개별 Bar 위로 마우스를 가져가면 일별 정확한 금액을 볼 수 있습니다. - 오늘 요일의 Bar는 다른 요일의 Bar와 색상이 다릅니다. - 기기의 화면 크기에 따라 콘텐츠에 대한 최적의 레이아웃을 작성합니다. (데스크탑/모바일) - hove..

유틸리티 함수(비밀번호 유효성 검사) 및 테스트 코드 작성

회원가입과 로그인 시, 이메일과 비밀번호 유효성 검사를 한 다음 유효하지 않은 문자열을 입력시 사용자에게 경고 메시지를 주고자 했다. 이메일은 @와 . 기호가 포함되어 있는지 여부를 기준으로 정규표현식을 사용하여 검사하는 함수를 작성했고, 비밀번호는 8~20자 사이의 영문자와 숫자를 최소 1개 이상 포함하는 경우 유효한 비밀번호라는 기준을 세웠다. // It checks for a sequence of characters that starts with one or more non-whitespace characters ([^\s@]+), // followed by an @ symbol, followed by one or more non-whitespace characters for the domain n..

typescript 에러 모음

1. (TS 2345) Argument of type '...' is not assignable to parameter of type '...' 문제 상황: 광역시/도를 선택하면 해당 시/도에 대한 시/군/구를 select box에 보여줄 수 있게 하는 코드를 작성하려고 했다. 예를 들어 서울을 선택하면 서울의 코드 11000 중 앞의 두 자리 11을 divisionSelectValue라는 상태에 담고, 해당 상태를 useEffect의 종속성 배열에 넣어서 사용자가 시/도 단위의 지역을 선택해서 상태 변경이 일어날 때마다 districtList에 해당 시/도에 대한 시/군/구 데이터를 담으려는 게 목적이었다. // divisions.ts 파일 예시 export const DIVISIONS_DATA = [..

메인 프로젝트 회고

근 4주 간 생을 갈아넣었던 메인 프로젝트가 끝났다. 소모전 | 소모임 경기 전적 보기 소모임 경기 전적 보기, 소모전! 모임을 만들고, 경기 결과를 기록하고, 나와 모임원들의 승률을 확인해 보세요. somojeon.vercel.app 프로젝트를 처음 시작할 때는 분명 '기술 스택에 중점을 둔 프로젝트를 경험해 보고 싶다'는 마음으로 시작했는데, 프로젝트를 진행하다보니 기능 구현의 범위가 생각보다 넓었고 주어진 시간 내에 1차 기능 구현을 하기에도 시간이 급박했다. 결과적으로 새로운 기술 스택을 공부해서 프로젝트에 적용해보고자 했던 꿈은 물거품이 되었다... 새로운 기술 스택을 적용한다면 어떤 기술 스택을 사용할지에 대해 초반에 여러 이야기들이 오고갔는데 타입스크립트를 최우선으로 두기로 했다. 그나마 타..

돌멩이 하나 2023.04.03

사전 프로젝트 회고

지난 목요일 2주 반 정도 시간을 쏟아부은 사전 프로젝트를 마감했다. 4개월의 학습 기간을 마치고 처음 해보는 프로젝트였다. 사전 프로젝트 목표는 Stack Overflow를 클론하는 거였다. 즉, 기본적인 질문, 답변 게시판 CRUD 및 회원가입/로그인이 주요 과제였다. 부트캠프에서 OT 때 안내하기로는 사전 프로젝트는 이 다음 메인 프로젝트를 위해 기능 구현에 힘을 쏟고, 자동 배포 등은 후순위로 두는 게 좋다고 얘기했지만, 나는 반대로 CRUD 기능 구현을 후순위에 두고 깃헙 등 여러 명이 함께 하는 프로젝트 툴 사용에 익숙해지는 것과 자동 배포, https 통신 프로토콜 같이 혼자서는 해볼 수 없는 것들을 프로젝트 때 경험해 보고 싶었다. 게시판 CRUD 기능은 혼자서도 얼마든지 구현해 볼 수 있..

돌멩이 하나 2023.03.10

netlify 자동 배포 설정 오류 해결

💡 한 줄 결론: build command 란에 npm run build가 아닌 CI= npm run build을 입력해줘야 한다. (공백 주의) 1. npm run build 만 입력했을 때 deploy log 2. CI=npm run build (= 앞뒤에 공백없음) 입력했을 때 deploy log 이에 대한 netlify docs의 설명 : In some cases, a build may fail due to a warning message that would not cause a build failure when run locally. This is because some libraries and build tools handle warnings differently when they detect..