4차산업혁명의 일꾼/Java&Spring웹개발과 서버 컴퓨터

스프링 기본개념과 변천사 그리고 스프링버전5이상 혹은 스프링부트3의 필요성에 관하여

르무엘 2024. 7. 13. 23:32

 스프링은 DI, IOC, AOP의 기본개념이 있다. 사실 자바는 New해서 만들어서 static main 메소드에서 제어한다. 그러나 스프링에서는 그것을 프레임워크가 다 제어한다. 이것은 프로그래머가 아닌 프레임워크가 관리하기에 IOC라는 역전제어가 일어난다. 스프링부트에서 이러한 것들을 참으로 편리하게 application.properties에서 거의 관리할 수 있게 하기에서, 수많은 xml 파일로 IOC설정하는 것들이 필요 없어진다.    

 DI로 인해서 자바는 의존성 주입이라는 것을 통해 객체지향 프로그래밍을 쉽게 할 수 있다. 파이썬 언어는 것은 하나의 파일 개념으로 프로그래밍 하기 편하다고 할 수 있다. 그러나 공장형태의 조립개념이라면 이러한 의존성 주입의 객체지향은 참으로 편리한 프로그래밍 방법이다. 이제는 롬복으로 더 편리해 졌다.

그리고 AOP라는 관점지향프로그래밍으로 반복작업을 단순화 할 수 있다 예를 들어 로깅이나 API사용 횟수를 측정한다면,

로깅이나 API사용 시점마다 반복 코딩을 해야한다. 그러나 AOP를 활용해서 모듈화하면, 조인포인트(@Around)를 설정해서 작업 내용(advice)을 만들고 적용될 패키지를 포인트컷(표현식)으로 표현하면 일단 완성이다. 이렇게 하면 부가기능적인 로깅, API 측정 등을 모듈화해서 주기능과 별도로 유지보수할 수 있다. 그리고 반복적인 코딩 작업을 AOP로 모듈화해서 불필요하게 만든다.

 이렇게 결국 반복작업 단순화하는 객체지향 자바를 지원하는 스프링 프레임워크. 즉 자바 객체 생성 자동화 공장이다. 

자바8에서 Lamda,Stream, LocalDate,Optional, inteface default method 가 나타나고 자바 11은 String 클래스의 isBlank() 메소드, 지역변수 var, http client (HTTP/2를 지원) 하는게 나타났다. 

자바17에서는 불변데이터 객체를 저장하는 Record클래스, 클래스 계층을 제한한는 Sealed Classes가 새롭게 나타났고, 여러줄의 문자열을 간편하게 작성할수 있는 """ 텍스트 블록, isntanceof 연산자와 함께 패턴 매칭을 할수 있고, 간결한  switch 문법제공, 향상된 난수생성기(Random Number Generators)으로 개발자에게 좀더 편리하고 직관적인 프로그래밍을 제공한다.

 눈에 띄는건 파이썬의 머신러닝에 위기감을 느꼈는지 대량의 데이터를 빨리 처리하는 벡터연산을 위한 API를 제공하는 것이다.

 거기다가 외부 메모리와 상호작용하는 API로 C,C++의 네이티브 코드를 자바 애플리케이션에서 CLinker클래스를 사용하여 활용할 수 있다. 자바는 여태까지 가비지 컬렉터로 메모리 알아서 관리했는데, 네이티브 메모리에 접근해서, 자바 힙 외부의 메모리를 효율적으로 사용할 수 있다.

뭐 이런 기능은 있다 해도, 특별한 순간에 필요해 보이고 """ 텍스트 블록이 프로그래머 입장에서 대환영이다. \n을 안써도 되기 때문이다. 그리고 성능적으로도 자바11, 자바17로 올라갈수록 GC성능이 좋아지니 성능과 안전성이 향상되었다.

 자바21은 아직 안써봤으나 Virtual Threads, Record Patterns, String Templates, Sequenced Collections, Structured Concurrency 인데 가상 스레드와, 동시성 프로그래밍과 그리고 문자열 조작을 더울 효율적으로 만든게 압권인 것 같다.

어쨌건 중요한건, 자바8은 2030년 12월 ,자바 17은 2029년 9월 그리고 자바 21이 2031년 12월까지 지원하니... 결국 자바 21의 가상스레드 개념이 얼마나 유용한지 알아두는게 좋은것 같다.

자바17도 모르는데 자바21을 배워야 할것 같은...

 

자바 8이 2030년까지라고 안심하기에는, 자바17을 강제하는 스프링부트3가 써야할게...

스프링은 버전5도 지원이 아직 넉넉한데, 스프링부트는 2버전대가 2025년이니 내년까지다. 결국.. 나는 스프링부트3와 자바17이상을 가지고 공부하는게 났다. 어짜피 자바8로 배웠고 자바11도 써봤고, 스프링부트로 넘어가는 시점에 자바17을 배우는 셈이다. 스프링부트3로 강제하면서... 어쨌건 타이밍상 괜찮다. 스프링부트가 자바17을 강제하는 바람에... 자바17을 쓰다보니 나름 좋다.

LIST