분류 전체보기 125

최종 프로젝트 14일 차 @필수 입력 과정 조정, 리스트 필터를 쿼리 스트링으로 관리, html 렌더링 오류 수정, 검색 디바운싱

오늘은 css 과정을 마치고 튜터님의 피드백을 받아서 ux를 개선하거나 코드를 리펙터링 하는 등의 작업을 거쳤다. 필수 입력 과정 조정내가 만든 참가하기 기능은 모집 하기 이후에 반드시 실행되어야 하는데, 모달 창을 사용자가 닫지 못하게 했지만 이 정도로는 부족하다는 것을 피드백을 통해 통감했다. 아예 새로고침하거나 브라우저나 탭을 닫아버리면 문제가 일어나는 것은 똑같았기 때문이다.  그래서 나는 모집하기 마지막에 기본 프로필로 참가하기 로직을 삽입하고 이후 뜨는 모달창에서는 이미 삽입한 기본 프로필을 업데이트하는 방식을 선택했다. 이러한 방법을 사용하면 사용자가 예상 외의 행동을 하더라도 오너 정보가 없어서 오류가 뜨지는 않을 것이다.  검색 디바운싱또 지적 당한 것이 크게 필요성을 느끼지는 못했던 검..

til 2024.11.06

최종 프로젝트 13일 차 @드롭 다운, 모달 창 조정 및 css 작업(2) @모달 창 트러블 슈팅

오늘도 어제와 같이 드롭 다운, 모달 창 조정 및 css 작업을 했다.  select태그에 css를 넣기 위해서 아예 드롭 다운으로 select를 만들었고, 오늘도 모달 창 이슈가 있어서 모달 창을 조정했고, 다른 자잘한 css 작업들도 진행했다.  다행히 드롭 다운은 전에 만들어둔 hook을 이용하여 쉽게 구현할 수 있었고, css 작업들도 품이 많이 드는 것 말고는 별 문제 없었지만, 모달 창 이슈가 가장 큰 문제였다.  참가하기 모달 창이제껏 모달 창을 다룬 경험으로 인해 모달 창의 구조에 대해서 많이 이해하게 되었다. 다만 여전히 모달 창의 오픈 클로저 트리거를 다루는 것이 골치가 아팠는데, 내가 세세한 오픈 클로저 로직을 구현하길 원하는 '참가하기' 모달은 총 3곳에서 사용되며 2가지 방식으로 ..

til 2024.11.05

최종 프로젝트 12일 차 @드롭 다운, 모달 창 조정 및 css 작업

지난 주말 동안 열심히 css 작업을 하고 오늘도 계속 css 작업을 했다. css 작업이라고 얕볼 것이 아니라, 그저 유저에게 어떻게 보이는지가 목적일지라도 state로 관리하며 유저의 동작에 즉각 반응하도록 만들어야하기 때문에 여전히 해야할 일이 많았다.  드롭 다운먼저 일요일에 작업한 드롭 다운을 예시로 들자면 나는 드롭다운을 만들기 위해서커스텀 훅을 만들고변수들의 타입을 맞추고relative와 absolute로 html 요소의 위치를 조정해야했다. 또 드롭다운을 만드는 것이 처음이었기 때문에 여러 블로그를 살펴보며 드롭다운에 대해 공부하고 예시 코드 또한 살펴보아야 했다.  아래는 드롭다운을 위한 커스텀 훅인데, 코드 자체는 예시 코드를 따왔다지만 타입을 지정하는 것이 정말 어려웠다. RefObj..

til 2024.11.04

최종 프로젝트 11일 차 @zustand, tailwind 설정

오늘은 어제 완성한 기능들을 zustand를 이용하여  헤더에 올리고 css작업을 시작했다. 또한 font와 테마컬러를 설정하기 위해 tailwind.config.ts 파일을 설정했다.  zustand오늘 zustand를 하면서 next.js 과정에 들어오고 나서 처음으로 간단한 zustand 설정을 해보았다. 전에 zustand를 간단하게도 사용할 수 있다는 얘기를 듣기는 했는데, 정말 엄청 간단해서 놀랐다. 아래의 첫번째가 간단한 zustand가 두번째가 어제 만진 복잡한 zustand이다. 이 둘의 차이가 무엇인지, 또 복잡한 설정에서의 이점이 구체적으로 무엇인지(이점이 명확하지 않으면 굳이 복잡한 설정을 디폴트로 두지 않았을 테니까) 알아보아야겠다.  // 간단한 zustand 설정import {..

til 2024.11.01

최종 프로젝트 10일 차 @헤더 필터(시청중/모집중), zustand

오늘은 시청중/모집중 필터 구현과 필터와 검색 기능을 헤더로 옮기는 작업을 하였다.  페이지네이션과 데이터 요청필터나 정렬, 검색, 페이지네이션 같은 기능들은 하나하나 놓고 본다면 별 것 아니지만, 이번 프로젝트와 같이 데이터베이스 구조가 복잡할 때에는 이런 기능들을 합치는 것이 가장 큰 이슈 중 하나인 것 같다.  이전의 정렬, 필터, 검색 기능들도 supabase 메서드에 대해 조사하고 잘 활용해야만 페이지네이션과 결합할 수 있었는데 데이터 요청/응답 이슈로 인해 이번에 기어코 시청중/모집중 필터 기능을 구현하는 데에 실패했다. 정확히는 필터 기능 구현 자체는 쉽게 성공했으나 이를 페이지네이션과 결합하는 것이 불가능했다. 이 글의 가장 하단에 노력했지만 실패한 코드가 남아있다.  문제의 핵심은 '시청..

til 2024.10.31

최종 프로젝트 9일 차 @메인 페이지 정렬/필터, 페이지네이션, 검색 + 모달 창 조정

오늘은 어제 붙잡고 있던 것들을 마무리 했고, 내일 남은 헤더 기능만 구현하면 나의 기능 구현은 끝이 난다. 페이지 2개를 구현하려니 너무 힘이 드는데, 그래도 그 어느 때보다도 배우는 게 많았다는 점이 위안이 된다.  먼저 메인 페이지 기능들을 짚어보자면정렬 / 필터정렬은 supabase order를 통해, 필터는 supabase textSearch를 통해 구현했다.  이 중 정렬의 인기순 기능은 어제 붙잡고 한참을 고민하던 것이었다. 문제의 원인은 인기순 정렬을 위한 count값이 배열로 들어오는 것을 곧장 order로 정렬할 수 없었기 때문에 sql editer를 사용해야 했다는 것이다. 하지만 sql에서 사용되는 언어는 내가 모르는 영역이기 때문에 한정된 프로젝트 시간 내에 할 수 있을 지 장담할..

til 2024.10.30

최종 프로젝트 8일 차 @메인 페이지 정렬/필터, 모달 창 조정

오늘은 메인 페이지 정렬/필터(페이지네이션 전제)과 모달 창 조정을 하면서 시간을 보냈다.  메인 페이지 정렬/필터먼저 메인 페이지 정렬/필터에 대해서 이야기하자면, 페이지네이션과 정렬/필터 기능을 조합하기 위해서는 supabase에 데이터를 요청할 때 정렬/필터가 되어야 한다. 우리 프로젝트의 경우 최신순/인기순 정렬과 채널 별 필터 기능을 가지고 있는데, 이러한 정렬/필터 기능을 구현하기 위해서 supabase에 다음과 같은 요청을 보냈다. const response: PostgrestSingleResponse = await browserClient .from('party_info') .select( 'party_id,party_name,party_detail..

til 2024.10.29

최종 프로젝트 7일 차 @이미지 업로드, API 이중 불러오기, ui 재구성, 종료 기능 조정, 배포 전 build 오류

오늘은 정말 많은 일이 있었다. 어제 이미지 업로드를 했고, 제목에 있는 나머지를 오늘 다 했다. 정말 머리가 터지는 줄 알았는데, 이전 작업들을 잘 기억해두고 있어서 이러한 수정 작업들이 그래도 순조롭게 이루어진 것 같다.  이미지 업로드먼저 이미지 업로드를 짚고 넘어가자면 간단하게 input 창 2개만 띄워놓았던 초대하기(이미지, 닉네임)를 파일 업로드 방식으로 바꾸는 작업이었다. 이건 마이페이지 편집하기 기능을 작업하신 분이 이미 해놓은 코드가 있어서 그 코드를 분석해서 변형하는 과정을 통해 구현할 수 있었다.  그 분과 내 코드에서 다른 점이 있다면, 그 분은 기존의 데이터를 수정(update)하는 과정에서 이미지를 업로드하고, 나는 새 파티 프로필을 등록(insert)하는 과정에서 이미지를 업로..

til 2024.10.28

최종 프로젝트 6일 차 @ 데이터 연결, supabase, 리더 권한, API

오늘은 어제보다 더 정신없는 하루를 보냈다. 핵심이 되는 party_info 테이블을 삽입하는 로직이 어느 정도 완성되었기 때문에 이 데이터를 기반으로 여태껏 만들어둔 로직을 테스트하려니, supabase 세팅 관련으로 문제가 있다는 것을 깨달았다.  문제라고 해도 어떤 오류가 있었던 것은 아니고, 서버 컴포넌트와 클라이언트 컴포넌트에서 사용하는 supabase 세팅이 다르다는 것을 기존에 고려하지 못했던 것이었다. 이 점을 고려한다면 서버 컴포넌트와 클라이언트 컴포넌트에서 다 사용되는 로직들은 각각의 세팅을 기준으로 1개씩, 총 2개를 작성해야한다.  이렇게 서버 컴포넌트와 클라이언트 컴포넌트에서 모두 사용되는 로직으로는 대표적으로 getLoginUserId함수가 있고 이 함수를 총 2개 만들어서 공유..

til 2024.10.25

최종 프로젝트 5일 차 @ 재생 바, 파티 상태 처리 기능 구현

오늘은 하루종일 기능 구현에 매달렸다. 오늘 구현한 기능은 재생 바와 파티 상태 처리 기능인데, 후자는 제대로 테스트를 할 수 없으니 당장에는 간단하게 넘어갔으나, 전자는 생각보다 까다로워서 시간을 많이 잡아먹었다.  어려웠던 것재생 바를 구현하는 데에 생각할 점은 현재시각을 불러온다고 해도 자정00:00을 넘으면 현재 시각이 초기화된다는 것이다. 때문에 나는 오전 8시를 기준으로 삼아서 if(현재시간이 오전 8시 이전이고 && 시작시간이 오전 8시 이전이 아닌 경우)에 현재 시각에 24시간을 더하기로 했다.  아래가 현재시각을 반환하는 함수이다. const getPlayTime = (startPlayTime: number) => { // 현재 시각 const nowTimeArr = [new Date..

til 2024.10.24