728x90
반응형

야곰야곰 337

하나의 엔티티에는 하나의 역할만을 부여하자

한 번에 하나에만 집중하자. 각 엔티티(변수, 클래스, 함수, 네임스페이스, 모듈, 라이브러리)에는 잘 정의된 하나의 역할만을 부여하라. 엔티티의 덩치가 커지면 역할 또한 커지겠지만, 그렇다고 지정된 진로를 벗어나서는 안된다. 좋은 비즈니스 아이디어는 한문장으로 설명될 수 있듯이 , 좋은 엔티티는 분명 하나의 목적만을 가진다. 많은 기능을 가진 엔티티는 사용하기에 힘들다. 복잡함은 버그와 밀접한 관련이 있으며, 특별한 이유 없이 덩치가 커진 엔티티는 재사용이 어렵다. 안정적이지 못할 뿐더러, 여러 목적 간의 경계가 불분명해지면 관리 또한 힘들다.

[MySQL] Stored Procedure, Function

1. Stored Procedure Stored Procedure란 MySQL에서 제공되는 프로그래밍 기능이라고 생각하면 된다. 이것은 일반적인 프로그래밍과는 조금 차이가 있지만 MySQL 내부에서 사용하기 위해서는 아주 적절한 방식을 제공해 준다. Stored Procdedure는 Query문의 집합으로 어떠한 동작을 일괄 처리하기 위한 용도로 사용된다. 자주 사용되는 일반적인 쿼리를 모듈화 시켜서 훨씬 편리하게 MySQL을 운영할 수 있다. 형식 : DELIMITER $$ CREATE PROCEDURE Stored_Procedure_Name ( IN | OUT Parameters ) BEGIN SQL Coding ... END $$ DELIMITER ; ( 띄어쓰기 주의!! ) 사용 : CALL St..

DB/MySQL 2021.04.19

[MySQL] 사용자 검색/추가/삭제 및 권한 설정

1. MySQL 사용자 조회 MySQL에서 생성된 사용자를 확인하려면 아래와 같다. host : 접속이 허용된 ip 주소. ( % 는 어디에서 접속하여도 OK! ) user : 등록된 사용자 ID MariaDB [mysql]> SELECT host,user FROM user; +-----------+--------+ | host | user | +-----------+--------+ | % | bskim | | % | guest | | % | hdjang | | % | root | | % | shson | | % | yjcho | | localhost | root | +-----------+--------+ 7 rows in set (0.000 sec) MariaDB [mysql]> 2. MySQL 사..

DB/MySQL 2021.04.16

[MySQL] SQL Server 접속하기 (Using Workbench)

새로운 연결을 만든다. 1. 상단의 집 모양의 Home Button을 누르면, 아래와 같은 화면이 나타난다. 2. MySQL Connections 옆의 + 버튼을 누르면, 연결을 설정할 수 있는 창이 나타난다. 새로운 연결을 작성한다. 1. Connection Name에 적당한 이름을 넣는다. 2. Hostname은 localhost (서버가 같은 PC에 있는) 경우에는 127.0.01로 한다. Port 번호는 MySQL Server가 초기 값은 3306이며, 서버 구축 시 특별히 바꿨다면 해당 Port 번호와 맞춘다. 3. Username은 사용 가능한 ID를 기입한다. 이 정도만 진행해도 되지만, 접속할 때마다 비밀번호를 작성하는 것이 귀찮다면 화살표가 가리키고 있는 'Store in Vault'를 ..

DB/MySQL 2021.04.16

정확성, 간결성, 명확성을 먼저 생각하라.

KISS ( Keep It Simple Software ) : 정확한 것이 빠른 것보다 좋고, 간단한 것이 복잡한 것보다 좋으며, 안전한 것이 불안한 것보다 좋다. 간결한 디자인과 깔끔한 코드의 중요성은 아무리 강조해도 지나침이 없다. 프로그램은 사람이 읽을 수 있도록 쓰여져야 하고, 컴퓨터가 실행할 수 있도록 하는 것은 그 후의 문제다. "헤롤드 아벨슨, 제랄드 제이 수스맨" 프로그램을 쓸 때는 사람을 먼저 생각하고, 컴퓨터는 두 번째로 생각하라. "스티브 맥코넬" 컴퓨터 시스템의 가장 값싸고, 빠르고 안정적인 구성 요소는 바로 "없는" 요소이다. "고든 벨" 빠진 구성 요소야말로 가장 정확한 요소이며, 가장 안전한 요소이며, 디자인하고, 문서화하고, 테스트 관리하기 가장 쉬운 요소이다. 간결한 디자인..

[데이터베이스] Attribute (속성)

1. Attribute Entity에서 관리하고자 하는 더 이상 분리되지 않는 최소의 데이터 단위이다. Entity의 고유 성격을 표현하며 Entity는 한 개 또는 그 이상을 가진다. 예) 사원(Entity) - 속성 : 이름, 주소, 전화번호, 직책 하나의 Attribute(속성)은 하나의 속성 값만 가진다. 2. Attribute 분류 2.1 특성에 따른 분류 기본 속성 (Basic Attribute) : 업무로부터 추출한 모든 속성, 가장 일반적이고 많음. 예) 제품이름, 제조년월, 원가 설계 속성 (Designed Attribute) : 데이터 모델링 과정에서 발생하는 속성 예) 코드, 일련번호 파생 속성 (Derived Attribute) : 다른 속성에 영향을 받아 발생. 데이터 정합성 유지..

[데이터베이스] Entity (엔티티)

1. Entity 실체, 객체 라는 의미를 가지고 있으며 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 것이다. Entity는 명사로 표현할 수 있다. Entity는 업무상 관리가 필요한 관심사이다. Entity는 저장되어야 하는 어떤 것(thing)이다. 예) 학생의 Entity는 이름, 학번, 학점, 전공 등의 속성으로 특징 지어질 수 있다. 2. Entity Type Entity Type은 EDM(Entity Data Model)을 사용하여 데이터 구조를 설명하는 기본 구성 요소이다. 개념적 모델에서 Entity Type은 고객이나 주문과 같은 최상위 개념의 구조를 나타낸다. Entity Type은 Entity Type Instance의 Template이다. - https://docs.mic..

SOLID 원칙 ( 좋은 아키텍처를 정의하는 원칙 )

1. SRP(Single Responsibility Principle) : 단일 책임 원칙 콘웨이(Conway) 법칙에 따름 정리 : 각 Software module은 변경의 이유가 하나, 단 하나여야만 한다. Module이 하나의 일을 해야한다는 의미는 아니다. 해당 Module의 변경을 요청하는 한 명 이상의 사람들(actor)에 대해서만 책임을 져야 한다는 것이다. 이 때 Module은 소스가 될 수도 있고 함수나 데이터베이스가 될 수도 있다. 1.1. 우발적 중복 이 클래스는 SRP를 위반하는데, 이들 3가지 Method가 서로 매우 다른 3명의 actor를 책임지기 때문이다. calculatePay() method는 회계팀에서 기능을 정의하며, CFO 보고를 위해 사용한다. reportHours..

[C++] Implicit Linking/Explicit Linking 장단점

1. Implicit Linking (묵시적 링크) Implicit Linking은 정확하게 표현하면 Implicit Load Time Linking 이라 할 수 있는데 이는 해당 프로그램에서 사용될 DLL 정보를 프로그램에 내장하는 방법이다. 이렇게 하면 프로그램을 실행할 때 어떤 DLL이 필요한지 알려주어 프로그램이 착오 없이 실행된다. Implicit Linking으로 사용하고자 할 때는 해당 LIB 파일을 링크 옵션에 더해준 뒤 헤더 파일을 소스코드에 포함시키고 원하는 함수를 사용하면 되므로 간단하다. 2. Explicit Linking (명시적 링크) Explicit Linking은 Implicit Linking에 비해 그 사용이 까다롭지만 원하는 시점에 마음대로 올리고 내릴 수 있다는 점에서 ..

[C++] 타입추론 decltype(auto)

auto를 이용하면 표현식의 타입이 자동으로 연역된다. 만약 const 한정자가 붙어 있다면 const 속성을 없애버린다. decltype은 이런 효과가 없기 때문에 중복된 코드를 만들게 된다. C++14에서는 이 문제를 해결하기 위해 decltype(auto)를 도입했다. const string message = "Test"; const string& foo() { return message; } // foo()를 호출해서 그 리턴 값을 auto 변수에 담을 수 있다. auto f1 = foo(); 그런데 auto는 함수 foo()의 리턴 값이 가진 const 속성을 없애버리기 때문에 f1은 string 타입이 되며 복제본이 만들어진다. 만약 f1이 const 참조형을 유지하길 원한다면 아래처럼 명시적..

[C++] 가상 파괴자(Virtual Destructor)의 필요성

일반적으로 파괴자에서 처리해야 할 작업이 없으면 정의 자체를 안 하는 경우가 많다. 할당을 진행한 경우에는 파괴자를 정의하고 처리를 해줘야 하는게 정상이다. 파괴자가 필요할 때는 아래와 같다. - Base, Abstract class에서 파괴자 정의를 한 경우 (필요로 할 때) - Upcasting 될 여지가 있는 경우 #include using namespace std; class Person { public: ~Person() { cout

[MySQL] MySQL 8.0 설치 방법 (Windows, 학습용)

1. MySQL 다운로드 및 설치 MySQL Community 8.0을 설치하기 위한 PC 사양은 Windows가 설치되었을 때는 특별한 제한이 없다. 하지만 Windows 운영체제는 64Bit Windows 10 / Windows Server 2012 R2 이상의 Version에서만 설치 가능하다. 단, 64Bit Windows 7을 사용해도 MySQL 8.0.3 RC Version을 사용하면 동일하게 사용이 가능하다. 다음 내용은 Windows 7에서 진행하였다. 1.1 MySQL Community 8.0 다운로드 https://dev.mysql.com/downloads/mysql/에 접속하여 OS : Microsoft Windows를 선택하고 Windows (x86, 32 & 64 Bit), MyS..

DB/MySQL 2021.04.09
728x90
반응형