728x90

IT/기초 지식 118

[PostgresSQL] PostgresSQL로 JSON 만들기

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. 이번 포스트에서 설명할 함수 이번 포스트에서 설명할 함수는 ROW_TO_JSON과 JSON_AGG두 가지이다. 각각의 함수로 출력되는 JSON형식은 다음과 같다. ROW_TO_JSON {"id":1,"name":"taro"} Object같은 JSON을 반환하는 함수 JSON_AGG [{"id":1,"name":"taro"},{"id":2,"name":"jiro"}] Array형식의 JSON을 반환하는 함수 ROW_TO_JSON ROW란? ROW_TO_JSON의 ROW는 행이라고 할 수 있지만, 실체는 튜플이라고 생각하는 것이 좋다. 메뉴얼에는 "복합 값"이라는 이름으로 등장한다..

IT/기초 지식 2023.04.17

[CSS] CSS 아키텍처

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. CSS 아키텍처란? CSS는 사양이 단순하기 때문에 배우기 쉽지만, 대규모 사이트나 팀에서 코딩할 때나 장기간 유지 보수하는 등에 있어서는 사양 외에 많은 지식이 요구된다. CSS의 사양을 구석구석 이해하여, 미디어 쿼리나 CSS 애니메이션등을 능숙하게 사용할 수 있다고 해도 그것으로 CSS의 스킬이 높다고는 말할 수 없다. CSS의 사양대로 설계할 수 있는 것은 최종 목표가 아닌 기본 능력이다. 코드의 가독성이나 유지보수, 팀 빌딩이 가능한지등은 다른 면으로 굉장히 중요하다. CSS에는 이러한 사양 외에의 규약을 제공해주는 아키텍처가 몇 가지가 준비되어 있다. 이 몇 가지 아..

IT/기초 지식 2023.04.15

[SQL] SQL AntiPatterns

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. 시작하기에 앞서 빌카윈의 저서 SQL AntiPatterns 내용을 가볍게 정리해보았다. [1장] 무단횡단(제이워크) 1개의 칼럼에 컴마(,) 구분의 값을 넣으면 안 된다. 그 이유는 다음과 같다. 검색하기 어렵다. 문자열 칼럼의 문자 수 제한이라는 암묵적 제약을 받는다. validation을 걸기 어렵다. 해결방법은 교차 테이블을 생성하는 것이다. [2장] 순진한 트리 트리형태의 계층 구조를 1개의 테이블로 표현하면 안된다. 그 이유는 다음과 같다. 계층 구조가 깊어지면 그만큼 SQL을 써야한다. 노드를 삭제하기 어려워진다. 해결방법은 대체 트리 모델을 사용하는 것이다. [3..

IT/기초 지식 2023.04.12

[SQL] UNION과 UNION ALL의 차이점

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. UNION과 UNION ALL의 차이점에 대해서 설명하고자 한다. UNION ALL은 이름 그대로 UNION의 형제같은 것이다. 따라서 먼저 UNION에 대해서 이야기한 후에 UNION ALL에 대한 이야기를 하고자한다. UNION이란? 2개의 SQL 실행 결과를 세로 방향으로 연결시키는 구문이다. 예를 들면 다음과 같다. 다음과 같이 두 개의 테이블이 있다고 가정하자. 첫 번째 테이블 test_pk test_val 1 a 2 b 두 번째 테이블 test_pk test_val 2 b 10 a2 11 b2 13 c2 두 개의 테이블의 UNION으로 결합하면 다음과 같은 테이블이 ..

IT/기초 지식 2023.04.11

[PostgresSQL] PostgresSQL에서 잘 알려지지 않은 형태 세 가지

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠씁니다. postgres에 한정하지 않고 RDBMS에서는 테이블 설계를 할 때 적절한 데이터형을 고르는 것이 중요하다. 또한 postgres에서는 기존의 데이터형을 확장한 형태가 몇 가지 준비되어 있다. 이러한 데이터형을 사용하는 것으로 유연한 데이터의 표현을 할 수 있다. 이번 포스팅에서는 그 중에서 세 종류를 소개하고자 한다. 배열 postgres에서는 임의의 데이터 형의 배열형을 사용할 수 있다. 데이터형의 정의 배열로 하고 싶은 데이터형의 뒤에 []를 추가한다. 예를 들면 다음과 같다. int[] 리터럴 {}를 감싸고 ,로 구분된 배열의 리터럴 표현은 다음과 같이 할 수 있다. S..

IT/기초 지식 2023.04.10

[SQL] MySQL의 GROUP BY 완전 이해하기

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 직역, 의역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. 전제 유저 ID 이름 메일주소 작성한 포스트 수 받은 좋아요 수 1 홍길동 example1@example.com 10 5000 2 김철수 example2@example.com 1 7 3 이영희 example3@example.com 3709 6446131 다음과 같이 데이터를 추출하려고 한다고 가정하자. 테이블의 유저 ID는 프라이머리 키, 이름이나 메일 주소는 프라이머리 키와 동일한 users 테이블의 필드에 존재하는 정보라고 생각하게 된다. 추출할 데이터가 users 테이블의 데이터뿐이라면 큰 문제는 아니다. 단순히 다음과 같은 select 문으로 하면 된다. SELECT *..

IT/기초 지식 2023.04.08

[Jest] 프론트엔드 테스트에서 비동기 처리 다루기

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. 왜 비동기 처리를 의식해야하는가? 예를 들면 아래와 같은 케이스가 있다고 가정해보자. // 화면에 Hello World를 표시한다. expect(wrapper.text()).toMatch('Hello World') Hello World가 표시되는 것을 테스트하고자한다. 그러나 가정으로 //화면에 Hello World를 표시한다. 부분이 비동기 처리가 된 경우(여기서는 편의를 위해서 주석으로 처리를 설명하고 있지만 그러한 처리를 하는 코드가 작성되어 있다고 가정), Hello World가 표시되기전에 expect(wrapper.text()).toMatch('Hello World'..

IT/기초 지식 2023.03.23

TDD(Test Driven Development)

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. TDD(Test Driven Development)란? 한 줄로 설명하자면, Clean Code that works을 구현하기 위해 테스트를 실행하면서 코드를 완성시켜가는 방법이다. TDD(Test Driven Development)의 방법 아래의 그림과 같이 3개 요소가 포함된 사이클을 계속해서 반복해나가면서 TDD를 실현해나간다. 세 개의 요소는 다음과 같다. Red : 테스트의 실패 Green : 테스트의 성공 Refactor : 리팩터링 실시 기본적으로 사이클은 (1~6)을 반복해서 실행하며, 코딩해나간다. 1. 작성하고자하는 코드의 목표를 생각한다. 2. 그 목표를 달..

IT/기초 지식 2023.03.21

[DDD] DDD를 실천하기 위한 안내서 (개념/도입편)

※ 이 포스트는 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주면 감사하겠습니다. ※ 이 포스팅은 DDD를 신천하기 위한 안내서(리포지터리편)의 전편입니다. 후편은 여기를 참조해주세요. DDD란 Domain-Driven Design(도메인 기반 설계)의 약어로 에릭 에반스라는 사람이 제시한 소프트웨어 설계를 집약한 개념이다. 그러나 이 개념은 폭이 넓고, 추상적인 부분이 많아 이해하기 힘들다는 목소리가 왕왕 들린다. 이번 포스팅에서는 이런 어려움을 겪는 사람들을 위해 수 년에 걸쳐 DDD를 실천한필자의 독단적인 해석과 실천 방법에 대해 소개하고자한다. DDD란? DDD가 커버하는 영역 DDD가 다루는 범위는 앞서 말했듯 꽤 넓다. 에릭 에반스가 말..

IT/기초 지식 2023.03.18

[DDD] DDD를 실천하기 위한 안내서 (리포지터리편)

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. ※ 시리즈 포스트입니다. 전편은 여기를 참조해주세요. 시작하기에 앞서 리포지터리 패턴은 DDD로 유명한 도메인 모델의 영속화를 위한 디자인 패턴이다. 지금 여러군데에서 "Repository"이라는 이름을 경우를 꽤 많이 보게 되지만 오남용하는 경우가 많이 있다. 따라서 이번 포스트를 통해 리포지터리 패턴의 의도나 본질을 이해하는 것을 목표하고 있다. 그리고 리포지터리 패턴에는 도움이 되는 사고 방식이 있기 때문에 패턴을 채용하지 않아도 알아두면 분명히 도움이 될 것이다. 또한 코드의 예는 Kotlin을 작성하고 있지만, 오브젝트 지향 언어라면 비슷하므로 이해하기는 어렵지 않을 ..

IT/기초 지식 2023.03.15
728x90