일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 자바
- ElasticSearch NGram
- Java
- ElasticSearch 토큰필터
- H2 DB
- elasticSearch
- Bean Factory란
- spring 장점
- Servlet Life Cycle
- ElasticSearch 동의어 사전
- H2
- ContextLoaderListener란
- Servlet Container란
- 안드로이드스튜디오
- 안드로이드
- Spring Servlet이란
- Spring Handler
- ElasticSearch Shingle
- ApplicationContext란
- Servlet과 Thread
- ElasticSearch 동의어 파일
- 인텔리제이
- 동의어 파일
- 토큰필터
- 계산기
- ElasticSearch EdgeNGram
- Dispathcher Servlet이란
- layout
- Servlet 멀티 스레딩
- Spring Container란
- Today
- Total
결국 무엇이든 해내는 사람
Spring이 뭔데? 쉽게 쉽게 알아보자 본문
글을 짧고 내용은 간결하게 작성
내가 내 글을 보고 복습할 수 있게 작성
Spring이 뭔데?
Spring은 Framework이다.
단어를 해석해보면 Framework의 Frame은 "틀", work는 "동작"을 의미한다.
"틀안에서 동작한다"라는 의미로 이해하면 될 것 같다.
틀안에서 정해진대로 사용한다면 내가 처음보는 Spring 프로젝트 소스를 보더라도 어느정도 이해할 수 있다는 말!
Spring은 오픈소스다.
무료로 사용할 수 있으며, 필요하다면 소스를 뜯어서 고쳐서 사용할 수도 있다.
Spring은 IoC 컨테이너를 갖는다.
"Inversion of Controll"의 약자로, 해석해보면 "제어의 역전"이라는 뜻이다.
"객체의 생성", "생명주기의 관리"까지 객체에 대한 모든 제어권을 스프링이 갖는다는 의미이다. 이를 "제어의 역전"이라고 표현한다.
그러면 Spring은 이런 제어권을 어떻게 관리한다는걸까?
바로 "IoC 컨테이너" 를 사용한다.
위에서 말한 "객체를 생성하고 관리하고 책임지고 의존성을 관리"해주는 것을 이 "IoC 컨테이너(스프링 컨테이너)"가 해주는 것이다.
나도 궁금했다. 그래서 이렇게 했을 때 뭐가 좋은데?
개발자는 "비즈니스 로직"에만 집중할 수 있다.
좀 더 추가설명을 하자면, "POJO"의 생성, 초기화, 소멸에 대한 권한을 컨테이너가 갖기 때문에 객체 생성 코드를 만들지 않아도 되는 점"이 있다. 객체 생성 코드가 없으면 TDD(Test Driven Development)에 용이하다.
(참고) POJO?
"Plain Old Java Object".. 특정 자바 모델이나 기능, 프레임워크를 따르지 않는 순수 Java Obeject를 지칭하는 말이며 Java Bean 객체가 대표적이다.
참고로 Java에서 객체를 생성할 때를 설명하면, 자바에서 메모리에는 "Stack영역"과 "Heap영역"으로 나눠진다. (더보기에 추가)
Stack은 정적으로 할당된 메모리 영역이다.
Stack에는 원시자료형(primitive data type)에 해당하는 boolean, char, short, int, long, float, double의 데이터가
값과 함께 할당이 되고 Heap 영역에 생성된 Object 타입의 데이터의 참조값이 할당된다.
Stack의 메모리는 Thread당 하나씩 할당이 되는데 새로운 스레드가 생성되면 해당 스레드에 대한 Stack이
새롭게 생성되고 각 스레드간에는 서로의 Stack영역을 침범할 수 없다.
Heap은 동적으로 할당된 메모리 영역이다.
힙 영역에서는 모든 Object 타입의 데이터가 할당된다. 참고로 모든 객체는 Object 타입을 상속받는다.
Heap영역의 Object를 가리키는 참조변수가 위에서 말했듯 Stack에 할당이된다. Stack에 쌓이는 데이터를 제외하고는 전부 Heap에 쌓인다고 보면 편할듯 싶다.
보통 Heap영역의 데이터들은 생명주기가 길다. 그 이유는 대부분의 Object의 크기가 크고 서로 다른 코드블럭에서도 공유가 가능해서 그렇다.
그리고 Stack과 다르게 스레드마다 하나씩 있지않고 단 하나의 영역만 존재한다.
IoC의 분류에는 2가지가 있는데 "DL(Dependency Lookup)"과 "DI(Dependency Injection)"이 있다.
DL(Dependency Lookup) : "의존성 검색"이라는 의미. Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 LookUp하는 것. 예를 들면 XML의 Bean 정보를 보고 검색을 통해 어떤 클래스를 사용할지 확인하게 된다.
/* 아래와 같이 Bean에 대한 정보가 있는 XML파일이 있다고 가정해보자 */
<beans>
<bean id="myObject" class="com.Yunamom.MyObject" />
</beans>
/* Java에서는 해당 XML의 Bean 정보를 보고 검색을 통해 어떤 클래스를 사용할지 주입하게 된다. */
String myConfigLoc = "classPath:myAppContext.xml";
AbstractApplicationContext appCtx = new GenericXmlApplicationContext(myConfigLoc);
MyObject myobject = appCtx.getBean("myObject:, MyObject.class);
DI(Dependency Injection) : 각 클래스간의 의존관계를 빈 설정(Bean Definition)을 기준으로 컨테이너가 자동으로 매핑해주는 것을 의미한다.
만약 같은 객체를 서로 다른 함수에서 사용해야하는 경우가 있는데 이때 새로 생성하게 되면 이는 비효율적이면 객체를 공유해서 사용하는 것 또한 어렵다.
또 여러 곳에서 오브젝트를 사용해야 할 때, 매번 생성하는 것이 아니라 heap메모리에 있는 오브젝트를 공유해서 사용할 수 있도록 싱글톤으로 관리한다.
'본격적인 공부 노트 > Spring' 카테고리의 다른 글
Spring Handler(핸들러)란? 쉽게 쉽게 알아보자 (0) | 2024.02.20 |
---|---|
Spring Container? ContextLoaderListener란? 쉽게 쉽게 알아보자 (0) | 2024.02.20 |
Spring의 요청 처리 방식? 쉽게 쉽게 알아보자 (0) | 2024.02.19 |
Spring Container? Spring MVC? Dispatcher Servlet 쉽게 쉽게 알아보자 (0) | 2024.02.18 |
Spring Servlet 쉽게 쉽게 알아보자 (1) | 2024.02.18 |