스프링은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크입니다
framework → 틀 안에서 동작한다.
스프링 부트는 스프링(Spring)을 더 쉽게 이용하기 위한 도구
스프링의 제일 큰 특징 2가지
- IOC 제어의 역전
- DI 의존성 주입
특징 1. 스프링은 loC 컨테이너를 가진다
loC 란?
Inversion of Controll 의 약자로 제어의 역전이다. 주도권이 스프링에 있다
먼저 객체와 인스턴스의 설명을 하자면
- 객체는 실체화가 가능한 것
- 인스턴스는 실체화가 되는 것
예를들어
과일 은 추상적인 것
수박, 복숭아 는 실체화가 가능한 것이라 object (객체) 이고 실체화가 되기 때문에 모두 instance (인스턴스) 이다.
복숭아 객체를 heap이라는 메모리 공간에 올리게 되면 복숭아를 (new) 실체화해서 s를 메모리에 저장
public void one(){
복숭아 s = new 복숭아();
}
그러나 다른 user 메서드에서도 저장한다면
public void user(){
복숭아 s = new 복숭아();
}
one 메서드의 s와 user 메서드의 s 는 다른 '복숭아' 가 된다.
이것은 로직을 짜기가 비효율적!
그렇다면
복숭아, 호랑이, 머리삔 같은 객체들을 따로 메서드를 만들어서 메모리에 올리는게 아니라
스프링이 스캔하여 메모리에 자동으로 올라가고 스프링이 관리한다.
즉, 제어권이 사용자에게 있지않고 프레임워크(컨테이너)에 있어서 필요에 따라 사용자의 코드를 호출하게 된다.
특징 2. 스프링은 DI를 지원한다.
Dependency Injection 의 약자로 의존관계 주입이다.
= 필요한 곳에 가져가서 공유해서 사용할 수 있다.
예를들어
스프링에서 관리하는 객체들을 내가 원하는 모든 class 메서드에 가져와서 사용가능하다.
'복숭아' 객체를 여러 클래스에 가져다 쓰여도 다른 '복숭아' 가 되는게 아니라 같은 '복숭아' 이다. = 이것은 '싱글톤'
즉, 객체간의 의존관계를 미리 설정하면 스프링 컨테이너가 자동으로 연결
필터란?
: 권한을 확인하여 들여보내고 내보내는 역할
톰캣이 들고있는 필터는 말그대로 filter 이고, 스프링 컨테이너가 들고있는 필터는 인터셉터 (AOP) 라고 불린다
어노테이션 ?
@Component
: 클래스 메모리에 로딩
@Autowired
: 로딩된 객체를 해당 변수에 집어넣는다
예를들어
@Component 어노테이션을 쓴 A클래스를 IoC 가 스캔하여 자신이 들고있는 메모리 공간에 A클래스를 로딩한다.
메모리에 로드 된 A클래스의 객체를 B클래스에 쓴다고 할 때
class B {
A a = new A();
}
▷ B클래스의 a는 메모리에서 다른 새로운 a를 만들게된다.
이렇게 사용하지 않고
class B {
@Autowired
A a;
}
@Autowired 를 씀으로써
B클래스 내부에 분석(리플렉션) 과정에서 메서드,필드,어노테이션 을 확인하고 적용한다.
방금 위에 @Component 어노테이션을 쓴 A클래스를 IoC 가 스캔하였는데
스프링 IoC 로 직접 로드한 메모리를 쭉 읽어서 B클래스에 있는 A의 객체의 값을 찾는다.
MessageConverter 란?
: Json 데이터로 변경해주는 라이브러리
외국인에게 번역을 해서 또는 안해서 보내면 보내는 사람이, 받는 사람이 번역을 해야하는 불편함이 있다.
그래서 중간데이터를 만든다. 그 중간언어는 Json 데이터이다.
예를들어
자바 object --(MessageConverter)--→ Json --(MessageConverter)--→ 파이썬 object
자바에서 파이썬으로 요청갈때 MessageConverter 가 동작하여 Json 데이터로 바꿔 파이썬이 읽도록 하고
파이썬에서 자바로 응답갈때 MessageConverter 가 동작하여 Json 데이터로 바꿔 자바가 읽도록 한다.
BufferedWriter ,BufferedReader 을 손쉽게 쓰는 어노테이션은?
통신을 할 때 전기선(전류)을 통해 데이터가 이동하는데 bit 단위(1,0,0,1,1..) 로 통신이 된다.
영어 한문자는 8bit (2의 8승) 이고 256 가지의 문자가 전송가능하다.
한글은 최소 16bit 가 필요하니 8bit 로 끊어 한 문자씩 읽게하여 통신의 최소단위는 1byte, 논리적인 단위이다.
요청한 데이터를 받을때 BufferedReader, 응답을 전송할때 BufferedWriter 이것을 통해 통신을 하는데
이렇게 구현할 필요없이 어노테이션만 쓰면 된다.
@ResponseBody → BufferedWriter
@RequestBody → BufferedReader
JPA 개념잡기
:Java Persistence API 약자로 자바에 있는 데이터를 영구적으로 기록할 수 있는 환경(API)에 저장
영속성 : 프로그램이 종료돼도 사라지지 않는 데이터 특성
API 개념을 자세히 알아보자
API 는 application programming interface 약자로 프로그램을 만들게 해주는 인터페이스
프로토콜 vs 인터페이스 의 개념정리
약속의 개념이 다르다.
- 먼저 인터페이스의 약속은
이 데이터를 사용하고싶다면 오전에만 써! 라는 상하관계가 존재하는 약속, 규칙이 인터페이스다.
그 인터페이스대로 데이터를 사용했다면 그것이 API 이다.
- 프로토콜의 약속은 수많은 프로토콜이 모여 인터넷이 되고 모두 동등한 관계에 있어서
A의 규칙이 안된다면 B의 규칙을 정해 다른 대안책을 제시하여 모두가 동의할 수 있도록 한다.
즉 Java Persistence application programming interface
자바 프로그래밍을 할때 영구적으로 데이터를 저장하기 위한 인터페이스가 JPA이다.
JPA 는 ORM 의 기술이다
ORM 은 Object Relational Mapping 약자로 자바에 클래스를 만들어서 실행하면 DB에 테이블을 자동생성
원래 DB에 테이블 생성 후 자바에 사용한다.
DB에서 데이터를 가져오거나(input) DB에 데이터를 넣을때(ouput) 자바가 들고있는 데이터 타입과 DB의 데이터 타입은 다르다.
- DB의 A테이블
ID | int |
Name | varchar |
Year | varchar |
- A 클래스
class A{
int id;
String name;
String year;
}
그래서 DB의 테이블을 모델링을 해야한다. DB의 데이터를 자바에 모델링.
순서는 DB → 자바
모델링을 한다는 건 추상적인 개념을 현실세계로 뽑아내는 것
ex 건물 설계도를 이용해 건물을 짓는다.
그러나 ORM 은 순서가 반대다. 자바 → DB , 자바의 클래스를 통해 DB 자동생성.
JPA 가 갖고있는 인터페이스의 규칙을 지키면 객체들과 관련된 DB 테이블을 자동생성된다.
장점
비지니스 코드가 DB테이블에 바로 접근하게 도와주어 비지니스 코드에 집중할 수 있다.
JPA 는 함수화를 쓰면 CRUD 반복 작업되는것을 단순하게 처리하도록 도와주는 장점이 있다.
그래서 비유하자면 orm은 나의 하인이다~
'공부' 카테고리의 다른 글
HTTP | stateless ,stateful | MIME 타입 (0) | 2022.11.01 |
---|---|
자바의 객체지향 | http 요청 실습 (0) | 2022.11.01 |
JAVA | 자바, JVM, 객체지향 프로그래밍 (0) | 2022.08.02 |
Spring | 스프링, 의존성 주입과 제어의 역전, ORM 과JPA (0) | 2022.07.27 |
스프링 | JPA(Java Persistence API ) (0) | 2022.07.27 |