학습 목적
결론부터 이야기하자면, 효율적인 개발을 하고 싶었다.
SSAFY 를 통해 급하게 머릿속에 집어 넣은 지식으로 프로젝트를 맡고, 운좋게도 취업까지 할 수 있었다.
하지만 업무를 하면서 점점 한계를 느끼게 되어 스스로 기반을 다지고자 학습하고자 한다.
뿐만 아니라 스프링이 지향하는 바에 따라 개발을 진행하며,
말만 객체지향 언어를 사용하는 게 아닌 객체 지향적인 코드를 짜서 이에 대한 장점을 최대한 활용하기 위함도 있다.
객체 지향 프로그램으로
- 쉬운 유지보수
- 쉬운 테스트
- 코드의 재사용
등을 활용하기 위함이다.
스프링을 사용하는 이유
백엔드 웹 개발에서 스프링은 가장 많이 쓰는 프레임 워크 중 하나이다.
우리나라에서는 대부분의 기업에서 스프링을 사용하고, 전자 정부 표준 프레임 워크이기도 하다.
스프링을 공부하게 된 계기또한 그렇다.
이뿐만 아니라 토비의 스프링을 읽으며 이해한 바는 아래와 같다.
엔터프라이즈 시스템 개발은 비즈니스적으로나 기술적으로나 점점 복잡해져왔고, 지금도 복잡해지고 있다.
즉, 개발자가 고려해야할 사항이 많아지고 그만큼 개발을 하기가 어려워졌다.
하지만 이러한 복잡함은 제거할 수 없는 요소이다. 대신 그 복잡함을 효과적으로 상대할 수 있는 전략과 기법이 필요해졌고
일단 가장 큰 문제인 비즈니스 복잡함과 기술적인 복잡함을 분리해내는 것이다.
이 문제를 깔끔하게 해결하는 것이 스프링이다.
스프링이란 무엇인가
- 자바 기반의 다양한 애플리케이션을 만드는 것을 도와준다
- 웹 뿐만 아니라 배치 등 다양한 영역을 포괄한다
- 애플리케이션 코드에 언제나 존재하는 공통 영역에 대한 작성을 쉽고 깔끔하게 만들어준다
- 공통 프로그래밍 모델이라는 것을 지원한다
- 트랜잭션 처리, 다국어 처리, AOP 처리 등 애플리케이션에는 언제나 공통 영역이 존재한다
- 애플리케이션에 자주 사용되는 다양한 기술 API도 제공한다
- CGIB , Jackson(Object Mapper) 등
스프링 컨테이너
- 스프링 설정 정보 (@Configuration) 로 생성된 객체들을 일반적으로 싱글톤으로 관리한다.
- 물론 빈 스코프 설정에 따라 항상 싱글톤은 아닐 수 있다
객체지향 원칙을 지키기 어려운 싱글톤의 단점을 해소해준다
공통 프로그래밍 모델
IoC/DI
- 제어의 역전과 의존성 주입
- 싱글톤 패턴을 이용하면서도 객체지향의 다양한 이점을 활용할 수 있게 해준다
- 변화에 유연한 설계를 돕는다
서비스 추상화
- 비슷한 역할을 하는 다른 기술들을 묶어줌
- ex) ProxyFactory는 JDK 동적 프록시, CGLB등 프록시 기술 선택의 기로에서 해방 시켜준다
- es) DB 벤더에 영향을 받지 않는 트랜잭션 처리 기술
AOP
- 애플리케이션에서 많은 메서드, 클래스 등에 공통 부가기능을 넣고 싶을 때 중복된 코드 없이 이를 실현할 수 있게 해준다
- 로깅, 소요시간 측정 등에 사용될 수 있다