요약
본 글은 Java 17의 도입 이유, 새로운 기능, 그리고 장기적인 사용 가능성을 다룬 HereOtda 개발자 Medium 블로그의 “우리 팀이 JDK 17을 도입한 이유”, Tistory의 kghworks의 “[Java, Spring] 버전 선택 가이드 2024 (Java 21)”, 그리고 Tistory의 aday7이 작성한 “금융권 자바 버전 업그레이드 필요성과 추천: Java 17 도입 전략”이라는 3개의 글을 분석합니다. 이를 통해 Java 17이 LTS(Long-Term Support) 버전으로서 왜 백엔드 개발에 적합한 선택인지 설명하고자 합니다. 성능 향상, 보안 강화, 그리고 새로운 기능들이 Java 17을 선택하는 주요 이유로 제시되며, 이 분석을 통해 많은 기업들이 Java 17을 도입하고 장기적으로 유지하는 이유를 명확히 하고자 합니다. 특히 Java 8과 11과의 비교를 통해 Java 17의 우수성을 입증하고, 실무 환경에서 그 장점이 어떻게 발휘되는지 살펴봅니다.
서론
본 글에서는 HereOtda 개발자 Medium 블로그의 “우리 팀이 JDK 17을 도입한 이유”, Tistory의 kghworks이 작성한 “[Java, Spring] 버전 선택 가이드 2024 (Java 21)”, 그리고 Tistory의 aday7이 작성한 “금융권 자바 버전 업그레이드 필요성과 추천: Java 17 도입 전략”이라는 3개의 글을 분석하고자 합니다. Java 17은 2021년 9월에 출시된 LTS(Long-Term Support) 버전으로, 기업 환경에서 장기적인 지원과 안정성을 제공하기 위해 설계되었습니다. 이전 LTS 버전인 Java 8과 11에 비해 성능, 보안, 개발자 생산성 측면에서 많은 개선이 이루어졌습니다.
특히, 대규모 백엔드 시스템에서 Java 17은 가비지 컬렉션 최적화와 메모리 관리 개선 덕분에 더 나은 성능을 발휘하며, Switch 표현식과 Text Block 등의 새로운 기능은 코드 가독성과 유지보수성을 크게 향상되었습니다. 본 글에서는 이러한 Java 17이 많은 기업에서 왜 도입되고 있는지를 구체적으로 분석합니다. 이를 통해 3개의 글을 비교하여 각 글의 장단점을 제시하고, 보완할 점을 제안할 것입니다.
본론
첫 번째 글, ‘우리 팀이 JDK 17을 도입한 이유’(여기어때 개발자 Medium 블로그)에서는 여기어때 개발팀이 JDK 17을 도입하게 된 이유를 상세히 설명하고 있습니다.
지난 2023년도 개발자 에코시스템 현황 조사[1]에 따르면, 응답자의 50%가 Java 8을, 45%가 Java 17를 사용하고 있었습니다(Figure 1). 글의 필자는, JDK[2] 8가 “2014년에 등장한 다소 오래된 버전”임에도 불구하고 여전이 많이 사용되는 이유는 국내외에서 널리 채택된 버전이기 때문이라고 설명합니다. 필자는 JDK 8이 많은 개발자들에게 선택 받은 이유를 두 가지로 제시합니다.
첫 번째 이유는, Figure2에서 확인할 수 있듯이, JDK 8이 LTS 버전 중 가장 오랜 지원 기간을 제공한다는 점입니다(Java 21 출시 이후 달라졌습니다). 두 번째 이유는, 기존 서비스와의 호환성이 좋은 편이라는 점입니다. 현재 국내 대부분의 프로젝트는 Java 8로 개발되어 운영 중인데, 기존 프레임워크 혹은 제품과 호환성을 유지하며 안정적으로 운영하고자 이후에 연관된 프로젝트 또한 JDK 8을 사용하는 경우가 많다고 필자는 설명합니다.
그럼에도 불구하고, 필자는 Java의 지원 기간, 신규 버전과의 비교, 차세대 플랫폼과의 호환성을 고려하여 JDK 17을 선택했다고 서술합니다. 비록 Java 8의 지원 기간이 더 길지만, JDK 17의 지원 기간도 절대적으로 길며, 그 기간이 끝나기 전 또 다른 LTS[1] 버전이 공개될 것이라고 예측했습니다. 또한, JDK 8에서 직접 최신 LTS 버전으로 마이그레이션 하는 것 보다는, Java 17을 거쳐 마이그레이션 하는 것이 프로젝트에 미치는 영향이 적을 것이라고 판단했습니다. 특히, Spring 3.0부터 JDK 17 이상을 지원하는 스프링 공식 로드맵에 맞추어 JDK 17을 선택한 것이 가장 큰 이유라고 덧붙였습니다.
나머지 부분에서는 JDK 17의 주요 업데이트 사항과 실제 적용 사례를 설명하며, 새로운 기능들이 어떻게 개발 환경에서 긍정적인 변화를 이끌어냈는지 다룹니다.
두 번째 글인 kghworks의 ‘[Java, Spring] 버전 선택 가이드 2024 (Java 21)’에서는 JDK 17이 여전히 가장 적합한 선택이라는 결론을 내립니다. 필자는 2024년 기준으로도 많은 개발자들이 Java 8, 11, 17을 사용하고 있지만, Spring 6부터는 JDK 17 이상이 필요하다는 점을 강조하며, 특히 Spring Boot 3.0 이상에서도 JDK 17을 요구한다고 설명합니다. 또한, Java 17이 장기 지원(LTS)을 받기 때문에, 새로운 프로젝트를 시작할 때 가장 합리적인 선택이라고 말합니다.
글에서는 Java 17을 사용하는 이유로 성능 개선, 보안 강화, 새로운 기능 도입 등을 꼽으며, 특히 레거시 시스템의 경우에도 최소한 Java 8로 업그레이드해야 한다고 권장합니다. 또한, Java 21에 추가된 가상 스레드(Virtual Threads)와 같은 기능은 최신 개발 환경에서 중요한 역할을 할 수 있으며, 이로 인해 Java 21도 점차 주목받고 있다고 설명합니다.
결론적으로, 새로운 프로젝트를 시작하거나 Spring 기반 애플리케이션을 개발할 때는 JDK 17을 사용하는 것이 가장 이상적이며, 기존 시스템의 경우에도 호환성 테스트를 통해 JDK 17으로 업그레이드하는 것이 바람직하다고 제안합니다.
세 번째 글, aday7의 “금융권 Java 버전 업그레이드 필요성과 추천: Java 17 도입 전략”은 금융권에서 자바 버전을 업그레이드해야 하는 이유와 그 과정에서 겪는 어려움, 그리고 업그레이드 전략을 중심으로 설명하고 있습니다.
필자는 금융권에서 안정성과 보안이 핵심적인 요소임을 강조하며, 많은 금융기관이 이러한 요구를 충족시키기 위해 오랫동안 검증된 자바 기술을 사용해왔다고 설명합니다. 그러나, 오래된 자바 버전을 계속 사용함에 따라 발생하는 보안 취약점과 성능 저하 문제는 금융 기관이 디지털 혁신을 추진하는 데 있어 큰 장애물이 될 수 있다고 지적합니다. 특히, 자바 버전 업그레이드는 금융권에서 쉽지 않은 과제로 남아있습니다. 다양한 3rd-party 제품[3]들과의 호환성 문제를 비롯해, 기존 소스코드를 수정해야 하는 복잡한 작업이 필요하며, 버전 변경 시 영향을 미치는 시스템 전반을 분석하는 것도 매우 복잡하고 많은 시간이 필요한 작업이라고 설명합니다. 이러한 이유들로 인해 금융기관들은 자바 버전 업그레이드를 쉽게 결정하지 못하고 망설이게 된다고 주장합니다.
그럼에도 불구하고, 필자는 세 가지 관점에서 Java 업그레이드가 반드시 필요하다고 설명합니다. 첫 번째 이유는 보안입니다. 오래된 Java 버전은 보안 취약점이 발견되거나 지원이 중단되어, 중요한 보안 패치를 받지 못할 위험이 있습니다. 반면, 최신 Java 버전은 더 강력한 보안 기능과 지속적인 패치를 제공하여 시스템을 안전하게 보호할 수 있습니다. 두 번째 이유는 성능 개선입니다. 최신 Java 버전은 가비지 컬렉션(Garbage Collection), JIT 컴파일러, 실행 시간 최적화 등의 성능 개선 기능을 포함하고 있어, 이를 통해 금융 기관의 시스템이 더 빠르고 효율적으로 동작할 수 있습니다. 이러한 성능 향상은 고객 경험에도 긍정적인 영향을 미칩니다. 세 번째 이유는 새로운 기능과 최신 라이브러리 활용 가능성입니다. Java 버전을 업데이트하면 더 효율적인 코드 작성을 지원하는 새로운 기능과 최신 라이브러리를 사용할 수 있으며, 이를 통해 혁신적인 금융 서비스를 구현하는 데 필요한 기술을 활용할 수 있습니다. 또한, 최신 버전은 다양한 오픈 소스 프로젝트와의 통합을 지원하므로 개발자 커뮤니티에서 풍부한 지원과 정보를 쉽게 얻을 수 있습니다.
필자는 Java 버전 업그레이드에 따른 호환성 문제와 소스 코드 수정의 어려움을 해결하기 위해 4단계의 대응 전략을 제시합니다. 먼저, 현재 사용 중인 Java 버전과 3rd-party 제품, 라이브러리를 분석하여 업그레이드 필요성, 비용, 효과를 평가하고 시스템을 문서화합니다. 두 번째로, 시스템 중요도, 보안 요구사항, 성능 개선 필요성을 고려해 우선순위를 정하고, 리스크 관리 계획을 수립하며 개발자 및 관리자와 협력해 작업을 진행합니다. 세 번째로, 버전 별 이슈와 호환성 문제를 평가하고 단계적 또는 일괄적 업그레이드 방법을 결정하며, 필요시 외부 전문가 지원을 고려합니다. 마지막으로, 자동화된 테스트 도구와 환경을 구축하고 기능, 성능, 보안 테스트를 수행하며, 알림과 롤백 계획을 포함한 테스트 전략을 수립해 다양한 시나리오에 대비합니다.
필자에 따르면, 현재 금융권에서 주로 LTS 버전인 Java 11과 Java17을 가장 널리 사용하며, 이 버전들이 꾸준한 업데이트와 개선을 통해 안정적인 성능과 보안을 제공하기 때문이라고 설명합니다.그럼에도 불구하고 일부 금융권은 비교적 업그레이드가 쉬운 Java 8로 업데이트 하는 경우도 있으나, Java 17 버전 사용을 권장하고 있습니다.
세 가지 글을 분석한 결과, Java 17은 금융권을 포함한 여러 산업에서 LTS(Long-Term Support) 버전으로서 중요한 역할을 한다는 공통된 결론에 도달했습니다. 성능 개선, 보안 강화, 그리고 새로운 기능 도입을 통해, 금융 기관이나 대규모 시스템에서 안정적이고 효율적인 개발 환경을 제공할 수 있다는 점이 근거가 되었습니다.
첫 번째 글 ‘우리 팀이 JDK 17을 도입한 이유’에서는 실무 개발자의 관점에서, Java 17의 도입이 구체적으로 어떻게 진행되었는 지와 그 이유를 상세히 설명하며, 특히 Spring 3.0과의 호환성과 최신 LTS 버전의 장기적 지원에 중점을 두고 있습니다. 또한, JDK 9부터 11까지의 주요 업데이트, JDK 12부터 17까지의 주요 업데이트를 구분 지어 실제 소스코드를 제시해 변화를 독자가 이해할 수 있게 전달해주었습니다. 다만, 해당 글이 아쉬웠던 점은 Java 8, Java 11과 비교했을 때 Java 17이 우수한 점이나 차별점은 명확하지 않습니다. 버전 간의 차이는 다루었으나, 왜 Java 17이 최적의 선택인지에 대해서 구체적으로 독자에게 설명하지 않았습니다.
두 번째 글 kghworks의 ‘[Java, Spring] 버전 선택 가이드 2024 (Java 21)’에서는 Java와 Spring과 Spring Boot의 버전 지원 정보를 기반으로 JDK 17을 사용해야 하는 것이 적합하다는 결론을 제시하며, 가급적 JDK 17을 사용하길 권합니다. 실제 JetBrains 에서 조사한 Java 버전 별 점유율과 Oracle과 Spring 의 공식적인 지원 정보를 근거로, JDK 17이 최적의 선택이라고 주장합니다. 특히, 2023년에 작성된 이전 버전을 업데이트하여 2024년 상황에 맞는 정보를 제공했다는 점은 독자들에게 신뢰감을 줄 수 있는 요소였습니다. 또한, 글이 작성된 시점을 명확히 명시하고 관련 동영상 자료를 제공하여 독자들이 더 깊이 있는 자료를 참고할 수 있게 한 점도 긍정적입니다. 그러나, 해당 글이 아쉬웠던 점은, 이 글에서 아쉬웠던 점은 버전 선택 가이드라는 주제를 다루면서도 Java와 Spring 버전에 지나치게 의존하여 작성되었다는 것입니다. 특히, 주 독자층이 주로 주니어 개발자일 가능성이 높은 상황에서, JDK 17을 사용하라는 단일한 권장만으로는 충분한 정보 제공이 부족할 수 있습니다. 주니어 개발자들은 다양한 Java 버전과 여러 프레임워크 및 라이브러리를 접하고 익히는 과정에서 성장하게 되는데, 이런 면에서 다양한 버전 선택의 기준을 제시하지 않은 것은 아쉬움으로 남습니다.
세 번째 글 aday7의 ‘금융권 Java 버전 업그레이드 필요성과 추천: Java 17 도입 전략’은 금융권에서의 Java 17 업그레이드 필요성과 그 과정에서 겪는 어려움을 설명하며, 이를 극복하기 위한 업그레이드 대응 전략을 제시합니다. 보안 취약점, 호환성 문제, 복잡한 코드 수정 등 업그레이드의 주요 장애물을 언급하면서도, 철저한 사전 테스트와 체계적인 계획을 통해 성공적인 마이그레이션이 가능하다는 점을 강조합니다. 해당 글은 Java 17을 권장하는 점에서는 앞선 두 글과 유사하지만, 금융권의 특수성을 고려한 분석이라는 차별점을 가지고 있습니다.
다만 아쉬운 점은 구체적인 코드 예시나 실질적인 성능 개선 사례가 부족하다는 것입니다. 금융권에서 Java 17을 도입하여 실제로 어떤 성과를 얻었는지에 대한 구체적인 사례나 코드 비교가 있었다면, 더 설득력 있는 글이 되었을 것입니다. 또한, 보안 문제나 업그레이드의 필요성과 어려움은 모든 기업에 공통적으로 해당되는 사항인데, 이를 금융권에만 한정 지은 점에서 특정 기업군을 대상으로 하는 분석의 의미가 다소 퇴색된 느낌을 받았습니다.
세 글 모두 Java 17의 장점에 대해 매우 구체적으로 설명하고 있으나, 업그레이드의 실제 비용이나 업그레이드 후 예상되는 문제점에 대한 논의는 부족합니다. 업그레이드 과정에서 예상되는 다운타임이나 기존 시스템의 중단과 같은 현실적인 어려움에 대한 추가적인 정보가 포함된다면 더 유익할 것입니다.
결론
세 가지 글 모두 Java 17을 사용하는 것이 기업 환경에서 장기적인 관점에서 매우 유리하다는 점을 공통적으로 언급하며, 금융권과 같은 고도의 안정성과 보안이 필요한 산업에서는 Java 17이 필수적인 선택이 될 수 있음을 강조합니다.
우리 팀이 JDK 17을 도입한 이유 | [Java, Spring] 버전 선택 가이드 2024 (Java 21) | 금융권 Java 버전 업그레이드 필요성과 추천: Java 17 도입 전략 | |
플랫폼 | Medium | Tistory | Tistory |
필자 | 김동기 Jayden(제이든)/개발3팀 | kghworks | Aiden |
장점 | 구체적인 적용 사례와 JDK 17의 새로운 기능에 대한 설명 | ·버전 별 호환성과 지원 정보를 기반으로 한 명확한 권장안 제시 버전 별 호환성, 지원 정보 제공 |
금융권 특유의 안정성과 보안을 고려한 업그레이드 전략 제시 대응 전략을 프로세스로 명확하게 제시 |
단점 | Java 8, Java 11에 있는 변경 사항에 대해서는 언급했으나, Java 17의 구체적인 차별점이 명확하지 않음 | 다양한 버전 선택의 기준 제시 부족함 | 구체적인 코드 예시와 실질적인 성능 개선 사례 부족 ·금융권에서 실제로 Java 17과 Java 8 점유율이 얼마나 되는지 입증할 자료 없음 |
개선사항 및 보완점 | Java 17이 왜 최적의 선택인지에 대한 명확한 이유 제시 필요 실무 예시에서 더 많은 성능 데이터 포함 |
주니어 개발자들을 위한 다양한 프레임워크와 버전 고려 필요 | ·금융권 산업에서도 적용 가능한 구체적인 사례와 예시 추가 ·더 구체적인 코드 비교 및 성능 개선 예시 필요 |
하지만 세 가지 글 모두 Java 17을 권장하면서도 실제 업그레이드 과정에서 발생할 수 있는 현실적인 문제나 비용에 대한 논의는 부족한 점이 아쉬웠습니다. 업그레이드에 따른 예상되는 다운타임이나 호환성 문제 등도 함께 다루어진다면 더 완성도 높은 분석이 될 수 있을 것입니다. 또한, 주니어 개발자들이나 다양한 산업의 요구를 반영하여 Java 17 외의 다른 버전 선택 기준에 대해서도 더 넓은 시각을 제공하는 것이 필요하다는 점에서 보완이 필요합니다. 결과적으로, Java 17은 현대 개발 환경에서 필수적인 선택지로 자리 잡고 있지만, 이를 도입하는 과정에서의 구체적인 전략과 사례를 더 강화하여 독자들에게 실질적인 도움을 줄 수 있는 추가적인 정보가 필요할 것입니다.
참고
[1] 기동기Jayden개발 3팀 Medium 우리팀이 JDK17을 도입한 이유(2022): https://techblog.gccompany.co.kr/%EC%9A%B0%EB%A6%AC%ED%8C%80%EC%9D%B4-jdk-17%EC%9D%84-%EB%8F%84%EC%9E%85%ED%95%9C-%EC%9D%B4%EC%9C%A0-ced2b754cd7
[2] kghworks Tistory [Java, Spring] 버전 선택 가이드 2024 (Java21)(2024): https://kghworks.tistory.com/197
[3] Adien Tistory 금융권 자바 버전 업그레이드 필요성과 추천: Java 17 도입 전략 (2023) https://aday7.tistory.com/entry/%EA%B8%88%EC%9C%B5%EA%B6%8C-%EC%9E%90%EB%B0%94-%EB%B2%84%EC%A0%84-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%84%EC%9A%94%EC%84%B1%EA%B3%BC-%EC%B6%94%EC%B2%9C-Java-17-%EB%8F%84%EC%9E%85-%EC%A0%84%EB%9E%B5
[1] 개발자 에코시스템 현황 조사(2023) https://www.jetbrains.com/ko-kr/lp/devecosystem-2023/java/
[4] Java는 프로그래밍 언어이자 플랫폼이고, JDK는 Java 프로그램을 개발하고 실행하기 위한 도구다. JDK 17을 사용한다고 하면, Java 17 버전의 개발 도구를 사용한다는 의미이다. 즉, Java 17언어와 실행 환경을 이용하게 된다고 생각하면 된다.
'Language Study > Java' 카테고리의 다른 글
[모던 자바 인 액션] 스트림(Stream) (1) | 2024.07.25 |
---|---|
[모던 자바 인 액션] 람다 표현식 (2) | 2024.07.23 |
[모던 자바 인 액션] 동작 파라미터화 코드 전달하기 (1) | 2024.07.23 |
[모던 자바 인 액션] 자바 8,9,10,11: 무슨 일이 일어나고 있는가? (1) | 2024.07.23 |
multi-thread 에서 두 가지 task를 번갈아가도록 (0) | 2024.03.18 |