S2U6 관계형 데이터베이스 회고

    반응형

    [Database & SQL]

    💟 데이터를 저장할 때 인메모리 혹은 CSV 형식 등 File I/O를 사용하게 되면 큰 문제점이 존재한다. 인메모리 방식은 프로그램 종료와 함께 데이터가 사라진다는 점이고, File I/O의 경우 필요한 데이터만 추출하는 것이 아니라 우선 전체를 읽어와야 하기 때문에 비효율적이라는 점이다. 데이터베이스에 대용량의 데이터들에 관계를 부여해 관련 정보만을 추출하고 관리한다면 효율적인 데이터 관리가 가능하다. 데이터베이스에서 데이터를 조작(CRUD)하기 위해 SQL이라는 프로그래밍 언어를 사용한다. 이는 관계형 데이터베이스에서 사용된다. 데이터끼리의 관계나 구조 등을 고정해두지 않은 데이터베이스(NoSQL)도 존재한다. 이는 SQL을 사용하지 않는다.

    [SQL]

    💟 SQL의 기본 문법을 간단한 키워드로 정리하려고 한다. 아주 크게 SQL을 세 종류로 구분하자면 DDL, DML, DCL이다. DDL은 데이터를 정의할 때 사용한다. CREATE, DROP, ALTER등이 있는데 데이터 자체 보다는 그 데이터가 담길 오브젝트에 대한 정의에 활용된다. DML은 데이터에 직접 접근할 때 사용한다. 대표적으로 INSERT, SELECT, UPDATE, DELETE등이 있다. DCL은 데이터베이스에 대한 권한을 정의할 때 사용한다. GRANT, REVOKE 등이 DCL에 포함된다.

     

    데이터베이스! 언제 농담으로(?) 이런 말을 들은 적이 있다. SQL 작성 못 하는 개발자도 많다...라는?? Spring을 쓰다 보면 JPA라는 편리한 기술이 있기 때문일까? 무튼 예전에 유지보수하던 프로젝트들 중 한 프로젝트는 myBatis를 사용해서 sql도 많이 작성했고, 외부에서 데이터를 요청하는 일도 있어서 꽤 자주 사용했었다. 안 쓰다보니 까먹고 있지만ㅠㅠ. 그리고 프로시저...도 작성했었다. 조금 서툴었지만 말이다. 그렇게 하면서 데이터베이스와 SQL에 대한 이해도가 많이 높아졌던 것 같다. 설계라던가 DML은 당시에도 좀 부족하다고 생각했는데 이번에도 학습하면서 그 점을 느꼈다. 그래도 설계하는 과제와, 설계를 토대로 구현하는 과제를 진행하면서 잊을 뻔 했던 것들도 다시한 번 짚을 수 있었고 또 새로 알게 된 내용도 있었다.


    [설계]

    💟 관계형 데이터베이스는 데이터의 집합인 테이블끼리 관계를 맺고 있다. 크게 1:1, 1:N, N:M으로 나눠지는데, 보이는 그대로 각각 몇 개의 레코드가 연결될 수 있는 지를 표현한 것이다. 이 외에도 스스로 관계를 가질 수도 있는데 이는 self-referencing 관계이다. 쉽게 예를 들자면 1:1은, 한명의 사람은 하나의 주민등록번호만 가질 수 있는 것.(적절한 데이터는 아니지만 이러한 관계 구조) 이렇게 서로 하나씩만 연결되는 관계이다. 1:N은 일반적인 게시판의 경우 한 명의 유저(1)가 여러 게시글(N)을 작성하는 것이라 할 수 있겠다. (한 개의 게시물을 여러명이 같이 쓰는 것은 일반적으로 불가능하다.) N:M의 예는 한 명이 여러 개의 제품을 살 수도 있고, 한 제품은 여러 명의 손님으로부터 구매될 수도 있는 관계가 되겠다.(하나의 상품 객체가 아닌, 같은 상품코드를 가진 하나의 제품으로 봐야 한다) self-refenrencing 관계는, User 데이터에서 추천인 필드에 데이터를 입력할 때 User의 데이터를 이용하는 경우이다.

    각 테이블은 레코드의 고유한 값인 기본키를 가진다. 엄밀히 말하자면 기본키는 중복될 수 없기 때문에 기본키로 설정된 컬럼은 고유한 값을 가져야 한다. 기본키는 다른 테이블과 관계를 맺을 때 참조된다. 이때 다른 테이블에서 이 기본키와 연결되는 키가 외래키이다. 이 외에도 슈퍼키, 후보키 등 여러 용어가 있지만 여기서는 정리하지 않으려고 한다.

     

    직접 데이터베이스 구조를 설계하는 과제를 진행하면서, 정말정말 혼란스러웠다!! 이게 맞는 구조일까 이렇게 하면 괜찮을까 기본키는 어떻게 설정하고 어떻게 관계를 지정해야 할까... 싶어서 말이다. 여긴 없었지만 후에 인덱스 등등 추가사항이 있다면 난 어떨까 많은 고민에 빠졌던 것 같다... DB관련 업무를 따로 하는 사람도 있을 만큼  참 딥하고 전문적인 영역이라는 생각도 든다. 무튼 이 챕터에서는 self-refenrencing 개념을 새로 알게 됐다. 새로 알았다기 보다는 키워드를 처음 알게 되었다고 보는 게 맞을까? 자기참조를 해본 적은 없어서 그런 키워드에 대한 인식이 없었던 것 같다. DB 구조에서 관계 설정이 아주 중요하다고 생각한다. 후에 나도 직접 실무에서 데이터베이스 구조를 러프하게라도 고민해야할 일이 온다면 결과물에 자신있진 않지만 그래도 규칙(?)에 맞춰 열심히 해볼 자신은 있다ㅎㅎㅎ


    🥄 Unit 6. 관계형 데이터베이스를 마치고!

    DDL DML DCL 그리고 여기 더해서 테이블 정규화 과정은 정처기 때문에 죽어라 공부했었던 기억이 난다. ㅎㅎ(죽어라는 아니긴 하다.) 그래도 기출문제를 보면 매번 꼭 한 문제 씩은 나올만큼 중요했던 것 같고 내가 본 시험에도 정규화의 목적과 DCL관련 문제가 나왔던 것으로 기억한다. 사실 정보처리기사 공부를 하면서 제일 설렁설렁해도 결과가 괜찮았던 과목이 데이터베이스였는데 그래서인지는 모르겠지만 이번 유닛이 꽤 수월하게 진행된 느낌이다. 아주 복잡한 쿼리나 생소한 키워드를 사용하는 단계까지는 접근 안 한 탓도 있을 것이다. 한편 DCL을 통한 권한 관리는 해본 적도, 사용된 걸 본 적도 없어서 예전부터 항상 궁금한데 이번 학습에서는 다루지 않고 있어 조금 아쉽기도 했다. 그리고 NoSQL이나 postgreSQL를 조금 더 접해볼 수 있을까 기대도 했었는데 그러지 못해 아쉬웠다ㅠㅠ 나중에 혼자 더 살펴보는 걸로... 무튼 꽤 기본적인 부분만 훑고 지나간 느낌이라 어려움은 없었지만!! 그래도 오래 쓰지 않아서 잊어가고 있는 것들을 다시금 접해볼 수 있어 좋았던 관계형 데이터베이스 회고 끝

    반응형

    댓글