3주차 - 2) 데이터베이스

변현섭·2023년 6월 8일
1

7. ERD 설계

1) ERD

ERD는 Entity Relationship Diagram의 약자로, 데이터베이스 구조를 한 눈에 알아보기 위해 그려 놓은 다이어그램이다. ERD 작성법에 대해 알아보자.

① 개체(Entity)

  • 단독으로 존재하는 객체를 의미한다.
  • 동일한 객체는 존재하지 않는다.
  • ERD에서는 개체를 사각형으로 표기한다.

② 속성(Attribute)

  • 속성은 개체가 가지고 있는 성질이다.
  • ERD에서는 속성을 원으로 표기한다.
  • 특히 기본키에 해당하는 속성의 경우 밑줄을 그어 표기한다.

③ 관계(Relationship)

  • 개체 간의 관계를 의미한다.
  • ERD에선 개체를 서로 이어 관계를 표시하고 어떤 관계에 놓여있는지 마름모로 표기한다.

④ 관계성 – 까치발 표기법

  • 추출된 관계를 ERD로 표기하기 위해 까치발 표기법을 많이 사용한다. 이를 통해 개체 간의 관계성을 표시할 수 있다.

    배운 내용을 토대로 아래의 예시를 해석해보자.

  • 학생은 교과목을 수강한다

  • 결제 시 쿠폰을 사용할 수도 사용하지 않을 수도 있다.

  • 하나의 부서에 여러 명의 사원이 소속된다.

  • 회원은 게시글을 작성할 수도 작성하지 않을 수도 있고, 여러 개의 게시글을 작성할 수 있다.

2) 카디널리티(Cardinality)

카디널리티는 한 테이블이 다른 테이블과 가질 수 있는 관계를 나타낸다. 그 종류에는 다대다, 다대일(일대다), 일대일이 있을 수 있다.

① 1:1 관계

  • 한 테이블에 있는 공유 필드의 값 하나가 다른 테이블에 있는 공유 필드의 값 하나와만 관련된다.
  • 예를 들면, 차량과 번호판의 관계를 생각할 수 있다. 설령 차량이 등록되지 않았거나 차량에 번호판 번호가 아직 할당되지 않은 경우에도 이러한 불일치는 참조 무결성에 의해 설명 가능하다.
  • 차량은 번호판을 하나만 가질 수 있고 번호판은 한 차량에만 할당될 수 있으므로 카디널리티는 일대일로 유지된다.

    ※ 참조 무결성
    외래키는 참조할 수 없는 값을 가질 수 없다는 의미로, 외래키는 반드시 NULL이거나 참조 테이블의 기본키에 있는 값이어야 한다. 이를 통해 기본 키와 참조 키 간의 관계가 항상 유지됨을 보장한다. 즉, 참조되는 테이블의 행을 참조키가 존재하는 한 삭제할 수 없고 기본키도 변경할 수 없다(참조키와 외래키는 동일한 표현임).

② 1:N 관계

  • 한 테이블에 있는 공유 필드의 값 하나가 다른 테이블의 여러 행과 관련되는 경우이다.
  • 테이블의 순서에 따라 1:N 또는 N:1로 나타낼 수 있다.
  • 예시로 직원 여러 명의 스케줄을 한 명의 매니저가 관리하는 관계를 생각해 볼 수 있다.

③ N:M 관계

  • 한 테이블에 있는 공유 필드의 여러 값이 다른 테이블에 있는 여러 행과 관련되는 경우이다.
  • 데이터 원본에서의 default 설정 값이기도 하다.
  • 예시로 배우와 영화를 생각해 볼 수 있다. 한 배우는 여러 영화에 출연하고 한 영화에는 여러 배우가 출연한다.

3) 식별자(Identifier)

식별자는 인스턴스들의 집합인 엔티티에서 특정 인스턴스를 구별하기 위해 사용된다. 즉, 인스턴스의 대표 속성을 의미하며 하나의 엔티티에는 반드시 유일한 식별자가 존재해야 한다. 식별자는 아래의 특징을 가진다.

  • 유일성: 주식별자에 의해 모든 인스턴스가 유일하게 구분되어야 함
  • 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수여야 함
  • 불변성: 주식별자가 한 번 특정 엔티티에 지정되면 그 식별자의 값은 변하지 않아야 함
  • 존재성: 주식별자로 지정되면 반드시 NULL이 아닌 데이터 값이 존재해야 함

가끔 식별자를 키와 동일한 개념으로 생각하는 경우가 있는데, 엄밀히 말하면 기능은 비슷하나 관점의 차이가 있다. 식별자는 업무적으로 구별되는 정보로 논리적 데이터 모델링 관점에서 쓰이는 용어이고, 키는 테이블에 접근하는 물리적 매개체로 물리적 데이터 모델링 관점에서 쓰이는 용어라 할 수 있다.

8. ERD Tool

1) Aquerytool

Aquery Tool이란 web환경에서 간단하게 ERD를 그려볼 수 있는 도구이다. Aquery Tool을 이용해 ERD를 공유하는 방법에 대해 알아보자.

① 테이블 추가 및 ERD초기 정보 설정

  • 로그인 없이도 사용은 가능하나 저장하지 않은 ERD를 다시 불러올 수 없음.
  • 우클릭 > 테이블 추가 클릭
  • 처음 테이블을 추가하면 ERD에 대한 초기설정 팝업이 표시됨.
  • DataBase Type(ORACLE, MySQL, MSSQL, MariaDB)과 ERD Name 등을 지정하면, 해당 DBMS에 맞는 SQL 쿼리를 생성해줌.

② 테이블 인터페이스

  • 테이블이 생성되면 아래와 같은 인터페이스를 가지게 되고 테이블마다 메뉴를 통해 여러 작업을 수행할 수 있음.
  • Table User Interface 설명

③ 테이블 간의 관계 설정

  • FK컬럼을 드래그하여 참조 테이블의 컬럼에 드롭하면 관계가 설정됨.

④ 인덱스 설정

  • 테이블 하단의 인덱스 설정 메뉴 클릭
  • 인덱스로 설정하고 싶은 컬럼 값을 마우스로 드래그&드롭하여 인덱스 카트에 삽입
  • 인덱스 카트에 담긴 인덱스 추가

⑤ ERD Menu-모든 테이블 생성 SQL

  • ERD에 그려져 있는 Table을 모두 생성하는 SQL쿼리문을 생성함.

⑥ ERD Menu-읽기 전용 Url

  • 서버에 저장된 ERD를 읽기 전용으로 공유할 수 있는 방법. 저장과 로그인 필수
  • 비회원도 비밀번호를 통해 ERD에 읽기 전용으로 접근 가능

⑦ ERD Menu-공유설정

  • 읽기 전용뿐 아니라 협업을 위한 수정도 할 수 있도록 회원간 ERD를 공유
  • 해당 ERD를 공유할 수 있는 Code를 발급받는데 이를 복사하여 다른 사용자에게 알려주면 상대방이 ERD사용 권한을 작성자에게 요청할 수 있음.
  • 공유요청 메뉴에서 전달받은 ERD코드를 입력하면 소유자에게 권한을 부여받아 ERD 불러오기 메뉴를 통해 load 가능.

2) ERD Cloud

ERD Cloud는 데이터베이스 모델링 설계 과정에서 사용되는 ERD 툴이다. ERD Cloud는 웹 기반으로 설치가 필요 없으며 팀원들과 실시간 동시 작업이 가능하도록 클라우드 서비스를 제공하고 있다. 또한 만든 ERD를 SQL쿼리문으로 추출할 수 있고, 웹 브라우저나 모바일 환경에서도 접근할 수 있어 매우 편리하다. ERD Cloud의 사용법은 아래와 같다.

① www.erdcloud.com에 접속

② 회원가입 및 로그인

③ ERD 생성

④ 좌상단에 설정버튼을 클릭하여 ERD설정을 지정

⑤ 왼쪽 메뉴바에 엔티티 추가 버튼을 누르고 빈 영역을 클릭하면 새로운 엔티티가 생긴다.

⑥ 테이블의 각 항목은 아래와 같다.

9. JPA

JPA란 Java Persistence API의 약자로, 자바에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.

※ ORM
애플리케이션 클래스와 RDB(Relational DataBase) 테이블을 매핑한다는 뜻이며, 기술적으로는 애플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것으로 볼 수 있다.

위에서 말한 바 있듯 JPA는 Java 진영에서 사용되는 ORM기술 표준이다. 쉽게 말해 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스인 것이다. 당연히 인터페이스이기 때문에 Hibernate, OpenJPA 등의 구체 클래스가 존재한다.

JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 이로써 개발자는 어떤 SQL이 실행될지 생각만 하면 되고, 예측도 더욱 쉽게 할 수 있게 된다.

무엇보다도 JPA를 사용하면 SQL이 아닌 객체 중심으로 개발할 수 있다는 것이 가장 큰 장점이다. 이에 따라 생산성이 향상되고 유지보수가 쉬워진다. 또한, 데이터베이스에서 객체의 상속관계를 사용할 수 있게 해준다. 참고로 JPA의 저장 및 조회는 아래와 같은 구조로 실행된다. 아래의 사진은 순서대로 저장과 조회 과정을 나타내고 있다.

10. AWS RDS

1) AWS RDS

AWS RDS는 클라우드에서 관계형 데이터베이스를 설정, 운영, 확장할 수 있는 서비스이다. Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle, SQL Server를 포함하고 있어 사용자가 데이터베이스 엔진을 선택할 수 있다. 즉, 현재 기존 데이터베이스에서 이미 사용하고 있는 코드, 애플리케이션 및 도구를 Amazon RDS에서 사용할 수 있다.

2) 단일 서버 방식과 데이터베이스 서버 분리 방식

일반적으로 서버를 운영할 때에는 단일 서버로 운영하거나 데이터베이스 서버를 분리하여 사용한다. 단일 서버를 사용한다는 것은 WAS 서버와 DataBase 서버를 하나의 머신에 사용한다는 것인데, 여러가지 이유에서 사용하지 않을 것을 권장한다. 그 이유는 서버를 분리함으로써, 더 많은 사용자의 동시 접속을 가능하게 만들 수 있기 때문이다. 하지만, 무조건 분리하는 것이 좋은 것도 아니다.

먼저 이 두 방식의 차이점을 알아보자. 단일 서버에서는 서버가 웹 클라이언트의 요청을 WAS + 데이터베이스 서버로 연결해준다. 반면, WAS와 데이터베이스 서버를 분리하여 구성하는 경우, 웹 클라이언트의 요청을 WAS에 연결하고 WAS는 데이터베이스 서버와 연결된다. 보통 WAS에서 처리할 부분이 DB서버에 비해 상대적으로 많은 경우 서버를 분리한다. 즉, 데이터베이스보다 이미지나 영상 등 정적 리소스를 많이 사용하는 웹 사이트의 경우 DB서버를 분리해야 한다.

※ 정적 리소스
클라이언트로부터 요청이 들어왔을 때 요청에 대한 리소스가 이미 만들어져 있어 그대로 응답하는 경우를 정적 리소스라 한다. 대체로 html+css+Js파일을 말한다. 이와 반대되는 개념은 동적 리소스로, 런타임 시에 변경될 여지가 있는 리소스를 말한다.

예를 들어보자. 쇼핑몰 등의 웹 사이트에선 사진 및 영상이 많으므로 상대적으로 데이터베이스의 사양보다는 WAS 사양이 중요하다. 만약 DB와 WAS가 하나의 서버로 구현될 경우, WAS의 성능을 높이려면 뜻하지 않게 DB의 성능도 높아지게 된다. 이는 가격적인 측면에서 비효율적일 것이다. 특히, 데이터베이스의 경우는 메모리에 대한 의존도가 WAS보다 월등히 높다(DB는 그 어떤 하드웨어보다 메모리에 영향을 많이 받음). 즉, WAS의 성능을 높이는 방법과 DB의 성능을 높이는 방법이 각기 다르다 보니 WAS의 성능을 높임에 따라 오르게 되는 DB의 성능은 사실 돈만 더 낼뿐 거의 불필요한 성능일 확률이 높고, 반대로 DB의 성능을 높이는 경우에도 WAS의 성능은 거의 제자리일 확률이 높다.

서버에는 견딜 수 있는 한계점이 정해져 있기 때문에 WAS는 WAS대로, DB는 DB대로 최고성능으로 구현할 수 없는 것도 문제이다. 따라서 WAS와 DB를 분리 운영하여 각각의 서버에서 최고 성능을 발휘할 수 있도록 만들어주는 것이다. DB 서버 분리의 장점을 정리하면 아래와 같다.

  • 확장성: 각기 다른 스펙의 머신을 사용하므로 더 높은 성능을 기대할 수 있음
  • 보안성: DB서버를 분리하여 제한적인 권한만을 부여함으로써 상당 부분 보호가 가능
  • 백업: 서로 다르게 백업 방법을 선택할 수 있어 선택의 폭이 넓음

기존에 단일 서버 방식을 사용하다가 변경할 경우 반드시 동일한 리전을 사용해야 한다. 단일 서버의 장점은 동일 사양 대비 분리 서버보다 더 빠르다는 것이다. 분리 서버는 아무래도 단일서버보다는 처리속도가 느리기 때문에 리전 설정을 같은 곳에 해주어 불필요한 속도 저하를 막아주어야 한다.

[이미지 출처]

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글