일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- class
- GIT
- 자료구조
- Queue
- game
- TypeScript
- 게임
- Bull
- MySQL
- flask
- Dinosaur
- mongoose
- typeORM
- Express
- OCR
- 공룡게임
- Python
- jest
- AWS
- Nest.js
- nestjs
- Sequelize
- react
- nodejs
- 정렬
- cookie
- JavaScript
- dfs
- MongoDB
- Today
- Total
목록TIL (128)
포시코딩
문제 https://school.programmers.co.kr/learn/courses/30/lessons/132267 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1 def solution(a, b, n): def fn(n, coke): if n < a: return coke output = n//a*b coke += output return fn(output + n%a, coke) return fn(n, 0) 다른 건 다 정답이고 테스트 12에서만 런타임 에러가 뜨는 걸 보니 시간초과인듯 한데 도무지 알 수 없어서 질문 탭에서 힌트를 참고한 ..
트랜잭션(Transaction) 트랜잭션은 여러 개의 쿼리문이 하나의 논리적인 작업으로 묶여서 수행되는 것을 말한다. 트랜잭션의 속성으로는 아래 4자리가 있다. 원자성(Atomicity) 트랜잭션의 작업이 부분적으로 실행되다가 멈추지 않고, 전체 작업이 완료되거나 아예 수행되지 않거나 둘 중 하나여야 함을 의미. 즉, 트랜잭션의 작업이 모두 성공적으로 완료되어야만 트랜잭션이 완료되었다고 볼 수 있다. 일관성(Consistency) 트랜잭션이 수행된 후에도 데이터베이스의 일관성이 유지되어야 함을 의미한다. 즉, 트랜잭션이 완료된 후에도 데이터베이스는 모순 없는 상태여야 한다는데 쉽게 설명하자면 외래키 제약 조건이 걸려있는 데이터가 삭제되면 참조중인 모든 데이터가 함께 삭제되어야 한다. 그러나 삭제되지 않..
Nest.js에서 request 요청에 대해 어떤 흐름을 갖는지 파악해보자. 내 나름대로 한글 설명도 덧붙여봤다. Incoming request 요청 들어옴 Globally bound middleware 앱 전체에서 공통으로 사용될 미들웨어가 등록되어 있는 경우, 이 단계에서 실행 Module bound middleware 해당 모듈에서만 사용될 미들웨어가 등록되어 있는 경우, 이 단계에서 실행 Global guards 앱 전체에서 사용될 가드(guard)가 등록되어 있는 경우, 이 단계에서 실행 Controller guards 해당 컨트롤러에서만 사용될 가드가 등록되어 있는 경우, 이 단계에서 실행 Route guards 해당 라우트(route)에서만 사용될 가드가 등록되어 있는 경우, 이 단계에서 실..

개요 어제 브로커에 메시지 브로커와 이벤트 브로커가 있고 각각 RabbitMQ와 Kafka가 유명하다는걸 알아봤는데 각각에 대해 더 자세히 살펴보자. RabbitMQ AMQP를 구현한 메시지 브로커. AMQP란? Advanced Message Queueing Protocol의 줄임말로 MQ의 오픈소스에 기반한 표준 프로토콜을 의미. 가끔 AMQP 프로토콜이라 부르는 곳도 있는데 AMQP의 P가 프로토콜 이므로 프로토콜 프로토콜이 되어 맞지 않다. AMQP를 구성하는 요소로는 Exchange, Queue, Binding이 있다. Exchange 생산자로부터 수신한 메시지를 큐나 다른 exchange로 분배하는 라우터 역할 수신한 메시지를 분배하기 위해 Exchange Type이라는 라우팅 알고리즘을 사용한..

메시지 큐(Message Queue) 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중 하나로 메시지 지향 미들웨어(Message Oriented Middleware: MOM)을 구현한 시스템을 의미한다. 메시지 큐의 기본적인 원리를 설명하면 다음과 같다. Producer(생산자)가 Message를 Queue에 넣는다. Consumer가 Message를 가져와 처리한다. 메시지 큐를 활용하면 비동기, 낮은 결합도, 확장성, 탄력성, 보장성 등의 이점을 누릴 수 있다. 자세한 내용은 블로그 참고 이러한 이점이 있는 메시지 큐를 활용할 수 있는 시스템을 브로커라고 한다. 메시지 지향 미들웨어(MOM) 분산 시스템 간 메시지를 주고받는 기능을 지원하는 소프트웨어나 하드웨어 인프라를 의미한..
개요 useState, useRef, redux의 state에 대해 정리해보자 비교 useState useRef redux의 state 사용 방법 컴포넌트 내부에서 사용 컴포넌트 내부에서 사용 전역적으로 사용 값을 업데이트 할 때 리렌더링 발생 리렌더링 발생하지 않음 상태를 업데이트하면 즉시 반영 영향 범위 해당 컴포넌트와 자식 컴포넌트 해당 컴포넌트 내부 여러 컴포넌트 간 공유 주로 사용되는 경우 컴포넌트 내부의 로컬 상태 관리 DOM 요소에 대한 접근 및 값 보관 전역 상태 관리 및 상태 업데이트 프로젝트에서 각각 어떻게 사용되었나도 알아보자 useState input value 값 모임 목록 useRef page 검색 키워드 데이터들의 필터 값 (모임 목록에 대해 '내가 참여한 모임', '내가 만..

FCM과 Firebase FCM: Firebase Cloud Messaging 이란 뜻으로 구글의 클라우드 메시징 서비스이다. 여기서 Firebase란? Firebase: 구글에서 제공하는 모바일 앱 개발 플랫폼으로 간편하고 빠르게 개발할 수 있게 다양한 기능을 제공하는 백엔드 서비스 플랫폼이라고 한다. 앱 뿐만 아니라 웹 서비스까지 가능하다고 함. 사용되는 언어는 주로 JavaScript라고 하니 나중에 한 번 써봐야 겠다. 다시 돌아가서 그럼 FCM은 뭐냐. Firebase에서 제공하는 메시징 서비스이다. 옛날에는 GCM(Google Cloud Messaging)이었는데 Firebase를 구글이 인수하면서 바뀌었다고 한다. FCM은 Firebase를 통해 다양한 기기와 플랫폼으로 메시지를 보낼 수 있..

개요 readme.md를 작성하다보면 너무 길어져 고민이 될 때가 있다. 우리 팀프로젝트에서도 readme 작성중 너무 내용이 길어져 토글 사용 가능 여부를 봤는데 한번도 써본적이 없었는데 다행히 가능한걸로 파악됐다. 쓰는 법은 아래와 같다. 사용방법 첫번째토글 두번째토글 details 태그 안에서 summary로 토글 제목을 정할 수 있다. 기본적으로 html의 동작과 같기에 예시 코드와 같이 태그 등을 추가로 사용할 수 있다. 그 후 주석처리한 내용 부분부터는 HTML 문법을 사용하면 된다. 사용할 때 첫번째토글 1 2 이렇게 또는 첫번째토글 1 2 이런식으로 markdown="1"을 적어주는 예시가 많은데 안써줘도 잘 되는 것 같아 찾아보면 다음과 같이 설명하고 있다. 그니까 딱 말해서 markdo..

개요 남의 깃허브 프로젝트를 보다 보면 이런 기술 스택을 나타낸 뱃지들을 본 적이 있을 것이다. 깔끔하고 이뻐서 남이 만들어놓은 걸 검색해 가져다 쓰곤 했는데 Nest.js 뱃지를 만들어 놓은 사람들이 없어 내가 만드는 법을 찾다보니 방법만 알면 누구든지 원하는대로 만들 수 있을 것 같아 그 방법을 공유하고자 포스팅한다. 방법 기본적으로 위의 틀을 기반으로 만들어진다. 추가로 개요에서 살펴본 뱃지에 추가로 버전 등을 같이 나타내고 싶다면 shields.io 공식 사이트에서 사용 방법을 살펴보길 바란다. 이 포스팅에서는 개요에 나온 매우 심플한 배지를 만드는 방법만 소개할 예정임 심플하게 뱃지이름, 뱃지색깔 부분만 지정해주면 끝이다. 로고이름에는 뱃지이름과 똑같이 넣어주면 된다. 자 이제 뭘 어떻게 넣어야..

개요 async getMeetups(page: number, keyword: string): Promise { const pageLimit = this.configService.get('MEETUPS_PAGE_LIMIT') || 9; return await this.createQueryBuilder('m') .select([ 'm.id', // ...생략 'm.createdAt', 'j', ]) .leftJoin('m.joins', 'j') .leftJoin('m.user', 'u') .where('m.title LIKE :keyword OR m.content LIKE :keyword', { keyword: `%${keyword}%`, }) .orderBy('m.id', 'DESC') .take(page..