keyword - Spring FrameWork
개발자가 맨땅에서 모든 걸 만든다고 하면 얼마나 오래걸릴까? 애플리케이션의 통신, 데이터베이스 관리 등등을 모든 프로젝트를 만들 때마다 다시 구현해야 한다면 너무 힘들 것이다. 프로젝트마다 공통적인 부분을 미리 뼈대로 만들어놓으면 더 쉽고 빠르고 간편하지 않을까? 그게 바로 framework이다.
여기서 Library와의 차이도 중요하다. Library는 개발자가 원할 때 사용하는 도구이다. framework는 건물의 구조와 같다면, Library는 창문이나 가구처럼 쉽게 배치하고 바꿀 수 있으며 소프트웨어적으로는 개발자가 '주도권'을 가지고 있는 것이다. framework의 경우에는 개발자가 모르는 로직일 수 있으며 framework 자체로 알아서 동작하기 때문에 개발자에게 주도권이 있지 않다.
먼저 예전에는 EJB(Enterprise Java Beans)라는 기술을 사용하였다. 이론적으로는 거의 완벽했지만 서버 구축 가격이 너무 비쌌고 느려서 개발자들이 많이 스트레스를 받았다고 한다. Rod Johnson(로드 존슨)이라는 개발자가 EJB의 대안으로 썼던 약 3만줄의 코드를 핵심으로 Juergen Hoeller(유겐 휠러), Yann Caroff(얀 카로프)가 spring을 함께 개발했다고 한다. 'EJB라는 겨울'이 지나고 온 봄이라는 뜻으로 spring이라는 이름을 갖게 되었다.
스프링이라는 것은 여러가지 기술의 모음이다.
스프링 데이터
스프링 rest docs
스프링 프레임워크
결국 종합적으로 제일 좋아서이다. 이런 장점을 가지게 해주는 Spring Framework의 특징으로는 크게 4가지가 있다.
POJO를 지향함으로써 얻을 수 있는 것은
결국 spring이라는 것이 EJB가 객체지향적인 java의 특징을 살리지 못했기 때문에 나온 것이라 최대한 객체지향적인 것을 추구하는 것이다. 그래서 spring에서 IOC/DI, AOP, PSA 3가지를 통해 POJO 프로그래밍을 지원하고 있다.
[참고] 객체 지향 설계의 5가지 원칙
SRP(Single Responsibility Principle, 단일 책임의 원칙)
OCP(Open Close Principle, 개방폐쇄의 원칙)
LSP(The Liskov Substitution Principle, 리스코브 치환의 원칙)
ISP(Interface Segregation Principle, 인터페이스 분리의 원칙)
DIP(Dependency Inversion Principle, 의존성 역전의 원칙)
출처: https://itvillage.tistory.com/entry/객체지향-설계-원칙-SOLID-원칙
핵심 관심 사항
공통 관심 사항(부가 관심 사항)
애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것을 PSA(일관된 서비스 추상화)라고 한다.
PSA가 필요한 주된 이유는 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함이다.
유어클래스에서는 데이터베이스를 예로 들어 설명하였다. 클라이언트는 데이터베이스와 관련된 기능을 요청하기만하면, spring framwork에서 sqlite이든, oracle db이든 알아서 데이터베이스와 관련된 기능을 처리해준다. 클라이언트는 무슨 데이터베이스인지도 모르지만 그냥 요청하면 spring framework가 처리해주는 것이다.
요즘 비슷한 느낌을 받는 게 있다. 내가 사는 건물 1층을 허물고 주차장을 만든다고 한다. 그래서 공사를 하는데 최대한 상하수도 사용을 자제해달라고 요청받았다. 근데 나는 왜 상하수도 사용을 자제해야 하는지 모른다. 그냥 수도를 트니 물이 나왔고 하수구로 물이 빠지니 알아서 잘 처리되겠거니 하기 때문에 내가 물을 사용하는 것이 공사에 어떻게 방해가 되는지 모르는 것이다. 비슷하게 클라이언트도 그냥 spring framework에게 데이터베이스 연결해'줘'라고 하면 해주는 것이다.