전체 글
-
상관 서브쿼리 (Correlated Subquery)란? 종류들데이터베이스 2024. 10. 22. 11:51
메인 쿼리의 결과 개수만큼 서브 쿼리가 실행되는 경우는 **상관 서브쿼리(Correlated Subquery)**일 때 주로 발생합니다. 상관 서브쿼리는 메인 쿼리의 각 행에 대해 서브쿼리가 반복적으로 실행되는 구조를 가지므로, 메인 쿼리의 결과가 많아질수록 서브쿼리 실행 횟수도 그만큼 늘어납니다. 1. 상관 서브쿼리 (Correlated Subquery)상관 서브쿼리는 메인 쿼리의 각 행에 의존해서 값을 계산하는 쿼리입니다. 예를 들어, 아래와 같은 쿼리가 있습니다: SELECT a.id, (SELECT COUNT(*) FROM orders o WHERE o.user_id = a.id) AS order_countFROM users a; 이 경우 users 테이블의 각 행마다 orders ..
-
Rows Removed by Join Filter ??란 무엇인가?데이터베이스/postgresql 2024. 10. 21. 16:30
PostgreSQL의 EXPLAIN ANALYZE 결과에서 조인 과정 중 필터링된 레코드 수를 나타내는 항목입니다. 이는 조인 필터가 어떤 역할을 하는지를 보여주는 부분으로, 조인을 수행할 때 특정 조건을 만족하지 않아 제외된 레코드들의 수를 의미합니다.1. Join Filter란?Join Filter는 조인할 때 조인 조건 외에 추가적으로 필터링을 적용하는 조건을 의미합니다. 조인 시 두 테이블에서 조인 조건을 만족하는지 여부를 평가한 뒤, 그 조건 외의 추가 조건에 따라 데이터를 더 걸러낼 수 있습니다.조인 조건: 테이블 간의 관계를 설정하는 기본 조건입니다. 예를 들어 ON a.id = b.a_id는 두 테이블을 연결하는 조인 조건입니다.조인 필터: 조인 후에 추가로 레코드를 걸러내는 조건입니다. ..
-
NL조인시 드라이빙테이블 100개 드리븐 1000개, 드라이빙테이블1000개 드리븐 100개가 성능 차이가 나는이유데이터베이스 2024. 10. 21. 16:16
겉으로 보기에는 두 경우 모두 비교 연산이 같은 수(100,000번)처럼 보이지만, 실제로는 성능 차이가 발생할 수 있습니다. 그 이유는 드라이빙 테이블이 먼저 읽힌 이후, 드리븐 테이블에서 데이터를 검색하는 방식과 그 과정에서의 인덱스 사용 여부에 있기 때문입니다. 이를 좀 더 자세히 설명해볼게요.1. Nested Loop Join의 실행 방식드라이빙 테이블: 조인 시 먼저 읽히는 테이블로, 바깥쪽 루프의 역할을 합니다.드리븐 테이블: 드라이빙 테이블의 각 레코드에 대해 조회를 수행하는 테이블로, 안쪽 루프에서 사용됩니다.2. 두 경우의 차이점두 가지 케이스를 다시 살펴볼게요:케이스 1: 드라이빙 테이블이 100개, 드리븐 테이블이 1,000개인 경우.드라이빙 테이블에서 100개의 레코드를 순차적으로 ..
-
mysql 에서 for update를 통해 lock을 걸경우와 postgres에서 걸경우 같을까?데이터베이스/postgresql 2024. 10. 18. 10:03
*MySQL (특히 InnoDB)**와 PostgreSQL는 행 잠금과 쓰기 락 처리 방식에서 차이가 있습니다. MySQL과 PostgreSQL은 모두 **MVCC (Multi-Version Concurrency Control)**를 사용하여 데이터의 일관성을 유지하면서 동시성을 처리하지만, 행 잠금(ROW-level locking) 방식에 차이가 있습니다.MySQL (InnoDB)에서의 행 잠금InnoDB는 인덱스를 사용한 쿼리에 대해 인덱스 기반의 잠금을 사용합니다. 즉, 특정 인덱스를 통해 WHERE 절에 의해 필터링된 모든 행에 잠금이 걸리며, 이 잠금은 다음과 같은 특성을 가집니다:인덱스 기반 락: InnoDB는 인덱스를 사용하는 쿼리에 대해 잠금을 걸기 때문에, 해당 인덱스를 사용하는 범위 내..
-
aws 보안그룹설정할떄 인바운드 규칙에 사용자 지정을 클릭하고 보안그룹을 넣는이유클라우드/aws 2024. 10. 16. 17:40
AWS 보안 그룹에서 인바운드 규칙을 설정할 때, 사용자 지정 옵션을 클릭하고 다른 보안 그룹을 지정하는 것은 특정 보안 그룹에 속한 인스턴스나 리소스로부터만 접속을 허용하겠다는 의미입니다. 이는 주로 AWS 네트워크 내에서의 접근을 제어할 때 사용되며, 보안 그룹 간의 트래픽 허용을 설정할 수 있습니다.자세한 설명:보안 그룹(Security Group):보안 그룹은 AWS에서 가상 방화벽 역할을 하며, 인스턴스(예: EC2, RDS 등)로 들어오거나 나가는 트래픽을 제어합니다.인바운드 규칙: 인스턴스로 들어오는 트래픽을 제어.아웃바운드 규칙: 인스턴스에서 나가는 트래픽을 제어.사용자 지정을 클릭하고 보안 그룹을 넣는 경우:인바운드 규칙에서 **"사용자 지정(Custom)"**을 선택하고 특정 보안 그룹..
-
CloudFront를 통한 HTTPS 통신 과정클라우드/aws 2024. 10. 16. 16:38
CloudFront를 통한 HTTPS 통신 과정:1. CloudFront 구성 요소:클라이언트: 웹 페이지에 접속하는 사용자의 브라우저 또는 애플리케이션.CloudFront Distribution: CloudFront에서 설정한 배포(Distribution)로, 도메인 이름에 따라 클라이언트의 요청을 처리하고, 캐시된 콘텐츠를 전달하거나 원본 서버로 요청을 전달함.원본 서버(Origin Server): S3 버킷, EC2 인스턴스, ALB, 또는 사용자 정의 서버 등 클라이언트에게 실제 웹 콘텐츠를 제공하는 서버.SSL/TLS 인증서: CloudFront에 적용된 인증서로, HTTPS 연결을 통해 클라이언트와 CloudFront 간의 통신을 암호화하는 데 사용.2. HTTPS를 사용한 CloudFront..
-
Bastion Host란? aws public ec2 -> private ec2로 터널링클라우드/aws 2024. 10. 16. 16:10
**Bastion Host(배스천 호스트)**는 프라이빗 네트워크에 위치한 리소스(예: 서버, 데이터베이스)에 접근하기 위한 중간 지점 역할을 하는 보안 강화된 서버입니다. 일반적으로, 외부의 관리자가 내부 네트워크에 있는 서버에 접근할 때, 직접 접속하지 않고 Bastion Host를 통해 접근하는 방식으로 보안성을 높입니다.Bastion Host의 주요 개념:역할:Bastion Host는 외부 인터넷과 프라이빗 네트워크 사이의 게이트웨이 역할을 합니다. 외부에서 프라이빗 서브넷의 리소스에 직접 접근하는 것을 막고, 대신 Bastion Host를 통해 간접적으로 접근하게 합니다.관리자가 원격으로 SSH(리눅스) 또는 RDP(윈도우)를 통해 Bastion Host에 접속한 다음, 거기서 다시 프라이빗 서..
-