Spring Framework

Spring makes Java quick, easy, and safe for everyone.

— 스프링 공식 포털 홈페이지 소개 구절

한국에서 자바로 밥 벌어먹고 싶다면 무릎 꿇고 경배하며 매일 아침 안부를 여쭈어야 할 백엔드의 제왕. 스프링 부트가 내 인생을 지배하기 전까지 나는 XML 설정 지옥에서 길을 잃은 미아였다

1. 개요

엔터프라이즈급 자바 애플리케이션 개발을 위한 절대강자 프레임워크이다. 과거 복잡하기 짝이 없던 EJB(Enterprise JavaBeans)의 폭정에 신음하던 개발자들을 구원하며 혜성처럼 등장했다. 객체의 생명주기를 개발자가 아닌 컨테이너가 관리하는 제어의 역전(IoC, Inversion of Control)과 필요한 객체를 밖에서 주입해 주는 의존성 주입(DI, Dependency Injection)이라는 고도의 추상화 철학을 무기로 모던 서버 아키텍처를 지배하고 있다.(...)

2. 겨울이 가고 찾아온 '봄(Spring)': 혁신의 기원

이름이 왜 '봄'이냐면, 자바 엔터프라이즈 진영의 잔혹하고 차가운 '겨울' 같았던 EJB 시절을 끝장내고 새로운 봄을 가져다주겠다는 거창하고 낭만적인 포부에서 지어졌다. 실제로 Spring이 시장을 평정한 뒤 자바 개발자들은 지긋지긋한 인터페이스 상속 노가다에서 해방되었으며, 가벼운 POJO(Plain Old Java Object) 기반의 개발을 만끽할 수 있게 되었다.1 다만 그 대가로 개념의 난이도가 수직 상승해 주니어 개발자들의 뇌에 겨울을 다시 가져왔다는 설이 정설이다.

3. XML 지옥에서 어노테이션 지옥으로

과거 초기 버전의 스프링은 빈(Bean) 하나 등록하려 해도 수십 줄짜리 applicationContext.xml 파일을 작성해야 하는 XML 노가다 지옥이었다. 오타 하나가 나면 런타임에 서버가 폭발하여 디버깅도 안 되던 암흑기였다. 이제는 기술이 발전해 @Component, @Service, @Autowired 같은 어노테이션(Annotation) 몇 개만 띡 붙이면 마법처럼 돌아가는 세상이 되었으나, 이번에는 눈에 보이지 않는 스프링의 빈 등록 메커니즘을 모르면 원인 모를 의존성 주입 에러로 지옥을 맛보게 된다.(...)

4. 관련 밈 및 드립

4.1. 대한민국의 영원한 굴레, 전자정부프레임워크

국가 행정 및 공공기관의 모든 전산망 시스템을 스프링 기반으로 일관화하기 위해 출범한 프레임워크로, 국내 SI 업계의 기틀을 다졌으나 동시에 악명 높은 레거시의 무덤이다. 아직도 현장에는 스프링 3.x나 4.x 대의 과거 버전에 멈춰있는 코드가 수두룩하여 신입 백엔드 개발자들이 옛 선조들의 찬란하고 더러운 유산을 파헤치며 피눈물을 쏟아내는 실정이다.

4.2. 클래스 이름이 30글자가 넘어가는 마법

스프링 프레임워크는 엔터프라이즈 디자인 패턴을 극단적으로 정교하게 구현한 탓에 클래스 명칭이 정신나간 수준으로 비대해지기로 유명하다. 대표적인 예시로 AbstractSingletonProxyFactoryBeanSimpleMappingExceptionResolver 등이 있으며, IDE의 자동완성 기능이 없던 시절에 이를 어떻게 손으로 치고 살았는지 경외감이 들 지경이다.

5. 여담

  • 스프링 부트(Spring Boot)의 심폐소생술: 설정하다가 지쳐 쓰러지는 수많은 중도 포기자들을 위해, 톰캣 서버를 내장하고 복잡한 설정을 자동으로 맞춰주는 스프링 부트가 탄생하면서 백엔드 시장의 입지가 우주 끝까지 승천했다.
  • AOP의 마법: 관점 지향 프로그래밍(AOP)을 사용하면 내가 비즈니스 로직에 손을 대지 않고도 트랜잭션 처리나 실행 시간 로그 기록을 마법처럼 끼워 넣을 수 있어, 처음 맛보는 초보자들에게 신선한 충격을 선사한다.
  • 로드 존슨의 폭로: 이 대단한 프레임워크를 설계하고 주도했던 로드 존슨은 정작 전통 컴퓨터공학 전공자가 아니라 시드니 대학에서 '음악학' 박사 학위를 취득한 독특한 인물이다.

6. 관련 문서

각주

  1. 실제로 이 단순하고 깔끔한 클래스를 활용한다는 선언 덕분에 테스트 코드 작성이 비약적으로 편해졌다.