일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바
- 스트림
- 자료구조강의추천
- lamda
- RFC
- 데이터베이스강의
- 안드로이드
- 오류제어
- 정규식
- 코딩독학방법
- 코드라떼
- 백엔드 개발 코딩 강의
- 백엔드 강의
- java8
- 백엔드 코딩
- 자바자료구조
- 개발자
- thread
- 스타트업
- Android
- 코딩입문
- C포인터
- CodeLatte
- 자바8
- 데이터베이스기초
- java
- CodeCommit
- Stream
- 문돌이
- 람다
- Today
- Total
이병록의 개발 블로그
데이터베이스 강의를 추천하는 것 보다 더 중요한 것 본문
데이터베이스 강의를 추천하기에 앞서 네 부분의 단락의 글을 작성합니다.
1. 데이터베이스를 공부하는 목적
2. 데이터베이스를 학습할 때 챙겨야 하는 것
3. 개발자로 일하려면 미리 배워두어야 할 개념
4. 심화는 DBMS에 대해 배우는 것
데이터베이스를 공부하는 목적
데이터베이스를 공부해야 하는 이유를 여러곳에서 많이 읽거나 들었을 겁니다. 여러분들은 왜 데이터베이스를 배우려고 하셨나요? 사람마다 다양한 이유와 목적이 있겠지요. '개발자가 되기 위해서는 배워야 한다더라', '컴퓨터 공학의 기초이니 배워야 한다', '포트폴리오를 만들기 위해서 배워야 한다', '회사에서 사용하는데 지식이 부족한 것 같다' 등 다양한 이유가 있을겁니다. 그럼 데이터베이스를 배우는 목적은 무엇일까요? 저는 이렇게 생각합니다. "데이터를 더 잘 다루고, 다루는 원리에 대해서 배우기 위한 것이다"
개발자 지망생이나 또는 개발자의 길을 이미 걷고 있는 사람이라면 데이터베이스를 배울 때 단순히 사용하기 위해서 배우는 것 보단 데이터를 다루는 원리에 대해 집중해서 배우는 것이 좋습니다. 개발을 하다보면 현실 세계의 다양한 문제들을 겪게 되는데 문제를 좀 더 수월하게 해결하는 방법은 문제를 먼저 겪어본 사람들의 방법을 참고하는 것입니다. 문제를 먼저 겪어본 사람들은 그 문제를 해결하기 위해 몇 십년 동안 다양한 연구를 해왔기 때문에 배울점이 상당히 많습니다. 또한 문제를 해결하기 위한 통찰력을 향상시켜줍니다. 그러므로 데이터베이스를 공부할 때 넓게 바라봤으면 좋겠습니다.
데이터베이스를 학습할 때 챙겨야 하는 것
데이터베이스 학습할 때에는 크게 여섯 가지 기본 개념을 배워야 합니다. 첫 번째는 데이터 관계를 설계하는 데이터 모델링, 두 번째는 데이터 관계가 부적절하게 설계된 것을 고치는 정규화, 세 번째는 데이터베이스와 소통하기 위한 선언적 언어인 SQL, 네 번째는 DBMS(Database Management System)에서 정보를 어떻게 유도하는지 배우는 관계 대수, 다섯 번째는 데이터를 빠르게 검색할 수 있도록 구조화된 인덱스, 여섯 번째는 다중 사용자 환경에서 동시성을 제어 하기 위한 잠금 메커니즘과 논리적 작업 단위를 설명하는 트랜잭션이 있습니다.
데이터베이스에서 여섯 가지 개념은 매우 중요하나 상황상 많은 부분을 생략한 채로 데이터베이스를 학습하게 됩니다. 그 이유로 학부에서 배우는 것이라면 강의 시간이 한정되어 있다는 점, 오프라인 학원에서 배우는 강의도 시간이 한정되어 있다는 점, 온라인 강의는 부분적으로 커리큘럼이 진행된다는 점이 있습니다.
위의 문제와 더불어 데이터베이스를 처음 학습하거나 입문이라면 무엇을 공부해야할 지 잘 모를 수 있습니다. 무엇이 중요한지, 무엇이 중요하지 않은지에 대해서 판단하기도 쉽지 않습니다. 그래서 데이터베이스를 학습한 사람들을 보면 부분적으로 학습한 상태에서 필드에 나오다보니 어디서 부터 다시 학습하는 것이 좋을지 조언을 해주기가 쉽지 않습니다. 오히려 처음 배우는 사람이라면 '데이터베이스 개론' 책을 읽으라고 하면 되지만 이미 부분적으로 학습한 사람들은 스스로 알고 있다고 착각하기도 하고 학습했던 부분이 나오면 지겹기도 하기 때문에 대충 넘어갑니다. (저도 지겹습니다...ㅠ)
그리고 실무에서는 DBMS(Database Management System)를 다루기 때문에 기업에서 사용하는 DBMS에 대해서 공부를 하게 됩니다. 그러나 기초가 부족하다면 이해하는데 어려움을 겪게됩니다. DBMS는 다양한 컴퓨터 공학적인 이론들이 합쳐진 소프트웨어이므로 DBMS를 잘 사용하고 이해하려면 컴퓨터 과학 지식이 중요합니다. 그렇다고 모든 지식을 쌓는 것은 시간도 부족하고 현실적으로 불가능합니다. 그러나 기초를 배워둔다면 응용적인 부분이나 심화적인 지식을 쌓는데 좀 더 수월합니다.
개발자로 일하려면 미리 배워두어야 할 개념
결론적으로 데이터베이스를 배울 때 여섯 가지 기본 개념을 알아두는 것이 좋습니다. 이후에 DBMS를 집중적으로 공부하는 심화과정으로 갈 때 기본 개념을 바탕으로 수월하게 학습할 수 있습니다.
1. 데이터 모델링
데이터 모델링은 현실 세계에 있는 데이터를 요구 사항에 의해 컴퓨터의 세계로 매핑하는 과정이며 데이터의 중복을 줄이고 무결성을 유지하기 위해 설계하는 과정입니다. 데이터 모델링을 배우는 과정에서 ERD를 그리는 방법을 배우며 ERD의 각 요소들이 어떤 역할을 하고 어떤 의미를 가지고 있는지에 대해 배웁니다. 데이터 모델링을 할 수 없으면 데이터 설계가 불가능하다는 것과 동일합니다. 그러므로 개발자는 기본적으로 데이터 모델링을 하는 방법에 대해서 배워야 합니다.
2. 정규화
릴레이션으로 이미 사상되어있거나 운용되고 있는 데이터베이스에서 발생하는 무결성과 중복 문제를 해결하기 위해 설계를 고쳐나가는 정규화를 배웁니다. 처음부터 데이터 모델링이 잘 되어 있으면 정규화를 할 필요가 없으나 만약에 제대로 설계되어 있지 않은 경우 단계별로 문제를 확인하고 고쳐나가는 과정을 거쳐야 합니다. 이 과정에 대해서 기본적인 부분들을 배워두는 것이 좋습니다.
3. SQL
데이터베이스를 관리하는 DBMS(Database Management System)와 소통하기 위한 선언적 언어인 SQL에 대해서 배워야 합니다. 설계된 데이터를 실제로 DBMS에 적용하거나 DBMS를 사용하면서 데이터를 삽입(INSERT), 수정(UPDATE), 삭제(DELETE), 검색(SELECT)을 하기 위해 배웁니다. SQL에 대해서는 워낙 많이 알려져 있어서 별도로 설명이 필요없을 것 같습니다.
4. 관계 대수
관계 대수는 SQL 질의를 깊게 이해하기 좋습니다. SQL과는 조금 다르게 DBMS에서 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적 언어입니다. 필수적인 것은 아니지만 관계 대수에 대해서 배우면 DBMS가 대략적으로 어떻게 데이터를 가공하는지 감을 잡을 수 있고 SQL에 대해서 더 잘 이해할 수 있습니다.
5. 인덱스
인덱스는 책의 색인과 같이 데이터 색인을 말합니다. 즉 특정 데이터 모음에서 데이터를 빠르게 찾을 수 있도록 색인되어 있는 것을 말합니다. 데이터베이스의 사용하는 목적은 다수의 사용자가 데이터를 잘 저장하고 검색하려고 사용합니다. 중요한 건 데이터베이스를 사용하면서 저장되는 데이터는 단순히 몇 만개 몇 십만 개가 아니라 백만에서 억까지의 데이터가 저장될 수도 있습니다. 그런데 문제는 데이터가 많을수록 데이터를 검색하는 과정이 오래 걸립니다. 검색이 오래 걸리는 문제는 애플리케이션의 전체 성능과 연관이 있기 때문에 반드시 해결되어야 합니다. 그나마 자주 사용되지 않는 데이터는 괜찮지만 자주 사용되는 데이터들은 빠르게 가져오도록 설계되어야 합니다. 이 과정에서 DBMS가 어떻게 데이터를 구조화하여 인덱스를 만들고 관리하는지 그리고 인덱스가 어떤 영향을 끼치는지 배워야 합니다.
6.트랜잭션
트랜잭션은 논리적 작업 처리의 가장 작은 단위입니다. 데이터베이스는 다수의 사용자가 연결되어 질의를 실행하기 때문에 질의 실행 스케쥴과 밀접한 연관이 있습니다. 다수의 사용자가 동일한 시간대에 동일한 데이터에 접근하여 데이터를 읽거나 쓰거나 하는 경우 발생할 수 있는 문제가 존재합니다. 예시로 A 사용자가 1번 3번 5번 데이터를 변경하는 하나의 작업을 실행하는 동안 B 사용자가 3번 데이터를 변경하는 경우 최종적으로 어떤 데이터로 변경되어야 하는지 불분명합니다. 또한 DBMS는 데이터를 내부적으로 파일에 저장하는 과정이 있기 때문에 작업 도중 다른 작업에 의해서 간섭되면 예상치 못한 문제가 발생할 수 있습니다. 이 문제가 발생하지 않도록 동시성 제어를 하는데 이 과정에서 잠금 관련 기술이 사용됩니다. 이 부분에 대한 개념을 정확히 집고 넘어가지 않는다면 트랜잭션을 사용할 때 예상치 못한 상황을 겪을 수 있기 때문에 트랜잭션에 대해서 배워야 합니다.
심화는 DBMS에 대해 배우는 것
기본적인 개념들을 배웠으면 기업에서 사용하는 DBMS에 대해서 학습해야 합니다. 현업에서 사용되는 DBMS는 용도에 따라 매우 다양합니다. 그리고 DBMS마다 작동 방식도 조금 다르고 특징도 다르기 때문에 잘 사용하려면 DBMS에 대해 공부해야 합니다. DBMS를 운용하다 보면 생각지 못한 문제들이 발생할 수 있는데 문제들을 대응하고 잘 해결하려면 DBMS의 엔진에 대해서도 공부해야 하고 다양한 설계 방식에 대해 배워야 합니다. 완벽한 자료구조 없고 완벽한 알고리즘이 없듯이 완벽한 DBMS가 존재하지 않습니다. 각 상황에 맞게 적절한 DBMS를 도입해야 하기 때문에 사용하거나 사용할 DBMS의 특징에 대해서 잘 알아야 합니다. 그래야지 그 상황에서 효율적인 방법을 택할 수 있습니다.
결론
수많은 사람들의 노력에 의해 과거보단 좋은 데이터베이스 강의가 많지만 그중 하나의 강의를 추천하고 싶습니다. 해당 강의는 데이터베이스의 기초 개념을 잡고 질적 성장을 하기 위한 발판으로 좋은 선택이 될 수 있습니다. 만약에 자신이 부족한 부분이 느껴진다면 다시 한번 기초를 다지는 것도 좋은 방법입니다.
https://www.codelatte.io/courses/database_basic
'사설' 카테고리의 다른 글
자바 자료구조 강의 추천! (1) | 2021.08.24 |
---|---|
코딩 독학 하는 좋은 방법 (14) | 2021.05.20 |
문돌이가 개발자가 되기까지 4탄 (24) | 2020.01.25 |
문돌이가 개발자가 되기까지 3탄 (0) | 2019.12.24 |
문돌이가 개발자가 되기까지 2탄 (1) | 2019.12.22 |