프레임워크이다.
프레임(틀)워크(동작하다) = 틀 안에서 동작하다 ⇒ 틀 제공해줄테니 벗어나지 말아라
오픈소스이다.
IoC 컨테이너를 가진다.
new → heap 메모리 공간에 올리고 여러 메서드에서 사용하고 싶음
⇒ 레퍼런스 변수 주소를 각각의 메소드가 관리 → 공유하는 것이 힘듦의자 s = new 의자();
public void make() {
의자 s = new 의자();
}
public void use() {
의자 s = new 의자();
}

DI를 지원한다.
make()와 user()에서 사용하는 의자는 같은 의자 ⇒ 싱글톤으로 가야함엄청나게 많은 필터를 가지고 있다.
엄청나게 많은 어노테이션을 가지고 있다. (리플렉션, 컴파일체킹)
@Component (클래스를 메모리에 로딩), @Autowired (로딩된 객체를 해당 변수에 집어 넣기)MessageConverter를 가지고 있다. 기본값은 현재 Json이다.

BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
InputStreamReader(): byte → 문자
→ 문자 하나를 줌 or 배열로 여러 개의 문자 받을 수 있음 But, 배열: 크기가 정해져 있어야 함
⇒ BufferedReader: 가변 길이의 문자를 받을 수 있음_request.getReader() / out
/ BufferedWriter: 전송 단위가 문자열로 가변 길이의 데이터를 쓰게 해주는 클래스
→ 대신 Printwriter 사용 : print(), println() 제공
@ResquestBody → BufferedReader 동작@ResoponseBody → BufferedWriter 동작Java Persistence API
ORM 기술이다.
delete, update, insert)
Java ←output- 데이터 ⇒ select
⇒ 데이터 type이 다름 → class ~> 데이터베이스에 있는 테이블을 모델링 해야 함
= DB 세상에 있는 데이터를 Java 세상에 모델링 한다반복적인 CRUD 작업을 생략하게 해준다.
영속성 컨텍스트를 가지고 있다.
DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)
class Tema {
int id;
String name;
String year;
}
class player {
int id;
String name;
int teamId; // (기본 자료형) -> Team team; (Object)
}
OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
Class Engine extends EntityDate {
int id;
int power;
}
Class Car extends EntityDate {
int id; // PK
String name;
String color;
Engine engine;
}
Class EntityDate {
TimeStamp createDate;
TimeStamp updateDate;
}