saemii blog

Git - Commit Message Style Guide (1)

✨ 깃 커밋 메세지를 잘 쓰고 싶어! 프로그래밍은 나중에서야 왜 많은 사람들이 그렇게 써왔는지, 혹은 그렇게 조언했는지 알 것 같은 상황이 자주 발생하는 듯 하다. 특히 깃 커밋 메세지가 그렇다. 나는 꽤 오랫동안 type: Subject만 작성하는 깃 커밋 메세지 형식을 선택해왔다.🤔 그 때는 크게 불편함을 느끼지 못했고, 이것 도 충분히 하나의...

Middleware - 공식문서 번역하면서 이해해보기

✍ 미들웨어가 필요하다! 웹사이트를 만들다 보면 다음과 같은 경우를 처리해야 하는 상황을 만날 수 있다.👀 사용자가 로그인 했는데 로그인 페이지에 시도하는 경우 사용자가 로그인 하지 않았음에도 보호되는 주소에 접근하려는 경우 사용자에게 권한이 없음에도 사용자가 해당 주소에 접근하려는 경우 업무에서는 next.js와 next-auth...

Git - 내가 필요한 모든 깃 명령어를 모아보자

💌 Git 요즘은 개인적으로 Git을 잘쓰는 방법이 뭐가 있을까 고민하고 있다. 🤔 항상 쓰는 명령어 위주로 사용하기 때문에 (예를들어 pull, push, commit etc…) 다른 복잡한 상황에서는 한계를 느꼈기 때문이다. 특별한 상황이 올 때마다 찾아보고 명령어를 입력하곤 했는데, 이제는 상황별 명령어를 정리해두고, 이런 command들을 ...

TailwindCSS (7) - Tailwind v3과 Container Query

🔑 들어가며 이번 포스팅은 업무 진행 중 마주쳤던 문제와 그 해결 과정에 대해 작성해보고자 한다. ✨구현 요구사항 화면을 구성하는 가로로 나열된 3개의 컴포넌트가 있다. 각각의 컴포넌트가 A, B, C 라고 할 때 A는 완전히 접을 수 있고, C는 사용자가 드래그해서 사이즈를 조절할 수 있는 resizable Component다. 마지막으로 B...

Nextjs-Optimizing(3) - Production Checklist(번역)

📌시작하며 Next.js 공식문서를 읽을 때마다 느끼는 거지만 정말 사람은 아는만큼 보이고, 아는만큼 쓰는 것 같다.. 😅 특히 이렇게 습득할 수 있는 정보가 많을 때는 내가 처해있는 상황에 어떤 정보가 가장 필요한지 구별해내는 것이 정말 어렵지만 꼭 필요한 일이기도 하다. 서론이 길었는데, 최근 Optimizing 관련 문서를 읽다가 타고 타고....

react - useRef를 활용해보자!

📌시작하며 useRef를 언제 사용하나요? 라고 묻는다면, react에서 DOM 요소를 참조할 때 사용한다. 라고 답할 것이다! 실제로, useRef의 역할에는 DOM 요소를 참조하는 것이 있으니 틀린 말은 아니다. 하지만, 최근에 ‘최초 렌더링’ 상황에 스크롤이 최하단으로 내려가야 하는 컴포넌트를 구현하며, 자꾸만 해당 컴포넌트 내부의 것들이 렌...

resizable 컴포넌트를 만들어보자!

📌시작하며 최근 제작하고 있는 웹이 한 번에 표시되어야 하는 정보가 많아, 좌측엔 내비게이션을 두고, 우측엔 해당 페이지에 필요한 정보를 두었다.🤔 좌측 내비게이션은 사이즈가 그리 크지 않고, 펼치거나 접을 수 있기 때문에 괜찮지만, 사용자가 가운데 내용을 보면서 정보 컴포넌트를 함께 보고 싶은 경우에는 고정 사이즈를 제공하는 것보다, 사용자의 화...

Nextjs-Optimizing(1) - Font

📌시작하며 퇴근 전, 다른 프론트엔드 개발자 분과, 라이브러리 번들 사이즈에 대해 이야기를 나누었다. 최적화의 중요성은 너무 당연한 것이기도 해서, 번들 사이즈를 줄이는 것이나, 최적화 진행에 대해 공감했고, 기본적으로 알고있는 내용에 더해 Next js가 제공하는 최적화 방식도 알아두면 좋을 것 같아서, 한동안 Next js의 공식문서의 Optim...

에러 핸들링 - global-error.tsx

📌시작하며 1월에 기회가 있어 교육박람회를 다녀왔고, 가장 관심있게 보았던 것은 디지털 교과서다. 사실 출판사들마다 UI는 거의 비슷했는데, 가장 기억에 남는 출판사의 교과서를 떠올려보면, 사용자에게 로딩 컴포넌트나 토스트 메세지가 적절히 표시되어 사용자 배려가 돋보였다. 내가 봤던 출품작 중에서는 시연 중 네트워크 오류로 인해 제대로 작동을 하지...

Next.js - cloneElement를 이용해 Children에게 props를 내려주자!

📌시작하며 입사하고 오랫동안 함께 하고 있는 프로젝트가 출시를 준비하면서, 프로토타입으로 만들었던 컴포넌트를 리팩토링 할 필요성이 있었다. 최근에는 생각나면 Next.js 공식문서를 살펴보는 중인데 그때 발견한 Template.ts를 적용하면서, 전체적인 컴포넌트 위치 변경이 있었고 layout.tsx를 쓰며 children에게 Props를 내려주는...

정규표현식

📌시작하며 최근 프로그래머스 문제 풀이를 다시 시작했다. 알고리즘 강의를 듣고 있기도 하고, 꾸준히 해서 나쁠건 없으니 말이다.😊 문제를 풀다 보면, 특정 문제들에서는 정규표현식이 빛을 발하는데, 내가 JS 정규표현식을 완벽하게 숙지하고 있는 것이 아니라 난감할 때가 있다. 실무에서도 form을 만들 때 정규표현식을 이용해 값을 제한하기도 하는데,...

이벤트 위임으로 데이터를 받아오자

📌문제 상황 아무래도 회사 업무라 자세하게 작성할 수 없지만, 대략적으로 설명하면, 사용자가 컴포넌트를 클릭하면 해당 컴포넌트의 text를 받아서, 처리해야 하는 상황이 있었다. 그냥 state 내려줘서 처리하면 되지.. 싶지만 해당 컴포넌트는 부모 컴포넌트가 A 데이터를 필요로 함. 부모 컴포넌트는 map을 이용해 자식 컴포넌트를...

QA - 헷갈리는 용어들

📌긴급 테스트를 해야한다! 그런데… 최근 내가 FE를 담당했던 프로덕트의 프로토타입 시연이 결정되었다.😲 팀 밖을 벗어나 타인에게 보여주는 것은 처음이기에 괜찮을지 긴장 되는 한 편, 날짜가 임박하게 정해졌는데, 막상 보여드렸더니 문제 생기는건 아니야?! 하는 불안감이 엄습했다… 😱(살려줘!) 지금 당장 테스트라이브러리 도입은 어렵기 때문에, 간단...

MSW - Next.js에 MSW를 설치해보자

📌시작하며… 테스트 작성에 대해 찾아보며 코딩하던 평화로운 어느날… 우연히 우아한 형제들의 기술 블로그에 통합테스트와 관련된 내용을 발견했다. 자세하게 설명되어 있는 글이라 어떤 내용으로 테스트를 작성 하시는지 궁금해 살펴보던 와중 MSW 를 사용해 API값을 mocking 하는 부분이 있었다. MSW 어디서 많이 들어본 이름인데…🤔 하고...

FE테스트(2) - vitest

📌시작하며 이전 포스팅에서 테스트에 앞서 테스트의 배경과 사용되는 라이브러리를 살펴봤다면, 이번에는 실제로 사용되는 라이브러리의 api를 정리해보고자 한다. ✅it it 함수를 사용해 특정 동작이나 결과에 대한 기대를 정의하고, 이를 검증하는 테스트 코드를 안에 작성하게 된다. it 함수 안에 작성되는 설명은 테스트 목적, 기대 결과를 명확하게 ...

FE테스트(1)

📌시작하며 드디어 이 날이 왔다 개인적으로 프론트엔드 테스트에 흥미가 있어 인프런에서 강의를 수강했었고, 한동안은 테스트해볼 만한 컴포넌트를 만들어 테스트를 작성하는 시간을 가졌다. 프론트엔드 테스트에 대해 “정말 필요한가?”라는 의견도 있지만, 나는 테스트에 긍정적인 입장이다. 이유는, 규모가 큰 프로젝트 진행시 예상치 못한 사이드 이펙트를 최...

파이썬 기본 문법 - 입력과 출력

📌시작하며 파이썬 강의 수강 중… 앞에 부분은 어렵지 않아서 가벼운 맘으로 보고 있었는데, 입출력 부분 부터 난이도가 올라가면서 새로 정리가 필요해졋다. 다행인건 흥미도도 쭉쭉 올라가는 중이란 것.😎 그래서 오늘은 파이썬 파일 I/O 방식에 대해 정리해보고자 한다. ✅기본적인 파일 열기 파이선에서 파일을 여는 핵심은 open() 함수다! 이후 파...

파이썬 기본 문법 - 람다 함수

📌시작하며 최근 파이썬의 탄탄한(?) 기초를 다지고, 앞으로 사용하게 될 파이썬에 대비하고자 인프런 강의를 듣고 있다. 수업에서 안내하는 예제도 공부해야 하지만, 내가 잘 모르거나 이해가 잘 안되는 부분은 따로 찾아보면서 학습하는게 좋으니, 블로그에 추가로 정리를 하고자 한다. 🤗 ✅람다 함수 람다 함수는 Python에서 익명 함수를 정의할 때 ...

파이썬 기본 문법 - 클래스 상속

📌시작하며 신입 개발자로 일하기 시작하며 업무에 필요한 스택을 틈틈히 공부하고 있다.😌 파이썬도 같은 흐름으로, 백엔드 코드를 읽거나 소통할 때 필요한 파이썬 공부도 시작했다. 파이썬 언어는 인간이 읽기 쉬운 고급언어로 배우기도 쉽다고 한다. 아직 걸음마 단계라 과연 그런지는 차차 공부해봐야 알겠지만😅 일단 기본 문법은 예제도 쳐보고 한 번은 훑...

정보처리기사 - 완료!!!

📌시작하며 정보처리기사 실기 합격 확인 후 쓰는글… 🎉 😌회고… 필기 합격글을 3월 1일에 작성했었는데, 6월 18일에 실기까지 최종 합격하게 되었다. 24년 1회차 시험에 실기와 필기 모두 마칠 수 있어서 너무 뿌듯하다. 📝공부는 꾸준히 어쨌든 첫 공부를 시작할 때 부터 최종 발표가 날 때 까지 다소 시간이 소요되었던 만큼 중간에 지칠때도 ...

SEO(3) - 프로젝트에 오픈그래프 적용하기

📌시작하며 이전 포스팅에서 오픈그래프 만드는 법에 대해 쭉 살펴보고, 프로젝트에 적용했는데 역시나😅 예상치 못한 오류를 여럿 마주했다. 다행히 그 오류들을 해결하고 오픈그래프 적용을 완료해서, 관련 내용을 잊지않게 정리하고자 한다. ✅프로젝트 상황 기본적으로 모든 페이지에 적절한 오픈그래프가 적용될 수 있도록 figma를 이용해 이미지를 만들어 ...

React-Hook-Form(3) - 입력해야 하는 값을 배열로 받아야 하는 경우

📌 프로젝트를 이어받다. 같은 FE 동료의 퇴사가 결정되어, 앞으로 이어서 내가 해당 프로젝트를 작업하게 되었다. 👀 데일리 스크럼을 진행한 덕분에 해당 개발자 분께서 어떤 코드를 작성하실 때 가장 많은 시간을 소요하셨는지, 어떤 것을 중점적으로 생각하고 계신지는 대략적으로 파악하고 있었고, 인수인계 문서를 꼼꼼히 작성해두셔서, 순조롭게 인수인계가...

Docker(1) - 기본개념 알아보기

📌들어가며 (작성중~) Docker는 개발자라면 한 번씩 들어보지 않았을까 싶다.😎 인강 커리큘럼에도 포함되어 있고, 관련 경험자를 구하는 글을 몇 번 봤는데 🤔 이쯤되니, Docker가 어떤건지, 왜 필요한지 궁금해져서 알아보려고 한다. ✅Docker의 필요성 어떤 애플리케이션을 만든다고 가정해보자. 개발자들은 이 애플리케이션을 제작하기 위해 ...

SEO(3) - Next.js 오픈그래프

📌시작하며 Next.js에서는 이전 SEO포스팅에서 정리했던 meta 태그들을 간단하게 만들 수 있는 방법을 제공한다. 공식문서 예제를 보고 응용해보면서 방법을 익혔는데, 의외로(?) 오픈그래프 쪽은 공식문서 내용이 부족하다고 느꼈다… 😅 그래서이번 포스팅에서는 나름 시행착오를 거치며 학습한 Next.js 오픈그래프 설정에 대해 정리해보고자 한다! ...

웹 접근성(1) - Accessibility 점수 개선하기

📌시작하며 프로젝트 최적화 작업을 마무리하고.. 이번엔 접근성(Accessibility) 점수를 개선해보고자 한다. 😎 개인적으로 접근성 하면 생각나는 말이 있다. 내가 한창 수업이나 과제에 아이패드를 활용하던 중에 ‘손쉬운 사용’기능이 있다는걸 알게되었고, 사용법을 찾아보던 중 한 유튜브 영상을 접하게되었는데, 그때 출연자가 이 기능을 설명하면서...

Graph QL(1) - 개념정리

📌시작하며 Graph QL이라면 아마 개발 공부를 하는 사람이라면 한 번쯤은 들어봤을 거다! 내가 봤던 인강 코스에서도 있었고, 개발 유튜브 채널에서도 등장했고, 개발자들 대화나 채용공고에서도 자주 볼 수 있기 때문이다.🤔 사실 나는 Graph QL이라는 이름만 들었을 때 그래프를 이용한 시각화 라이브러리의 일종이지 않을까? 라고 생각했었다…😅 ...

커스텀 훅으로 가독성 높은 코드로 리팩토링하기

📌시작하며 최근에는 계속해서 프론트엔드 기술 중 “최적화”에 초점을 맞춰 공부하고 있다. 이 최적화 단계에는 사용자 경험(UX)를 위한 일을 포함하는 건 물론, 코드 최적화 단계를 포함한다. 이번 포스팅에서는 커스텀 훅으로 가독성과 유지보수성을 높일 수 있는 방법을 정리하고자 한다. ✅Hook이란? 리액트를 처음 접했을 당시 읽었던 책들은 앞에서...

SVG 이미지 - 반응형 / 화면 모드 대응하기

📌시작하며 프로젝트에서 dark/light 모드를 지원하면서 문득, 사용자가 이미지를 업로드 하지 않았을 때 보여지는 이미지가…너무 밝지 않나?! 라는 생각을 하게 됐다. light 모드에는 괜찮은데 dark 모드라면 사용자가 불편할 수 있겠다는 생각을 하게 되었고, 각 모드별로 대응 되는 이미지로 변경하기로 결정했다! 생각했던 첫 번째 방식은 d...

최적화 적용(1) - 폰트 최적화

📌시작하며 지난 포스팅에서 계속 최적화 방식에 대해 알아봤는데 이제 직접 프로젝트에 적용해보려고 한다.😎 일단 가장 간단해보이는(?) 폰트 최적화 부터 시작하기로 했다. 현재 사용하고 있는 폰트 파일을 봤더니 생각 이상으로 용량이 엄청나다!😅 (약 12mb…) 나는 두 가지 언어에 관한 폰트를 사용하고 있기 때문에 용량이 무려 2배!🥲 폰트를 불러...

프로젝트 최적화(4) - 폰트 최적화

📌시작하며 이번에는 폰트를 최적화해보자.😎 Next.js의 경우 Next/font를 이용해 최적화 된 폰트를 사용할 수 있는데, 이번에 진행한 프로젝트에서는 로컬 폰트를 사용하면서 다른 방식의 폰트 최적화의 필요성을 느꼈다. 어떤 방법이 있는지 알아보고 프로젝트에 적용해보고자 한다. ✅확장자별 폰트 사이즈 지난번 동영상, 이미지에서도 알아봤던 것...

프로젝트 최적화(2) - 이미지 최적화

📌시작하며 이번에는 이미지를 최적화 해보자! ✅이미지 최적화 이미지 최적화는 동영상 최적화와 마찬가지로, 사이즈를 줄이는 것에서부터 시작한다. ➡️적절한 이미지 포맷 설정 💟webP 포맷 WebP은 인터넷에서 이미지가 로딩되는 시간을 단축하기 위해 Google이 출시한 파일 포맷으로, PNG, JPEG 기존 포맷 파일 보다 작아진다. CAN...

프로젝트 최적화(1) - 동영상 최적화

📌시작하며 프로젝트 최적화는 웹 성능을 향상시키고, 더 나은 사용자 경험을 만드는데 있어서 필수불가결한 요소이다. 지금 듣고 있는 강의도 ‘최적화’에 대해 알고 싶어서 구매했었는데, 최적화에 대해 집중적으로 학습하고, 나름대로 정리해보고자 한다. ✅동영상 최적화 동영상 최적화의 시작은 ‘용량을 줄이는 것’ 이다. 인생 첫 프로젝트 당시 무조건 화...

next-auth 이용하기(2)-로그인 방식을 이해해보자

📌시작하며 이전 포스팅에서 OAuth에 대해서 정리해보았고, 이번엔 다른 로그인 방식에 대해서 정리해보고자 한다. 전에 면접 후기를 보았을 때 ‘세션 로그인 방식과 토큰 로그인 방식의 차이를 아시나요?’ 라고 물으셨다고 하는데, 나 또한 그 질문을 들었다면 🥹(…네?) 하고 당황할 것 같기 때문이다. 그리고 이왕 로그인 방식에 대해 알아보기 시작했으...

next-auth 이용하기(1)-OAuth에 대해 알아보자

📌시작하며 지난 프로젝트에서는 firebase를 이용해 이메일 로그인을 구현했었다. 그 때 다음 프로젝트에서는 SNS 로그인을 구현해봐야지! 다짐했었고, 구현 중에 있다.😎 next-auth를 쓰면 정말 간단하게 다양한 제공자의 로그인 기능을 구현할 수 있는데, 구현 방법만 쭉 정리하기 보다는 OAuth 자체를 정리하면 프로젝트의 흐름을 더 잘 이...

Next.js 13의 특징과 변화(4) - Data Fetching

📌시작하며 현재 만들고 있는 프로젝트에서는 첫 화면에서 DB에 있는 data를 불러와 렌더링해서 보여주려고 한다.😎 useQuery를 써서 불러올까 했지만, Next13의 data Fetching 기능을 사용해보고 싶기도 했고, 프로젝트 내의 다른에서 무한 스크롤을 적용해 데이터를 전부 가져올 예정이기 때문에, 루트 페이지에서는 겹치지 않는 기능을 ...

React-Query(TanStack-Query)를 사용해보자! (2) - 무한스크롤

📌시작하며 무한 스크롤 사용자가 페이지 하단에 도달 할 때 새로운 콘텐츠를 로딩하여 사용자에게 콘텐츠를 끊임없이 제공할 수 있도록 하는 방식 무한 스크롤은 아마 한 번씩은 다들 경험해 본 방식일 것이다.🤔 한 번에 많은 양을 로딩하기에 시간이 오래 걸릴 경우, 분할해서 로딩해 줄 수도 있고, 사용자의 호기심을 자극해 사용자가 더 오래 애플리...

React-Query(TanStack-Query)를 사용해보자! (1)

📌시작하며 리액트 쿼리는 아마 한 번쯤은 다들 들어봤을 거라 생각한다. 따로 강의를 들으면서 리액트 쿼리를 사용해봤는데, 직접 프로젝트에 적용해보는 것은 처음이라, 이번 글에서는 “그래서 리액트 쿼리가 뭔데?!” 라는 질문에 대한 답을 찾아보고, 사용법을 익혀보고자 한다.😄 (이 글은 v5 docs를 참고해 작성했다.) ✅React-Query(Ta...

Storybook을 사용해보자(1) - 예제 뜯어보기

📌시작하며 프론트엔드 개발자는 "타 직군과 커뮤니케이션🤝 할 상황이 굉장히 많다"라는 건 아마 모두가 인정하는 사실일 것이다. 하나의 프로덕트를 위해 디자이너와 백엔드 개발자는 물론, 서비스 기획, 프로젝트 매니저 등 정말 많은 사람과 함께 달려가는거다! (개인적으로 이 과정이 개발자가 가진 매력 중 하나가 아닐 까 생각한다. 마치 소년만화의 주인...

정보처리기사 - 필기 후기

📌시작하며 정보처리기사 필기시험을 보고 왔고, 예비 합격 후 쓰는 후기 글! 🤔공부를 시작하다 프론트엔드 면접 예상 질문들을 읽어보면 CS 지식이나 알고리즘, 자료구조 등을 만날 수 있다. 알고리즘이나 자료구조는 코딩테스트 공부를 하면서 함께 학습하고 있는데 CS는 추가로 학습이 필요하다는 걸 느꼈다! (현업에 계신 분들도 꾸준히 공부하신다는 글...

Next.js 언어별 폰트 적용하기 - @font-face

📌시작하며 이번에 진행하는 프로젝트에서 전부터 해보고 싶었던 ‘언어 변경’기능을 구현하고 있다. 한국어와 일본어 두 언어를 지원하는 애플리케이션인데, 각 언어에 적절한 font를 사용하고 싶어 방법을 검색해보게 되었다. 🤔 Next/font를 시도하다 이번 프로젝트에서는 Next13을 사용하고 있고, Next.js가 13으로 업데이트되면서 새로 ...

Chirpy 설치와 커스텀

📌시작하며 개발 공부를 시작하고 지금까지 notion으로 많은 양을 정리해왔다. 하지만 notion으로 정리하면 아무래도 블로그보단 폐쇄적인 공간인 만큼 작성한 글을 누군가에게 보여주기 애매한 부분이 있었다. 아마 많은 개발자가 그렇겠지만.. 그 동안 다른 개발자분들의 블로그를 통해 공부한 부분이 많기에, 블로그를 시작해보면 어떨까? 생각하게 되었...

Typescript(4) - 각 Element의 Props 속성을 정해보자

📌시작하며 컴포넌트를 만들다 보면, onClick이나 onMouseOver등의 이벤트를 props로 받아와야 하는 일이 간혹 생기곤 한다. 물론 props로 내려줘서 작업해도 문제는 없지만, 이벤트가 하나 더 발생하면, 컴포넌트에 정의해둔 props의 interface안에 작성해줘야 하는 번거로움이 생긴다. 그래서 미리 정의할 때 타입을 확장해서 ...

Jest - matcher

📌시작하며 연말에 가볍게 진행한 프로젝트에서 Jest를 간단히 적용해보았다. 역시 처음 도입하는 것이다 보니 시간도 많이 소요되고 삐그덕 거리기는 했지만 그래서 그런지, PASS가 뜰 때마다 너무 기뻐서 다들 봐달라고 하고 싶었다… 🤣 어쨌든, 이번 포스팅에서는 프로젝트를 진행하면서 새롭게 배운 Jest의 내용을 정리해보면서 복습해보려고 한다. ...