diff --git "a/week3/[3\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" "b/week3/[3\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" new file mode 100644 index 0000000..114cd5b --- /dev/null +++ "b/week3/[3\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" @@ -0,0 +1,29 @@ +# 3주차 학습 내용 + +# 의존성 주입 종류 +1. 생성자 주입 + 생성자를 통해 의존성을 주입한다 + 불변성을 확보할 수 있고 테스트 용이성이 높다 +2. 세터 주입 + 세터 메서드를 통해 의존성을 주입한다 + 선택적인 의존성에 적합하다 +3. 필드 주입 + 간편하지만 테스트나 유지 보수에 불리하다 + +# 스프링을 사용하는 이유 + + 의존성 주입을 통한 유지보수성 및 테스트 용이성 향상 + 관점 지향 프로그래밍으로 공통 관심사 분리 + Ioc 컨테이너를 통한 객체 생명 주기 관리 + 다양한 웹 프레임워크 연동 지원 + 강력한 생태계 + 어노테이션 기반 설정정 + Spring Boot 덕분에 빠른 개발 및 배포 가능 + +# 스프링 컨테이너 + +스프링 컨테이너는 객체(Bean)를 생성하고 관리하는 중심 요소이다. 즉, 애플리게이션 전반에 걸쳐 필요한 객체를 만들고 의존성을 주입하며 생명주기를 관리한다 + + 객체 생성과 의존성 주입 + 객체 생명 주기 관리 + 빈 저장소 역할할 \ No newline at end of file diff --git "a/week6/[6\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" "b/week6/[6\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" new file mode 100644 index 0000000..9eb218e --- /dev/null +++ "b/week6/[6\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" @@ -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 등이 있다. \ No newline at end of file diff --git "a/week7/[7\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" "b/week7/[7\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" new file mode 100644 index 0000000..fe31283 --- /dev/null +++ "b/week7/[7\354\243\274\354\260\250] {\352\271\200\354\240\225\353\271\210}.md" @@ -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 \ No newline at end of file