달력

3

« 2024/3 »

  • 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
  • 31
.. .. ..

Spring을 쓰는 이유.


10년전이야 몰라도 요즘 세상은 자바로 개발을 하게되면 스케일이 엄청나게 크다. 앞으로도 스케일이 점점 커지게 되고 그렇게 되면 프로젝트 규모도 커지게 된다.
이렇게 되면 많은 개발자들이 한 프로젝트에 달라붙게 되는데 많은 개발자들이 한 프로젝트에 붙어서 서로 분할하여 개발을 하다보면 분명 중복되는 부분도 많고 또 복잡해지고.. 비즈니스 로직은 점점 복잡해지지 요구사항은 점점 늘지...
스프링은 이런 개발을 편하고 알차게 하라고 만들어진 오픈소스 프레임 워크다.
(오픈소스 : 아무나 가져다 써도 되는 것을 의미)
(프레임 워크 : 좀더 개발하기 쉽도록 공통 클레스를 만들어 묶어놓은 것으로 생각하면 됨.)

어떻게 편하게일까?!

비즈니스 로직을 담은 애플리케이션 부분과 엔터프라이즈 기술을 처리하는 부분의 분리(뭐 단계별로 쪼갰다고 생각하면됨. 멋진말로는 모듈화?!) 등이 있다.
위의것 말고도 많은 편하게를 SPRING 이 제공하고 있다. 그걸 주저리 주저리 쓰면 백년이 걸리고 가장 보편적으로 책을봐도 인터넷 검색을 해봐도 나오는 편하게 해주는 것들이 있는데
Ioc, DI, AOP, (여기에 더하면 PSA도 있다.)
스프링이 JAVA 개발을 편하게 해주는 방법은 위가 전부다. 진짜루~

IOC 란

개발자는 JAVA 코딩시 New연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸시킨다.
IOC란 인스턴스(객체)의 생성부터 소멸까지의 객체 생명주기 관리를 개발자가 하는 대신 스프링(컨테이너)이 대신
해주게 하는것을 말한다.
그럼 이런 의문이 생기겠지 . 이걸 왜 스프링 시켜 내가하면 되는데?!
천재적으로 코딩을 잘하는 개발자라면 쓰지 않아도 된다. Java 상으로 구현하면 되니까.. 하지만
Spring 의 목적에서도 봤듯이 스케일이 커져만 가는 요즘 세상에 그 많은 객체들을 깔끔하게 관리하기도 빡시고
또 자원을 잘 활용해야되는데 이걸 개발자가 하지말고 Spring 시키자!! 이런의미에서 Spring 을 쓰고 이게 IOC 다.
책이나 인터넷 이런곳에서 설명하는것은 좀더 추상적이고 그 말들이 정답이지만 알기 쉽게 설명을해야지 ;;
개념은 위 방식으로 이해하고 그 책들을 읽으면 좀더 이해가 될 것이다.

DI 란?

이건 가장 이해하기 쉬운 개념이다. 레고의 사람을 생각하면 바지를 막 바꿔 낄수 있다. 머리통도 바꿔낄수 있다. 팔에 막 무기도 쥐어줄수 있고 빼서 다른걸 낄수 있다. 이게 DI 이다.
JAVA 상으로 생각해보면 코드를 짜는중에 DB랑 접촉하는 부분(DAO) 이 있는데 생 JAVA로 짜는 사람도 있고(JDBC) iBatis , JPA 등의 프레임 워크를 이용해서 짜는 사람들도 있다. 이때 Spring 을 이용하면 그때마다 필요한 부분을 뺐다 꼈다할수 있다. 여기서 말하는 빼고 끼는것을 주입(인젝션?!)한다고 하는데 뭐 그런의미다. 이게 DI다 쉽게 뺐다꼈다 할수 있는것..

AOP 란?

이놈은 정말 어렵다. 진짜 어렵다.. 백날 공부해도 백날 어렵다. 쉽게 이해하기 위해 그림을 찾다가 발견한것이 아래와 같다.

A B C

 

 



위와같이 A,B,C 클레스가 있다. 안의 색들은 소스들이라는 개념을 가지면 된다.
근데 A,B,C 클레스를 보면 같은 색들이 있는데 이것은 서로 공통되는 소스라고 생각하면 된다.
위와같이 코드를 짜면 공통된것들이 중복되다보니 코드의 가독성도 별로고 개발 속도도 별로다.
그래서 스프링 AOP는 아래와 같이 할수 있게 한다.

A B C

 

 


스프링의 AOP는 저렇게 공통된 애들은 따로 빼두고 필요할때 불러다 쓸수 있도록 해준다.저 공통된 애들중에 하나를 책들에서 설명하는것은 트렌젝션 처리가 있다. 물론 이 외에도 다양한 기능이 있지만 트렌젝션 처리가 AOP를 설명해주기엔 딱이니까..
트렌젝션을 예를 들을때 AOP가 원하는 조건(메소드명에 트렌젝션이라 적기)에 맞춰서 A,B,C 클레스를 개발하면 그 조건에 맞는 메서드가 동작할 시에는 트렌젝션이 그 메서드에 먹는다는거~~ 이게 AOP를 이용한 트렌젝션 개념이다.

AOP에 대해 보통 책을 보면 아래와같이 어렵게 써둔다 (쉽게좀 설명하면 좀좋아 ;;)

관점 지향 프로그래밍(AOP, Apsect-oriented programming)은 핵심 관심사를 분리하여 프로그램 모듈화를 향상시키는 프로그래밍 스타일이다. AOP는 객체를 핵심 관심사와 횡단 관심사로 분리하고, 횡단 관심사를 관점(Aspect)이라는 모듈로 정의하고 핵심 관심사와 엮어서 처리할 수 있는 방법을 제공한다.


위의 설명과 다를거 없다. 이해 안되면 죽어~!


이제 끝이다. 스프링은 저게 다다. 아까 PSA도 있다고 설명했는데 이건 별거 아니다.

환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근 할 수 있게 해주는 기술이 PSA(Potable Service Abstraction)이다.

위 말은 이해하기 쉽게 설명하면 환경이 아무리 달라져도 잘 작동할수 있게 도와주는게 SPRING 이다라는 뜻이다.


끝~!
위 설명은 Spring 의 이해하기 쉽게 쓴 개념일 뿐이지 정석은 아니다.그리고 위 개념을 알고 소스로 몇번 쳐봐야 아~ 이래서 이게 이거구나 싶어진다.
Spring 설정에 관련된 XML을 만들다 보면 JAVA 소스보다 XML 파일이 더 많아지기도 한다. 이건 배보다 배꼽이다라고 안쓰고 말지라고 생각할수도 있는데 조금은 큰 프로젝트만 들어가도 이건 대박 편하다. 해보면 안다. 이부분은 심화과정이나 가야 알게되니 지금은 개념만 알고 넘어가면 된다.
.
:
Posted by .07274.