본문 바로가기

전체 글

(130)
SQL 작성법과 실행순서 문법 순서 SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY->LIMIT 실행 순서FROM - > ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT FROM : 조회 테이블 확인ON : 조인 조건 확인JOIN : 테이블 조인 (병합)WHERE : 데이터 추출 조건 확인GROUP BY : 특정 컬럼 그룹화HAVING : 그룹화 이후 데이터 추출 조건SELECT : 데이터 추출DISTINCT : 중복 제거ORDER BY : 데이터 순서 정렬   + Spring boot QueryDSL 사용법
DB 쿼리 최신순 1건 조회하기 단건 조회 1. limit 이용하기SELECT *FROM document_statusWHERE doc_uid = {document_uid}ORDER BY docsta_created_at DESCLIMIT 1;2. distinct 이용하기SELECT DISTINCT ON (doc_uid) *FROM document_statusWHERE doc_uid = {document_uid}ORDER BY doc_uid DESC, docsta_created_at DESC; 1번째 방법이 더 빠름. 2번째 방법의 order by에는 disctinct에 들어가는 컬럼이 포함되어야 함. SQLAlchemy 더보기 stmt = ( select(DocumentStatus) ..
FastAPI sqlalchemy DB 쿼리 생성법 1. execute, scalars, scalar 차이session.execute(stmt) -> Result 객체 반환join이나 insert, update 하는 경우 session.execute(stmt).all()table명을 지정하여 여러개 row select 하는 경우 (튜플 형태)ex.  [Row(1, 'John'), Row(2, 'Alice')]  session.execute(stmt).first()table명을 지정하여 1개 row select 하는 경우 session.scalars(stmt).all()첫 번째 컬럼 값만 추출한 스칼라 값 리스트 반환 (스칼라 값 리스트)ex. [1, 2, 3] - 단일 컬럼[, ] - ORM 객체  session.scalars(stmt).first()1개..
Authentication, Authorization, Unauthorized(401), Forbidden(403) Authentication, Authorization 차이  Authentication (인증): 본인이 누구인지 확인하는 과정예: 로그인 (아이디/비밀번호 입력, OAuth 인증 등)실패하면 401 UnauthorizedAuthorization (인가): 인증된 사용자가 특정 리소스에 접근할 권한이 있는지 확인하는 과정예: 권한 체크 실패하면 403 Forbidden  Unauthorized, Forbidden 차이401 Unauthorized: 인증되지 않음 (로그인 필요)사용자가 로그인을 안 했거나, 토큰이 유효하지 않을 때 발생예: 로그인하지 않은 상태에서 API 요청403 Forbidden: 인가되지 않음 (권한 없음)사용자가 로그인은 했지만 해당 리소스에 대한 접근 권한이 없을 때 발생예: 일..
특정 port 사용 중인 PID 찾기 # netstat -tulpn | grep :{port}
Kubernetes 기본 개념 정리 + Istio Kubernetes컨테이너를 조화롭게 사용하기 위한 기술 (컨테이너 오케이스레이션) 주요 기능- Container Orchestration- Auto Scaling- Auto Healing (장애 복구)- Load Balancing- Auto Rolling Update (version up)- Persistence Volume (DB) 구성 요소Master Node• 클러스터에 관한 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 반응Worker Node• 동작 중인 컨테이너를 유지시키고 Kubernetes 런타임 환경을 제공  Kubernetes의 Object 리소스의 가장 기본적인 구성 단위, 시스템에서 영속성(running)을 가지는 객체  DeploymentPod를 배포하는 가장 기본적인 방식..
동시성 관리하기 3탄) Redis - Lettuce, Redisson DB가 스케일 아웃된 상황에서 동시성 관리하기 !동시성 관리하기 2-2탄에 이어서, 오늘은 Redis를 이용해 보겠습니다.  우선 같은 데이터 셋을 공유하는 분산 DB 상황에서는 아래 사진과 같은 상황이 벌어질 수 있습니다.여러 요청들이 한 자원에 대해서 공유할 때, 각 분산 DB의 동기화가 여러 요청의 동기화 속도를 못 따라 가는 상황이 발생합니다.이에 대해 데이터 정합성은 깨지게 되고, 데이터 동시성 문제가 발생하게 됩니다.예를 들어, 위와 같이 한 번에 여러 구매 요청이 들어왔을 경우 수량이라는 자원을 동시에 사용할 경우 여러 수량의 커밋되거나 롤백되는 수량의 동기화가 다른 서버가 따라가지 못해서 정합성이 깨지고, 동시성 문제가 발생할 수 있습니다. 이를 방지하기 위해,위 사진과 같이, 공유 자원인..
동시성 관리하기 2-2탄) Database 레벨 - User-Level Lock (Named Lock) 지난 게시글에서 살펴본 낙관적 Lock과 비관적 Lock은 분산 서버에서도 동시성을 보장했습니다. 이제 비관적 Lock과 비슷한 Named Lock에 대해 살펴보겠습니다.  User-Level Lock (Named Lock)User-Level Lock은 MySQL 데이터베이스에서 제공해주는 분산락입니다. 데이터베이스를 사용하는 사용자가 특정 문자열에 Lock을 걸 수 있는 기능이며아래와 같은 함수를 제공합니다.  지금부터 Locking Functions에 대해 알아보겠습니다. GET_LOCK(str, timeout)주어진 str(문자열)에 timeout동안 Lock 획득을 시도한다. (str의 길이는 최대 64글자)= 이미 다른 세션에서 Lock을 획득한 경우, Lock 획득을 위해 timeout만큼 ..