2025. 6. 26. 13:57ㆍ에러
현상
Spring Controller에서 stream을 사용 후 컴파일은 문제없이 되었고
서버실행시 BeanDefinitionStroeException, ArrayIndexOutOfException 가 발생하면서
서버가 안 켜지던 상황이었습니다.
참고로 Java 11, Dynamic Web Module의 경우도 3.1, Tomcat 9버전.
java 1.8 이후의 문법을 사용 못할리가 없다고 생각했었습니다.
실제로 DTO에서는 LocalDate 등의 1.8이후 버전을 사용했는데
stream만 사용 못하는 상황이 왜 발생했을까 싶었습니다.
원인
Spring 버전이 2.5였는데, 이는 Java 1.5버전까지 호환됩니다.
근데 LocalDate(java 1.8) 등을 사용했을 때는 문제가 없었는데 왜 그럴까?
서버전체의 Java version은 11이어서 기본적으로 1.8 문법은 사용할 수 있었지만,
이는 DTO 등의 spring bean이 아닌 곳에서만 사용가능했던 것입니다.
빈 등록과정에서 Controller를 빈으로 만들어야 되는데,
Spring은 1.5버전까지 호환되니까, 이곳에서 사용한 1.8문법이 에러가 발생했던 것.
서버전체의 java version은 11이니까 spring과 관련없는 부분에서는
1.8문법을 사용할 수 있었던 것.
해결
spring 빈이 아닌 객체를 생성한 후 stream을 사용할 수도 있었지만
결국 spring 빈이 있는 곳에서는 Java 1.5버전의 문법을 사용해서 동작하도록 했습니다.