오늘의 학습은!
정규화, 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부터 빠짝 해야할 거같아요!!!
오늘도 열심히했구!!!!!!!!!
내일도 파이팅!!!!!!!!!!!

'[4기] 백엔드 개발자 부트캠프 "오르미" ~ing > [4기] 백엔드 개발자 부트캠프 오르미 수업 복습' 카테고리의 다른 글
| [4기] 64일차 SpringBoot(동적 페이지 구현) (0) | 2024.03.05 |
|---|---|
| [4기] 63일차 SpringBoot(디렉터리 구성 및 발전시키기) (0) | 2024.03.04 |
| [4기] 57일차 SQL( DDL,DCL ) (0) | 2024.02.27 |
| [4기] 56일차 SQL( 서브쿼리, DDL - CREATE ) (0) | 2024.02.26 |
| [4기] 52일차 SQL(기본명령어 DML, 내장함수, 그룹화, JOIN) (2) | 2024.02.22 |