웹 상에서 자바 - 스프링 기반이 상당히 괜찮은 프레임워크인거 같은데...
유난히 자바를 싫어하는 이유가 뭘까...?
무겁다는 부분은 좀 이해가 안가는게...
기가램 시대에서 서버컴 램이 3자리수를 돌파하는데,,,
이게 무겁다고 하는 사람들은 절대로 kubernetes 는 고사하고 docker 기반 기술스택들은 절대로 사용 안하겠지...?
jvm 무겁다고 C++ 쓰는 사람이 docker 쓰는 상황 자체가 좀 이해가 안가는 경우고...
gc 때문이라고 하면...
ZGC 이후부터는 latency 체감이 안될 정도이고 트랜젝션에 문제가 있을 정도의 delay 는 없는데...
코딩 자체도 MSA 도입하고부터는 실질적인 코딩보다는 모듈간의 cors 나 보안성에 중점을 두지
자바의 그 특징적인 장황한 코딩이 이제 실질적으로 다가오는 문제는 없을테고...
자바 싫어하는 이유가 뭘까...?
보통 문법때문에 그럼. 코드량에 정비례해서 버그숫자가 많아지기 때문에 나는 버그프리한 프로그래밍 할 수 잇다 이런 개소리 할거 아니면 장황하다는 사실 자체는 확실히 문제임. 무조건 OOP강제하는 것도 문제고. 막상 자바가 좇같아서 만들어진게 코틀린이기 때문에 코틀린 공부해보면 자바의 문제점을 알수가 잇음
그리고 내가 비교를 해보지 않아서 모르겟는데 도커/쿠버네티스랑 프로그램이 무겁고 느린거랑 무슨 관련이 있는지 모르겟음.. 무거워서 걱정이면 도커도 쓰지 말아야된다 이런건가? 맞는 소리이긴 한데 그래도 어쨋거나 가벼우면 좋지
문법 개더러운건 맞는데 그게 버그랑은 상관없지. 오히려 자바처럼 강제되는게 많을수록 버그가 날 확률은 더 적어짐
그래서 안정성이 중요한 금융권 등에서는 자바가 많이 쓰이는거고...대신 생산성은 당연히 떨어지지만
언어자체가 장황한게 버그랑 상관없진 않지.. 정적타이핑/동적타이핑 차이가 문제인게 아님. 똑같이 정적타이핑인 언어들 중에서도 자바보다 훨씬 간결하고 생산성 높은 언어들이 있다는게 문제란거야
자바가 금융권에 많이 쓰이는 이유는 단순히 자바랑 스프링이 레거시코드에 쓰이고 있고 사람구하기도 쉽고 검증된 방법이라 쓰는 거지 자바라는 언어가 존나 쩔어서 쓰는게 아님
자바가 쩔어서 금융권에 쓰이는게 아닌건 나도 알아. 근데 장황해서 버그가 많다는건 전혀 동의 못하겠는데? 자바보다 더 좋은 언어가 있는거랑 장황해서 버그가 많다는건 전혀 별개의 얘기야. 타입스크립트만 봐도 안정성을 위해서 일부로 장황하게 쓰고 있는데 어째서 장황한게 버그가 더 많아진다는건지 전혀 동의가 안됨
글 작성자인데, 장황한 코드 자체는 자바의 문제라고 생각되지만 최근에 MSA 로 최소 모듈단위의 개발과 이를 통한 조합으로 이어지고 있어서 코딩 자체의 비중이 기하급수적으로 줄어들기 때문에 문법에 대한 부분은 논의할 의미가 없는거 같음... 더군다나 그러한 장황한 코딩 자체가 스프링에 의해서 보완이 되기 때문에 더더욱 문법에 대한 부분은 더이상 단점이라고 보기 힘들다고 생각함.
그렇다면 성능적인 부분으로 이슈를 옮겨가야 하는데, MSA 기반으로 어플리케이션을 manage 한다면 그런 콘테이너를 관리한다는 시점에서 JVM 의 메모리 이슈는 그런 거대한 메모리 오케스트레이션의 아주 극히 미미한 부분이며, 최근 램 용량이 기하급수적으로 늘어나서 더이상 메모리 운운하는 것도 좀 말이 안된다고 봄... 따라서 무겁다는 단점은 더이상 언급할 가치가 없는 단점이라고 생각됨.. 가벼우면 좋지만,,, 굳이 가벼움을 근거로 레거시와 안정성을 포기한다,,,? 는 자바의 단점으로 보기 어려움
그렇다고 운영상의 이슈로 latency 체크를 통한 gc stw 이슈에 대해서 생각해본다면, 이미 gc에 대한 논의와 튜닝에 대한 개선이 완성단계이기 때문, 그리고 실제 사용자가 해당 어플리케이션, 혹은 ms 단위의 네트워크 스택까지 영향이 갈정도의 latency 가 이미 해결이 되었기 때문에 실질적인 비지니스 로직에 대한 트랜잭션 이슈는 해결이 된 것이라고 봄... 그렇다면 운영상의 이슈로도 자바에 대해서 단점이라고 생각될 점은 없을텐데... 그럼에도 불구하고 자바를 싫어하고 자바를 꼰대, 혹은 레거시의 대명사로 생각해서 들어내고 새로운 언어로 마이그레이션 해야한다는 이유가 뭘까...
이 게시글 작성한 이유도 최근 합류한 주니어 친구들이나 대학생 친구들이 공통적으로 자바를 레거시, 악의 축이라고 다른 언어로의 마이그레이션을 자주 이슈로 제기해서 다수가 언급한다면 분명 어떤 이유가 있을 것이라 생각하고 여러가지로 검토해봤는데 굳이 자바 스프링 기반이 지탄받아야 할 이유나 근거가 잘 안보임... 내가 잘 확인을 못하고 아직 많이 부족한 부분이 있을 수는 있지만,,, 자바의 어떤 단점이 critical 한 이슈가 발생해서 마이그레이션이 필요한지, 자바가 나쁘다고 지탄받아야 하는지...에 대해서 잘 모르겠음...
물론 reflect 이슈나 class decompile 이슈 부분에서 어느정도 유지보수 측면에서는 단점이 드러난다고는 생각함... 하지만 이 부분이 실제 운영 및 개발간에 있어서 지탄받고 마이그레이션까지 이뤄져야할 부분인가? 라고 생각한다면,,, 특히 자바 진영측에서는 여러가지 3rd party solution 을 제공해서 해당 부분에 대해서 보완을 하고 있기 때문에 금전적 측면만 된다면야(사실 경제적 요소만 포함된다면야 어떤 언어든 문제는 없다지만) 이부분도 충분히 타개 가능한 이슈이기 때문에 자바 자체의 문제라고도 보기가 어려움... 여러가지로 고민 중인 부분...
나도 자바 스프링(특히 부트) 엄청 좋다고 생각하긴 하는데 마이그레이션 이슈에 대해서는 어느 정도 동의함. django나 node.js같은거로 하자는건 걍 병신이라고 생각하지만 단순히 자바만 코틀린으로 변경하거나 혹은 go같은 언어로 갈아타는건 고려할 가치가 있을거 같음
상대적인거지... 지금 위에 나열해 놓은 것도 문제가 아예 없다는 게 아니라 크게 문제는 안된다는 거잖아. 값싼 자동차도 연비가 크게 문제되는 건 아니고, 안정성이 크게 떨어지는 것도 아니고 승차감이 크게 나쁜건 아닌거지. 마이그레이션 할 필요 없으면 안하면 되고 실제로 회사들이 그렇게까지 일부러 마이그레이션 하지도 않음. 나는 물론이고 정상적인 개발자면 아무도 자바에 크리티컬한 이슈가 있다고는 하지 않음. 여담이지만 MSA랑 모듈단위 개발 덕분에 JAVA문제점이 희석되는 것보다는 다른 언어로 전환이 쉬워지고 있고 다른 언어 점유율 한창 올라오는 중이고. 그리고 자바 관련 문제에서 항상 말하는게 언어 외적인 부분을 항상 끌어온다는 거임.
자바 언어 자체는 좇같지만 자바 환경은 장기간에 걸쳐 실사용된 안정성 때문에 버릴 수가 없는거지. 그래서 코틀린도 자바 환경에 편승하기 위해서 디자인된거고. 자바 좋아하는 사람들 중에 코틀린 실사용 해본 사람이 손에 꼽더라
코틀린을 개발에 액티브하게 만져보진 않은것 같다... 제대로 만져보긴 해봐야 주니어 친구들이나 인턴 친구들이라 얘기를 해 볼수 있을듯... 언어 외적인 부분에서 어떤 문제점을 가져온다... 그런 관점에서도 여러가지 생각해볼 만 한것 같다... 고마움...
레거시 코드 쌓일수록 마이그레이션이 어려워질테니 장기적인 안목에서 최대한 빠른 시일에 코틀린이나 go로의 전환을 시도해 주는게 좋다는거지. 사실 지금 당장은 필요없다고 생각함
코틀린은 jvm위에서 돌아가니 알겠는데 Go로 전환은 왜 하란거임? 태클아니고 궁금해서 물어보는거 ㅇㅅㅇ
남들다하니깐 자기가특별해보이지 않기때문에 이게 진짜 이유임
나는 자바로 아다떼는거 좋다고 봄 컨셉이 확실했던 언어라 ㅇㅇ 레거시도 많고. 다만 최근컨셉에 뒤쳐지고 최근 등장한 좋은 프레임워크, 라이브러리가 노드, 자바스크립트 기반이라 그런듯. 그래봤자 아직도 스프링이 가장 잘쓰이고 자바만 제대로 해두면 다른 언어나 프레임워크 배울때 몇배는 빨리 적응한다고 생각함.
업뎃은 꾸준하지만 오라클꺼라 구버전을 강제당한다는 것은 단점인듯. 8버전만 계속쓰니...
corretto 를 쓰시게 친구...
글쓴이 내공 장난아니누 ㄱㅅㄱㅅ
사족을 덧붙이자면, 자바 버전이 올라가면 좋은게 아니라 자바 자체도 무거워지기 때문에 실질적으로 사용하는 기능의 범위에 따라서 자바 버전을 선택하시길... 향상된 GC 가 필요하다면 11 로 올리던가, optional 이나 람다로 작성할 예정이라면 8을 선택하든가, 하는식으로.... 구버전 강제한다는게 꼭 단점은 아님... 굳이 버전을 올린다면 왜 버전을 올리는지에 대해 고민하고, 자바도 여러가지 운영체제와 각각의 특징이 있으며, 자바 언어의 스펙을 구현한 여러 jdk 가 있으니까 개발환경과 배포환경, 운영환경, 라이브러리와 컨밴션등 여러가지 고민하셔서 선택하시길 바랍니다...
https://foojay.io/almanac/jdk-8/
각 jdk 구현 자바에 대해 비교가 되어있으니 실제 개발하면서 여러가지 검토하고 사용해보시길... 최근 자바 진영에서는 aws 기반 클라우딩상에서 호환성이나 최적화가 잘되어있고 해당 개발사인 아마존의 corretto 를 신뢰하고 지지하는 경향이 강해지고 있음... zulu는 확장성이 뛰어나고 공격적인 라이브러리와 재미있는 여러가지 기능들이 있으며, openjdk 는 안정성이 뛰어나고 최근에는 java 스펙의 기준점이 되어가고 있음... 이렇듯이 자바도 여러가지 종류가 있으니 한번 확인해보고 자기 환경에 맞는 자바가 무엇인지 확인하고 사용해보시길 바람...
무겁다 - 니가 이야기하는거 처럼 페러다임이 바뀌었기에 큰 제약사항 없음, gc - 자바만이 가지고 있는 문제가 아님 심지어 크게 문제도 없고, 장황한 코딩 - 덕분에 stream api를 필두로한 람다식과 리액터 등의 함수형 프로그래밍으로 점점 개선되어가는중
난 그냥 사용자가 싫기에 언어도 싫어진 케이스라고 봐 ㅋ 모든 택시기사가 나쁜건 아닌데 택시기사 이미지는 바닥인거 처럼
아 함수형은 어쩔수 없이 외부 라이브러리나 프레임워크에 의존적이긴 함. 벗어나고 싶으면 스칼라를 하거나 코틀린 하면 되겠지?