티스토리 뷰
Udemy - Spring & Hibernate for Beginners 수업을 토대로 정리를 해 보고자 한다.
이런 강의를 들을 수 있는 환경에 정말 감사한다.
www.udemy.com/course/spring-hibernate-tutorial/
먼저 설명하기에 앞서 spring의 공식 웹사이트 : www.spring.io
Spring in a nutshell
- enterprise java application을 만드는데 매우 인기있는 framework
- 처음 출시되었을때 J2EE의 대안으로 더 간결하고 더 가벼웠다.
- 많은 helper class를 제공해서 더 쉽게 만들 수 있다.
Spring의 역사
J2EE 1.2에서 Servelts, JSP로 시작해서 JavaEE7 까지 다양한것이 생겨났다.
그 추가한것중 하나가 Enterprise JavaBeans(EJB)인데 초기의 EJB(version 1, 2)는 매우 복잡했다.
xml depolyment descripter를 만들어야 했으며, 다양한 인터페이스를 implement 했어야 했다. 실제 Bean implementation하는데 java 파일이 3개 필요햇을정도로 복잡했다.
이 모든 코드 를 적는데 지루하고 에러가 생기기 쉬웠다.
하지만 Bean이 개발되고 생산에 사용되었때, 다른 문제가 생겼는데, poor performance였다.
entitiy beans(기본적으로 java class와 database table 사이를 mapping 해주는)가 매우 매우 느렸다. production에서 다시 코드를 뽑아내서 실제적으로 EJB 기능을 제거해야했다. 왜냐하면 모든것을 너무 느리게 했기 때문이다.
그래서 많은 개발자들이 EJB(Enterprise JavaBeans)를 빼고 J2EE를 사용했다.
EJB는 한때는 인기있었지만 이러한 문제로 없어졌고 그 대안으로 나운것이 spring framework이다.
그 대안으로 2004년에 spring 1.0이 나왔다. JavaEE는 나중에 그 문제를 해결 해서 스프링 대신 사용할 수 있지만, 사람들은 JavaEE가 과거에 끔찍했던 점과 momentum 때문에 spring의 인기가 더 높아졌다. 하지만 지금은 JavaEE와 Spring 모두를 할 수 있어야 한다.
Spring의 가장 큰 장점은 Java enterprise development(대규모의 기업형 개발)을 간소화 해주는 것이다.
Goals of Spring
- Light weight development with Java POJOS(Plain Old Java Objects) (초기의 J2EE의 무거운 EJB와 비교됨)
- Dependency Injection ->loose coupling을 통해 hardwiring하기보다 wiring을 configuration file이나 annotation으로 간단하게 할수 있다.
- Declarative programming with AOP(Aspect-oriented programming). 이것을 통해 application wide service를 주어진 object에 추가할수 있게 해준다
- boilerplate java code를 최소화 시켜준다.
* configuration file이란 설정이나 프로그램의 실행 일부 등을 저장해둔 파일이라고 한다.
단순히 글자로 저장되기도 하며 xml이나 json같은 형식으로 저장되기도 하며 주로 프로그램 설정들을 저장하는 파일이다. ini같은 확장자가 사용된다.
Core Container : Beans, Core, SpEL, Context
1) Beans : java beans란 그냥 자바 객체를 말한다. spring container에서 생성된 자바 객체를 spring에서 "Spring Beans"라 부른다.
2) Core : 심장이자 main item이라 보면 된다. bean들이 어떻게 생성되는지 관리한다. Bean factory가 있어서 bean을 생성하며 depencency에 있어 파일의 환경설정을 재설정한다.(reconfig gile for setting properties in dependencies)
3) SpEL : spring expression language로 config gile안에서 쓸수 있다. 다른 bean들을 참조한다
4) Context : 스프링 컨테이너로서 bean을 메모리에 저장한다.
Infrastructure : AOP, Aspects, Instrumentation, Messaging
1) AOP(Aspect-oriented programming) : 간단히 말해 application wide services를 생성하도록 도와준다. 예를들어 logging, security, transaction, instrumentation이 있다.
그리고 이러한 service들을 바로 선언하는 방식(config file이나 annotation)으로 object에 적용할 수 있다.
2) Instrumentation : Classloader implementation을 통해 다른 service와 작업하도록 만들수 있다. (Java agent를 생성하기 위해 사용될 수 있다. JMX를 이용하여 원격으로 관리할 수 있다.
Data Access Layer(Integration)
JDBC : JDBC를 이용해 Database에 접근하는 helper class를 많이 제공한다.
ORM(Object Relational Mapping) : Hibernate와 연결됨.
Transaction : transaction을 매우 flexible하게 만들 수 있다.
JMS(Java Message Service) : 비동기적 방식(asynchronous fashion)으로 메세지를 메세지큐(message queue)에 보낼수 있게 헤준다. (Helper class 제공)
Test Layer : Unit, Integration, Mock
Integration test도 할수 있으며 모든 것을 container 밖에서 테스트 할 수 있다.
전체적으로 설명은 들었지만 뭐가 뭔지 모르겠다.
앞으로 배우다 보면 나중에 이게 정확히 무엇인지 알게 될 것 같다.
'Programming > Spring & Hibernate' 카테고리의 다른 글
Spring Annotation - Inversion of Control & Dependency Injection (0) | 2021.01.31 |
---|---|
Spring Bean Scope and Life Cycle (0) | 2021.01.28 |
Dependency Injection(DI) - Setter Injection & injecting literal value (0) | 2021.01.27 |
Dependency Injection(DI) - Constructor Injection (0) | 2021.01.26 |
Inversion of Control(IoC) (0) | 2021.01.26 |
- Total
- Today
- Yesterday