Spring 개념 간단히 정리
Spring 개념정리(Youtube 메타코딩 spring 기초개념 참고)
- Spring 은 Framework(틀 안에서의 동작)이다.
- Spring 은 opensource이다.(소스가 공개되어 있어서 내부에 자신의 코드를 집어 넣을 수 있다.) ->contribute가 가능하다.
- Spring 은 IoC컨테이너를 갖는다.
**IoC(inversion of Control) -> 제어의 역전 [주도권이 스프링에게 있다]
: 객체를 heap 메모리 공간에 올리게 된다.(java) Spring이 분석(리플렉션)을 통해서 모든 객체들을 읽어 자신이 메모리에 올린다.
class - 설계도
object - 실체화가 가능한 것(추상적인 것은 실체화 할 수 없다) -> 같은 객체를 만들더라도 method 혹은 class가 다르게 되면 heap영역에서 같은 주소값을 갖는다고 할 수 없다.
instance - 실체화가 된 것(object가 실체화가 되는 순간)
- Spring은 DI를 지원한다.(Dependency injection): 의존성 주입 -> Spring이 제어의 역전을 통해 객체들을 메모리에 올리기 때문에 객체를 관리하는 주체가 Spring이 된다.(원래는 우리가 객체를 직접 선언해서 올리는 방식이다.) -> 각각의 다른 class들에서 객체들을 공유해서 사용할 수 있게 된다.
-Spring은 많은 필터를 가지고 있다. -> 필요한 것 만 걸러낸다.(권한)
tomcat의 필터는 filter라고 하고 web.xml에 기능이 적혀있다. spring container의 필터는 인터셉터라고 불린다.(AOP)
-Spring은 많은 어노테이션을 가지고 있다.
어노테이션은?? -> 주석 + 힌트(Spring을 위한)
-> 객체를 생성할 수 있게 한다.
ex) @Component[클래스 메모리에 로딩] , @Bean, @Controller,@Autowired[로딩된 객체를 해당 변수에 집어 넣는다.]
cf) Autowired에서 Spring은 heap영역 내에서, 선언한 type과 비교하여 주소를 찾는다.
- Spring은 MessageConverter를 가지고 있다. [MessageConverter를 통해 자동으로 데이터의 형식을 JSON으로 변환한다.]
cf) 중간언어 : xml -> json [모든 곳에서 이해할 수 있는 언어] ---> java 프로그램과 파이썬 프로그램이 다른데 서로 이해하기 위해서는 중간언어인 json으로 변경해서 소통해야 한다.
-Spring은 BufferedReader 와 BufferedWriter를 쉽게 사용할 수 있다.
자바에서는 byte stream을 BufferedReader로 가변길이의 문자를 받을 수 있다.
JPA가 무엇인가?? (JAVA persistence API)
persistence란 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 갖는것을 의미한다. 이것은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스등을 활용해서 구현한다.
-> 결론적으로 java 프로그램을 사용할때 영구적으로 데이터를 저장하기 위해 필요한 interface 즉 약속이다.
-> CRUD와 같은 반복적인 작업을 함수를 이용해서 쉽게 사용할 수 있도록 해준다. (원래는 DB 의 DATATYPE을 OBJECT TYPE으로 바꿔야지 자바와 CONNECTION이 되는 형식이지만 이런 형식을 간소화 시켜주는? 느낌) + section에 대한 할당과 제거를 쉽게 해준다.
-> DB와 OOP의 불일치성을 해결해준다. : 이 말은 DB는 relational한 type이고 oop 즉 자바와 같은 경우는 객체지향적 type인데 이런 불일치성에 대해서 알아서 mapping을 해준다. 만약 table에 다른 table의 pk를 참조하는 fk를 사용했다고 하면 우리가 원하는 정보는 fk 자체를 원하는 것이 아닌 join된 table전체를 원하거나, select를 두번해서 두 table의 정보가 같이 나오는
것을 원하는 것이다. 이런 경우 원래 자바에서 하는 것 처럼 클래스 자체의 타입을 만들어서 클래스에 접근하게 만들면 db가 알아서 mapping된다. 즉 join이 되는 효과를 얻을 수 있는 것이다.
-> 방언 처리가 용이해서 유지보수가 좋다.( 이 말은 쉽게 생각해서 여러가지 DB의 변경되는 점을 모두 수용할 수 있다는 의미다.) -> 추상화 객체가 jpa에 붙어서 우리가 사용하는 db를 연결해서 처리하는 형태이다. [사실상 우리가 알 필요는 없는 부분이다]
API가 무엇인가??(Application Programming Interface)
Interface란 무엇인가?? 프로토콜과 인터페이스 모두 약속이다. 인터페이스는 상하관계가 존재하는 약속이다. 프로토콜의 경우 수평적인 관계에서의 약속이다. -> interface 안에는 변수와 파라미터만을 선언한다 .(명세)
그리고 인터페이스를 상속하는 class들은 모두 안의 명세되어진 것을 사용해야만 한다.
-ORM이란? (Object relational Mapping)
=> 간단히 말해서 객체를 relational한 db에 자동으로 넣을 수 있게 만드는 기법이다. 그러므로 자바가 주도권을 쥐고 model을 만들 수 있게 되는 것이다.(자바의 객체지향을 허용하기 때문이다.)
-HTTP란?
->정적인 문서를 전달하는 통신! (즉 한번 통신하고 REQUEST, RESPONSE가 완료되면 STATE가 사라진다.)
-> 만약 실시간으로 값을 전달받아야 하는 상황이라면 SOCKET 통신이 더 어울릴듯?(만약 라즈베리파이 연결한다고 하면)
-톰켓?
웹서버에서 아파치를 도와주는 기능으로써 자바코드가 REQUEST되었을때 RESPONSE를 HTML로 바꿔주는 역할을 한다.
결국 CLIENT입장에서는 HTML문서가 눈에 보이는 것이므로(웹 브라우저는 html만 이해할 수 있기 때문이다.) RESPONSE시에는 HTML형태로 DATATYPE이 결정된다. 이런 자바의 컴파일을 통한 HTML변환을 도와주는 기능이 톰켓이다.[통상적으로 사용하는 아파치 서버는 자바언어를 이해하지 못한다.]
-서브릿 객체?
서블릿(Servlet)은 클라이언트 요청을 처리하고, 그 결과를 반환하는 웹 프로그래밍 기술이다. 클라이언트가 요청을 하면 그에 대한 결과를 다시 전송해주는 역할을 자바 프로그램이 하는 것이다.(IoC의 개념)
client가 URI즉 식별자 접근을 요청하기 때문에 무조건 자바를 거치게 된다.(URL방식은 spring이 다 막아놓았다.) spring이 자원을 요청하는 방식을 정해 놓았기 때문이다.
톰캣의 핵심적인 역할이 자바 서블릿 컨테이너라고 할 수 있다.
https://velog.io/@jihoson94/Servlet-Container-%EC%A0%95%EB%A6%AC
Servlet Container 정리
Servlet은 사용자의 요청을 처리해서 동적인 컨텐츠를 응답으로 주기 위한 프로그램이며 Java EE 의 표준 API 중 하나 입니다.javax.servlet.ServletServlet 표준 속에서 요구되는 중요한 점은 전체 데이터 처
velog.io
- 어노테이션?
Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter나 setter를 생성하기도 한다. 특별한 의미를 부여하거나 기능을 부여하는 등 다양한 역할을 수행할 수 있다.
여러 어노테이션 참조자료
https://melonicedlatte.com/2021/07/18/182600.html
스프링(Spring)에서 자주 사용하는 Annotation 개념 및 예제 정리 - Easy is Perfect
melonicedlatte.com
- 전체적인 Spring의 구조
MVC 패턴을 따른다.(Model, View, Controller)
-Model
- 데이터베이스와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 함
- 여러 개의 데이터 변경 작업(추가, 변경, 삭제)을 하나의 작업으로 묶는 트랜잭션을 다루는 일도 함
-> 즉 데이터의 유지 보수와 기능에 대한 부분을 맡고 있는 파트라고 생각함.
-Controller
- 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출하는 일을 함
- 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 함
- 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달(클라이언트 요청에 대해 모델과 뷰를 결정하여 전달)
-> 즉 spring내에서도 중추적인 역할을 하는 부분임
-View
- 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함
- 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML/CSS/JS를 사용하여 웹 브라우저가 출력할 UI를 만듦
- HTML과 JSP를 사용하여 작성할 수 있음
-> 간단하게 frontend를 위한 부분이라고 생각함.
MVC패턴은 사용하는 인터페이스를 모두 규격화해놓아 유연하고 확장성 있게 웹 어플리케이션을 설계할 수 있다는 점에서 의의를 갖는다고 한다.