Dao는 DB작업을 하므로 SQL 코드를 수행하는 이름으로 메소드 이름을 지어주는 것이 좋음
Service 쪽은 기능에 맞춰 메소드 이름을 지어주는 것이 좋음
Service가 트랜잭션을 관리하므로
res = -1 부분 확인하기
| class | teacher | subject | stdno | stdname |
|---|---|---|---|---|
| A | alice | 과학 | 1, 2 | apple, banana |
| B | bob | 수학 | 3, 4 | cherry, durian |
| C | clare | 과학 | 5 | grape |
| D | alice | 과학 | 6 | mango |
이상 증상(이상 현상)이 발생할 수 있음이상 현상, Anomaly : 테이블들이 공통으로 가지는 데이터 중 한 쪽 테이블에 DML(삽입, 수정, 삭제)이 적용되었을 때 공통 데이터를 가지는 모든 테이블에 똑같이 적용되지 않는 현상(문제점)BCNF : 3 정규화와 비슷하지만 단점을 보완한 형태 👉🏻 있을 수도 있고 없을 수도 있음각 행의 컬럼마다 1개의 데이터만 가지도록 만듬 👉🏻 원자성 확보
| class | teacher | subject | stdno | stdname |
|---|---|---|---|---|
| A | alice | 과학 | 1 | apple |
| A | alice | 과학 | 2 | banana |
| B | bob | 수학 | 3 | cherry |
| B | bob | 수학 | 4 | durian |
| C | clare | 과학 | 5 | grape |
| D | alice | 과학 | 6 | mango |
class를 단독 PK로 두고싶음 👉🏻 PK가 행을 구분하는 기준 컬럼이 될 수 있는지 판단함
- PK로 가정한 class 컬럼이 teacher, subject에 종속되어있음
- PK로 가정한 class 컬럼에 stdno, stdname이 종속되어있지 않음
👉🏻 하나의 PK로 종속이 가능하도록
[PK에 종속된 부분 컬럼들]
| class | teacher | subject |
|---|---|---|
| A | alice | 과학 |
| A | alice | 과학 |
| B | bob | 수학 |
| B | bob | 수학 |
| C | clare | 과학 |
| D | alice | 과학 |
[PK에 종속되지 않는 부분 컬럼들]
| class | stdno | stdname |
|---|---|---|
| A | 1 | apple |
| A | 2 | banana |
| B | 3 | cherry |
| B | 4 | durian |
| C | 5 | grape |
| D | 6 | mango |
stdname컬럼이 PK인 class 컬럼에 종속되지 않고 일반 컬럼 stdno에 종속됨
👉🏻 (class-stdno) 테이블, (stdno-stdname) 테이블로 분할하기
[class-stdno 테이블]
| class | stdno |
|---|---|
| A | 1 |
| A | 2 |
| B | 3 |
| B | 4 |
| C | 5 |
| D | 6 |
[class-stdname 테이블]
| stdno | stdname |
|---|---|
| 1 | apple |
| 2 | banana |
| 3 | cherry |
| 4 | durian |
| 5 | grape |
| 6 | mango |
- PK인 class 컬럼은 각 행을 구분하는 역할을 잘 수행하고 있음 👉🏻 3NF 유형에 적합
- but, 일반 컬럼인 teacher가 PK를 방해하지 않는 선에서 subject 컬럼을 결정하고 있음
teacher는 1개의 subject를 가진다고 가정- (class-teacher) 테이블, (teacher-subject)테이블로 분할
[class-teacher 테이블]
| class | teacher |
|---|---|
| A | alice |
| B | bob |
| C | clare |
| D | alice |
[teacher-subject 테이블]
| teacher | subject |
|---|---|
| alice | 과학 |
| bob | 수학 |
| clare | 과학 |
| alice | 과학 |
[클래스별 수강 학생 정보 테이블]
| class | stdno |
|---|---|
| A | 1 |
| A | 2 |
| B | 3 |
| B | 4 |
| C | 5 |
| D | 6 |
[학생 정보 테이블]
| stdno | stdname |
|---|---|
| 1 | apple |
| 2 | banana |
| 3 | cherry |
| 4 | durian |
| 5 | grape |
| 6 | mango |
[클래스 담당 선생님 테이블]
| class | teacher |
|---|---|
| A | alice |
| B | bob |
| C | clare |
| D | alice |
[선생님 과목 정보 테이블]
| teacher | subject |
|---|---|
| alice | 과학 |
| bob | 수학 |
| clare | 과학 |
| alice | 과학 |
사용자에게 보이지 않는 코드 영역 ➡ 기능
사용자에게 보여지는 프로그램 영역 ➡ 화면
비지니스 로직 + 프레젠테이션 로직을 하나의 묶음(클래스, 파일, 패키지)로 구현
👉🏻 main()메소드 하나로 데이터를 가공하고 화면 출력까지 다 하는 것
비지니스 로직과 프레젠테이션 로직을 서로 다른 파일(클래스)로 분리한 형태
✔ 단, MODEL 2 개발방식에 대한 이해가 있어야 함
👉🏻 기본 지식의 요구수준이 높은 편
👉🏻 프로그램 구현 이전에 설계가 반드시 필요
프로그램을 구현하거나 설계할 때 발생하는 문제점(issue)들에 대한 해답(해결법)들을 문서화 한 것
프로그램의 구조(아키텍처)를 크게 세 가지 파트(역할)로 구분하여 개발하는 방법
프로그램의 데이터를 관리하고 처리하는 파트
👉🏻 비지니스 로직을 담당
사용자에게 보여지는 화면을 구성하는 파트
👉🏻 프레젠테이션 로직을 담당
사용자의 입력을 처리, 프로그램의 흐름을 제어하는 파트
주로 사용자와의 상호작용을 하는 파트