도서 19

5~6장

어플리케이션: 특정 기능이나 작업을 수행하기 위해 설계된 소프트웨어 프로그램시스템 아키텍처에서 어플리케이션은 다음과 같은 관점에서 고려되어야 한다.1. 기능성  : 어플리케이션은 특정 기능이나 작업을 수행하기 위해 설계되며, 사용자나 다른 시스템과의 인터페이스를 통해 이런 기능들을 제공할 수 있어야 한다. 2. 모듈성  : 복잡한 시스템에서는 여러 어플리케이션들이 모듈화되어 각각의 기능이나 서비스를 독립적으로 제공할 수 있어야 한다.3. 상호작용  : 시스템 내의 다른 어플리케이션 또는 컴포넌트와 상호 작용하여 데이터를 교환하거나 서비스를 제공할 수 있어야 한다.4. 성능 및 확장성  : 아키텍처는 어플리케이션의 효율성, 확장성, 안정성을 고려해 설계되어야 한다.  : 클린 아키텍처에서 어플리케이션이란 ..

1~2장

1장- 전통적인 계층형 아키텍처 구조의 문제점전통적인 계층형 아키텍처 구조: 웹, 도메인, 영속성 계층으로 이루어져 있음각 계층의 역할은 다음과 같다.1. 웹 계층 : 웹과 가장 가까운 영역(표출단 계층)2. 도메인 계층 : 비즈니스 로직을 수행하는 영역(서비스 계층)3. 영속성 계층 : 데이터베이스와 가장 가까운 계층(매퍼 계층) : 계층간의 흐름은 상위 계층에서 하위계층으로 이어지며, 반대로 이루어질 수는 없다. 계층형 아키텍처 구조의 문제 1. 계층형 아키텍처는 데이터베이스 주도 설계를 유도한다. : 계층형 아키텍처의 각 계층의 의존성은 웹에서 도메인을 도메인에서 영속성 계층을 거쳐 최종적으로 데이터베이스를 향하게 하므로써 모든 계층이 데이터베이스를 바라보게 된다. : 위와 같은 의존성을 가질 경우..

Day17. 데이터 모델링과 인덱싱- 인덱싱이란?

1. 인덱스의 사전적 의미는 색인이며, 각각의 데이터에 대한 색인이라고 생각하면 된다. 2. 인덱스의 특징 쿼리를 수행할 때, 인덱스가 없다면 모든 로우를 일일히 조회해야 한다. 인덱스는 쿼리 작업을 매우 효율적으로 만들어준다. 인덱스를 만들면 새로운 로우를 생성하거나 제거하는 작업을 빈번하게 할 때 속도의 저하가 일어날 수 있다. 매번 인덱스를 업데이트 해야하기 때문이다. 단순 인덱스를 만들면 해당 컬럼만 조회할 때 사용할 수 있고, 다수의 컬럼을 대상으로 조회할 때는 복합 인덱스가 효율적이다. 복합 인덱스는 순서가 중요하다. a-b 복합 인덱스는 a 단순 인덱스와 같은 기능을 하기 때문에 대체할 수 있다. 3. 인덱스의 구조 : 대표적인 인덱스의 구조로는 B-Tree 인덱스, 해시 인덱스, GIN 인..

Day16. 데이터 모델링과 인덱싱- 정규화와 비정규화

1. 정규화 : 정규화란 데이터의 중복성을 제거하거나 줄이기 위해 데이터를 구성하는 과정을 의미한다. : 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고, 잘 조직된 관계들로 나누는 것을 의미한다. : 정규화의 과정을 거치게 되면, 데이터의 중복이 최소화되고, 더 적은 양의 데이터로 같은 내용을 저장하게 된다. 2. 비정규화 : 정규화된 테이블들은 정보가 여러 테이블에 분산되어 있는 특징을 가지게 되는데, 이런 특징은 너무 많은 JOIN문을 사용하게 만들어 성능이 저하되게 만드는 원인이 될 수 있다. 따라서 모든 테이블을 반드시 정규화 시켜야 하는 것은 아니다. : 하지만, 비정규화 된 테이블의 경우, 데이터의 중복이 있어 쓰기 작업 시 더 불리해지는 경향이 있고, 쓰기 작업 시 잘못된 코..

Day15. 데이터 모델링과 인덱싱- 테이블 사이의 관계

1. 일대다 관계 : 하나의 게시판에는 여러 개의 게시글이 존재하고, 각각의 게시글은 하나의 게시판에 속해 있어야 한다.이와 같이 하나의 테이블이 다른 테이블에 속하는 관계를 일대다 관계라고 한다. : 일대다 관계의 경우 정보의 중복을 최소화하면서 정보를 저장할 수 있다. 이와 같이 서로간의 불필요한 정보의 중복이 없는 상태를 정규화된 상태라고 한다. : 여러 개의 테이블에 정규화된 상태로 일대다 관계를 표현할 수 있지만, 하나의 테이블에 중복된 정보를 담아 일대다 관계를 표현할 수도 있다. 1.1 여러 개의 테이블을 이용해 정규화된 상태로 일대다 관계를 표현하는 경우 : JOIN문을 이용해 읽기 성능은 하나의 테이블을 이용할 때보다 떨어지지만 정보를 수정할 때 효율성이 높고, 정보의 일관성이 깨질 가능..

Day14. 다양한 상황에서의 데이터 결합

1. 그룹화 이후 데이터 결합하기 : union_example 데이터베이스에서 모든 상품의 평균 평점을 상품 이름, 상품 종류와 함께 출력한다고 가정하면 아래의 작업이 필요하다. 평점 테이블을 상품 종류와 상품 이름으로 그룹화한다(GROUP BY) 모든 상품을 하나의 테이블로 결합한다.(UNION) 모든 상품 테이블과 평점 테이블을 결합한다(JOIN) : 각 단계의 쿼리들은 아래와 같이 작성될 수 있다. SELECT item_type, item_id, avg(rating.rating) AS rating FROM rating GROUP BY item_type, item_id; (SELECT name, id AS item_id, 'drink' AS item_type FROM drink) UNION ALL (..

Day13. 여러 개의 테이블을 컬럼으로 연결하기

1. FROM 절과 WHERE절을 이용한 데이터 결합 두 개의 테이블을 모두 FROM 절에 불러오는 의미 = CROSS JOIN을 한다는 의미이다. CROSS JOIN이란 두 테이블의 각각의 로우가 서로 한 번씩 결합시키는 것을 의미한다. 따라서, SELECT * FROM rating,ramen; 쿼리문은 SELECT * FROM rating CROSS JOIN ramen; 쿼리문을 실행시키는 것과 같다 2. WHERE 절로 결합된 데이터 고르기 : FROM 절로 두 개의 테이블을 결합한 데이터베이스에 WHERE절을 사용하면, 결합된 데이터에서 필요한 정보만 걸러내어 가져올 수 있다. SELECT rating.user_id, rating.rating, ramen.name, ramen.quantity, r..

Day12. 여러 개의 테이블을 로우로 연결하기

1. 명령어의 전제조건 두 sql은 서로 컬럼의 개수가 동일해야 한다. 같은 위치에 동일한 형식과 의미의 정보가 담겨야 한다. 2. UNION, UNION ALL절 : 두 테이블의 데이터를 합칠 때 사용 : UNION의 경우 중복된 데이터를 한 줄로 합쳐서 표시하고, UNION ALL의 경우 중복된 데이터를 합치지 않고 반복해서 표시한다. : UNION의 경우 두 개의 데이터를 합치고 난 후 합친 로우들을 모두 검사해 중복을 제거하는 방식이라 UNION ALL에 비해 속도가 느리다. 3. INTERSECT, INTERSECT ALL절 : 두 테이블의 공통된 영역만 남길 때 사용 : INTERSECT의 경우 중복된 데이터를 한 줄로 합쳐서 표시하고, INTERSECT ALL의 경우 중복 제거를 하지 않는다..

Day11. 데이터 그룹화

1. DISTINCT : 테이블에서 중복되는 데이터를 없애는 명령어 SELECT DISTINCT item_type FROM rating 2. GROUP BY : 원하는 자료를 그룹화하는 명령어 : DISTINCTI 함수와 달리 집계함수(count()..)를 사용할 수 있고, 집계 연산 이후에 HAVING 절로 조건에 맞는 정보를 걸러낼 수 있다. : 집계함수를 이용한다는 의미는 새로운 관계를 갖고 있는 가상의 결과를 만들어 낸다는 의미와 같다. SELECT item_type FROM rating GROUP BY item_type; SELECT item_type, count(*) FROM rating GROUP BY item_type; 3. HAVING : 집계를 완료한 데이터에서 원하는 조건만 검색할 수..

Day10. 쿼리에 사용되는 연산자와 함수4

1. 서브쿼리에서 사용되는 연산자: 다음의 연산자들은 서브쿼리에 이용되며, boolean 타입을 반환EXISTS (서브쿼리) : 서브쿼리의 로우가 존재하면 참 IN (서브쿼리) : 서브쿼리의 로우 값 중 하나라도 표현식과 같다면 참 NOT IN (서브쿼리) : 서브쿼리의 로우 값 중 하나라도 표현식과 다르면 참 ANY (서브쿼리) : 서브쿼리의 로우 값 중 하나라도 표현식과 같다면 참 ALL (서브쿼리) : 서브쿼리의 로우 값 모두가 표현식과 같다면 참 2. 패턴매칭 연산자2.1  LIKE 연산자: 특정한 패턴을 가지고 있는 값들만을 조회할 수 있도록 도와줌: 대소문자를 구분하지 않는다: LIKE, NOT LIKE, ILIKE, NOT ILIKE 연산자와 동일 연산자로  ~~, !~~, ~~*, !~..