Large Rainbow Pointer
프로젝트 구현
[AWS Amplfiy Gen2/Next.js] NextAuth.js 구글 로그인 구현기 (feat. Cognito)
[AWS Amplfiy Gen2/Next.js] NextAuth.js 구글 로그인 구현기 (feat. Cognito)
💜 프로젝트 구현
2024.11.17 18:52
시작하며...이번 코드잇 인턴 프로젝트인 "Codeit Resources"가 11월 1일에 무사히 완료되었고 긍정적인 평가를 받았다!그러나... 실제 직원분들이 사용하고 피드백을 받기 위해서는 구글 캘린더가 연동이 필수적이라고 요구사항을 받았다. 사실 여기서 프로젝트를 마무리할 수도 있었지만, 팀원들과의 회의 끝에 구글 캘린더 연동 작업을 추가로 진행하기로 결정을 내렸다. 다행히도 코드잇 측에서 2주간 리소스(AWS)를 제공할 수 있다는 답변을 받아 계속 프로젝트를 이어나가게 되었다. 구현 초기 단계백엔드 서버가 필요해!먼저 구글 캘린더 API와 연동을 하기 위해서는 백엔드 서버가 필요했다. 현재 프로젝트의 AWS Amplify Gen2를 사용하고 있어 간편하게 풀스택 개발을 할 수 있었다.그런데.. ..
[AWS Amplify Gen2] Cognito, AWS SDK를 활용한 유저 기능 구현
[AWS Amplify Gen2] Cognito, AWS SDK를 활용한 유저 기능 구현
💜 프로젝트 구현
2024.11.05 23:17
시작하며이번 코드잇 인턴에서 AWS Amplfiy Gen2를 기술스택으로 선정하였고, 나는 그중에서 User 관리 기능을 담당하게 되었다. 이 기능을 구현하면서 AWS Cognito를 적극적으로 활용했다. 그러나 기본 제공 기능만으로는 프로젝트 요구 사항을 완전히 충족하기 어려워, AWS SDK를 통해 보다 세밀한 User 관리 기능을 개발하게 되었다. 그래서 해당 구현 과정을 기록하기 위해 글을 작성하게 되었다. 구현한 기능우선 해당 프로젝트는 사내에서 사용하는 서비스로 회원가입 기능은 없이 ADMIN이 멤버를 추가하고 수정하고 삭제하는 방식이다. 그래서 크게 다음과 같은 기능을 구현하였다.멤버 추가멤버 수정멤버 삭제로그인비밀번호 재설정비밀번호 변경 1. AWS SDK 사용 이유Cognito의 기본 메..
[Jotai/Tailwind CSS] Toast 컴포넌트 직접 구현 (feat. Next.js App Router)
[Jotai/Tailwind CSS] Toast 컴포넌트 직접 구현 (feat. Next.js App Router)
💜 프로젝트 구현
2024.09.19 01:36
시작하며...중급 프로젝트에서 Toast 를 react-toastify 라이브러리와 Styled Components 를 사용해서 커스텀하여 사용하였다. 그러나 간혈적으로 토스트가 생기지 않고 갑자기 다른 곳에서 생기는 등(?) 이상한 현상이 발생하였다.주강사님께 여쭤보니깐 아마 Next.js Hydration 에러인 것 같다고 해서 Context 를 사용해서 구현해 보라고 피드백을 주셨다. 당시에 토스트를 다시 구현할 시간이 없어서 나중에 기회가 되면 직접 Toast 컴포넌트를 구현하고 싶었는데,마침 이번 프로젝트에서 Jotai 라는 상태 관리 라이브러리를 사용하여 직접 구현하게 되었다. 구현하기참고로 나는 토스트가 스택처럼 여러 개 쌓이는 걸 별로 안 좋아한다..그리고 다른 팀원분도 토스트가 쌓이지 않..
[TanStack Query] 옵티미스틱 업데이트 사용하여 좋아요 구현
[TanStack Query] 옵티미스틱 업데이트 사용하여 좋아요 구현
💜 프로젝트 구현
2024.09.18 23:31
시작하며...이번 프로젝트에서 게시물의 좋아요/취소 기능을 구현하는데, 백엔드 API 가 느려 응답을 기다리기까지 과정이 사용자 관점에서 좋지 않다는 단점을 발견하였다. 그러나 실제 SNS 에서는 네트워크 속도가 느려도 좋아요/취소 기능이 바로바로 반영이 되는 것을 볼 수 있다. 그래서 이를 보고 좋아요 버튼을 누르면 클라이언트 측에 좋아요가 바로 반영되는 기능을 구현하려고 한다. 이러한 기능을 구현하기 위해 TanStack Query 의 Optimistic Updates 를 사용하여 좋아요 기능을 구현하였다.  Optimistic UpdatesOptimistic Updates 란?단어 뜻 그대로 낙관적인 업데이트 라는 뜻이다. 서버 요청 시 클라이언트 측에서 UI 를 업데이트를 될 거라고 낙관적으로 가..
[Next.js] Lighthouse 웹 사이트 성능 개선 (100으로 만들기)
[Next.js] Lighthouse 웹 사이트 성능 개선 (100으로 만들기)
💜 프로젝트 구현
2024.09.10 00:37
시작하며..."우주윗미" 프로젝트 개발을 다 마치고 리팩토링 기간 때, Lighthouse 를 돌려봤는데 74, 64 라는 처참한 결과가 나왔다 😅 오히려 좋아 웹 사이트의 성능을 개선할 수 있는 좋은 기회인데 완전 럭키비키자낭~🤭🍀 그래서 성능을 개선하기 위해 적용한 내용이나 수정한 내용에 대한 여정을 글로 작성하게 되었다. (참고로 dev 환경 아니고 빌드환경에서 시크릿 모드창을 켜서 Lighthouse 돌렸다.) 자유게시판 페이지 - 성능 개선하기 📈1. 데이터 패칭 CSR → SSR 로 변경CSR 은 브라우저에서 자바스크립트가 실행돼야 페이지에 내용이 렌더링이 되는 방식이다. 그래서 초기 로딩 시간이 길다. 반면 SSR 은 서버에서 HTML 을 완성하여 클라이언트한테 전달하는 방식으로 서버..
[Next.js / TanStack query] useInfiniteQuery 사용하여 무한 스크롤 구현 (feat. cursor 방식)
[Next.js / TanStack query] useInfiniteQuery 사용하여 무한 스크롤 구현 (feat. cursor 방식)
💜 프로젝트 구현
2024.09.07 18:04
시작하며...이번 프로젝트에서 TanStack Query 의 useInfiniteQuery 를 사용해서 댓글 무한 스크롤 기능을 구현했다. 그래서 무한 스크롤 기능을 구현하는 것도 처음이고, useInfiniteQuery 를 사용하는 것도 처음이라 댓글 무한 스크롤을 구현한 과정에 대한 내용을 기록하기 위해 글을 작성하게 되었다. [공식문서] useInfiniteQuery | TanStack Query React DocsThis ad helps to keep us from burning out and rage-quitting OSS just *that* much more, so chill. 😉tanstack.com 구현하기 앞서...내가 구현할 댓글 무한 스크롤은 백엔드 서버에서 cursor 값을 사용..
[Next.js] 세션 스토리지, 이전 페이지 저장해서 뒤로 가기 구현 (feat. app router)
[Next.js] 세션 스토리지, 이전 페이지 저장해서 뒤로 가기 구현 (feat. app router)
💜 프로젝트 구현
2024.09.02 23:34
시작하며...이번 프로젝트에서 자유게시판(모집게시판)을 구현하게 되었다.  게시물 상세페이지에 "목록으로" 버튼이 있는데이를 눌렀을 때, 주소의 param 값이 유지되기 위해 router.back() 을 사용하여 구현하였다. 그러나!!! 게시물 상세페이지를 다른 페이지에서 주소창으로 들어오면 router.back() 이 원하는 의도대로 동작하지 않게 된다. 😭얘 때문에 그냥 "/boards?page=0" 으로 보낼 수도 없어 고민이 많았다.. 🤔 그래서 이전에 접근했던 페이지를 저장해 가면서 이전 페이지를 확인하여 동작하는 방식을 선택하였다. 이전 페이지 저장하기어디에 저장할까?이전 페이지 정보를 어디에 저장할 지 많은 고민을 했다.로컬 스토리지세션 스토리지Jotai쿠키 등등.....각 저장소의 장단..
[Next.js] 무한 캐러셀 컴포넌트 직접 구현하기 (feat. Tailwind CSS)
[Next.js] 무한 캐러셀 컴포넌트 직접 구현하기 (feat. Tailwind CSS)
💜 프로젝트 구현
2024.09.02 09:06
시작하며...지난 기초, 중급 프로젝트에서 캐러셀을 라이브러리를 사용하여 구현하였다. 그때 회고를 보면 나중에는 라이브러리가 아닌 직접 구현해보고 싶다고 글을 적었었다.그런데 마침 이번 프로젝트에서도 캐러셀을 구현해야 될 기회가 생겨 직접 구현하게 되었다. 캐러셀을 구현한 결과는 아래와 같고, 이를 구현하기까지의 과정을 작성하려고 한다. 💪💪💪  무한 캐러셀 원리?카드가 4개가 있는 무한 캐러셀을 만들었다. 마지막 카드에서 첫 번째 카드로 이동할 때 자연스럽게 오른쪽으로 넘어가면서 1번 인덱스로 가야 한다.이를 어떻게 구현해야 될까? 이를 그림으로 표현해 보았다. 마지막 카드(4번 이미지)에서 오른쪽으로 넘어가면 첫 번째 카드(1번 이미지)를 복사한 카드를 바로 오른쪽에 두어 자연스럽게 넘어가는 것..
[GitHub Action / Chromatic] 스토리북 PR 미리보기 배포 (feat. yarn)
[GitHub Action / Chromatic] 스토리북 PR 미리보기 배포 (feat. yarn)
💜 프로젝트 구현
2024.08.08 23:34
시작하며...이번 프로젝트에서 Storybook 을 사용하게 되었다. 그런데 공통 컴포넌트를 만들고 Storybook 을 작성한 후 Pull Request 를 올렸을 때, 리뷰어들을 Storybook 에 반영된 것을 바로 시각적으로 확인할 수 없다. 그래서 이를 해결하기 위해 GitHub Action 을 사용하여 Storybook 을 Chromatic 배포를 하여 PR 을 올릴 때, 미리 보기 배포 주소를 보여주는 것을 구현하였다.  Chromatic 배포Storybook 은 Chromatic 을 사용하여 배포를 할 수 있다. Visual testing & review for web user interfacesChromatic scans every possible UI state across browse..
DropDown 컴파운드 패턴으로 공통 컴포넌트 구현하기
DropDown 컴파운드 패턴으로 공통 컴포넌트 구현하기
💜 프로젝트 구현
2024.07.29 00:04
시작하며...이전 프로젝트에서 Menu 와 DropDown 컴포넌트를 구현하였다. 그러나 공통 컴포넌트라는 성격과 거리가 멀었다. 그래서 이번 프로젝트에서 DropDown 공통 컴포넌트를 범용성이 좋게 만들기 위해 컴파운드(Compound) 패턴으로 만들게 되었다!  컴파운드(Compound) 패턴컴파운드 패턴이란?컴파운드 패턴이란 무엇일까? 컴파운드 패턴React에서 복잡한 컴포넌트를 효율적으로 관리하고 재사용성을 높이기 위한 디자인 패턴DropDown 이나 Select 등 컴포넌트를 여러 작은 컴포넌트로 분리하여 부모/자식 관계로 이루어진 컴포넌트를 독립적이면서 통합되어 하나의 컴포넌트처럼 사용할 수 있게 만드는 디자인 패턴 중 하나이다. 장점유연성 증가가독성 증가유지보수성 증가재사용성 향상컴포넌트 ..
최신 글
[Next.js] API Routes로 DynamoDB 정렬하기 (feat. AWS Amplify)
Next.js2024.11.20 07:52[Next.js] API Routes로 DynamoDB 정렬하기 (feat. AWS Amplify)

시작하며...이번 Codeit Resoucres 프로젝트에서 기술스택으로 React, AWS Amplify Gen2, NoSQL 데이터베이스인 DynamoDB를 사용하고 있다. 마주친 문제점처음에 데이터베이스에 데이터를 추가할 때, 데이터가 시간순이나 id값을 기준으로 자동 정렬될 것이라 예상했지만, 실제로 사용을 해보니 DynamoDB에서는 데이터가 특정 순서 없이 저장되는 것을 발견하게 되었다. 프로젝트 요구사항을 구현하기 위해서는 시간순, 이름순으로 정렬된 데이터를 보여줘야 했기 때문에, 이를 어떻게 해결할지 많은 고민을 하게 되었다. 해결 과정?!?!AWS Amplify Gen2 공식 문서와 GitHub 레퍼런스를 통해 전체 데이터를 정렬하는 방식을 찾아보았으나...DynamoDB에서는 기본적으로..

[AWS Amplfiy Gen2/Next.js] NextAuth.js 구글 로그인 구현기 (feat. Cognito)
💜 프로젝트 구현2024.11.17 18:52[AWS Amplfiy Gen2/Next.js] NextAuth.js 구글 로그인 구현기 (feat. Cognito)

시작하며...이번 코드잇 인턴 프로젝트인 "Codeit Resources"가 11월 1일에 무사히 완료되었고 긍정적인 평가를 받았다!그러나... 실제 직원분들이 사용하고 피드백을 받기 위해서는 구글 캘린더가 연동이 필수적이라고 요구사항을 받았다. 사실 여기서 프로젝트를 마무리할 수도 있었지만, 팀원들과의 회의 끝에 구글 캘린더 연동 작업을 추가로 진행하기로 결정을 내렸다. 다행히도 코드잇 측에서 2주간 리소스(AWS)를 제공할 수 있다는 답변을 받아 계속 프로젝트를 이어나가게 되었다. 구현 초기 단계백엔드 서버가 필요해!먼저 구글 캘린더 API와 연동을 하기 위해서는 백엔드 서버가 필요했다. 현재 프로젝트의 AWS Amplify Gen2를 사용하고 있어 간편하게 풀스택 개발을 할 수 있었다.그런데.. ..

[AWS Amplify Gen2] Cognito, AWS SDK를 활용한 유저 기능 구현
💜 프로젝트 구현2024.11.05 23:17[AWS Amplify Gen2] Cognito, AWS SDK를 활용한 유저 기능 구현

시작하며이번 코드잇 인턴에서 AWS Amplfiy Gen2를 기술스택으로 선정하였고, 나는 그중에서 User 관리 기능을 담당하게 되었다. 이 기능을 구현하면서 AWS Cognito를 적극적으로 활용했다. 그러나 기본 제공 기능만으로는 프로젝트 요구 사항을 완전히 충족하기 어려워, AWS SDK를 통해 보다 세밀한 User 관리 기능을 개발하게 되었다. 그래서 해당 구현 과정을 기록하기 위해 글을 작성하게 되었다. 구현한 기능우선 해당 프로젝트는 사내에서 사용하는 서비스로 회원가입 기능은 없이 ADMIN이 멤버를 추가하고 수정하고 삭제하는 방식이다. 그래서 크게 다음과 같은 기능을 구현하였다.멤버 추가멤버 수정멤버 삭제로그인비밀번호 재설정비밀번호 변경 1. AWS SDK 사용 이유Cognito의 기본 메..

[상태 관리 라이브러리] 내가 직접 사용해 본 Recoil, Zustand, Jotai
라이브러리2024.11.05 12:07[상태 관리 라이브러리] 내가 직접 사용해 본 Recoil, Zustand, Jotai

시작하며...지금까지 다양한 프로젝트를 진행하면서 클라이언트에서 상태 관리를 간편하게 하기 위해 라이브러리를 사용하였다.그중 Recoil, Zustand, Jotai 라이브러리를 사용해 보았고, 각기 다른 방식으로 상태 관리를 했다. 그래서 이번 글에서는 그동안 사용해 본 Recoil, Zustand, Jotai를 비교하고, 각 라이브러리를 어떤 상황에서 사용했고 느낀 장단점을 정리하게 되었다. 1. Recoil1-1. 사용 배경개발 동아리 DND 9기에서 진행한 NewPle 프로젝트에서 Recoil을 사용했다. Recoil을 선택한 이유는 단순했다.사실 React Query(TanStack Query)와 Recoil의 조합이 좋다는 이야기를 들어서 깊이 있는 이해 없이 그냥 선택하게 된 것이다.(당시 ..

useState 대신 TanStack Query로 옵티미스틱 업데이트 구현한 이유
라이브러리2024.10.09 02:01useState 대신 TanStack Query로 옵티미스틱 업데이트 구현한 이유

시작하며...우주윗미 프로젝트에서 TanStack Query의 옵티미스틱 업데이트를 사용해서 게시물의 좋아요 기능을 구현하였다. 그런데 오늘 useState로 구현할 수 있을 거 같은데 굳이 TanStack Query를 사용한 이유를 질문받았다.....!(약간 당황하면서 대충 서버 상태를 반영해 준다고 답을 했다.) 그래서 이에 대해 다시 한 번 생각해 보면서 글로 정리하게 되었다. 왜 useState가 아닌 TanStack Query를 사용했는지!! (참고로 TanStack Query의 옵티미스틱 업데이트를 적용한 내용은 해당 블로그 글에서 확인할 수 있다.) [TanStack Query] 옵티미스틱 업데이트 사용하여 좋아요 구현시작하며...이번 프로젝트에서 게시물의 좋아요/취소 기능을 구현하는데, 백..

[Jotai/Tailwind CSS] Toast 컴포넌트 직접 구현 (feat. Next.js App Router)
💜 프로젝트 구현2024.09.19 01:36[Jotai/Tailwind CSS] Toast 컴포넌트 직접 구현 (feat. Next.js App Router)

시작하며...중급 프로젝트에서 Toast 를 react-toastify 라이브러리와 Styled Components 를 사용해서 커스텀하여 사용하였다. 그러나 간혈적으로 토스트가 생기지 않고 갑자기 다른 곳에서 생기는 등(?) 이상한 현상이 발생하였다.주강사님께 여쭤보니깐 아마 Next.js Hydration 에러인 것 같다고 해서 Context 를 사용해서 구현해 보라고 피드백을 주셨다. 당시에 토스트를 다시 구현할 시간이 없어서 나중에 기회가 되면 직접 Toast 컴포넌트를 구현하고 싶었는데,마침 이번 프로젝트에서 Jotai 라는 상태 관리 라이브러리를 사용하여 직접 구현하게 되었다. 구현하기참고로 나는 토스트가 스택처럼 여러 개 쌓이는 걸 별로 안 좋아한다..그리고 다른 팀원분도 토스트가 쌓이지 않..

[TanStack Query] 옵티미스틱 업데이트 사용하여 좋아요 구현
💜 프로젝트 구현2024.09.18 23:31[TanStack Query] 옵티미스틱 업데이트 사용하여 좋아요 구현

시작하며...이번 프로젝트에서 게시물의 좋아요/취소 기능을 구현하는데, 백엔드 API 가 느려 응답을 기다리기까지 과정이 사용자 관점에서 좋지 않다는 단점을 발견하였다. 그러나 실제 SNS 에서는 네트워크 속도가 느려도 좋아요/취소 기능이 바로바로 반영이 되는 것을 볼 수 있다. 그래서 이를 보고 좋아요 버튼을 누르면 클라이언트 측에 좋아요가 바로 반영되는 기능을 구현하려고 한다. 이러한 기능을 구현하기 위해 TanStack Query 의 Optimistic Updates 를 사용하여 좋아요 기능을 구현하였다.  Optimistic UpdatesOptimistic Updates 란?단어 뜻 그대로 낙관적인 업데이트 라는 뜻이다. 서버 요청 시 클라이언트 측에서 UI 를 업데이트를 될 거라고 낙관적으로 가..

React
[Next.js] API Routes로 DynamoDB 정렬하기 (feat. AWS Amplify)
[Next.js] API Routes로 DynamoDB 정렬하기 (feat. AWS Amplify)
Next.js
2024.11.20 07:52
시작하며...이번 Codeit Resoucres 프로젝트에서 기술스택으로 React, AWS Amplify Gen2, NoSQL 데이터베이스인 DynamoDB를 사용하고 있다. 마주친 문제점처음에 데이터베이스에 데이터를 추가할 때, 데이터가 시간순이나 id값을 기준으로 자동 정렬될 것이라 예상했지만, 실제로 사용을 해보니 DynamoDB에서는 데이터가 특정 순서 없이 저장되는 것을 발견하게 되었다. 프로젝트 요구사항을 구현하기 위해서는 시간순, 이름순으로 정렬된 데이터를 보여줘야 했기 때문에, 이를 어떻게 해결할지 많은 고민을 하게 되었다. 해결 과정?!?!AWS Amplify Gen2 공식 문서와 GitHub 레퍼런스를 통해 전체 데이터를 정렬하는 방식을 찾아보았으나...DynamoDB에서는 기본적으로..
[상태 관리 라이브러리] 내가 직접 사용해 본 Recoil, Zustand, Jotai
[상태 관리 라이브러리] 내가 직접 사용해 본 Recoil, Zustand, Jotai
라이브러리
2024.11.05 12:07
시작하며...지금까지 다양한 프로젝트를 진행하면서 클라이언트에서 상태 관리를 간편하게 하기 위해 라이브러리를 사용하였다.그중 Recoil, Zustand, Jotai 라이브러리를 사용해 보았고, 각기 다른 방식으로 상태 관리를 했다. 그래서 이번 글에서는 그동안 사용해 본 Recoil, Zustand, Jotai를 비교하고, 각 라이브러리를 어떤 상황에서 사용했고 느낀 장단점을 정리하게 되었다. 1. Recoil1-1. 사용 배경개발 동아리 DND 9기에서 진행한 NewPle 프로젝트에서 Recoil을 사용했다. Recoil을 선택한 이유는 단순했다.사실 React Query(TanStack Query)와 Recoil의 조합이 좋다는 이야기를 들어서 깊이 있는 이해 없이 그냥 선택하게 된 것이다.(당시 ..
useState 대신 TanStack Query로 옵티미스틱 업데이트 구현한 이유
useState 대신 TanStack Query로 옵티미스틱 업데이트 구현한 이유
라이브러리
2024.10.09 02:01
시작하며...우주윗미 프로젝트에서 TanStack Query의 옵티미스틱 업데이트를 사용해서 게시물의 좋아요 기능을 구현하였다. 그런데 오늘 useState로 구현할 수 있을 거 같은데 굳이 TanStack Query를 사용한 이유를 질문받았다.....!(약간 당황하면서 대충 서버 상태를 반영해 준다고 답을 했다.) 그래서 이에 대해 다시 한 번 생각해 보면서 글로 정리하게 되었다. 왜 useState가 아닌 TanStack Query를 사용했는지!! (참고로 TanStack Query의 옵티미스틱 업데이트를 적용한 내용은 해당 블로그 글에서 확인할 수 있다.) [TanStack Query] 옵티미스틱 업데이트 사용하여 좋아요 구현시작하며...이번 프로젝트에서 게시물의 좋아요/취소 기능을 구현하는데, 백..
[Next.js] firebase 게시물 조회수 기능 구현 (생성, 조회, 갱신)
[Next.js] firebase 게시물 조회수 기능 구현 (생성, 조회, 갱신)
라이브러리
2024.08.29 14:56
(제목에는 Next.js 붙였지만 딱히 Next.js 에 관한 내용없음) 시작하며...이번 프로젝트에서 베타 테스트를 진행하면서 사용자들의 의견을 받았다. 그중에서 게시판 페이지에 조회수 기능이 있었으면 좋겠다는 의견이 있었다. 그런데 백엔드 API 요청을 새로 못하는 상황이기 때문에, 고민을 하다가 Firebase 를 사용하기로 했다.(그리고 나도 조회수 기능 구현하면 좋을 것 같다는 생각이 있었음) 그리고 Firebase 를 선택한 이유는 작년 졸업작품에서 React Native + Firebase 로 어플리케이션을 만들면서 Firebase 의 다양한 기능을 사용해 봤고 익숙하기 때문에 러닝커브가 낮아 빠른 시간내에 구현할 수 있을 것 같기 때문이었다. 세팅하기Firebase 에서 FireStore ..
[Next.js] 채널톡 연동하기 구현 (feat. app router, typescript)
[Next.js] 채널톡 연동하기 구현 (feat. app router, typescript)
Next.js
2024.08.28 11:36
시작하며...이번 프로젝트에서 직접 사용자들의 피드백을 받는 베타 테스트를 진행하기로 했다. 유저들의 피드백을 구글폼이나 디스코드로 받으려고 했는데 일단 접근성이 낮고 유저 입장에서는 귀찮을 거 같다는 우려가 있었다. 좀 더 간편한 방법으로 유저들이 피드백을 줄 수 있는 방법이 없을까? 하고 여러 사이트를 돌아다니면서 본 결과 "채널톡" 을 운영하는 것을 보게 되었다. 그래서 "채널톡" 을 프로젝트에 구현하게 되었고 이를 적용한 방법에 대해 글을 작성하게 되었다. 채널톡 적용하기공식문서채널톡 공식문서에 적용하는 방법이 자세히 적혀있다.https://developers.channel.io/reference/web-quickstart-kr#single-page-application 시작하기이 문서에서는 Ja..
[Next.js / TanStack Query] Server Side Rendering 하기 (feat. app router)
[Next.js / TanStack Query] Server Side Rendering 하기 (feat. app router)
Next.js
2024.08.27 00:26
시작하며...이번 프로젝트에서 Next.js App Router 를 사용하면서 TanStack Query 를 사용하기로 했다. 그런데 Next.js 에서는 데이터 패칭을 할 땐 Server Sider Rendering 을 사용하는데 이걸 TanStack query 와 함께 사용하는 방법이 없을까? 하고 찾아보다가 공식문서에서 이에 관한 내용을 발견하였다. Advanced Server Rendering | TanStack Query React DocsWelcome to the Advanced Server Rendering guide, where you will learn all about using React Query with streaming, Server Components and the Next.j..
[Next.js] Server Sider Rendering 특정 사용자 접근 제한 (feat. App Router)
[Next.js] Server Sider Rendering 특정 사용자 접근 제한 (feat. App Router)
Next.js
2024.08.11 17:25
시작하며...게시물 수정 페이지 같은 경우 해당 게시글을 작성한 사용자만 수정이 가능하다. 그래서 작성자에게만 수정 버튼이  렌더링 되지만 만약 그렇지 않은 사용자가 주소창을 통해 강제로 수정 페이지로 이동하였을 때, 해당 게시글의 작성자가 아니면 접근을 하지 못하게 막아야 된다. Next.js Server Side Rendering 에서 이를 구현하는 방법에 대해 알아볼 것이다. 구현 방식현재 로그인한 유저의 user id 와 게시물을 작성한 user id 를 비교해서, 다르면 not found 페이지로 이동시킨다. 로컬 스토리지서버 사이드 렌더링은 서버에서 페이지를 렌더링하며, 브라우저 API 인 document, window 등 객체에 접근할 수 없다. 그래서 로컬 스토리지 같은 경우 브라우저에서 ..
[Tailwind] px 작성, 자동 rem 변환 (feat. pxr 단위)
[Tailwind] px 작성, 자동 rem 변환 (feat. pxr 단위)
라이브러리
2024.08.01 11:41
시작하며...Tailwind CSS 를 사용하면 기본적으로 rem 단위로 동작한다. 만약 조금 더 섬세하게 px 단위로 크기를 조절하고 싶은 경우에는 아래 코드처럼 사용하게 된다.  그런데 개발자 도구에 들어가서 보게 되면 어떤건 rem 단위, 어떤건 px 단위 이렇게 혼합되어 있는 것을 볼 수 있다.  그래서 이러한 문제를 해결하여 px 단위로 작성하되, 실제 적용되는 건 rem 단위인 pxr 를 사용해보려고 한다. pxr 단위사실 Tailwind 를 사용하면서 위에와 같은 문제를 겪고 있었고 해결을 하고 싶었다. 그런데 지금 멘토님께서 pxr 단위라는 것을 알려주셔서 위에 문제를 해결할 수 있을 거 같아 이번 프로젝트에 적용하게 되었다! 관련 아티클팀원분이 카카오페이지에서 Tailwind 에 pxr ..
[Storybook] Next.js + Tailwind CSS + TypeScript 스토리북 적용하기
[Storybook] Next.js + Tailwind CSS + TypeScript 스토리북 적용하기
라이브러리
2024.07.28 19:55
시작하며...이번 프로젝트에서 Storybook 을 적용하게 되었다. 이전 프로젝트에서는 공통 컴포넌트를 테스트 페이지를 만들어서, 사용하는 방법과 예시를 다른 팀원들에게 보여줬는데이제 Storybook 을 사용하면 번거롭게 테스트 페이지를 만들 필요가 사라진다. 설치하기먼저 Storybook 을 설치한다.npx storybook@latest init그러면 Storybook 이 설치되면서 실행이 된다.  해당 프로젝트는 yarn 이라서 yarn stroybook 을 입력하면 스토리북이 실행이 된다.만약 npm 이라면 npm run stroybook 를 입력하면 된다. 스토리북 작성하기컴포넌트 주석달기버튼 컴포넌트에 대해 Storybook 을 작성하기 전에 해당 버튼 컴포넌트의 interface 에 주석을..
[Next.js] 메타태그, 오픈그래프 컴포넌트 SEO 향상 (feat. Page Router)
[Next.js] 메타태그, 오픈그래프 컴포넌트 SEO 향상 (feat. Page Router)
Next.js
2024.07.12 16:23
시작하며...메타태그와 오픈그래프를 적절하게 사용하면, 웹사이트에서 검색 엔진 최적화(SEO)를 향상시킬 수 있다. 그래서 검색 엔진에서의 노출도를 올릴 수 있다. 그래서 Next.js 에서 메타태그와, 오픈그래프를 컴포넌트로 만들어서 각각 페이지별로 다르게 설정하여 SEO 를 높이는 방법에 대해 알아볼 것이다.(참고로 Next.js Page Router) 메타태그 작성하기_document.tsx일단 공통으로 적용할 메타태그들은 _document.tsx 에서 Next.js 에서 기본적으로 제공해 주는 컴포넌트 안에 작성한다.파비콘 설정인코딩 UTF-8viewport - 브라우저 뷰포트author - 문서 작성자 정보keywords - 문서 키워드 (SEO 에 사용됨)import { Html, Head,..
후기 및 활동
[코드잇 스프린트 6기] 6개월 간 과정을 마치며 (코드잇보다는 내 이야기 위주)
[코드잇 스프린트 6기] 6개월 간 과정을 마치며 (코드잇보다는 내 이야기 위주)
시작하며...길고도 짧았던 6개월 간의 코드잇 스프린트 여정이 이번 주 마침내 막을 내렸다... 🥹이 기간 동안 많은 경험을 통해 성장하며, 내 삶에 있어서 기억에 남는 일 중 하나일 것이다.오늘은 그 6개월을 돌아보며, 지난 기간 "나"라는 사람에 대해 깊이 생각해 보고 무엇을 얻게 되었는지 글로 작성하게 되었다.(코드잇 관련 내용은 별로 없고, 혹시라도 코드잇 스프린트가 궁금하면 파트별 회고랑 프로젝트 회고 보는 거 추천해요.)  왜 프론트엔드 개발자?? 왜 코드잇 스프린트?? 👀프론트엔드 개발자를 선택한 이유나는 원래 웹 개발과는 거리가 멀었다.  임베디드 전공자로 하드웨어와 회로, C언어 같은 로우레벨 분야를 주로 공부했으며, HTML이라는 단어조차 3학년 2학기에 처음 접했다.  그동안 나는..
[우주윗미] 코드잇 스프린트 심화 프로젝트 회고
[우주윗미] 코드잇 스프린트 심화 프로젝트 회고
프로젝트
2024.09.06 18:37
시작하며...드디어 코드잇 스프린트의 마지막 프로젝트인 "심화 프로젝트"를 마쳤다.  이번 프로젝트는 이전 프로젝트들과 달리 약 6주간 진행되었고, 지난 기간을 돌아보며 프로젝트를 구현하는 동안 나는 어떤 고민과 결정을 거쳐 프로젝트를 완성했는지 정리하기 위해 회고를 작성하게 되었다. 프로젝트 깃허브 링크 https://github.com/sprint6-part4-team3/WouldYouWithMe GitHub - sprint6-part4-team3/WouldYouWithMe: 팀원을 모집하여 함께 스터디 투두리스트 관리하는 서비스팀원을 모집하여 함께 스터디 투두리스트 관리하는 서비스. Contribute to sprint6-part4-team3/WouldYouWithMe development by c..
[코드잇 스프린트 6기] 파트 3(5월27일 ~ 7월13일) 회고
[코드잇 스프린트 6기] 파트 3(5월27일 ~ 7월13일) 회고
(짧은 회고... 프로젝트 회고 위주로 봐주세요)시작하며...벌써 코드잇 스프린트 6기를 시작한 지 벌써 절반이나 지났고 마지막 파트만 남아있다. 정말 시간이 빠르고 지난 기간 동안 많이 성장하고 좋은 동료들을 만날 수 있어 좋은 경험이었다. 1. 프로젝트파트2때 기초 프로젝트를 진행했고, 이번 파트 3에서는 중급 프로젝트를 진행하였다.  너무 좋은 팀원들을 만나 즐겁게 개발할 수 있었고 팀원들의 코드를 리뷰하면서 나도 새로운 내용과 인사이트를 얻을 수 있었다.  자세한 내용은 해당 링크에서 확인할 수 있다. https://jjang-j.tistory.com/140 [Wiked] 코드잇 스프린트 중급 프로젝트 회고시작하며...코드잇 스프린트 6기 파트3에서 6월 21일부터 7월 9일까지 약 2주간 중급 ..
[wiki-viki] 코드잇 스프린트 중급 프로젝트 회고
[wiki-viki] 코드잇 스프린트 중급 프로젝트 회고
프로젝트
2024.07.15 13:20
시작하며...코드잇 스프린트 6기 파트3에서 6월 21일부터 7월 9일까지 약 2주간 중급 프로젝트를 진행하였다. 프로젝트를 진행하면서 내가 어떤 것을 구현하고 고민했는지를 상기하고 다시 한번 돌아보기 위해 글을 작성하게 되었다.https://github.com/wiki-viki/wiki-viki GitHub - wiki-viki/wiki-viki: 코드잇 스프린트 6기 파트3 16팀 중급 프로젝트 레포지토리입니다.코드잇 스프린트 6기 파트3 16팀 중급 프로젝트 레포지토리입니다. Contribute to wiki-viki/wiki-viki development by creating an account on GitHub.github.com 프로젝트 선정 목적프로젝트 선정 이유지난 초급 프로젝트와 동일하게..
[인프콘 2024] INFCON 2024 참가 신청 (feat. 가고 싶다...🥹)
[인프콘 2024] INFCON 2024 참가 신청 (feat. 가고 싶다...🥹)
기타
2024.07.07 15:26
시작하며... 인프런에서 진행하는 인프콘(INFCON) 2024가 8월 2일 코엑스 그랜드볼룸&아셈볼룸 에서 열린다고 한다!!!7월 8일 23시 59분까지 신청을 받으니깐 지금 당장 신청하기!!!! GO GO!! https://www.inflearn.com/conf/infcon-2024/ 인프콘 2024 - INFCON 2024인프런이 만드는 IT인의 축제, 인프콘에 초대합니다www.inflearn.com 작년 인프콘작년 완전 초짜 개발자 지망생이었던 나... 인프런에서 컨퍼런스가 열린다고 하길래 보자마자 신청했었고 초심자의 행운인지 운이 좋게 당첨이 되었었다...(정말 감사합니다! 좋은 경험이었습니다.🍀👍 )아는 사람도 없이 혼자 쭈뻣쭈뻣 가서 미리 듣고 싶었던 강의를 미리 정하고 시간에 맞게 강의..
[정처기] 24년 1회차 정보처리기사 실기 합격 후기 + 공부 방법 (feat. 삼수ㅋㅋ)
[정처기] 24년 1회차 정보처리기사 실기 합격 후기 + 공부 방법 (feat. 삼수ㅋㅋ)
기타
2024.06.18 14:43
기본 배경컴공은 아니지만 유사 학과 4년제 졸업한 전공자SQLD 자격증 취득웹 프론트엔드 개발자 취준생 지난 시험들...처음 정보처리기사를 본 건 2023년 2회차였다. 2023년 2회차필기는 거의 1~2일 동안 기출 계속 돌려서 바로 합격했고, 그 당시 실기 시험은 계절학기로 6학점 듣고 있어서 실기 시험에 큰 시간을 쏟지 못해 아쉽게 58점을 맞고 떨어졌다. 2023년 3회차막학기였고, 학점도 4학점 밖에 안 들었는데 지난 2회차보다 점수가 더 떨어져서 56점 정도였던 걸로 기억을 한다. 지금 생각해 보니깐 공부를 덜 했던 것 같다. 2024년 1회차 시험 결과올해 1회차 시험 준비 기간엔 부트캠프랑 동시에 병행하고 있어서 공부할 시간이 부족했는데도 최대한 시간을 잘 활용하고 한 달 전부터 미리 공부..
[내 마음 속 바다] 개발 동아리 DND 10기 프로젝트 회고
[내 마음 속 바다] 개발 동아리 DND 10기 프로젝트 회고
프로젝트
2024.06.11 00:09
시작하며...개발 동아리 DND 10기에서 내 마음 속 바다 라는 프로젝트를 진행하였다. DND 는 지난 기수인 9기 때 붙었고, 그 당시 완전 프론트엔드 개발 초짜였던 내가 팀 프로젝트를 통해 개발 구현 능력과 협업 능력을 기를 수 있어 도움이 많이 되었던 활동이었다. 그래서 다시 한 번 DND 활동을 하고 싶어 10기 내부지원을 통해 10기에 합격하게 되어 다시 한번 활동하게 되었다. (DND는 여름, 겨울 방학에 8주동안 활동하며, 최대 2번까지 활동가능하고 2번 활동하면 수료증이 발급된다.)  [DND 공식 홈페이지] DND프로젝트에 즐거움을, 모두에게 기회를www.dnd.ac "내 마음 속 바다" 프로젝트를 하면서 정말로 프론트엔드 개발에 대해 많이 배울 수 있는 활동이었는데, 8주간 DND 활..
[Fandom-K] 코드잇 스프린트 기초 프로젝트 회고
[Fandom-K] 코드잇 스프린트 기초 프로젝트 회고
프로젝트
2024.06.10 18:36
[목차]시작하며...프로젝트 선정 이유 및 목적프로젝트 초기 세팅컨벤션깃허브내가 구현한 기능프로젝트 회고 시작하며...코드잇 스프린트 6기 - 파트2 에서 기초 프로젝트를 진행하였다. 프로젝트 주제는 제공된 4가지 중에서 하나를 선택해서 약 2주 동안 진행하고 주어진 주제에서 기본 요구사항은 지키면서 그 외 디자인이나 추가적인 기능을 추가할 수도 있었다. 프로젝트를 끝난지 시간은 조금 지났지만 내가 어떤 걸 맡았고 어떻게 구현했는지 상기시키고 정리하기 위해 회고록을 작성하게 되었다. 프로젝트 선정 이유 및 목적선정 이유주제는 총 4가지가 있었으며 가장 난이도가 높은 프로젝트가 바로 Fandom-k 라는 프로젝트였다.그래서 이왕 하는 김에 어려운 프로젝트를 하면 좋을 것 같고 다른 프로젝트와 비교해 보았..
[코드잇 스프린트 6기] 파트 2(4월7일 ~ 5월25일) 회고
[코드잇 스프린트 6기] 파트 2(4월7일 ~ 5월25일) 회고
시작하며...코드잇 스프린트 6기 파트 2 가 끝이 났다.파트2 동안 기초 프로젝트도 진행하고 개인적으로 시험준비도 해서 바쁜 하루를 보냈다. 그리고 벌써 반이나 지났다는 게 실감이 나지 않는다...😱 [파트 1 회고록] [코드잇 스프린트 6기] 파트 1(3월7일 ~ 4월6일) 회고시작하며...코드잇 스프린트 6기 파트 1이 끝이 났다.처음엔 국비 교육을 들을까 말까 고민했었는데 1회차 후기는 매우 만족스러웠고 빨리 다음 내용을 배우고 싶다. 팀 활동우선 코드잇 스프린jjang-j.tistory.com  프로젝트이번 파트 2땐 기초 프로젝트를 진행했다.정말 많은 일이 있었고 힘들었지만 😂 이것저것 경험할 수 있게 되어 전보다 성장할 수 있는 계기가 되었다. 프로젝트 회고는 새 게시물을 올릴 예정이지만..
[코드잇 스프린트 6기] 나.테.소 이벤트 수상 후기
[코드잇 스프린트 6기] 나.테.소 이벤트 수상 후기
코드잇 스프린트 나.테.소 이벤트코드잇 스프린트에서 매주 위클리 페이퍼를 작성한 후 나.테.소 - 나의 테크 블로그를 소개합니다 이벤트에 응모를 하면 코드잇 스프린트 6기뿐만 아니라 다른 기수까지 합쳐서 추첨을 통해 상품을 주는 이벤트를 하고 있다. 그래서 블로그에 위클리 페이퍼 포스팅 하면서 나.테.소 이벤트에 매주 응모를 했었다. 내가 지금까지 작성한 위클리 페이퍼프로젝트 기간을 제외하고 모두 위클리 페이퍼를 작성하였다.모아보니 참 많다... 1주 차 - https://jjang-j.tistory.com/63 [CSS] CSS의 CascadingQ. 질문CSS의 Cascading에 대해 설명해 주세요. (코드잇 스프린트 위클리 페이퍼 #1) A. 답변CSS 를 적용하다보면 겹치는 속성이 발생할 수 ..
image
loading