01. Java
02. git
03. Database
04. Jsp [Server]
05. HTML,CSS
07. JS
06. 미니프로젝트-2W
08. SpringFramework , SrpingBoot (v)
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
특징
- POJO(Plain Old JAva Object) 기반의 프레임워크
- 자바 오브젝트 기반 프레임워크
- 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며, 스프링 컨테이너로부터 필요한 객체를 얻어 올 수 있음
- DI(Dependency Injection) 지원
- 각 계층이나 서비스들 사이 또는 객체들 사이에 의존성이 존재할 경우 스프링 프레임워크가 서로를 연결 시켜줌.
- 클래스들 사이에 약한 결합을 가능케 함
- AOP(Aspect Oriented Programming) 지원
- 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 지우너하는 기능을 분리하여 사용할 수 있음
- 확장성이 높음
- 스프링 프레임워크의 소스는 모두 라이브러리로 분리시켜 놓음으로써 필요한 라이브러리만 가져다 쓸 수 있음
- 많은 외부 라이브러리들도 이미 스프링 프레임워크와 연동되고 있음
- Model2 방식의 MVC Framework를 지원
스프링 프레임워크 모듈
스프링 모듈 기능 spring-core 스프링의 핵심인 **DI(Dependency Injection)와 IoC(Inversino of Control)**를 제공 spring-aop AOP구현 기능 제공 spring-jdbc 데이터베이스를 쉽게 다룰수 있는 기능 제공 spring-tx 스프링에서 제공하는 트랜잭션 관련 기능 제공 spring-webmvc 스프링에서 제공하는 컨트롤러와 뷰를 이용한 스프링 MVC구현 기능 제공
스프링 컨테이너(IoC)
- 스프링에서 객체를 생성하고 조립하는 컨테이너로, 컨테이너를 통해 생성된 객체를 **빈(Bean)**이라고 부름
- 객체를 필요할 때 생성해서 사용하던 방식을 미리 생성해 놓고 꺼내서 사용하는 형태로 변경
Maven 프로젝트
- 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운 받아줌
- 폴더
- java폴더(프로젝트명/src/main/java)
: 앞으로 만들어지는 자바 파일들이 관리되는 폴더
- resources 폴더(프로젝트명/src/main/resources)
: 자원을 관리하는 폴더로 스프링 설정파일(XML) 또는 프로퍼티 파일 등이 관리
Spring DI/IoC
Java의 class상속 / interface를 이용한 추상화를 기반으로 하는 개발 방법
IoC : Inversion of Control
- 프로그램을 제어하는 패턴 중 하나
- DI는 IoC패턴의 구현방법 중 하나
- DI에 따라 프로그램의 흐름이 완전히 변경
- 객체를 필요할 때 생성해서 사용하던 방식을 미리 생성해 놓고 꺼내서 사용하는 형태로 변경
- DI : Dependency Injection
- 스프링 Container에 만들어둔 각종 클래스(bean)들은 서로 의존적
- A객체가 B객체 없이 동작이 불가능한 상황
- 객체 안에 객체가 저장되는 형태
DI 설정 방법
- 2가지 의존성 주입 방법
- 생성자를 통한 의존성 주입
<constructor-arg ref="빈Id"></constructor-arg>
- setter를 통한 의존성 주입
<property name="변수명" value="값"/> <property name="변수명" value="객체"/>
빈(Bean)의 범위
- 싱글톤(Singleton)
- 스프링 컨테이너에서 생성된 빈(Bean)객체의 경우 동일한 타입에 대해서는 기본적으로 한 개만 생성이 되며, getBean()메소드로 호출될 떄 동일한 객체가 반환
- 프로토타입(Prototype)
- 싱글톤범위와 반대의 개념으로 ,개발자는 별도로 설정을 해줘야 하는데 스프링 설정 파일에서 빈객체를 정의할 떄 scope속성을 명시해 주면 됨
의존객체 자동 주입
- 스프링 설정 파일에서 의존 객체를 주입할 때
또는 태그로 의존 대상 객체를 명시하지 않아도 스프링 컨테이너가 자동으로 필요한 의존 대상 객체를 찾아서 의존 대상 객체가 필요한 객체에 주입해주는 기능 - 구현 방법은 @Autowired와 @Resource 어노테이션을 이용해 쉽게 구현 가능
의존객체 자동 주입 태그 종류
@Autowired (required=false)
- 타입을 기준으로 의존성을 주입
- 같은 타입 빈이 두 개 이상 있을 경우 변수이름으로 빈을 찾음
- Spring의 어노테이션
@Qualifier
- 빈의 이름으로 의존성 주입
- @Autowired와 같이 사용
- Spring의 어노테이션
@Resource
- name을 속성을 이용하여 빈의 이름을 직접 지정
- JavaSE의 어노테이션
@Inject
- @Autowired 어노테이션을 사용하는 것과 같음
- JavaSE의 어노테이션
의존객체 자동 주입 태그
1. @Autowired
주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입
- 속성값, 세터, 생성자 적용가능
2. @Resource
주입하려고 하는 객체의 이름이 일치하는 객체를 자동으로 주입
- 속성값, 세터 적용가능
3. @Qualifier
동일한 객체가 2개 이상인 경우 스프링 컨테이너는 자동 주입 대상 객체를 판단하지 못해서 Exception을 발생시킴
- 모호한 bean의 강제 연결
빈생성
- 자바클래스 위에 @Controller, @Component, @Service, @Repository 어노테이션 중 하나