전체 글 72

2024.04.01 TIL #트러블슈팅 #supabase_realtime_vs_React-Query #새로고침

오늘은 두 가지의 아주....힘들었던 트러블슈팅이 있었다..ㅠㅠ Supabase의 Realtime 기능으로 실시간 채팅기능을 구현하는 중이었다. 트러블슈팅 1. react-query랑 Supabase-Realtime이 뭐가 다른데? 왜 이런 의문점이 들었냐면, 우리가 보통 react-query를 많이 애용하는 이유는 - 캐시에서 데이터를 가져오기 때문에 새로 추가된 데이터가 있을 때, 전체 데이터를 처음부터 다시 요청하지 않아도 된다는 점 => 동일한 데이터에 대해 반복적인 비동기 데이터 호출 방지, 바뀐 것만 요청 = 성능측면 Good - DB에 데이터가 추가-변경-삭제될 시, 캐시공간의 변화가 일어나면서 알아서 기존 데이터를 무효화시킨 뒤 새로운 데이터를 fetch -> re-렌더링 (invalida..

TIL 2024.04.02

2024.03.29 TIL #indexOf_vs_findIndex #문자열나누기_프로그래머스

안다고 생각했는데도 자꾸 헷갈려서 정리해보려 한다.   indexOfconst beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];console.log(beasts.indexOf('bison'));// Expected output: 1// Start from index 2console.log(beasts.indexOf('bison', 2));// Expected output: 4console.log(beasts.indexOf('giraffe'));// Expected output: -1보는 것과 같이 indexOf는 배열.indexOf(해당요소) 가 들어간다. findIndexfunction isPrime(element) { if (element % 2 === ..

TIL 2024.03.30

2024.03.28 TIL #기획회의

최종프로젝트를 시작했다.팀장을 맡게 되었는데,팀원들이 극 I이다.말을 안한다.힘들다.. 프로젝트 기획을 하는 중인데단순히 기능에 대해서만 생각할 것이 아니라사용자의 행동에 따른 여러가지 경우의 수까지 생각해야 한다는 점,그 경우에 수에 따라서 UI와 또 다른 기능까지 생각해야 한다는 점에서코드 짜는 것 보다 기획이 생각보다 어렵다고 느꼈다. - 인증을 어떻게 해야할지? 보안 상 본인인증을 하면 좋은데 본인인증 제공하는 API가 있는지? 그럼 대학생이라는 인증은 어떻게 할 것인지?학교 메일로 하게 된다면, 학교를 졸업한 20대는? 학교를 다니지 않는 20대는?  - 모두가 수락해야 채팅창으로 넘어가는데, 4:4 라서 8명 모두가 수락해야 한다면 state 관리가 너무 번거롭지 않을까?=> 방장에게만 수락 ..

TIL 2024.03.28

2024.03.22 TIL #middleware_matcher

next.js에는 middleware.ts라는 파일이 있다. 이 middleware.ts 파일은 클라이언트가 서버로 요청을 보낼 때, 중간에서 요청을 가로채서 적절한 처리를 해준 뒤 서버로 전달해주는 역할을 한다. 따라서 보통 middleware.ts 파일의 용도는 1) 전역 미들웨어: 모든 요청에 적용되는 미들웨어로, 보안, 로깅 등과 같은 전반적인 기능을 처리한다. 2) 라우트 미들웨어: 클라이언트의 특정 pathname만 protected Route에 접근할 수 있도록 한다. 3) 보안 미들웨어: 보안에 관련된 기능을 처리하는 미들웨어로, CSRF(Cross-Site-Request-Forgery) 공격방지, XSS(Cross-Site-Scripting) 방어, 헤더 보안 설정 등을 수행할 수 있다...

TIL 2024.03.22

2024.03.18 TIL #Navigate_to #CSR_metadata #every

Navigate to만으로는 렌더링되지 않아요! issue: Navigate 로 url은 바뀔 지 몰라도, 해당 경로에 대응하는 라우트가 설정되어 있지 않으면, 실제 라우팅이 되지 않아서, 렌더링이 되지 않는 오류가 있었다. -> 해당 주소에 맞는 라우트를 찾지 못하면 Nothing 렌더링 (= 해당 주소에 맞는 라우트를 찾아야 해결된다) Outlet : 해당 라우트에 매칭되는 애를 찾아서 하위 라우트들을 "렌더링"해주는 결정적인 역할! Outlet의 역할은 두 가지로 나눌 수 있다. 1. 하위 라우트 렌더링 - Outlet은 상위 라우트에 속한 하위 라우트들을 렌더링 한다. 일반적으로 사용되는 Outlet의 주된 역할 2. 경로에 따른 라우트 선택 - Outlet은 현재 경로에 맞는 하위 라우트를 선택..

TIL 2024.03.18

2024.03.13 TIL #tanstack_Query_SSR_QueryClient_Dehydration

우선 Dehydration과 prefetching을 왜 궁금하게 되었는지부터 시작해야 한다.SSG와 ISR, SSR의 공통점은 서버사이드 렌더링이다.말 그대로 서버에서 렌더링을 하는 것 즉, 서버에서 초기 HTML을 생성하여 클라이언트로 전송하는 것을 말한다.우리가 보통 Next.js에서 서버사이드 렌더링을 할 때는-> 서버컴포넌트에서 데이터를 fetch 하고-> 그 데이터로 HTML을 만든 뒤에-> 클라이언트로 전달한다.(+물론 SSG, ISR, SSR에 따라 fetch에 옵션을 다르게 준다).이 때, 초기 컴포넌트 상태는 클라이언트와 서버 간에 공유되지 않으며, 클라이언트 측에서는 새로운 인스턴스가 생성된다.그래서 룰루랄라 SSG를 만드려고 했는데, DB에서 받아온 데이터를 전역적으로 관리하기에는 t..

TIL 2024.03.14

2024.03.11 TIL #new RegExp() #Next.js_SSR_vs_CSR

# new RegExp() 란?- 문자열 패턴을 정규식 객체로 변환하는 기능왜 사용하게 됐는가? let babbling = ["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"];  let heCan = ["aya", "ye", "woo", "ma"]; 이라는 두 배열이 있을 때, babbling의 요소 중 heCan 배열의 요소로 바꾸고 싶었다.반복문을 사용하여 replace() 함수를 사용하려고 했는데, replace 함수를 사용할 때 인자가 동적으로 바뀔 때는 단순히 bab.replace(heCan[i], ""); 이렇게만 하면 안 되고, 인자를 정규식으로 바꿔줘야 한다.  bab.replace(new RegExp(heCan[i]), ""); 이렇게 정규식으로 바꿔주면 ..

TIL 2024.03.11

2024.03.06 TIL #class, type, interface #TS 쌩초보

TS의 개념에 대해서 강의도 듣고 알 건 알았다. 문제는 내가 당장에 적용을 하기에 막막한데, 가장 기초적인 막막함: 그래서, 객체를 생성할때 class, type, interface 중에 뭘 사용하라는 거지?^^ 예를 들어 Book이라는 객체를 만들고자 할 때 class, type, interface로 각각 예시를 들어보겠다. 1. class (1) 정의하기 class Book { constructor( public title: string, public author: string, ) { } } -> class로 정의할 때는 생성자를 호출해야 한다. (2) 사용하기 const book = new Book("The Great Gatsby", "F. Scott Fitzgerald"); console.lo..

TIL 2024.03.06

2024.03.05 TIL #TypeScript

enum - 간단한 상수 값에 적합 (애초에 숫자와 문자열만 취급 가능) - 열거형 데이터 타입 - 컴파일 시 자동으로 숫자로 매핑되기 때문에 따로 값을 할당할 필요가 X (단, 특정 숫자 값으로 매핑되어야 한다면 걔는 직접 할당해주면 됨) [예시] enum UserRole { ADMIN = "ADMIN", EDITOR = "EDITOR", USER = "USER", } enum UserLevel { NOT_OPERATOR, // 0 OPERATOR // 1 } function checkPermission(userRole: UserRole, userLevel: UserLevel): void { if (userLevel === UserLevel.NOT_OPERATOR) { console.log('당신은 일..

TIL 2024.03.05

2024.03.04 TIL #typeScript 기본 type 종류

>> 기본타입 1. boolean : 2가지의 상태를 표현 [예시] function isValidPassword(password: string): boolean { return password.length >= 8; } const password = "q1w2e3r4!"; const valid = isValidPassword(password); if (valid) { console.log("유효한 패스워드입니다!"); } else { console.log("유효하지 않은 패스워드입니다!"); } +) 3가지 이상의 상태를 표현할 때: enum or string 2. number - typeScript에서 숫자는 정수, 실수, 진수까지 포함 [예시] function calculateArea(radius: ..

TIL 2024.03.04