데이터베이스를 설계할때 ERD를 설계하는 것은 필수과정이다. 
 

 

나는 위처럼 인터넷에 떠돌아다니는 무료툴을 이용해 ERD를 설계하거나 IDE에서 제공하는 툴을 이용해 ERD를 설계하곤 했다. 하지만 이렇게 작성된 ERD는 관계도를 표현하기에 매우 힘들고 각각의 관계를 제한에 대한 표현을 해줘야만 한다. 특히 ppt를 이용해서 ERD를 작성하게되면 한 슬라이드에서 규모가 커질 경우 공간이 부족하여 직관성이 떨어지는 단점이 있다. 그래서 다른 ERD작성 툴을 찾아보던 도중 QUICK DBD를 알게 되었다. 

QUICK DBD란?

QUICK DBD는 Quick Database Diagram의 약자로 말 그대로 빠르게 ERD를 설계하는 툴이다.

 

ERD란?

Entity Relationship Diagram의 약자로 Entity 간의 관계를 직관적으로 그려준 다이어그램이다.

보통 데이터베이스를 설계할 때 ERD를 먼저 설계하며 그 이유는 개략적으로 데이터 및 데이터들의 관계를 표현하여 도식화 했기 때문이고 분석가들은 조직의 데이터를 이해하고 이를 응용프로그램에 반영하기 위해서 ERD를 작성한다.

 

Entity란?

표현할 정보를 가지고 있는 독립적인 객체 또는 실체이다.

비슷한 속성의 개체 타입을 구성하며 개체 집합으로 묶인다. 

 

Attribute란?

Entity가 가지고 있는 특성, 성질이다.

 

위 사진은 QUICK DBD의 무료판을 사용해본 사진이다. 코드도 그렇게 어렵지 않았고 무엇보다 오른쪽에 Entity와 Relation를 직관적으로 볼 수 있다는 점이 매우 마음에 들었다. 또한 Relation을 아래와 같이 6개 심볼로 나누어서 더욱 보기 편하게 하였다. 화살표에 숫자를 붙이거나 줄을 두줄로 표현하는 방법과는 다른 QUICK DBD만의 방식을 쓴것 같았다.

아래는 ERD 노테이션의 종류와 설명이다.

 

1. One : 일대일 혹은 일대다 관계

2.. Many : 다대다 관계

3. One (and only one) : 일대일 관계(하나의 row끼리만 연결)

4. Zero or one : 일대일 혹은 일대다 관계지만, 필수 조건이 아님

5. One or Many : 일대일 혹은 다대다 관계

6. Zero or Many : 참조하는 테이블과의 관계가 불명확

작성한 코드 중에 OrderLine부분을 살펴보자

OrderLine as ol
----
OrderLineID PK int
OrderID int FK >- Order.OrderID
ProductID int FK >- p.ProductID
Quantity int

 

OrderLineID는 PK, 즉 기본키(Primary Key)이며 int 형식을 갖는다

OrderID는 FK(Foreign Key)이며 Order 테이블의 OrderID와 relation을 갖는다

ProcutID는 FK(Foreign Key)이며 Produce 테이블의 ProductID와 relation을 갖는다.

Quantity attribute는 int 형식으로 표현된다

 

사용 계기와 느낀점

이번에 코딩 부트캠프를 진행하면서 QUICK DBD를 접하게 되었는데 데이터베이스를 설계할 때 ERD를 잘 짜는 것이 정말 중요하다는 것을 알았기 때문에 왜 굳이 QUICK DBD같은 툴을 사용하는지 의문을 갖지는 않았다.

QUICK DBD는 별도의 소프트웨어를 다운받을 필요 없이 웹 브라우저 내에서 설계가 가능한 점이 매우 맘에 들었다. GUI가 사용자 친화적이고 ERD가 직관적이기 때문에 작업수행에 수월하고 여러명이 작업할 때 좋을 것 같다. 특히 MySQL을 공부하는 입장에서 매우 자주 사용하게 될 것 같다. 학기 중에 데이터베이스 수업이 있었기 때문에 데이터베이스 프로젝트에서 데이터베이스를 설계했어햐 했는데 확실히 종이나 펜을 이용해 ERD를 설계하고 데이터베이스를 설계하는 것 보다는 확실히 직관적이고 정확했기 때문에 참 좋았던것 같다. 그 때 QUICK DBD를 사용해서 설계했으면 학점을 더 높게 받았을지도 모르겠다. 지금은 QUICK DBD를 사용할 때 무료 배포판을 사용하였지만 앞으로 백엔드 개발자가 되고 취업해서 DB를 만질 것이라고 생각하면 충분히 돈을 주고 결제해서 사용할 만 하다고 생각된다. 마치 처음 Eclipse에서 Intellij로 넘어갈 때 굳이 돈을 주면서 IDE를 바꿔야하나 하고 생각했던 것과 Intellij를 써본 뒤로 Eclipse는 쳐다도 보지 않는 것처럼 말이다. 다른 백엔드 개발자에게도 QUICK DBD를 추천하고 싶고 QUICK DBD로 인해 개발이 편리해졌기 때문에 너무 감사하다.

 

참고:

https://11-20.tistory.com/19

 

 

'Backend' 카테고리의 다른 글

Spring vs Spring boot  (0) 2021.12.25
mariaDB - console  (0) 2021.11.02

<<Spring>>

Spring Framework는 자바 플래폼을 위한 오픈소스 애플리케이션 프레임워크이다. 

동적인 웹 사이트를 개발하기 위한 여러가지 서비스를 제공하며 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로서 쓰이고 있다.

 

<장점>

1. 경량컨테이너

2. IOC(제어역행)

3. Di(의존성 주입)

4. AOP(관점 지향 프로그래밍

 

<<Spring Boot>>

스프링 프레임워크는 기능이 많은만큼 환경설정이 복잡하다. 이에 어려움을 느끼는 사용자들을 위해 나온 것이 바로 스프링 부트이다. 스프링 부트는 스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 정말 편하게 스프링을 활용할 수 있도록 돕는다. 스프링 부트 starter dependency만 추가해주면 바로 API를 정의하고, 내장된 탐캣이나 제티로 웹 어플리케이션 서버를 실행할 수 있다. 실행 환경이나 의존성 관리등의 인프라 관련 등을 신경쓰지 않아도 된다.

 

<차이점>

1. 내장 톰캣을 사용하기 때문에 따로 톰캣을 설치하거나 버전을 관리하지 않아도 된다

2. starter를 이용한 dependency 자동화

3. XML설정을 하지 않아도 된다.

4. jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다.

'Backend' 카테고리의 다른 글

QUICK DBD 리뷰 및 사용후기  (0) 2022.02.06
mariaDB - console  (0) 2021.11.02

<비동기 처리> : 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 자바스크립트의 특성

           console.log("hello")

           setTimeout(function() {

                      console.log('Bye')

           }, 3000)

           console.log("hello again")

           >>hello

           hello again

           Bye

<async, await로 비동기 처리 방식의 문제점 해결>

           function fetchItems() {

           return new Promise(function(resolve, reject) {

                      var items = [1,2,3]

                      resolve(items)

                      })

           }

 

           async function logItems(){

                      var resultItems = await fetchItems();

                      console.log(resultItems)

           }

 

<Promise> : 자바스크립트 비동기처리에 사용되는 객체

프로미스의 3가지 상태(states)

1. Pending(대기)

           new Promise(function(resolve, reject){

                      //

           });

2. Fulfilled(이행)

           new Promise(function(resolve, reject){

                      resolve();

           });

           then()을 이용하여 처리 결과 값을 받을 수 있음

3. Rejected(실패)

           new Promise(function(resolve, reject){

                      reject();

           });

           catch()로 실패 이유를 받을 수 있음

ex) function getData(){

           return new Promise(function(resolve, reject) {

                      var data = 100;

                      resolve(data);

           });

  }

   getData().then(function(resolvedData) {

           console.log(resolvedData);

   }).catch(function(err) {

           console.log(err);

   });

 

<async & await>

장점 - 코드가 꼬리를 물지 않고 가독성이 높아짐. 기존의 비동기 처리 코드 방식으로 사고하지 않아도 됨

async function 함수명() {

           await 비동기_처리_메소드_();

};

async - 예약어

await - 비동기 처리 메소드 앞에 붙임

*비동기 처리 메소드는 반드시 Promise 객체를 반환

예외 처리 - try catch문을 사용

'web개발 > 자바스크립트' 카테고리의 다른 글

변수  (0) 2021.11.27
npm vs yarn  (0) 2021.11.22
nodeJS + express  (0) 2021.08.17
nodeJS  (0) 2021.06.04
javascript basic  (0) 2021.05.17

<<변수>>

js managed language이기 때문에 개발자가 직접 메모리를 제어하지 못한다.

변수명은 변수의 값이 아닌 메모리 주소를 기억, js engine이 변수명과 매핑된 메모리 주소를 찾아가 저장된 값을 반환

할당 : 변수에 값을 저장하는 것

참조 : 변수에 저장된 값을 읽어들이는 것

선언 : 변수명을 자바스크립트 엔진에 알리는 것

* 변수 선언은 선언 -> 초기화를 거쳐 수행

           선언 : 변수명을 등록하여 자바스크립트 엔진에 변수의 존재를 알림

           초기화 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화

 

<var>

var은 변수선언단계와 초기화단계가 동시에 진행되어 undefined를 할당해 초기화

여기서 console.log(변수명)을 먼저해도 undefined가 찍히는데 그 이유는 호이스팅이다.

* 호이스팅(hoisting)

           자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기 앞서, 변수 선언을 포함한 모든 선언문(ex. 변수 선언문, 함수 선언문 등)을 찾아내 먼저 실행함.

           변수선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행되는 특징을 hoisting이라 함.

변수 선언과 할당은 하나의 문으로 단축 표현할 수 있지만 두 개의 실행 시점이 다름.

변수 선언이 호이스팅 되어 먼저 실행되고 값의 할당은 소스코드가 순차적으로 실행되는 런타임에 실행.

 

<함수 호이스팅>

함수 선언 방식

1. 함수 선언문

 - 런타임 이전에 자바스크립트 엔진에서 먼저 실행되어, 함수 자체를 호이스팅 시킬 수 있음.

           function.add(x, y){

           return x + y }

 

2. 함수 표현식(함수 이름 생략)

 - 런타임 이전에 undefined로 초기화만 시키고 런타임에서 함수 표현식이 할당됨

           var add = function(x, y){

           return x + y }

 

3. Function 생성자 함수

           var add = new Function('x', 'y', 'return x+ y')

 

4. 화살표 함수

           var add = (x, y) => x + y

 

<스코프(scope)>: 식별자(변수명, 함수명, 클래스명..)의 유효범위

선언된 위치에 따라 스코프가 달라짐.

           전역에 선언된 변수는 전역 스코프를, 지역에 선언된 변수는 지역 스코프를 가짐

자바스크립트에서 모든 코드 블록(if, for, while, try/catch문 등)이 지역 스코프를 만들며, 이러한 특성을 블록 레벨 스코프라 함.

하지만 var로 선언된 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정. 이를 함수 레벨 스코프라고 함.

         var a = 1

         if (true) { var a = 5 }

         console.log(a)

         >> 5

         // 함수가 아닌 곳에 var 키워드를 이용해 a를 선언했기 때문에 전역 변수로 취급

* 주의 : 모든 곳에서 전역스코프를 공유하기 때문에 동일한 변수명이 예상치 못한 결과를 가져올 수 있다는 위험때문에 블록 레벨 스코프를 지원하는 const let을 사용권장.

 

<var, let, const의 차이>

var의 문제점

1. 변수 중복 선언이 가능하며, 예기치 못한 값을 반환할 수 있음.

2. 함수 레벨 스코프로 인해 함수 외부에서 선언된 변수는 모두 전역 변수로 됨

3. 변수 선언문 이전에 변수를 참조하면 언제나 undefined를 반환

 

let const로 문제해결

1. 변수 중복 선언 불가

           let 키워드로 변수 중복 선언(재선언)이 불가하지만 재할당은 가능

           const let과 달리 반드시 선언과 초기화를 동시에 진행, 재할당 불가

                      const name = 'jhj'

2. 블록 레벨 스코프

           let, const 키워드로 선언한 변수는 모두 코드 블록(함수, if, while, try/catch문 등)을 지역 스코프로 인정하는 블록 레벨 스코프를 따름

                      let a = 1

                      if (true) { let a = 5 }

                      console.log(a)

                      >> 1

3. 변수 호이스팅

           let 키워드로 선언한 변수는 선언단계와 초기화단계가 분리되어 진행

                      , 런타임 이전에 자바스크립트 엔진에 의해 선언 단계가 먼저 실행되긴 하지만 초기화단계가 실행되지 않았을 때 해당변수에 접근하려 하면 참조 에러가 뜸.

           const 키워드는 선언단계와 초기화단계가 동시에 진행됨

 

즉 var보다는 const, let으로 변수를 선언하는 것을 권장하고 바뀌지 않는 변수는 const로 선언하는 것이 바람직하다.

 

출처 : https://www.howdy-mj.me/javascript/var-let-const/

'web개발 > 자바스크립트' 카테고리의 다른 글

비동기  (0) 2021.11.28
npm vs yarn  (0) 2021.11.22
nodeJS + express  (0) 2021.08.17
nodeJS  (0) 2021.06.04
javascript basic  (0) 2021.05.17

<<npm>> : (node package manager) 

정의 : 자바스크립트 언어를 위한 패키지 매니저로 nodjs의 기본패키지 관리자.

<명령어>

npm init : package.json 생성

npm install : package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치

npm install [packagename] @[버전] : 특정 패키지의 특정 버전 설치

npm uninstall : 패키지 삭제

npm update : 설치한 패키지 업데이트

npm dedupe : 중복 설치된 패키지들을 정리

 

<package.json>

프로젝트 정보와 의존성을 관리하는 문서

어떤 패키지를 사용하는지, 어떤 버전을 사용하는지 등을 기록함으로써 어느곳에서도 동일한 개발환경을 구축할 수 있게 해줌

 

<<yarn>>

정의 : 페이스북에서 만든 자바스크립트 패키지 매니저

장점 : npm에 비해 빠르고 안정성과 보안성이 높다.

다운받은 패키지 데이터를 캐시에 저장하여, 중복된 데이터는 다운로드하지않고, 캐시에 저장된 파일을 활용함으로써 이론적으로 npm에 비해 패키지 설치속도가 빠름. 또한 여러개의 패키지를 설치할 때 병렬로 처리하기 때문에 performance와 speed가 증가.

*yarn.lock은 모든 디바이스에 같은 패키지를 설치하는 것을 보장하기 때문에 버전의 차이로 인해 생기는 버그를 방지해줄 수 있음

 

<명령어>

yarn init : package.json 생성

yarn install : package.json의 해당 종속성에 나열된 모든 모듈 설치

yarn add [packagename] @[version] : 특정 패키지의 특정 버전 설치

yarn remove : 패키지 삭제

yarn upgrade : 패키지 업데이트

 

출처: https://velog.io/@kysung95/%EA%B0%9C%EB%B0%9C%EC%83%81%EC%8B%9D-npm%EA%B3%BC-yarn

'web개발 > 자바스크립트' 카테고리의 다른 글

비동기  (0) 2021.11.28
변수  (0) 2021.11.27
nodeJS + express  (0) 2021.08.17
nodeJS  (0) 2021.06.04
javascript basic  (0) 2021.05.17

<준비>

1. 유니티 회원가입

2. 유니티 허브설치

3. 허브에서 로그인 후 라이센스 설정

4. 버전에 따라 unity 설치

 

<시작>

1. 프로젝트 생성(경로에 한글포함 x)

2. 인터페이스 설정(Scene, Game, Hierarchy, Project, Inspector, console)

3. Object 추가

 

<Object>

1. Create > 3D Object > Cube로 큐브생성

2. Hierarchy창에서 Cube 더블클릭(''F'')

3. Scene Zoom in & out - 마우스 휠

4. 상하좌우 평행이동 - 휠스크롤 누른채로 움직이기

5. scene화면 회전 - 마우슨 오른쪽 버튼 누른채로 움직이기

6. 속성변경 - Inspector

 

<속성변경>

0. Position, Rotation, Scale 변경가능

1. 중력 - Add Component > Physics > Rigidbody

2. 조명 - Add Component > Rendering > Light

 

<Object Parenting>

Object Parent로 삼고 그룹핑할 수 있음

 

<기본조작 툴>

1. hand : Scene 카메라를 움직임

2. 평행이동 : 오브젝트를 이동시킴

3. 회전 : 오브젝트를 회전시킴

4. 스케일 : 오브젝트 크기를 조정

5. 렉트 : 오브젝트의 2D 크기를 조정

6. 트랜스폼 : 평행이동과 회전을 하나로 합친 툴

 

<Scene Gizmo>

1. x, y, z 원뿔: Scene카메라를 해당방향으로 전환

2. 센터큐브 : 원근모드(Perspective)와 등각모드(Isometric) 전환

 

<Scene Play Button>

1. 플레이

2. 일시정지

3. 스텝 : 누를때 마다 한 프레임씩 진행

 

<유니티 엔진 동작원리>

1. 상속만으로 이용한 개발의 한계

2. 해결법 : 컴포넌트/컴포지션 패턴

 - Object는 단순한 빈 껍데기로 스스로 동작하는 독립 부품인 Component들로

   Object를 채워 넣음

 

<Inspector>

1. 트랜스폼 : 게임 오브젝트의 위치와 크기, 회전을 지정

2. 메시 필터 : 오브젝트의 외곽선을 지정

3. 메시 렌더러 : 메시를 따라 색을 채워 그래픽 외형을 그림

4. 박스 콜라이더 : 다른물체가 부딪칠 수 있는 물리적인 표면을 만듦

5. 리지드바디 : 게임 오브젝트가 물리 엔진의 통제를 받게 함

 

<메시지 브로드캐스팅>

MonoBehaviour 클래스(Unity 핵심)

1. Unity의 모든 컴포넌트는 MonoBehaviour 클래스를 상속

2. MonoBehaviour클래스를 상속헤서 만들어진 컴포넌트는 Unity의 제어아래 있음

3. 따라서 모든 컴포넌트들이 Unity의 메세지를 들을 수 있음

 

Message Broadcasting

1. 메시지를 보내는 쪽은 누가 받게 될지 신경 X

2. 메시지를 받은 쪽은 누가 보냈는지 신경 X

3. 메시지를 받았을 때 메시지에 명시된 기능을 가지고 있다면 실행, else 무시

 

유니티이벤트 메서드

메시지 브로드캐스팅은 앞으로 많이 사용할 Start(), Update(), OnTriggerEnter()

등의 유니티 이벤트 메서드가 동작하는 원리

<<colab>> : google colaboratory service

<특징>

1. 브라우저에서 python을 작성하고 실행가능(별도의 python 설치가 불필요)

2. jupyter notebook 개발환경

3. 자신의 컴퓨터에 GPU가 없거나 저사양이면 추천

4. 데이터 분석에 사용되는 Tensor Flow, Keras, mataplotlib, scikit-learn, pandas와 같은 패키지가 기본적으로 설치되어 있음

5. 깃과 연동 가능

 

<작성>

새노트를 클릭하여 ipynb 노트생성 

저장 시 구글 드라이브에 저장됨(Colab Notebooks 폴더)

 

<내보내기>

ipynb 또는 py 확장자 파일을 컴퓨터에 저장가능

 

 

 

 

 

 

출처: https://ffoorreeuunn.tistory.com/244

 

'Languague > python3' 카테고리의 다른 글

가상환경  (0) 2021.11.17
numpy  (0) 2021.11.09
"".isdigit()  (0) 2021.11.06
정규표현식1  (0) 2021.11.04
copy module  (0) 2021.09.12

<<가상환경>>

가상환경 : 독립적인 작업환경에서 패키지 및 버전관리를 하기 위한 가상의 환경

사용하는 이유 - pip로 패키지를 설치하게 되면 base에 (정확히는 파이썬 설치폴더의 lib/site-packages)에 저장

        프로젝트를 여러개 개발하게 되면 패키지 버전의 문제가 발생할 수 있음

종류 : venv, virtualenv, conda

 

<<anaconda>>

아나콘다는 전용 가상 환경을 제공하므로 이 환경을 사용하는 것을 권장

아나콘다는 conda를 사용하여 가상환경을 만듬

가상환경 생성 - $conda create -n 가상환경이름 python=version

가상환경 확인 - $conda info --envs

가상환경 활성화 - $ conda activate 가상환경이름

 

<conda 주요 명령어>

$conda info : 현재 환경 정보 출력

$conda search 패키지 : 패키지 검색

$conda install 패키지=버전 : 패키지 설치

$conda update 패키지 : 패키지 업데이트

$conda list : 패키지 목록 출력

$conda remove 패키지 : 패키지 삭제

$conda list --export > package-list.txt : 패키지 목록 및 버전 정보 저장

$conda installl --file package-list.txt : 패키지 목록으로 설치 

 

<IDLE>

python 내장 Intergrated DeveLopment Environment 

실행 - $-m idlelib

 

 

<spyder>

Anaconda 배포본에 포함되어 있는 IDE(통합개발환경)

에디터와 콘솔 지원

설치 - $conda install spyder

실행 - $spyder 

 

 

 

 

출처 :https://dojang.io/mod/page/view.php?id=2470, https://yganalyst.github.io/pythonic/anaconda_env_1/

'Languague > python3' 카테고리의 다른 글

google colab  (0) 2021.11.17
numpy  (0) 2021.11.09
"".isdigit()  (0) 2021.11.06
정규표현식1  (0) 2021.11.04
copy module  (0) 2021.09.12

+ Recent posts