제목 : 도커 안의 MySQL 과 MySQL Workbench 는 어떻게 연결할까?부제목 : 편하게 데이터베이스를 작업하는 방법이 글을 작성하는 이유나는 주로 길 것이 예상되고 분석 혹은 공부가 반드시 뒤따르는 글을 작성하는 편이다.(공식문서 해석 글은 빼고)예를 들어 React 의 근간이 되는 Fiber Architecture 분석이나,모든 HTML 태그를 작성하고 예시를 iframe 을 통해 직접적으로 보여주는 편인데,이는 글이 길고 좁고 깊은 도메인의 지식을 독자들이 따라 올 수 있게 만든다.분명히 "누군가는" 이러한 글이나 내부 지식을 필요로 할 것이다.그러나 그 누군가가 상당수는 아닐 것이다.나는 NestJS 에서 Spring 으로 백엔드 도메인 전문성을 교체하고 있는 중인데,이를 위해 Udem..
MySQL
제목 : Docker-Compose 란 무엇이고 어떻게 사용하는가? - With Spring & Nginx & MySQL부제목 : 도커를 명령어 없이 쉽게 사용하기 위한 방법이 글을 작성하는 이유나는 NestJS 에서 Spring 으로 백엔드 도메인을 옮기는 상황이다.현재 Udemy 강의 사이트에서 외국 강사 분의 강의를 들으며 미약했던 Spring 의 기억을 끌어올리고 있다.이 강의는 데이터베이스를 MySQL, & Workbench 를 통한 쉬운 스키마 변경을 유도하고 있다.그러나, 나는 서버 운용 상황에서의 유연성을 고려하여 docker container 를 통해 데이터베이스 서버를 3306 로컬 포트에 열고, 이를 연결 할 계획이다.NestJS 에서 Spring 으로 백엔드 도메인을 바꾼 이유는 이..
챕터 11번째 맥락 요약 정리스프링이 가장 관심을 두는 대상은 오브젝트 이다.오브젝트의 생성과 소멸을 다루는 과정에서 설계 과정은 더욱 대두되었다.따라서, 이러한 관심은 오브젝트 중심의 설계 - 객체지향 설계 로 이어지게 되었다.객체 지향 설계(Object Oriented design) 에는 크게 3가지가 존재한다.디자인 패턴 : 기초와 원칙을 비롯해서, 다양한 목적을 위해 자활용 가능한 설계 방법리팩토링 : 좀 더 깔끔한 구조가 되도록 지속적으로 개선해 나가는 작업단위 테스트 : 오브젝트가 기대한 대로 동작하고 있는지를 효과적으로 검증하는 데 쓰이는 테스트토비의 스프링 은 초급자용은 아닌 만큼, Spring의 기반이 되는 저 레벨의 기능부터 시작한다.따라서, DB 생성 방식은 알려주지 않고 이를 독자가..
hyperskill - Date & Time data types - 원문SQL은 테이블에서 조직화 된 서로다른 데이터 타입들을 작업합니다.당신은 숫자, 문자열, 논리 데이터를 저장할 수 있게 허용 해 주는 기초적인 데이터 타입들에 대해 알고 있습니다.우리가 매일 마주하는 또다른 것이 있습니다.당신이 일어나서 처음으로 하는 것을 생각 해 보세요. - 네, 시간을 확인합니다.우리는 날짜와 시간 데이터를 정기적으로 마주하므로, 왜 우리의 작업에 이를 적용하는 법을 배우지 않는거죠?SQL은 다양한 날짜, 시간 타입을 제공합니다.이제 이것들을 봅시다!Date & Time types - 날짜와 시간 타입서로 다른 SQL 용어들 속에서, 날짜와 시간 타입은 다를 겁니다.하지만 여기에 가장 공통적인 것들에 대해 말할 ..
hyperskill - Set operations 원문가끔, 당신은 같은 구조를 가진 여러 개의 쿼리의 결과를 결합하고 싶을 겁니다.그리고, 그 결과를 반환하고 싶을 겁니다.이를 수행하기 위해서, set operations (set 연산자)를 사용해야 합니다.한 번 이 연산자가 SQL 에서 어떻게 구현되었는지 살펴봅시다.Set operations - 집합 연산자들Set 연산자들은 여러 SELECT 문법의 결과 집합에서 나온 줄들을 결합합니다.여러 개의 Set 연산자들이 있으며, 이를 수행하는 서로 다른 방식을 제공합니다.SQL 에서는, 이들은 UNION, UNION ALL, INTERSECT, EXCEPT or MINUS 입니다.이러한 set 연산자들은 SELECT 문법이 같은 수의 컬럼, 알맞는 모든 ..
hyperskill - Consistency constraints 원문테이블의 각 컬럼은 상세한 데이터 타입을 가지고 있으므로, INT 타입에 TEXT를 넣는 것은 불가능하며, DECIMAL (소수점 가진 수) 가 BOOLEAN 에 들어가는 것도 불가능합니다.데이터 타입 제약은 우리에게 많은 실수를 피해가게 도와줍니다.하지만, 이러한 제한들은 아주 자세 해 질 수 있습니다.예를 들어, 모든 개인 ID 넘버는 고유하거나, 고객들은 어른들이어야 한다. 와 같습니다.컬럼의 값에 있어 이러한 상세한 제한들은 constraints (제약) 이라고 부릅니다.Example - 예시가장 평범한 constraints (제약) 은 밑의 리스트와 같습니다. :NOT NULLUNIQUECHECKDEFAULTPRIMARY KE..
hyperskill - Subqueries 원문일반적으로, 데이터를 작업 할 때, 첫 번째 쿼리의 실행 결과를 두 번째 쿼리에 사용 할 필요가 있습니다.예를 들어, 한 컬럼의 값이 다른 컬럼의 최대 값과 동일한 튜플들을 선택하고자 합니다.우리는 이것을 간단한 서브쿼리로 수행 할 수 있습니다. :--> 최대 값을 선택하고, 메인 쿼리는 이 값과 동일한 튜플들을 선택합니다.감사하게도, SQL은 결합 쿼리들을 위한 강력한 도구를 가지고 있습니다. = subqueries.한 번 이를 살펴 봅시다!subquery : (또한 inner 혹은 nested query 로 불립니다.)SQL query : (main query 혹은 outer query 로 불립니다.)서브쿼리 는 또다른 SQL 쿼리 입니다.서브쿼리들은 S..
hyperskill - GROUP BY statement 원문일찍이 우리는 집계 함수가 간단한 분석적 문제를 푸는 데 유용 할 수 있는지에 대해 배웠습니다.이제 당신이 전체 테이블, 혹은 하나의 세부 카테고리에 대한 집계 값을 계산하지 않고, 별도의 많은 카테고리들을 계산하고 싶다고 상상 해 봅시다.예를 들어, stocks 테이블에 가격에 대한 기록 데이터가 있습니다.stock_namepricedatetimeWTI89.82020-05-17 11:00FB26.32020-04-11 10:23WTI18.92019-01-18 23:02WTI20.92019-01-18 23:02FB15.6NULLDJI52.72004-05-28 21:09FB63.71998-03-31 04:18밑의 쿼리는 가능 한 예제지만, 실행하기..
hyperskill - Aggregate functions 원문당신이 금융 자문 회사의 비즈니스 애널리스트라고 상상 해 봅시다.당신은 어제 주식 시장에 무슨 일이 있었는지에 대한 보고서를 준비하는 과정으로 당신의 하루를 시작합니다.성사된 거래에 대한 정보는 테이블에 저장되어 있는데,SQL과 호환 가능한 데이터베이스 내부의 몇 십만 줄에 저장되어 있습니다.간단히 컬럼들의 모든 데이터를 선택하는 것은 동작되지 않는데,엄청난 크기의 데이터를 넘어서, 추출을 위한 수행 계산은 비현실적이기 때문입니다.보통의 SQL 기능은 많이 도움이 되지 않는데, 이는 개별적인 각각의 줄에 적용되기 때문이며, 그 결과를 결합하여 제공 할 방도가 없기 때문입니다.이것을 대체할 수 있는 것은 aggregate functions 이며..
hyperskill - Inserting selected rows 원문데이터를 작업 할 때면, 한 테이블에서 다른 테이블로 복사해야 하는 과제를 마주 할 것 입니다.예를 들어, 만약 당신이 customers 테이블을 삭제하고, 그 모든 데이터를 새로운 테이블 users로 복사하고자 합니다.당연하게, 당신은 정석대로 간단한 INSERT INTO 쿼리를 사용해서 수행 할 수 있습니다.하지만, 이 결과는 오타 혹은 심지어 데이터 손실을 겪을 수 있습니다.이 과정을 안전하게 만들기 위해, 당신은 두 개의 간단한 문법을 결합 할 수 있습니다.INSERT INTO and SELECT이 두 문법을 어떻게 작업하는지 더 가까이 지켜봅시다.Inserting selected rows - 선택된 줄들 삽입하기우리의 초기 예..