ComputerScience

시작에 앞서 다중화란?**💡 DB 다중화?- 단일 데이터베이스 구조로 사용할 경우 단일 데이터베이스에 문제가 발생할 경우 계속해서 서비스가 제공되지 못하며, 서버 데이터 분산을 통해 copy본을 만들어놓는 등의 작업을 위해 다중화를 사용한다.💡 다중화시 유의점- 간단히 병렬화해서 대수를 증가시키는 웹 서버나 애플리케이션 서버와 비교하면 다중화에 대해 고민해야할 부분이 많은데 그 이유는 DB 서버가 데이터를 보존하는 영속(Persistence) 계층이기에 별도의 대처가 필요. 💡 DB와 다른 서버의 차이- 데이터베이스는 데이터를 장기간 보존하는 매체가 필요하다. 이 점은 데이터를 일시적으로 처리할 뿐인 웹 / 앱 서버와 다른 점이다.- 결국 DB 서버의 아키텍처는 서버와 저장소를 묶어..
B-Tree 인덱스, 인덱스의 필요성 B-Tree 구조 일반적인 이진트리(자식 2개만을 가지) 형태 일반적으로 인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있으며, 일반적으로는 B-Tree 구조가 사용된다. 좌우 자식 간의 균형이 맞지 않을 경우에는 매우 비효율적이라, 항상 균형을 맞춘다는 의미에서 균형 트리(Balanced Tree)라고 불린다. 구조자체는 루트노드에서 부터 브랜치 노드 부터 리프노드까지 존재한다. 페이지 페이지란, 디스크와 메모리에 데이터를 쓰고 읽는 최소 작업 단위이다. 일반적인 인덱스를 포함하여 PK와 테이블등은 모두 페이지 단위로 관리된다. 따라서 만약 쿼리를 통해 1개의 레코드를 읽고 싶더라도 결국은..
최근 Redis를 사용하는 비즈니스 로직을 작성하는 과정 중 Redis의 키값으로 데이터를 찾아 해당하는 필드 값을 수정해야하는 일이 있었다. 이 과정에서 인 메모리(In-Memory) DB의 특성을 잘이해하지 못하고 로직을 작성하였다. 우선, 현재 환경은 CrudRepository를 상속 구현하여 Redis에 데이터 입출력 및 조회작업을 수행하고 있었다. 그렇기에 Id가 UUID값으로 설정되어 있어, findById()를 통해 Redis Entity를 찾은 후 변경감지를 수행하려 했으나 관계형 데이터베이스가 아니기에 변경감지를 수행할 수 없었다. 그래서 rename으로 변경하는 로직 또한 구성해봤지만, 이는 인메모리 DB의 특성을 전혀 살리지 못한 구조였다. Redis는 모든 데이터를 메모리에 저장한다..
소개 배경 최근 DB에 대해 공부하며, 힌트라는 개념이 약하다고 생각하여, 해당 개념을 정리하고자 포스팅하게 되었다. 우선 DB의 힌트 개념을 알기전 쿼리 실행 계획과, 쿼리 옵티마이저에 대한 개념을 익혀야한다. 쿼리 실행 계획(execution plan) 실행 계획은 DB에서 query를 수행할 때, 어떤 방식으로 데이터를 조회 및 처리할지 나타내는 계획하는 것이다. 이때 실행 계획은 DBMS에 의해 쿼리 옵티마이저가 최적의 방법을 선택하여, 생성한다. 쿼리 옵티마이저(query optimizer) 쿼리 옵티마이저란 쿼리를 처리하는데 있어, 가장 효율적인 방법을 선택하기 위해 여러가지 정보를 고려한다. 해당 정보에는 테이블의 크기, 인덱스의 유무, 통계 정보, 서버 자원 상황 등이 포함된다. 쿼리 옵티..
프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 하는 것이 프로그래밍 패러다임이다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다. 프로그래밍 패러다임은 분류적으로는 크게 **명령형**과 **선언형** 프로그래밍 방법이 존재하며, 선언형은 다시 함수형이라는 하위 구조를 갖고 명령형은 객체지향과 절차지향언어로 구분된다. 프로그래밍 패러다임 명령형(Imperative) : What보다 How의 관점 객체지향(Object-Oriented) : C++, Java , C#, Kotlin 절차지향(Procedural) : C, C++ 선언형(Declarative) : How 보다 What의 관점 함수형(Fu..
이터레이터 패턴 행위 패턴에 속하며 이터레이터를 사용하여 컬렉션 프레임워크에 접근하는 디자인 패턴 이터레이터 : 모든 컬렉션 프레임워크에 공통으로 사용가능하며 값의 수정 및 삭제 추가연산 등을 이용할 수 있다. 컬렉션 프레임워크 : Java에서 정의하는 List,Set,Map,Queue와 같은 자료구조 이터레이터 패턴 정의 컬렉션 구현 방법을 노출시키지 않으면서 모든 항목에 관하여 접근할 수 있게해주는 방법을 제공해주는 패턴 객체들을 배열, 스택, 해시테이블 등의 컬렉션에 넣어서 보관할 수 있다. 그런데 클라이언트가 해당 객체들에게 일일이 접근하는 작업을 원할 수 있을 경우 사용한다. 이터레이터 패턴을 사용하면 동작원리는 모른채 사용한다. 객체를 저장하는 방식은 보여주지 않으면서도 클라이언트가 객체들에게..
디자인 패턴 디자인 패턴은 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은것 표준은 아니지만 표준적인 해법과 작명법을 제시한 도서가 GoF의 이라는 책이며 현재 수 많은 디자인 패턴의 학습의 기준이 되는 책이다. GoF에서는 크게 패턴을 생성, 구조, 동작 패턴으로 정의하며 이외에도 동시성, 아키텍처,기타 패턴등으로 분리되며 동시성은 크게 동기화에 대해 다루며 아키텍처의 경우 대표적으로 MVC 모델 패턴이 존재한다. 싱글톤 패턴 싱글톤 패턴의 정의 싱글톤 패턴은 생성패턴에 속하며 하나의 클래스에 하나의 인스턴스만을 가지는 패턴이다. 하나의 클래스를 기반으로 여러개의 개별적인 인스턴스 생성이 가능하지만 하나만의 인스터를 만들어 이..
알고리즘을 풀다보면 마주할 수 있는 복잡도(Complexity)와 빅오 표기법(Big-O notation)에 대해 항상 들어왔고 중요성을 인지하고 있지만 너무 추상적인 개념이었기에 정리를 시도해보려한다. 💣복잡도란? 복잡도란 다음과 같이 정의할 수 있다. 알고리즘의 성능 및 효율성을 나타내는 척도 크게 시간복잡도(Time-Complexity)와 공간복잡도(Space-Complexity)로 나눌 수 있다. 각 알고리즘이 주어진 특정 크기의 입력(n)을 기준으로 수행시간(연산) 혹은 사용공간이 얼마나 되는지 객관적으로 비교할 수 있는 기준을 제시한다. 복잡도를 나타내는 방법으로는 점근 표기법 기준으로 O(빅오), Ω(오메가), Θ(세타) 등이 있고, 주로 빅오와 세타 표기법이 많이 사용된다. 점근 표기법 :..
LEE티씨
'ComputerScience' 카테고리의 글 목록