2023. 4. 14. 16:38ㆍ자바/스프링
우테코 레벨 2부터는 스프링 프레임워크를 사용한다.
이번 미션을 진행하면서 스프링 프레임워크에 대해 잘 모른다는 생각이 들어 공식 문서를 한번 정리해보고자 한다!
Spring Framework Overview
스프링 프레임워크의 현재(2023년 04월 14일 기준) 버전은 6.0.8이다.
스프링 프레임워크는 Java 언어가 어플리케이션을 만드는데 도움을 주는 도구로 생각하면 된다. 주의할 점은 스프링 프레임워크 6.0 버전 이후에는 Java 17 이상을 필요로 한다.
이 때문에 최근 프로젝트를 진행할 때에는 Java 17로 작업을 진행했는데 11버전만 쓰다가 17버전을 쓰니 Record도 새롭게 등장하고, 프로퍼티 설정 등에도 차이가 나서 이를 관리하기 다소 어려웠다.
Spring이 무슨 의미야?
공식 문서에서 Spring 이름을 설명하기로는 상황에 따라 다른 것을 의미한다고 되어있다.
음... 너무 축약해서 설명이 되어있지만 개발하고자 하는 어플리케이션의 종류에 맞춰 유연하게 개발할 수 있도록 돕는다는 의미에서 Spring이라는 이름을 사용하고 있는 것 같다.
스프링 프레임워크는 여러 모듈로 나눠진다. 각 애플리케이션은 필요한 모듈을 선택할 수 있다. 이때 각 모듈의 중심에는 'Configuration model'과 'dependency injection mechanism'이 있다고 한다.
아직은 잘 모르지만 이번 미션을 활용하며 스프링 bean, Auto Configuration 등에 대해 얼핏 들어본 적이 있다. 어렴풋이 알고는 있지만 정확히는 모르기에 이번 기회에 문서를 보며 이 친구들의 정체를 파악해볼 예정이다.
Spring의 역사
위에서는 Java EE와 Jakarta EE에 대한 내용이 나온다. 둘 다 처음 들어보는 내용이어서 대충 한번 구글링을 해봤다.
대충 요약해서 적어보자면 Java EE는 분산 애플리케이션 개발을 목적으로 만들어진 산업 표준 플랫폼이라 한다. 기업용 애플리케이션을 개발하고 실행하기 위한 기술과 환경을 제공하며 서블릿, JSP, EJB, JDBC 등등의 기술을 제공한다고 한다. 하지만 상업용 플랫폼의 한계와 스프링 프레임워크 등의 오픈소스 SW의 발전으로 결국 점유율이 떨어지기 시작했고, 이클립스 재단에 자바 EE 프로젝트를 이관했다고 한다.
이후 이클립스 재단은 JavaEE를 Jakarta EE로 명칭을 바꿨다. Jakarta EE는 개방적이고 중립적인 정책을 따른다고 한다.
여기서 재밌는 점은 오라클이 JavaEE를 이관했지만 여전히 자바 상표권은 보유하고 있기에 자바 네임스페이스 사용에 제약이 있었다. 이에 따라 Jakarta EE 9 버전부터 javax.* 라는 이름 대신 jakarta.*라는 이름을 사용한다.
물론 자바 언어의 철학 중 하나인 '호환성'을 고려했기에 Jakarta EE는 JavaEE를 완전히 대체하지 않았고 둘 다 공존하고 있다고 한다. 하지만 JavaEE는 8버전 이후로 더이상 릴리즈와 추가 기능은 제공되지 않기에, 개발자들은 이 점을 고려해 마이그레이션을 할지 말지 정해야한다.
마침 삼성 SDS에서 이와 관련된 좋은 글이 있어서 링크를 걸어두도록 하겠다!
https://www.samsungsds.com/kr/insights/java_jakarta.html
다시 돌아와서 스프링은 Jakarta EE 플랫폼 사양을 받아들이지는 않았지만 Java EE에서의 선별된 몇몇 기능을 사용하는 것 같다. 아까 예시로 들었던 서블릿이나 웹 소켓 등이 이에 해당하는 기술인 듯하다.
Design Philosophy
스프링을 공부하면서 '왜 이렇게 만들었지?'를 생각했을 때 이 디자인 철학을 고려하면 좋을 것 같다.
1. 모든 수준의 선택을 제공한다.
스프링은 디자인을 결정하는 것을 가능한 늦게할 수 있도록 돕는다. 예를 들어 코드를 변경하지 않고도 Configuration을 사용해 지속적으로 제공할 수 있다고 한다. 이전에 김영한님의 스프링 강의가 기억난다.
2. 다양한 관점을 수용한다.
스프링은은 유연성을 수용하기에 다양한 애플리케이션 요구 사항을 지원한다고 한다.
3. 이전 버전과의 호환성을 유지한다.
스프링은 자바의 철학인 '호환성'을 유지한다는 철학을 이어받고 있다. 그래서 스프링의 진화는 버전 간에 주요 변경사항을 거의 강제하지 않도록 만들었다.
그 밖에 API 디자인에 관심을 가지거나 코드 품질에 대한 높은 기준을 설정하여 깨끗한 코드 구조를 가진다는 디자인 철학이 있다.
이제부터 스프링 프레임워크를 한번 공부해보려고한다. 이번에는 지치지 않고 끝까지 해봐야겠다!
'자바 > 스프링' 카테고리의 다른 글
스프링 공식 문서 뿌수기(6), ComponentScan이 뭐야? (0) | 2023.04.25 |
---|---|
스프링 공식 문서 뿌수기(5), ApplicationContext란? (0) | 2023.04.24 |
스프링 공식 문서 뿌수기(4), Spring MVC의 Annotated Controllers - DataBinder (0) | 2023.04.22 |
스프링 공식 문서 뿌수기(3), Spring MVC의 Annotated Controllers - RequestMapping (4) | 2023.04.21 |
스프링 공식 문서 뿌수기(2), Spring MVC의 Annotated Controllers - 1 (1) | 2023.04.17 |