[4기] 백엔드 개발자 부트캠프 "오르미" ~ing/[4기] 백엔드 개발자 부트캠프 오르미 수업 복습

[4기] 58일차 SQL( 데이터모델링과 ERD ), Spring이란?

sohee99 2024. 2. 28. 17:49

오늘의 학습은!

 

정규화, spring !!

 

 

정규화(Normalization)란?

- 데이터의 구조를 최적화하는 과정 / 데이터의 중복을 최소화하는데 목적

 

 

정규화 전

주문번호
제품이름
제품제조사
고객이름
고객주소
1
노트북
삼성전자
오르미
서울
2
노트북
엘지전자
내리미
부산
3
TV
삼성전자
오르미
서울
4
TV
엘지전자
내리미
부산

 

 

정규화 후

중복을 없애기 위해 테이블 3개로 분리 

 

1. 주문 테이블 

주문번호 고객번호 제품번호
1
1
1
2
2
2
3
1
3
4
2
4

 

2. 제품 테이블 

제품번호
제품이름
제품제조사
1
노트북
삼성전자
2
노트북
엘지전자
3
TV
삼성전자
4
TV
엘지전자

 

3. 고객 테이블 

고객번호 고객이름 고객주소
1
오르미
서울
2
내리미
부산

 

이렇게 정규화를 하여 열의 개수를 3개로 줄이고 번호로 대체 되었습니당

 

이렇게 정규화를 하여 특정 주제에 집중!

특정주문의 고객정보를 알고 싶을땐 주문테이블과 고객테이블 조인

 

 

< 정규화의 장점 >

1. 일관성 - 데이터를 수정하거나 삭제할 때 오류 발생 가능성 줄어들고, 일관성 유지 쉬워진다.

 

2. 유연성 - 데이터 구조를 변경하거나 새로운 요구사항을 쉽게 수용할 수 있다.

 

3. 저장 공간 최적화 - 정규화로 저장 공간을 효율적으로 사용할 수 있다. 

 

 

> 데이터 관리가 쉬워지며 새로운 요구 사항에 유연하게 대응할 수 있고, 저장 공간의 비용을 절감하기위해 정규화를 사용

 

정규화의 종

 

 

제 1 정규화 (1NF)

 

- 각 열이 하나의 값을 가지게 하는 과정

주문번호 제품명 제품구성
1
노트북
CPU, RAM, SSD
2
스마트폰
CPU, RAM, 배터리
3
스마트워치
CPU, 배터리

 

이렇게, 제품구성에 여러개의 값을 가지고 있는 테이블의 경우 1정규화 과정을 거쳐야한다. 

 

 

하나의 값만이 존재해야한다.

주문번호 제품명 제품구성
1
노트북
CPU
1
노트북
RAM
1
노트북
SSD
2
스마트폰
CPU
2
스마트폰
RAM
2
스마트폰
배터리
3
스마트워치
CPU
3
스마트워치
배터리

 

 

제 2 정규화 (2NF)

- 테이블의 비주요 속성이 기본키에 대해 완전 함수 종속 되도록 하는 것 

* 모든 열이 기본키(PK) 에 의존해야한다는 것

 

주문번호 제품명 제조사
1
노트북
삼성전자
2
스마트폰
엘지전자
3
스마트워치
애플

 

하나의 테이블은 하나의 주제를 가지도록 분리 시켜보면?

 

1. 주문 테이블

주문번호 제품명
1
노트북
2
스마트폰
3
스마트워치

 

2. 제품 테이블

제품명 제조사
노트북
삼성전자
스마트폰
엘지전자
스마트워치
애플

 

요렇게 분리분리!!!!! 제조사는 제품명을 바라보기 때문에 분리!!!

 

 

제 3 정규화 (3NF)

- 제 2정규화를 완료한 테이블에서 이행적 함수 종속성을 제거하는 과정 

 

 

이행적 함수종속성? 
- A -> B 종속, B -> C 종속, A -> C 종속인 관계

주문번호에 제품명이 종속되어있고, 제품명에 제품카테고리가 종속되어있기 때문에

 

주문번호에 제품카테고리 또한 종속되어있다고 볼 수 있다. 

 

이런 종속 관계를 끊기위해 주문과 제품을 별도 테이블로 분리한다!

 

 

이해는 가지만 2정규화와 3정규화의 느낌이 비슷해서 조금 애매하다는 생각이 드네요 ㅎㅎ..

 

 

데이터 모델링 소개

- 데이터베이스를 구축하기 위해 데이터의 구조와 관계를 시각적으로 표현한것

 

출처 - 이스트소프트 조성연

 

여러개의 테이블이 존재, 테이블 사이의 관계를 시각적 표현

 

 

< 데이터 모델링 장점 >

 

1. 데이터의 전체적인 구조를 파악하는데 도움

2. 협업하는 동료들과 소통 유용

 

 

< 절차 3단계 > 

 

1. 개념적 모델링

 

- 비지니스 요구사항을 파악하고 데이터모델로 표현하는 단계 

 

출처 - 이스트소프트 조성연

 

쇼핑몰을 구현하기위해 개념적으로 모델링한 예시 

 

회색은 개체(테이블) 의미, 파랑색은 관게를 의미

 

 

2. 논리적 모델링

 

- 개념적 모델을 기반으로 데이터의 구조와 관계를 구체화하는 단계

 

 

구체화된 부분 : 각테이블으리 필드 정보, 테이블간의 관계 ( 1:1 , 1: N, N: M )

 

한명의 회원이 여러개의 주문을 할 수 있는건 1 : N 

또한, member_id 필드가 member와 order에 양쪽 모두 존재하는 것을 보아

member_id라는 key로 맺어져 있음을 알 수 있다.

 

 

3. 물리적 모델링

 

- 논리적 모델을 기반으로 실제 데이터베이스로 구현하는 단계

 

시각에서 SQL문을 통해 실제 테이블 작성 

 

CREATE TABLE `member` (
	`member_id`	VARCHAR(30)	NOT NULL,
	`email`	VARCHAR(30)	NULL
);

CREATE TABLE `order` (
	`order_id`	VARCHAR(30)	NOT NULL,
	`member_id`	VARCHAR(30)	NOT NULL,
	`item_id`	VARCHAR(30)	NOT NULL
);

CREATE TABLE `item` (
	`item_id`	VARCHAR(30)	NOT NULL,
	`item_name`	VARCHAR(30)	NOT NULL
);

 

 정리

1. 요구사항 분석

2. 요구사항 충족을 위해 필요한 데이터 정하고, 그들의 관계를 설정하는 개념적 모델링

3. 개념적모델 기반 구체적인 표로 만드는 논리적 모델링

4. 실제 데이터베이스 테이블로 만드는 물리적 모델링

 

 

Spring

 

- 자바 기반의 엔터프라이즈 애플리케이션 개발을 위한 프레임 워크로, 개발자들이 복잡한 서버 성능과 안전성,

보안 등을 고려하지 않고도 기능 개발에 집중 할 수 있도록 도와준다.

- 의존성 주입, 관점 지향 프로그래밍등의 개념을 통해 애플리케이션을 유지보수하기 쉽도록 도와준다. 

 

즉, 스프링 프레임워크개발자가 메인 로직에 집중할 수 있도록 제공해주는 역할

 

 

클라이언트와 서버

 

클라이언트(웹브라우저) : 서버에 다양한 요청

 

- 서버로 요청하는 프로그램, 웹브라우저가 대표적인 클라이언트 

웹브라우저에 주소를 입력후 엔터를눌러 요청하는 행위를 서버에 요청한다고 표현할 수 있다. 

 

서버 : 클라이언트가 요청한 내용을 처리 

 

- 클라이언트의 요청을 받아 처리하는 주체 

 

 

 

서버의 이해

 

 

정적인 컨텐츠로 응답

 

- 데이터베이스를 사용하지 않아도 바로 웹서버에서 정보를 꺼내 응답 가능

 

 

동적인 컨텐츠로 응답

웹서버는 다양한 요청(동적인 컨텐츠)를 처리하기 위해 비즈니스로직이라는 것을 미리 준비

웹 서버 > 여러개의 비즈니스로직이 합쳐진 것

 

Servlet : 자바를 이용해 웹페이지를 동적으로 생산하는 백엔드 웹 애플리케이션 개발 기술을 의미

페이지를 받아 누군가에게 페이지를 전달하는 것이 servlet

 

 

서블릿,,,,,,,,,,,,,,,,,,,,,,,,,,,음..........................

 

헷갈리네요..................................

 

내부 구현에 대해 따로 알아봐야할거 같아욤,,,,,ㅠ

 

개발자는 어노테이션을 이용하여 작업할 수 있다. 기억기억

 

 

스프링 관련 개념 사이트 참고하자!

https://melonicedlatte.com/2021/07/11/232800.html

 

오늘은 스프링은 뭐지? 에 대해 배웠는데 

 

개발자에게 정말 봄을 주는 스프링 ㅎㅎㅎㅎㅋㅋㅋㅋ

한파주의보,,,,ㅋㅋㅋㅋㅋㅋㅋ

 

내일 좀 더 스프링에 대해 배우니깐 내일부터 스프링 구현!!!!

 

오늘도,,,,,,,,,,여전히,,,,,,,,,

 

 

SQL 공부하러.........................ㅠ

 

재밌긴한데 틈틈이 자바도 공부해야하는데 시간이 많이 부족하네용 ㅠㅠ

 

일단 시험기간 2주남았으니 SQL부터 빠짝 해야할 거같아요!!! 

 

오늘도 열심히했구!!!!!!!!!

 

내일도 파이팅!!!!!!!!!!!