전체 210

Debounce로 중복호출 막기 (useCallback 사용해 함수재생성 방지까지)

Debounce 도입 배경 아래 화면은 루빗 앱에서 진행되는 회원가입의 최종 화면이다. - "이대로 시작할래" 버튼을 누를 때 회원가입 API 호출이 일어난다. - API 호출 결과, DB에 User가 하나 생성된다. - 이 때 "이대로 시작할래" 버튼을 여러번 누른다면? User가 여러개 생성된다. - 그렇다면 User가 여러개 생성되는 것을 방지해야한다. - 방지하기 위해 버튼을 누르는 순간 loading state를 true로 만들어 해당 버튼을 비활성화 시킨다. 위 조건을 코드로 구현하면 아래와 같다. const [totalSignupLoading, setTotalSignupLoading] = useState(false); /** 회원가입 */ const signup = () => { setTot..

구글 플레이스토어 주문 ID 해석하기 (.. 뒤에 붙은 숫자의 비밀!)

구글 플레이스토어 구독상품을 유저가 구독하면 GPA.1111-1111-1111-11111 이런식으로 주문 ID가 생긴다. 22.02.15에 처음 구독하고 그 다음에는 갱신을 한다고 해보자. 그러면 주문ID는 매번 새롭게 생성될까? 아니다. 자세히 살펴보니 일련의 규칙이 있었다. 위 케이스를 보면, 동일한 주문ID 뒤에 붙는 숫자만 1씩 늘어나는 것을 볼 수 있다. 사진에는 나와있지 않지만, 최초 구독은 GPA.1111-1111-1111-11111 만 붙고, 1회차 갱신은 GPA.1111-1111-1111-11111..0 이 된다. 따라서, GPA.1111-1111-1111-11111..10 을 해석하면 이건 11회차 갱신이 되는 것이다! 총 12번을 결제한 유저인 것이다. (고마운 유저분이다!) 이렇게 ..

암호 입력 없이 git push 하기

이미 깃헙에 ssh 올려져 있는데도, 로컬 터미널에서는 git push 시 암호 입력해야하는 경우가 있다. 그런 경우에는, 로컬 ssh-agent에 암호가 등록되어있지 않은 경우다.ssh-agent: SSH 키를 관리하고 키를 사용할 때마다 암호를 입력하지 않도록 도와주는 프로그램. eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_rsa이렇게 하면 등록 완료! 이제 로컬에서 git push 마다 암호를 입력하지 않아도 된다.

dayjs.tz() 사용 시 주의할 점: timezone 등록 (Android Hermes)

react native에서 날짜 관련 코드를 다룰 때, dayjs 라이브러리를 사용하고 있다. 등록되지 않은 timezone 한국 시간으로 고정시켜주고 싶어서 다음 코드를 사용했는데, import dayjs from 'dayjs'; import DayJSUtc from 'dayjs/plugin/utc'; import DayJSTimezone from 'dayjs/plugin/timezone'; dayjs.extend(DayJSUtc); dayjs.extend(DayJSTimezone); const time = dayjs.tz("2023-02-17 09:00:00", "Asia/Seoul"); RangeError: com.facebook.hermes.intl.JSRangeErrorException: Inv..

🎨아스키 아트를 아시나요? :: 텍스트와 특수문자만으로 사진,그림 흉내내기

아스키 아트 : 텍스트와 특수문자만을 조합하여 사진,그림,텍스트를 흉내내는 것을 말한다. : 이모티콘도 문자로 그림을 표현하는 점에서 아스키 아트의 일종이다. ex) -__- , :) 알아두면 재밌는 아스키 아트! 적절한 곳에 이용해보자.. 우리 회사에서 일하셨던 서버 개발자님은 로컬 서버를 켤 때 이 아스키 아트를 이용하셨다. 서버 켤 때마다 괜히 기분 좋음~😁😁 그렇다면 어떻게 만들까? 아래 사이트에서 다양한 폰트로 만나볼 수 있다. 아스키 아트 생성기 사이트👇 https://textkool.com/ko/test-ascii-art-generator?text=Your%20text%20here%20 Test ~330 fonts Ascii 아트 생성기 | TextKool 복사 및 붙여 넣기 Ascii 아트..

Github Action 오류 해결 : InvalidParameterValue

첫번째 InvalidParameterValue 오류 An error occurred (InvalidParameterValue) when calling the UpdateEnvironment operation: Environment named xxx is in an invalid state for this operation. Must be Ready. 환경 상태가 ok가 아닌 다른 상태면 github action 도중 오류가 나는 것 같다. 사진처럼 ok 상태일 때 배포를 다시 진행해보자! 두번째 InvalidParameterValue 오류 An error occurred (InvalidParameterValue) when calling the UpdateEnvironment operation: No Ap..

에러해결: PayloadTooLargeError: request entity too large

AWS 로그를 뜯어보던 중... 다음 에러를 발견했다. PayloadTooLargeError: request entity too large 그대로 구글링하니 해결법은 쉬웠다. 파싱하려는 데이터의 크기가 너무 크기 때문에 생기는 에러이며, 파싱할 수 있는 최대치를 늘려주면 해결된다. 기본은 100kb인데, 50mb까지 늘려주었다. import { urlencoded, json } from 'body-parser'; app.use(json({ limit: '50mb' })); app.use(urlencoded({ limit: '50mb', extended: true })); body-parser란? - 요청의 본문을 해석해주는 미들웨어다. - post, put 요청 메소드의 request.body를 읽어올 ..

[ReactNative] KeyboardAvoidingView 안에 여러 TextInput을 사용할 때 offset 맞지 않는 문제 해결

[ReactNative] KeyboardAvoidingView 안에 여러 TextInput을 사용할 때 offset 맞지 않는 문제 해결 하나의 KeyboardAvoidingView 안에서 여러 TextInput을 사용하면 keyboardVerticalOffset이 첫 TextInput에 맞춰 세팅되어, 키보드 높이가 다른 TextInput을 만나게 되면 KeyboardAvoidingView 본래의 목적을 충족시키지 못하는 현상이 발생한다. 코드는 이렇고, {isStep1 && ( )} {isStep2 && ( )} {isStep3 && ( )} 현상은 이렇다. 분명 공식문서 에는

RDBMS와 NoSQL의 차이점

RDBMS 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 관리해주는 소프트웨어 R: Relational - 관계형 데이터 모델을 기초로 두고, 모든 데이터를 2차원 테이블 형태로 표현한다. 장점: 명확한 데이터 구조 보장 단점: 복잡한 쿼리, Scale-up으로만 가능한 성능향상, 유연하지 못한 스키마 NoSQL RDBMS와는 달리 테이블 간 관계를 정의하지 않는다. 단 하나의 데이터 테이블만 있어, Join의 개념도 없다. 장점: 자유로운 데이터 구조, 데이터 분산 용이, Scale-up 뿐만 아니라 Scale-out도 가능 단점: 데이터 중복이 발생할 수 있음, 데이터 구조 결정이 어려움 종류 Key-Value Database key와 value의 쌍으로 저장된다. 값에는 어떠..

Study/Backend 2023.01.27
출처: https://mingos-habitat.tistory.com/34 [밍고의서식지:티스토리]