본문 바로가기

전체 글83

데이터베이스 첫걸음 정리 - 31장. 집합 연산 SQL과 집합 RDBMS, 관계형 데이터베이스는 관계형 모델을 채택한 데이터베이스입니다. 관계형 모델에서 관계형은 수학 집합론의 관계형 이론에서 유래했습니다. 집합론이라고 거창하게 말하지만 결국 데이터베이스의 데이터를 집합으로 간주해 다루기 쉽게 하자는 것이 목표입니다. 데이터베이스에서 테이블이 집합, 테이블의 하나의 행이 집합의 요소에 해당합니다. 행은 여러개의 열로 구성될 수 있으므로, 복수의 값이 요소가 될 수 있습니다. SELECT 명령을 실행하면 데이터베이스에 질의하며 그 결과 몇 개의 행이 반환됩니다. 이때, 반환된 결과 전체를 하나의 집합이라고 생각하시면 됩니다. 합집합 합집합은 집합을 서로 더하는 것을 말합니다. 먼저 A와 B라는 두 개의 집합이 존재한다고 했을 때, A 집합에는 {1, 2.. 2022. 10. 1.
데이터베이스 첫걸음 정리 - 30장. 뷰 작성과 삭제 뷰(View) 뷰는 데이터베이스 객체 중 하나로, 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로써 이름을 붙여 관리할 수 있도록 한 것 입니다. SELECT 명령은 실행했을 때 테이블에 저장된 데이터를 결과값으로 반환합니다. 따라서 뷰를 참조하면 그에 정의된 SELECT 명령의 실행결과를 테이블처럼 사용할 수 있습니다. SELECT 명령은 데이터베이스 객체인가? 데이터베이스 객체란 테이블이나 인덱스와 같이 데이터베이스 안에 정의하는 모든 것입니다. SELECT 명령은 데이터베이스 안에 저장되지 않기 때문에 데이터베이스 객체가 아닙니다. SELECT 명령의 경우 이름을 지정할 수도 없고 데이터베이스에 등록되지도 않기 때문입니다. FROM 구의 경우 SELECT 명령을 통해 서브쿼리의.. 2022. 9. 30.
데이터베이스 첫걸음 정리 - 29장. 인덱스 작성과 삭제 인덱스는 데이터베이스 객체의 하나로 DDL을 사용해서 작성하거나 삭제합니다. 표준 SQL에는 CREATE INDEX 명령은 없습니다. 인덱스 자체가 데이터베이스 제품에 의존하는 선택적인 항목으로 취급됩니다. 하지만 대표적인 데이터베이스 제품에는 모두 인덱스 구조가 도입되어 있으며, 모두 비슷한 관리 방법으로 인덱스를 다룰 수 있습니다. 인덱스 작성 인덱스는 CREATE INDEX 명령으로 만듭니다. 인덱스에 이름을 붙여 관리하는데, 데이터베이스 객체가 될지 테이블의 열처럼 취급될지는 데이터베이스 제품에 따라 다릅니다. 각 데이터베이스 별 인덱스 관리 Oracle, DB2 → 스키마 객체 SQL Server, MySQL → 테이블 내의 객체 인덱스를 작성할 때는 해당 인덱스가 어떤 테이블의 어느 열에 관한.. 2022. 9. 29.
오라클 클라우드(OCI) 자율 운영 데이터베이스 연결하기 이번에 개인 프로젝트를 진행하면서 무료로 사용할 수 있는 오라클 클라우드의 자율운영 데이터베이스(오라클 DB)를 사용하게 되었습니다. 인텔리제이에서 개발하면서 내부 테이블 확인 등 쿼리를 날릴 수 있도록 데이터베이스 연동이 필요하다고 생각하였고 이를 위해 했던 삽질들을 기록하게 됐습니다. 여기서는 Database를 생성하는 과정이 아닌 생성후 DB 연결과정만 다룹니다. 삽질1, OCID를 통해 연결하기 AWS에서 RDS로 DB를 연결할때 사용했던 것 처럼 OCID가 DB의 EndPoint 주소라고 생각했고 다음과 같이 Host에 OCID를 적고 User 정보를 입력했더니 연결에 실패했었습니다. 검색해보니 Oracle에 연결할 때 전자 지갑이라는 것이 필요하다는 것을 알게 되어 전자 지갑으로 연결하는 방법.. 2022. 9. 28.
데이터베이스 첫걸음 정리 - 28장. 인덱스 구조 인덱스 인덱스는 테이블에 붙여진 색인으로, 역할은 검색속도의 향상입니다. 여기서 “검색"이란, SELECT 명령에 WHERE 구로 조건을 지정하고 그에 일치하는 행을 찾는 일련의 과정을 의미합니다. 테이블에 인덱스가 지정되어 있으면 효율적으로 검색할 수 있으므로 WHERE로 조건이 지정된 SELECT 명령의 처리 속도가 향상됩니다. 인덱스의 경우 책의 목차나 색인과 비슷합니다. 책 안에 있는 특정한 부분을 찾고 싶은 경우 본문을 처음부터 읽는 것 보다 목차나 색인을 참고해서 찾는 편이 효율적일 것입니다. 바로 인덱스가 이런 역할을 합니다. 인덱스의 구조도 목차나 색인과 비슷합니다. 목차나 색인에 제목/키워드별 페이지 번호가 적혀있듯, 데이터베이스 인덱스에는 검색 시에 쓰이는 키워드와 대응하는 데이터 행의.. 2022. 9. 27.
데이터베이스 첫걸음 정리 - 27장. 제약 테이블에 제약을 설정함으로써 저장될 데이터를 제한할 수 있습니다. 예를 들어 NOT NULL 제약은 NULL 값이 저장되지 않도록 제한합니다. NOT NULL 제약외에도 기본키(Primary Key) 제약이나 외부참조(정합) 제약 등이 있습니다. 이 제약은 데이터베이스 설계에도 영향을 주는 중요한 개념입니다. 특히 기본키제약은 RDBMS에서 반드시 언급되는 사항이므로 추가나 삭제방법을 확실하게 알아두어야 합니다. 테이블 작성시 제약 정의 제약은 테이블에 설정하는 것입니다. CREATE TABLE로 테이블을 작성할 때 제약을 같이 정의합니다. 물론 ALTER TABLE로 제약을 지정하거나 변경할 수 있습니다. 이 때 NOT NULL 제약 등 하나의 열에 대해 설정하는 제약은 열을 정의할 때 지정합니다. 다.. 2022. 9. 26.
Oracle Cloud에서 HTTP 포트 열기 Oracle Cloud를 사용해서 웹 서비스를 만들경우 기본적으로 ICMP, SSH만 열어놓기 때문에 HTTP, HTTPS 요청은 거부하게 됩니다. 이를 해결하기 위해서 Oracle cloud에서 HTTP, HTTPS를 제공하기 위해 해당 포트를 여는 방법을 정리해보겠습니다. 먼저, 오라클 클라우드 콘솔로 접속합니다. 네트워크 관련 설정을 위해 가상 클라우드 네트워크(VCN)로 이동합니다. 현재 인스턴스가 속해있는 VCN을 선택해서 들어갑니다. (따로 설정하지 않았다면 기본으로 생성되어있는 것 한개만 존재합니다.) VCN에 들어가면 좌측에 리소스에 네트워크 보안 그룹으로 이동합니다. 새로운 규칙을 생성하기 위해 "네트워크 보안 그룹 생성" 버튼을 눌러 새로운 보안 그룹을 생성합니다. 네트워크 보안그룹에 .. 2022. 9. 25.
Docker-compose 실행시 .env 파일을 읽어오는 중에 Permission Denied 에러 프로젝트 진행을 위해 Oracle Cloud(Ubntu 20.04)에서 docker-compose 파일을 작성하던 중 다음 에러가 발생했습니다. ... File "/snap/docker/1779/lib/python3.6/site-packages/dotenv/main.py", line 54, in _get_stream with io.open(self.dotenv_path, encoding=self.encoding) as stream: PermissionError: [Errno 13] Permission denied: './.env' .env 파일에 접근하는데 권한이 부족하다는 메세지를 확인해서 처음에는 chmod 명령을 사용해 .env 파일에 모든 권한을 부여했습니다. chmod 777 .env 하지만 여.. 2022. 9. 25.