Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions week3/[3주차] {김정빈}.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 3주차 학습 내용

# 의존성 주입 종류
1. 생성자 주입
생성자를 통해 의존성을 주입한다
불변성을 확보할 수 있고 테스트 용이성이 높다
2. 세터 주입
세터 메서드를 통해 의존성을 주입한다
선택적인 의존성에 적합하다
3. 필드 주입
간편하지만 테스트나 유지 보수에 불리하다

# 스프링을 사용하는 이유

의존성 주입을 통한 유지보수성 및 테스트 용이성 향상
관점 지향 프로그래밍으로 공통 관심사 분리
Ioc 컨테이너를 통한 객체 생명 주기 관리
다양한 웹 프레임워크 연동 지원
강력한 생태계
어노테이션 기반 설정정
Spring Boot 덕분에 빠른 개발 및 배포 가능

# 스프링 컨테이너

스프링 컨테이너는 객체(Bean)를 생성하고 관리하는 중심 요소이다. 즉, 애플리게이션 전반에 걸쳐 필요한 객체를 만들고 의존성을 주입하며 생명주기를 관리한다

객체 생성과 의존성 주입
객체 생명 주기 관리
빈 저장소 역할할
96 changes: 96 additions & 0 deletions week6/[6주차] {김정빈}.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# 6주차 학습 내용

**Spring MVC Lifecycle**

스프링 프레임워크의 웹 계층을 담당하는 모듈 중에 서블릿 api를 기반으로 클라이언트의 요청을 처리하는 모델이다

서블릿은 클라이언트의 요청을 처리하도록 특정 규약에 맞춰 JAVA 코드로 작성하는 클래스 파일이다. 아파치 톰캣은 이러한 서블릿들이 웹 애플리케이션으로 실행할 수 있도록 도와주는 서블릿 컨테이너 중 하나이다.

1. 클라이언트 요청
1. 클라이언트가 URL을 통해 HTTP 요청을 보낸다
2. DispatherServlet 수신
1. 요청은 DispatherServelt이 받는다
3. HandlerMapping을 통해 핸들러(Controll) 찾기
1. DispatherServlet은 Handler Mapping에게 요청 URL과 매핑된 컨트롤러를 찾도록 요청한다
4. HandlerAdapter를 통해 컨트롤러 호출
1. 해당 컨트롤러를 실행하기 위한 적절한 HandlerAdapter를 선택하고, 이를 통해 실제 컨트롤러 메서드를 실행한다
5. Controller가 비즈니스 로직 수행
1. 컨트롤러는 비즈니스 로직을 처리하고 처리 결과와 함께 뷰 이름을 반환한다.
6. ViewResolver를 통해 뷰 결정
1. DispatcherServlet은 반환된 뷰 이름을 바탕으로 ViewResolver를 통해 실제 렌더링할 뷰를 찾는다.
7. View 렌더링
1. 최종적으로 뷰에 모델 데이터를 바인딩한 후 응답을 생성한다
8. 클라이어트에게 응답 반환
1. 생성된 뷰를 클라이언트에게 반환한다.

**Dispatcher servlet의 역할**

- DispatcherServlet은 Spring MVC에서 모든 요청을 통제하는 중앙 관리자로 핸들러 탐색부터 뷰 렌더링까지의 전체 프로세스를 조정한다
- 모든 요청을 가장 먼저 받는다
- HandlerMapping에게 핸들러를 조회해서 찾는다
- HandlerAdapter를 통해 컨트롤러를 실행한다
- ModelAndView를 반환받는다
- ViewResolver로 뷰를 결정한다
- 응답을 반환한다

**Bean이란?**

Bean은 Spring이 생성하고 관리하는 자바 객체이다.

@Component로 등록하면 Spring이 자동으로 Bean으로 등록해줌

**Bean Lifecycle**

1. Bean 클래스 로딩
2. Spring이 new로 Bean 인스턴스 생성
3. 필요한 필드, 생성자, 메서드에 의존성 주입
4. BeanNameAware, BeanFactoryAware 등의 설정
5. 초기화 메서드 호출
6. bean 사용
7. @PreDestroy (또는 DisposableBean.destroy())
8. bean 소멸

**Spring 어노테이션 10가지와 그에 대한 설명**

1. Componet
1. 일반적인 bean을 등록할 때 사용
2. Controller
1. 웹 요청을 처리하는 컨트롤러로 등록
3. Service
1. 비즈니스 로직을 수행하는 서비스 계층에 사용
4. Repository
1. DAO 계층, DB 접근에 사용. 예외 처리 기능이 추가됨
5. Autowired
1. 의존성 주입을 위해 사용. 생성자, 필드, 세터에 사용 가능
6. Value
1. application.properties 또는 application.yml의 값을 주입
7. RequestMapping
1. 특정 URL 요청을 처리하는 메서드에 매핑
8. RestController
1. @Controller + @ResponseBody 합친 것 REST API에 자주 사용
9. RequestParam
1. URL 쿼리 파라미터 바인딩
10. Transactional
1. 트랜잭션을 자동으로 관리

**Spring 의존성 주입 방식**

1. 생성자 주입 방식
2. 새터 주입
3. 필드 주입

**생성자 주입 방식(중요)**

생성자 주입방식은 불변 객체 설계에 유리하며 테스트 시 명시적 주입이 가능하다.

**관계형 데이터배이스란?**
관계형 데이터베이스(Relational Database)란, 데이터를 표(table, relation) 형태로 저장하고, 이들 표 사이의 관계(relation)를 기반으로 데이터를 구조화하여 관리하는 데이터베이스를 말한다.

**관계형 데이터베이스에서 Relationship이란?**
관계형 데이터베이스(RDBMS)에서 Relationship(관계)이란, 두 개 이상의 테이블 간의 논리적인 연결을 의미한다. 테이블 각각은 독립적인 데이터를 갖지만, 관계를 통해 서로 연관된 데이터를 효율적으로 연결하고 조회할 수 있다.

**PK와 FK**
관계형 데이터베이스에서 PK(Primary Key)와 FK(Foreign Key)는 테이블 간 데이터의 무결성과 관계를 유지하기 위해 사용되는 핵심 개념이다.

**테이블 제약 조건**
관계형 데이터베이스에서 테이블 제약 조건(Table Constraints)은 테이블에 저장되는 데이터의 무결성(정확성, 일관성)을 유지하기 위해 설정하는 규칙이다. primary key, foreign key, unique, not null, check 등이 있다.
65 changes: 65 additions & 0 deletions week7/[7주차] {김정빈}.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 7주차 학습 내용

**JPA와 JDBC의 차이란?**

JDBC
- 저수준 DB 연결 API
- SQL 직접 작성 및 실행
- 작성 코드량이 많고 반복적
- 개발자가 직접 작성해야 한다
- 직접 제어가 가능하다

JPA
- 고수준 ORM API
- 객체와 테이블 간 매핑을 자동화 해준다
- 상대적으로 적다
- SQL이 자동으로 작성된다
- 자동으로 최적화되나 제어가 어렵다


**ORM이란 무엇이고 JPA가 ORM 프레임워크에서 어떤 역할을 하는지**

ORM이란 객체 지향 언어의 객체와 관계형 데이터베이스 테이블을 자동으로 매핑해주는 기술이다
객체와 관계형 모델 간 불일치를 해결해준다

JPA는 JAVA 진영의 ORM 표준 명세이다. ORM을 하기 위해 공식 가이드라인 역할을 한다.


**엔티티 필수 어노테이션의 종류는?**
@Entity
- 이 클래스가 JPA가 관리하는 엔티티 클래스임을 선언
- 이 어노테이션이 있어야 JPA가 이 객체를 테이블에 매핑하고 관리함

@Id
- 해당 필드가 기본 키(PK)임을 지정
- 기본 키가 있어야 엔티티로 인식됨

@GeneratedValue
- 기본 키의 값을 자동 생성할 때 사용


**JPA에서 엔티티의 필수 조건은?**
- 클래스에 @Entity가 선언되어 있어야 JPA가 엔티티로 인식함
- public 또는 protected 기본 생성자가 필수
- 하나 이상의 필드에 @Id 어노테이션이 있어야 함
- 엔티티 클래스는 final이면 안 됨



**엔티티의 생명주기란?**
비영속
- 아직 영속성 컨텍스트에 저장되지 않은 상태
영속
- 엔티티 매니저가 관리하는 상태
준영속
- 영속 상태였다가 관리가 끊긴 상태
삭제
- 삭제 대상으로 지정된 상태


**연간관계의 종류와 JPA에서의 표현법은**
- 1:1,1:N,N:1,N;M이 있다
- @OneToOne
- @OneToMany
- @ManyToOne
- @ManyToMany