IssuedAt : 25 - 09 - 25 (목)
Daily Study : 9
Java
| 절차 지향 프로그래밍
| 데이터 묶음
| 메서드 추출
| 클래스와 메서드
(복습 #2)
절차 지향은 실행 순서가 중요하다. 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이고 "어떻게"를 중심으로 프로그래밍한다.
객체 지향 프로그래밍
객체를 중요하게 생각하는 방식이고 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다. "무엇을" 중심으로 프로그래밍한다.
절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다.
객체 지향에서는 데이터와 그 데이터에 대한 행동(메서드)이 하나의 '객체'안에 함께 포함되어 있다.
메서드 추출
각각의 기능을 메서드로 만든 덕분에 각각의 기능이 모듈화 되었다. 모듈화를 만든 덕분에 중복 로직이 제거 되었으며, 같은 로직이 필요하면 해당 메서드를 여러번 호출하면 된다. 그리고 기능을 수정할 때 해당 메서드 내부만 변경하면 되고 메서드 이름을 통해 코드를 더 쉽게 이해할 수 있다.
데이터와 기능을 하나로 온전히 묶어야 한다.
JDBC란 무엇일까?
(복습 #2)
테이블 컬럼 하나는 자바 객체의 필드 하나와 매칭된다.
객체 필드가 아니라 전체 즉 객체 하나를 만들면 테이블의 하나의 행과 같다.
FOREIGN KEY
하나의 테이블을 다른 테이블에 의존하게 만들어 데이터의 무결성을 보장해준다.
FK 를 가지는 테이블이 참조하는 기준 테이블의 열은 반드시 PK, UNIQUE 제약조건이 설정되어 있어야 한다.
외래 키는 두개의 테이블을 연결하는 다리 역할을 해주는 키이다. 기본 키가 하나의 테이블에서 중복된 데이터가 삽입되는 것을 방지하는 역할을 해주는데 외래 키 역시 비슷한 문제를 방지하는 역할을 수행한다.
데이터가 새롭게 추가될 때 외래 키에 해당하는 값이 외래 키가 참조하는 테이블에 존재하는지를 확인한다.
CREATE TABLE 테이블이름 (
필드이름 필드타입,
FOREIGN KEY(필드이름)
REFERENCES 테이블이름(필드이름)
);
CASCADE
FOREIGN KEY 로 연관된 데이터를 삭제, 변경할 수 있다.
CREATE TABLE 테이블이름 (
필드이름 필드타입,
FOREIGN KEY(필드이름)
REFERNECE 테이블이름(필드이름) ON DELETE CASCADE
//ON UPDATE CASCADE
);
SQL 숙제 답안
create table if not exists MANAGER
(
id bigint primary key,
name varchar(100) not null,
student_code varchar(100) not null,
constraint manager_fk_student_code foreign key (student_code) references STUDENT(student_code)
);
alter table MANAGER modify column id bigint auto_increment;
insert into MANAGER (name, student_code) values ('managerA', 's1');
insert into MANAGER (name, student_code) values ('managerA', 's2');
insert into MANAGER (name, student_code) values ('managerA', 's3');
insert into MANAGER (name, student_code) values ('managerA', 's4');
insert into MANAGER (name, student_code) values ('managerA', 's5');
insert into MANAGER (name, student_code) values ('managerB', 's6');
insert into MANAGER (name, student_code) values ('managerB', 's7');
insert into MANAGER (name, student_code) values ('managerB', 's8');
insert into MANAGER (name, student_code) values ('managerB', 's9');
select s.name, e.exam_seq, e.score from manager m join student s on m.student_code = s.student_code
join exam e on m.student_code = e.student_code
where m.name = 'managerA';
delete from student where student_code = 's1';
alter table exam drop constraint exam_fk_student_code;
alter table EXAM add constraint exam_fk_student_code foreign key (student_code) references STUDENT(student_code) on delete cascade;
alter table manager drop constraint manager_fk_student_code;
alter table MANAGER add constraint manager_fk_student_code foreign key (student_code) references STUDENT(student_code) on delete cascade;
SQL 해석을 해보자면, MANAGER라는 테이블을 생성하는데 id, name, student_code 라는 컬럼들이 들어가게 된다.
제약 조건을 설정할 건데 manager_fk_student_code 라는 이름으로 주고 외래 키를 student_code 로 설정할 것이다.
외래 키 참조 기준? 은 STUDENT 테이블에 student_code 로 기준을 잡아서 생성하면 된다.
MANAGER 테이블에 id 컬럼을 수정할건데 자동 증가할 수 있게 auto_increment 옵션을 추가해줘야 한다.
MANAGER 테이블에 데이터 9개를 생성 하였고,
managerA 가 관리하는 학생의 이름, 학생의 주차 별 성적을 조회할 건데 학생의 이름은 student 테이블, 학생의 주차, 그리고 주차 별 성적은 exam 테이블에 있다. where 문을 사용하여 매핑을 해도 되지만 join 문을 사용하여 테이블끼리 매핑을 진행 하였다.
student에서 s1번인 학생의 데이터를 삭제하려고 하는데 그냥 삭제하려고 하면 다른 테이블들이 외래 키로 참조를 하고 있어서 데이터의 무결성이 깨지게 된다. 삭제가 불가능하게 막아두었다.
삭제하려면 우선 제약조건을 수정해야 한다. cascade 옵션으로 이 테이블의 데이터가 삭제 될 경우 다른 테이블에서도 해당 데이터가 같이 삭제 되게 해야 한다.
alter table {} drop constraint {} 을 사용하게 되면 기존 제약 조건이 삭제가 가능하고,
alter table {} add constraint {} foreign key {} references {} on delete cascade 옵션을 주면 위에서 삭제하려고 했던 데이터가 삭제 되면서 다른 테이블에 있는 해당 데이터도 같이 삭제 되는 것을 확인할 수 있다.
3 Layer Architeture
(복습 #2)
Controller, Service, Repository 을 3계층이라 부른다.
Client 는 Controller 에게 요청을 하고, 요청을 받은 Controller 는 Service 에게 로직 처리를 요청 한다. 이 때 Controller 는 Client 한테 받아온 Request 가 있다면 같이 넘겨준다. Service 는 받아온 로직을 처리하게 되면 다시 Controller 로 넘겨주고 Response 로 Client 에게 응답을 해주게 된다.
Service
사용자의 요구사항을 처리하는 실세중에 실세이다. 사용자의 요구사항이 비즈니스 로직이라고도 불리고, 과정 속에 데이터베이스 저장 및 조회가 필요할 때는 Repository 에게 요청을 한다.

역할 분리하기
(복습 #2)
사용자가 서버로 요청을 보내는 행동 Request을 Controller 에서 GetMapping 으로 연결하고 요구사항을 Service 에게 넘긴다.
요구사항을 받은 Service 는 로직을 처리하며 과정 중에 DB에 있는 데이터가 필요할 시 Repository 에게 데이터가 필요하다고 요청을 한다.
그럼 Repository 는 해당 하는 인원의 데이터를 찾아서 다시 Service 에게 전달을 해주고 Service 에서 요구 사항을 계속 처리한다.
Service 에서 비즈니스 로직이 마무리 되면 사용자에게 전달해 줄 데이터를 담아서 Controller 에게 보내주고,
Controller 에서는 Client 에게 Response 요청에 대한 응답 데이터를 보내준다.
IoC Containner 와 Bean
(복습 #2)
Bean
스프링이 관리하고 있는 객체
IoC Containner
Bean 들을 모아둔 하나의 컨테이너, 공간이라 생각하면 된다.
기타 공부
RestController 에서 텍스트가 아닌 클래스 타입을 전달해주게 될 때
RestController 에서 일반 문자열(텍스트)을 보내는 것이 아니라 Object 타입, 빈 타입으로 전달하게 되면 스프링 부트에서는 자동으로 ResponseBody 로 변환해주기 때문에 JSON 형태값을 가지고 나타낼 것이다.
'TIL & STUDY' 카테고리의 다른 글
| Daily Study : 11 (0) | 2025.09.27 |
|---|---|
| Daily Study : 10 (0) | 2025.09.26 |
| Daily Study : 8 (0) | 2025.09.24 |
| Daily Study : 7 (0) | 2025.09.23 |
| Daily Study : 6 (1) | 2025.09.22 |