본문 바로가기

반응형

전체 글

[SQLD] 2과목 정리 - SQL 최적화의 원리 옵티마이저와 실행 계획 옵티마이저 SQL을 작성하여 실행할 때 SQL을 어떻게 실행할 것인지를 계획 실행계획을 수립하고 SQL 실행하는 DBMS의 소프트웨어 SQL의 성능에 중요한 역할 옵티마이저 특징 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해 예상 비용 산정 여러 개의 실행 계획 중 최저비용을 가지고 있는 계획을 선택해 SQL을 실행 옵티마이저의 필요성 두 개의 크기가 다른 테이블 A, B 에서(A > B) 동일한 행을 조회 하는 차는 연산이 있을 때 A 테이블의 행을 먼저 읽고 B테이블에 동일한 행을 찾게될 때 보다 B 테이블의 행을 먼저 읽고 A테이블에 동일한 행을 찾으면 결과는 동일하지만 불필요한 비교 횟수를 줄일 수 있게 된다. 이 때 옵티마이저가 비효율적인 실행 계.. 더보기
[SQLD] 1과목 정리 - 데이터 모델과 성능 정규화 데이터의 일관성, 최소한의 중복, 최대한의 유연성을 위한 방법으로 데이터를 분해하는 과정 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법 테이블을 분해해 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다. 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화할 수 있다. 제1 정규화부터 제5 정규화까지 있지만 실질적으로 제3 정규화까지만 수행 * 이상 현상 - 정규화를 수행하지 않아 입력, 수정 등에 문제가 발생하는 상황 정규화 절차 제1정규화 속성의 원자성을 확보, 기본키를 설정 함수적 종속성을 통해 기본키를 도출, X가 Y를 함수적으로 종속하고있고 X가 변경될 때 Y도 변경되면 X가 기본키가 된다. 제2정규화 기본키가 2개 이상의 속성으로 이루어진 경우 부분함수종.. 더보기
[SQLD] 1과목 정리 - 데이터 모델링 데이터 모델링 현실 세계를 DB로 표현하기 위해 추상화 데이터 모델링을 하기 위해 고객과의 의사소통을 통해 고객의 업무 프로세스를 이해 필요 고객의 업무 프로세스를 이해한 후 데이터 모델링 표기법을 사용해 모델링 고객이 쉽게 이해할 수 있도록 복잡하지 않게 모델링 고객의 업무 프로세스를 추상화하고, 소프트웨어를 분석.설계하며 점점 상세 고객의 비즈니스 프로세스를 이해하고 비즈니스 프로세스의 규칙을 정의 -> 정의된 비즈니스 규칙을 데이터 모델로 표현 데이터 모델링의 특징 추상화 - 현실 세계를 간략하게 표현, 공통적인 특징을 찾고 간략하게 표현 단순화 - 복잡한 문제를 피하고 이해하기 쉽게 표현 명확화 - 의미적 해석이 모호하지 않고 한 가지 의미만 가지며 명확한 해석 필요 데이터 모델링 단계 개념적 모.. 더보기
[클린 아키텍처] 설계 원칙 SOLID SOLID - 좋은 소프트웨어를 위한 좋은 아키텍처를 정의하는 원칙 - 함수와 데이터 구조를 클래스로 배치하는 방법, 이 클래스들 서로 결합하는 방법 - 변경에 유연하고 이해하기가 쉬워진다. - 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SRP - 단일 책임 원칙 - 하나의 모듈은 하나의 엑터에 대해서만 책임져야하는 원칙 - SRP 원칙에 위반되면 한 가지 기능을 서로 다른 엑터들이 사용(의존) 하고 있을 때 해당 함수가 하나의 엑터의 요구에 따라 변경되면 나머지 엑터들은 원치않는 변경으로 인해 오류가 발생할 수 있다 - 또 각각의 엑터에서 한 기능에 의존 시 동시 수정으로 인해 병합 시 충돌 발생이 생길 수 있다. -> 각각의 엑터가 각각의 기능으로 의존할 수 있게 분리 필요 -.. 더보기
[클린 아키텍처] 프로그래밍 패러다임 패러다임 - 패러다임이란 프로그래밍을 하는 방법 - 어떤 프로그래밍 구조를 사용할지, 언제 이 구조를 사용해야하는지를 결정 - 언어에 독립적 - 구조적, 객체 지향, 함수형 프로그래밍 세 종류가 있다. 구조적 프로그래밍 - 초기 프로그래밍은 많은 세부상들을 검증을 하기 위해 작은 단위로 분해하려했다. - 하지만 goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는것을 발견 - 그 중 if, then, else, do, while 과 같은 분기와 반복 제어문은 검증가능한 단위로 재귀적으로 세분화 - 즉 거대한 기획에 대해 고수준의 기능들로 분해하고 다시 각 기능을 저수준의 함수들로 분해할 수 있게 되었다. - 또한 세분화된 기능들의 테스트가 용이해졌다. 객체 지향 프.. 더보기
[클린 아키텍처] 아키텍처와 설계 아키텍처와 설계 둘 사이에는 차이가 없다고 볼 수 있다. 아키텍처가 조금 더 거시적인 관점, 설계는 미시적인 관점 아키텍처 - 저수준의 세부사항과는 분리된 고수준의 무언가를 가르킬 때 사용 설계 - 저수준의 구조 또는 결정사항 등을 의미 소프트웨어에서 설계 - 저수준의 세부사항과 고수준의 구조는 모두 소프트웨어의 전체 설계의 구성요소 - 필요한 시스템을 만들고 유지보수하는데 투입되는 인력 최소화를 목표 - 비용이 낮고 시스템 수명이 다할 때까지 낮게 유지할 수 있다면 좋은 설계 - 새로운 기능이 출시할 때마다 비용이 증가하면 나쁜 설계 소프트웨어 시스템의 두 가지 가치 행위 - 이해관계자의 기능 명세서나 요구사항 문서를 구체화 하도록 코드를 작성 - 이를 위해 이해관계자는 프로그래머를 고용 - 기능이 있.. 더보기
[K8S] 쿠버네티스 기본 개념 - 쿠버네티스와 컨테이너 오케스트레이션 쿠버네티스 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고 확장 가능한 오픈소스 컨테이너 오케스트레이션 플랫폼이다. 구글에서 프로덕션 워크로드에 15년간 사용된 검증받은, 신뢰성을 가진 상태로 2014년 CNCF를 통해 오픈소스화 했다. 선언적 구성과 자동화를 모두 용이하게 해주고, 크고 빠르게 성장하는 생태계에 매우 유용하게 작용할 수 있다. 컨테이너란 컨테이너는 온프레미스, 클라우드 등 어떤 환경에서도 실핼될 수 있는 애플리케이션 및 같이 동작해야하는 라이브러리, 소프트웨어가 함께 패키징되어있는 실행 단위이다. 예들들면 jar 파일과 jdk 를 패키징하여 컨테이너로 만들 수 있다. 컨테이너가 동작하기 위해서는 호스트 OS 의 기능(커널) 을 활용하여 프로세스를 격리하고 CPU.. 더보기
[K8S] 쿠버네티스 기본 개념 - 쿠버네티스를 구성하는 컴포넌트 쿠버네티스의 컴포넌트 쿠버네티스는 기본적으로 배포가되면 클러스터를 가지게 된다. 클러스터 쿠버네티스에서 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커노드와 내부 요소들을 제어하는 컨트롤 플레인이라고 하는 마스터노드로 이루어져 있다. 노드 (워커 노드) 쿠버네티스의 작업 장비로 애플리케이션의 구성요소인 파드에 컨테이너를 배치하고 실행함으로 워크로드를 구동한다. 노드는 클러스터에 따라 가상 또는 물리적 머신일 수 있다. 컨트롤 플레인에 의해 관리되며 파드를 실행하는데 필요한 서비스를 포함한다. 노드의 컴포넌트 노드의 컴포넌트는 동작중인 파드를 유지시키며 쿠버네티스의 런타임 환경을 제공하고, 모든 노드 상에서 동작한다. kubelet - 각 노드에서 실행되는 에이전트, podSpec에 따라.. 더보기

반응형