주간 랩업/[SSG] JAVA 기반 백엔드 개발 과정

[7주차] 데이터베이스 1 - 5일차

hooooolly 2024. 7. 27. 20:26
2024/07/22
데이터베이스 1일 차

 

오늘은 데이터베이스의 개념과 특징 관계형 데이터베이스에 대해 알아보았다.

관계형 데이터베이스와 NoSQL의 특징도 잠깐 짚고 넘어갔는데 NoSQL은 키 값이 없고 JSON을 통해 데이터를 주고받는다는 점이 달랐다. 

하지만 NoSQL이 테이블끼리의 관계를 완전히 배제하진 않았다. 상황에 따라서 관계를 맺을 뿐인데, 일대다 다대다 등 테이블끼리의 관계를 정의하고 키 값을 통해 연결되는 형식의 관계형 데이터베이스와 큰 차이를 가진 다는 것을 알 수 있었다.

앞으로의 프로젝트에 있어서 관계형 데이터베이스를 사용할 것인데, 실제로 사용하면서 어떤 부분이 장점이고 단점인지, 그런 이유로 NoSQL보다 뒤처지는 이유가 무엇이고 NoSQL이 어떠한 불편함을 해소할 수 있는지에 대해 유념하여 공부해야겠다고 생각했다.

 

 

2024/07/23
데이터베이스 2일 차

 

오늘은 ERD 다이어그램을 보고 각 테이블의 속성과 연관 관계를 분석하여 릴레이션을 생성하는 연습을 해보았다.

테이블을 생성할 때 중요한 것은 현실 세계에서의 관계가 그대로 적용된다는 점이다.

위 hr 스키마로 예를 들자면 Departments와 Locations의 관계에서 가장 마지막에 있는 Regions 테이블을 가장 먼저 생성해야 외래키를 설정할 때 에러가 나지 않는데 이는 현실에서도 어떤 회사가 있을 때 회사의 부서보다 그 회사가 어디에 위치하고 있는지가 먼저이기 때문에 테이블도 위치 정보를 먼저 설정하는 것이 옳은 것이다.

그리고 Regions > Countries > Locations의 순서로 그 범위가 작아지기 때문에 큰 범위를 가진 Regions를 먼저 설계하는 것이 옳다.

 

 

 

2024/07/24
데이터베이스 3일 차

 

데이터베이스 3일 차에는 MySQL 쿼리문을 배워보았다.

조인 문을 사용해서 2개 이상의 테이블을 하나의 테이블처럼 연결하여 조회를 할 수 있었다.

연결하려는 테이블에 같은 속성을 공유하고 있으면 (식별자, 비식별자 관계) 조인절 이후에 on  a.속성 = b. 속성으로 조건을 주어 조인을 할 수 있었다.

데이터베이스가 포함된 스프링 온라인 강의를 듣기 시작했다. 매일 하나씩 들어보기로 하자.

 

 

2024/07/25
데이터베이스 4일 차

 

Join과 Select, Where, Order By 절 과제를 리뷰했다.

나는 동등 조인을 할 때 거의 inner join으로 풀었는데, inner join 대신 카타시안 곱을 써서 같은 속성을 조건문으로 두 테이블을 연결하는 부분을 보면서 다양한 방법을 배울 수 있었다.

SQL문은 같은 결과를 가지더라도 다양한 방법이 존재하기 때문에 여러 사람의 쿼리문을 많이 보면서 여러 방법을 익히는 것이 좋을 것 같다.

하나의 방법만 알고 있으면 다른 사람의 쿼리문을 읽거나 수정할 때 이해하기 어려울 것 같다. 그리고 결과는 같더라도 조회에 걸리는 자원의 소모양이 다를 수 있기 때문에 (조회 시간, 리소스 등) 가장 최적인 쿼리문을 사용하기 위해서 여러 가지 방법을 알아두고 익숙해질 필요가 있다고 생각했다.

오후에는 Select 문의 서브 쿼리를 배웠는데, 서브 쿼리는 배울 내용도 많고 서브 쿼리 자체로 조인을 할 수 있어서 이해하기 가장 어려웠다. 어떤 상황에서는 서브 쿼리에 별칭을 달아주지 않으면 실행 오류가 나는 일이 있어 좀 더 자세히 알아봐야 할 것 같다.

 

 

2024/07/26
데이터베이스 5일 차

 

데이터베이스 5일 차에는 테이블을 복제해서 생성하는 방법과 autocommit 활성화, 비활성화하기,  auto_increment로 시작값을 설정하기 등 알아두면 편한 문법을 배워보았다.

자동 커밋을 비활성화해 두면 테이블을 변경한 뒤 rollback을 통해 테이블의 상태를 변경 이전으로 돌릴 수 있기 때문에 유용한 기능이라고 생각했다.

만약 테이블을 변경한 뒤 자동으로 커밋이 되면 이전 상태로 되돌릴 수 없기 때문에 중요한 데이터를 모두 잃을 수 있는 위험이 있기 때문이다.

오늘은 프로젝트를 진행할 팀원들을 만나고 주말 동안에 물류 시스템을 분석해 오기로 했다.