PostgresDB에서 SQL 작업하면서 삽질한 경험을 공유합니다🙂독자분들도 SQL작업하면서 의도대로 데이터가 나오지 않았다거나, 성능 개선, 기막힌 방법 등을 알아내신 게 있으시다면 댓글로 공유 부탁드립니다 !postgresql에서 count함수는 null값을 집계하지 않는다.- 따라서, count(*)를 사용하거나, count({not null이 보장된 필드})를 사용해야 한다.특정 enum(String)이 아닌 테이블을 조회할때는이런식으로 null값을 고려해야한다. null이 있는 테이블을 다룰때는 is null or is not null 을 생각하자. aTable.B ≠ ‘특정필드’ and aTable.B is nulljoin을 할때, on에 해당하는 조인 조건은 조인을 당하는 테이블만의 식이..
sqs에서 서버로 message가 올 순서를 보장하는 방법에 대해 설명하려고 한다. 먼저 문제의 상황을 하나 가정해보자. "글 작성"과 "글 수정" 요청이 sqs의 message로 오게되어서 처리하려고 한다.이 과정은 순차적으로 수행되어야 한다. 글 수정을 하려면 글 작성이 되지않으면 안되기 때문이다. fifo 구조의 queue라면 문제가 없지만, 순서를 보장하지 않는 standard라면 얘기가 달라진다.서버가 멈추거나 늦게 처리되는 등 모종의 이유로 인해 순서가 바뀌어서 올 수도 있으므로 동시성 처리를 해주어야한다. 이러한 기능을 구현하기 위해 고려해야할 것들을 생각해보면 다음 두가지이다. 1. 글 수정을 하기전 글이 DB에 존재하는지 확인을 해야한다. (존재하지 않는다면 의도적인 exception을 ..
Coroutine? 코루틴은 코틀린에서 제공하는 비동기 프로그래밍을 위한 도구 코루틴을 사용하면 비동기 코드를 동기 코드처럼 쉽게 작성할 수 있음 코루틴은 라이트웨이트 스레드라고 할 수 있으며, 기존 스레드에 비해 생성 비용이 낮고, 컨텍스트 스위칭 비용이 적어 성능이 우수하다. 왜냐하면 코루틴은 비동기 작업을 쉽게 시작하고, 결과를 기다리며, 중단할 수 있는 기능을 제공하기 때문. 따라서 코루틴으로 비동기 작업의 생명주기를 효과적으로 관리할 수 있다. Flow? Flow(Cold flow) 플로우는 코틀린에서 제공하는 리액티브 프로그래밍을 위한 도구. 플로우는 데이터 스트림을 표현하고, 이 스트림을 통해 데이터의 변화를 감지하고 반응할 수 있게 해줌 플로우는 cold stream이라는 특징을 가지고 있..
비즈니스 로직을 여러 서비스로 분리하는 과정에서 공통된 코드 공유를 어떻게 할 것인가? 라이브러리 자원관리 책임소재가 명확하지 않음 모든 사람이 코드에 대한 이해가 있어야한다. (추상화의 이점이 없음) 러닝타임이 길어진다 REST API 서버를 두고 호출하는 방식 통신 계층이 증가 → 지연 발생의 문제 클라이언트 코드가 각 서비스에서 독립적으로 작성된다 데이터의 버전관리가 명확하지 않다. ⇒ RPC 서버를 두고 클라이언트(stub)에서 메서드를 사용하면 위 문제들을 해결할 수 있다. gRPC? google에서 만든 RPC (메타, 트위터 등 여러 rpc가 있음) RPC? Remote Procedure call(원격 프로시저 호출)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를..
ec2 ssh 접속하는 방법(feat. 터미널) 1. .pem 파일을 $ ~/.ssh/폴더에 넣는다. $ cp {pem파일 위치}/dayone-back.pem ~/.ssh/dayone-back.pem 2. .ssh 폴더로 이동 후 .pem 파일 권한 변경 $ cd ~/.ssh $ chmod 400 dayone-back.pem 3. ssh 접속 스크립트 작성 $ vi config 다음과 같이 입력후 저장(:wq) 4. aws ec2로 접속 $ ssh dayone 접속 확인!
개요 node js 서버를 Https로 사용하기 위한 방법은 3가지가 있습니다. 아파치, nginx 등 웹서버에 ssl인증을 추가하는 방식 node js의 server.js 코드에 직접적으로 ssl인증을 하는 방식 AWS 로드밸런서를 이용하여 ssl인증하는 방식 오늘 다뤄볼 케이스는 3번입니다! AWS의 ACM과 로드밸런서를 이용하면 letsencript, nginx, certbot 등 ec2 서버에서 설치 및 세팅 과정의 비용과, 포트관리 시간적 비용을 줄일 수 있습니다. 대신 금전적 비용이 증가합니다. 프리티어 기간동안 1개의 로드밸런스는 무료로 제공되고, 프리티어 기간이 끝난 사용자의 경우 시간당 비용만 매월 18달러 정도 청구됩니다! 참고하셔서 과금되지 않도록 주의해주세요. 준비물 탄력적 ip가 ..
TimeZone time zone을 서울로 변경 $ sudo rm /etc/localtime $ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 확인 $ date Hostname hostname 변경 $ sudo hostnamectl set-hostname dayone-backend-server 변경 확인 $ hostname 입력했을 때 바꾸고자 하는 hostname이 나와야 합니다! 재부팅 및 확인! $ sudo reboot \ /etc/hosts에 hostname 등록 $ sudo vi /etc/hosts 80포트로 실행된 서비스 체크 $ curl dayone-backend-server curl: (7) Failed to connect to day..
백준 No.11401 11401_2.cpp #include using namespace std; int N, K; long long store[2][4000001]; long long result = 0; void bc(int n, int k){ if(n> N >> K; bc(N,K); for(int i = 0;i N >> K; A=1; B=1; for(int i=N;i>=N-K+1;i--) A = (A*i)%mod; for(int i=K;i>=1;i--) B = (B*i)%mod; Bp = pow(B, mod-2); cout