왜 스타트업은 Java를 피합니까?
(news.ycombinator.com)왜 스타트업은 Java를 피하는가?
HN에 올라온 질문에 대한 답변
- 가장 큰 이유는 Java 생태계가 망가져서, Maven/Gradle 등 끔찍함.
- Spring을 추종하는 개발자들 때문에 피함.
- Java를 hibernate/springboot와 혼동하기 때문.
- Java는 지루한 기업 코딩, Rust와 같은 최신 핫시트가 아님.
- JVM 사용해야 하는 경우 Kotlin 또는 Clojure와 같은 다른 언어를 사용하는 것이 좋다.
- 2022년에 당신의 새로운 스타트업이 Java를 사용하고 있다고 말하는 것은 Cobol을 사용하고 있다고 말하는 것과 같다.
- 한때는 힙하고 트렌디했지만 Oracle이 등장했다.
구인이 쉽다는 장점은 정말 아무나 지원한다 라는 단점이 될수도 있겠네요.
코틀린 스칼라까지 다떼고 JVM을 마스터한 베테랑도 있을것이고, SI업계에서 자바 경력은 10년넘었지만 기술향상의지가 없어 스트림 API도 모르고 그때 그 문법에계속 머므르는 사람도 있을것이고. golang이나 rust를 채용하게 되면 후자의 비율은 상당히 줄어들것 같긴 합니다. 파이썬은 모르겠지만요...
java에서 kotlin으로 넘어가는것 어렵지 않으며 jsp에서 thymeleaf로 넘어가는것도 어렵지 않아요. 단지 레퍼런스라는 불편함이 있을뿐이죠. 뭐가 됐던간에 객체와 상속, 구조적 설계부터 해보세요. 라이브러리나 사이드 툴등에 종속하는건 자신이 초보라는것밖에 증명이 안됩니다.
개인적으론 Java 는 역사가 오래 된 만큼 정보 불균형이 심한 듯 합니다.
아무래도 한 시대를 풍미했던 언어였으니 그 시대의 정보 산물이 아직도 많이 남아있고, 수 많은 버전업이 된 지금까지도 그 산물이 마치 아직 유효한 듯 재 생산되는 경우도 매우 많았던 것 같습니다.
새 버전에 맞는 새 접근방법을 찾아가는 데에 어려움이 많았던 기억이 있습니다.
다른 언어라고 안그런 것은 아니지만, 파편화가 심한언어를 뽑자면 파이썬, 자바가 딱 뽑힐 것 같습니다.
하지만 파이썬은 생산속도면에서 뛰어나다는 평가를 받기때문에 여전히 스타트업에서 종종 채용하는 것 같고요.
하지만 스타트업에서 자바를 피하는거랑은 다른이유인 듯 합니다.
[스타트업에서 자바를 피하는 이유]
- 핫한 언어가 아니라서
- 스타트업은 대체로 새로운 트랜드를 이끈다는 생각을 가진 사람들을 뽑고싶기때문에, 핫한 언어를 쓰고싶어하는듯.
[그렇지만 스타트업에서 자바를 선택해야 하는 이유] - 구인이 쉽다.
[하지만 제고해 봐야하는 이유] - 구인이 쉽다고 해서 좋은 사람을 뽑기 쉬운것은 아니다.
자바가 좋냐 안 좋냐를 떠나서 피부로 느끼는 건 자바가 해외 스타트업의 주류는 아닌 것 같습니다
해외 업체 인수를 위해서 기술 분석 업무를 수행핬었는 데 1군데도 자바가 없었습니다. 특이한 건 의외로 .NET이 많았죠.
벌써 2~3년 전에도 그런 경험을 해서 그런 지 공감이 가는 내용입니다.
maven은 너무 장황해서 저도 별로지만
gradle도 끔찍한거였군요
저는 npm이 더 무섭던데요;
그리고 cobol은 좀 선 넘은 것 아닌가 싶네요
대기업 개발자 위주로 써서 그런가 ㅎㅎ
아무튼 자바가 맹목적으로 비난받는 그림은 볼때마다 재밌습니다. 사례를 보다보면 각자의 어두운 경험들이 보이더라구요.
자바는 너무 게을렀었어요.
욕먹을 만 합니다.
요새 좀 힘쓰는 것 같으나 욕은 더 먹어야한다고 생각합니다.
어차피 세대가 흐르면 또 다른 언어가 주류가 될겁니다. 스타트업은 새로운 흐름을 도입하기 위한 의사결정 구간이 간단하고 본인들이 쓰는 언어가 주류가 되야 스타트업을 벗어나는 거고, 규모가 큰 기업들은 의사결정 구간이 복잡하고 이해관계가 있다보니 안정성이 확보되야 도입하는 차이가 아닐까요. 1959년에 등장한 코볼이 금융권에서 21세기가 되어서야 사라졌습니다. 참고로 여러분들이 별로라고 하는 자바도 오픈소스로 출발했고 한때 소호 에서 가장 인기있는 언어였습니다. 그리고, 자바가 대기업 이미지가 더해진건 오라클이 인수하고 한국에서는 정부주도의 전자정부프레임워크가 등장하면서입니다.
'자바는 한국에서만 인기있다'는 미신은 어디에서 시작되었는지 궁금하네요. 국내 it 대기업이래봐야 네카라 두군데인데 두 군데 다 자바를 쓰니까 그런걸까요?
물론 미국에서는 엔지니어링 풀이 훨씬 넓으니까 다른 언어로 팀을 꾸리기 유리한 부분이 있긴 하지만 faang 포함 모든 미국 it 기업에서도 자바는 지극히 일반적인 기술 스택입니다.
워낙에 큰 회사들이라 팀바팀이 매우 심하지만 아마존은 아예 사내 표준 프레임워크가 자바구요(버전 2에서 스프링 썼다가 이제 guice로 바꿨다고 들었습니다) 구글은 C++ / 자바 반반정도에 파이썬 쓰는 팀도 일부 있는 정도라고 알고 있습니다 애플도 제가 알기로 대부분의 웹 서비스가 자바에서 돌아가는 걸로 알고 있구요
넷플릭스는 말할 것도 없죠 hystrix, zuul, eureka 다 넷플릭스에서 만들었으니 아마 세상에서 가장 스프링을 잘 쓰는 회사가 아닐까 싶습니다
페이스북도 대부분 C++ 아니면 hack이지만 일부 자바를 쓰는 팀이 있는 것으로 알고 있습니다
트위터도 처음에 루비로 썼다가 jvm 언어인 스칼라로 옮겨간 것으로 알고 있고 그 외에도 아틀라시안, vmware, 레드햇 등등 대기업에서 오히려 자바를 안쓰는 곳을 찾기가 더 힘들겁니다
카프카, 하둡 등이 다 jvm에서 돌아가기 때문에 직접적인 서비스에 자바를 안쓰더라도 진짜로 자바가 필요없는 회사는 아마 없지 않을까 싶네요
네 글 자체는 국가 상관없이 일반적인 대기업을 논하고 있는데요 댓글에서 유달리 "한국에선 그렇다" "한국 한정으로 그렇다"는 언급이 유독 많이 보여서요
한국에서만 Java를 많이 쓰는 건 아니지만, 한국에서 특히 Java를 많이 쓰는 건 사실인 것 같습니다. 예를 들면 JetBrains의 작년 설문조사 결과에서는 “Java는 한국, 중국 및 독일에서 가장 많이 사용되는 언어입니다. 한국의 Java 점유율은 53%, 중국은 47%, 독일은 33%입니다.”라고 하더군요. 이러한 현상에는 다른 분들도 댓글에서 많이 언급하신 전자정부프레임워크의 존재 및 국비지원 코딩교육의 커리큘럼 등이 분명 영향을 주지 않았을까 합니다.
몇몇 댓글들을 보니 예전에 올라왔던 C++관련 글이 떠오르네요. 한국 개발 커뮤니티에서 C++과 자바는 거의 성역의 반열에 올라간게 분명하군요 ㅋㅋ 까는 순간 무수히 많은 사람들의 발작 버튼이 눌려지는걸 보니..
발작버튼은 그다지 좋은 표현은 아닌 것 같습니다. 상대방을 나쁘게 표현하기 때문입니다.
조금 더 서로를 존중하는 커뮤니티가 돼면 좋다는 마음에 감히 말씀드려봅니다. 죄송해요.
스타트업이 자바를 피한다기 보다 다른 언어/프레임워크의 장점이 더 크기 때문이라고 생각하긴 하지만 자바/스프링 생태계가 생각보다 별로라는것에는 동의합니다. 솔직히 스프링 개발자지만 스프링을 딱히 좋아하지 않네요. 웹 어플리케이션 개발을 자바(사실상 스프링과 동의어) 말고 다른 환경에서 진행해본 개발자들이 별로 없기에 더 심한느낌..
Spring
- 성숙한 프로젝트인데도 문서화가 제대로 안되어있고 파편화가 심함. 구글링 해보면 Baeldung 이 공식 문서급..
- XML 은 제일 끔찍하지만 Annotaion 베이스로 구현된 기능들도 끔찍하다. 모양은 같지만 python decorator 같은 것과는 근본적으로 다르기에.
- 국내한정 별다른 고민없이 스프링의 확장 에코시스템을 관성적으로 채용하는 개발 문화. 프로젝트가 불필요하게 비대해지고 버전 의존성이 심하다. Hibernate (data-jpa) 에 대한 믿음은 종교 수준
Java
- 자바 자체가 오래되면서 초기부터 설계가 잘못된 기능들을 하위호환성을 유지하면서 안고가려다보니 새로운 기능을 도입하기가 어렵다.
- 도입하더라도 우회적이거나 제한적 방식을 통해 제공되는 경우가 많음. 대표적인 것이 모듈 시스템이나 비동기 프로그래밍 (C# 에 비교하면.. 처참한수준)
JVM 생태계의 잇점은 분명 있으니 새 프로젝트에서 코틀린은 거의 필수고 스프링을 가져가야할 명확한 이유가 없다면 ktor 같은 경량 프레임워크로 시작하는게 바람직하다 봅니다. 지적한 단점에 대해서는 설계가 잘못되고 스프링 철학을 제대로 이해를 못하고 개발했느니 하는 사람들이 많지만 OOP 는 다른 언어로도 할수 있는것..
새로운 언어와 프레임워크를 좀 더 적극적으로 도입해야 한다는 점에 공감합니다만, 솔직히 지금 신규 프로젝트를 막 새로 시작하는데도 무슨 합리적인 이유 없이 최신 LTS 버전인 Java 17 대신 관성적으로 Java 8을 선택하는 사람이 넘쳐나는 것이 국내의 현실이지요. 티스토리 블로그 같은 곳을 보면 “Java 1.8 다운로드 방법” 이런 글들이 2022년 올해 날짜로 올라오는 경우를 정말 쉽게 찾을 수 있습니다. 그런 걸 보면 괜히 여기 계신 다른 많은 분들이 Java를 극혐하는 태도를 보이시는 게 아닌 것 같다 싶습니다.
그렇지만 이러한 문제점이 Java라는 언어 자체에서 기인한 문제점만은 아닌 것 같습니다. 그보다는 특히 국내에서 심한 것으로 보이는 변화에 적대적인 문화와 발전 없는 복사-붙여넣기 코드의 범람이 더 큰 문제가 아닐까 생각합니다. 실제로 저는 C#으로 개발된 비슷한 프로그램 여러 종류를 유지보수하는 작업을 하고 있는데, 언어 자체는 Java보다 낫다고 생각하지만 아무리 언어가 좋아도 전임자가 대충 예전 프로젝트 코드를 복사-붙여넣기로 때우기만 한 코드의 끔찍함을 막을 도리는 없더라고요. 심지어 지금은 외부 환경의 변화로 인해 그렇게 반복되는 코드의 상당수를 연말까지 무조건 교체해야 하는 상황이 닥치니 더욱 끔찍합니다.
국내한정 발작버튼이네요
예전부터 많이 써오던 자바를 버리긴 어려울 것 같고 사람이 계속 필요하니 국비학원에서 똑같은 커리큘럼으로 스프링뗄감 찍어내는데..
이런 순환고리가 끊어지긴 어려울것같다는 생각이 드네요.
코프링을 사용하려하는 시도들은 좋게보고있습니다.
도커 쓰다보면...
도커이미지 사이즈도 쓸데없이 커지고.
실행되는데 시간도 오래걸리도 등등...
요즘 다들 docker 쓰다보니 비선호가 된거 같기도 합니다..
Java 의 생태계는 절대 한번도 망가진적이 없다.
무수히 많은 오픈소스 프로젝트도 있고 버전업을 하면서 현제의 개발 트렌드를 다른 언어보다 빠르게 반영하고 있다고 본다.
gradle/maven 은 빌드툴은 선택일 뿐이지 필수가 아니다.
다른 빌드툴도 많이 있고 원하는걸 사용하면 된다.
노드에서 npm을 왜 사용하는가? 편하기 때문에 사용하는거다. gradle/maven역시 편하니깐 많이 사용하는거다.
Java 에도 많은 프레임워크가 있음에도 spring 을 사용하는 이유는 유연한 확장성, 프로젝트 관리의 편리함과 안정적인 퍼포먼스를 보여주기 때문에 인기가 지금까지 이어지고 있다고 본다.
왜 스타트업에서 사업규모가 커지면서 Java로 전환하는지 보면 대부분 안정적인 프로젝트 관리때문에 전환을 결정하고 있다.
지금까지 소규모로 파이썬이나 노드로 개발을 진행할땐 문제가 없지만, 사업이 성공하여 개발자가 100명 이되고 1000명이 되어 같은 프로젝트를 진행한다고 볼때 더이상 파이썬이나 노드의 장점을 살리기 힘들고, 오히려 단점이 더 많아지기때문이다.
대규모 프로젝트에 퀄리티 관리하면서 안정성까지 확보 된 Java로 전환하는 것이라고 생각한다.
아마 Java 보다 더 좋은 대체 언어가 있었다면 누구보다 따르게 대체 언어 사용하지 않았을까??
마지막으로 Java로 만든 서비스는 최초 진입장벽이 높고, 인프라 비용이 높다 그래서 스타트업 초기에 높은 비용과 많은 시간을 들여 세팅하지 않고 쉽고 빠르게 적용 할수 있는 언어를 주로 사용하는걸 볼수 있다.
일단 국내 한정으로 자바개발자만 넘처남. 정확히는 자바개발자가 아닌 스프링 개발자만 있음. 전자정부 프레이웍이 스프링이니 죄다 양선형 개발자는 스프링만 배워서 나옴. 그런 애들이 경력차고 넘처나니 그런것임. 다양성도 없고 언어 생태계는 이미 망가졌음. 스프링없이 게시판도 못만드는 자바 개랄자라고 허는 사람들 많음
이 질문의 포인트는 "스타트업", 중요한 건 "안정성/확장성" 보다 "개발속도".
스타트업에게 시간은 돈!
(나중에 시간과 돈이 생기면 자바로?)
그리고 자바의 인기가 한국만의 특수성은 아닐 듯. 지금도 Popular program language top 3.
그런 이유로 자바로 옮긴다는 이야기는 한국에서만 통하는 것 같아요.
큰 회사는 자바로 되어있는게 많다보니 유지보수 목적이 가장 큽니다.
오라클이 등장하고 말고는 사실 대부분의 일선 기업에서는 해당사항 없고...네카라쿠배도 메인 시스템은 전부 자바입니다. 넥슨 같은 게임회사들도 내부 백엔드망은 자바로 작성하구요.
자바 생태계가 망가졌다, Gradle이 끔찍하다는건 전혀 동의가 안 되네요
자바가 오래된 언어고 자바 개발자가 많다고 해서 그 사람들이 새로운걸 배우기 싫어한다거나 퀼리티가 떨어진다는 건 무슨 논리인지 모르겠네요.
네카라쿠배가 전부 자바가 메인이고 최근에 코틀린이 조금씩 도입되는 수준인데요.
설마 진짜 고수들은 스타트업에 있다 뭐 이런 소리인가요 ? ㅎㅎ
"2022년에 당신의 새로운 스타트업이 Java를 사용하고 있다고 말하는 것은 Cobol을 사용하고 있다고 말하는 것과 같다."
한국에선 자바 개발자 수급이 쉽다라는 논리를 이길 수가 없습니다. 그렇게 채용하는 개발자의 퀄리티는 글쎄요.
옛날에 괜히 자바 2명 타요 밈이 있는게 아니죠.. 게다 정부 표준 프레임워크라고 정부 공공 SI엔 뭐 거의 반강제로 JAVA를 쓰게 하니 ....
자바쪽 툴체인이 별로라는건 좀 이해하기 어렵네요.
Maven/Gradle의 관리 방식은 npm에 데였던거에 비하면 선녀였는데...
저도 커리어를 자바로 시작하고 약 4년 정도 한 회사에서 자바 개발자로만 일하다가 회사를 이리저리 옮기면서 python, ruby, go 등과 같이 다양한 언어를 접해보다가 최근에는 Solidity 개발자로써 커리어를 이어나가고 있습니다.
최근에는 많은 스타트업들이 어느 정도 성장을 마치고 안정궤도에 들어오면서 대부분 자바로 인프라를 변경하는 사례가 보이는데 왜 그렇게 바꾸나 곰곰히 생각해보니
그냥 다들 관성때문에 그러는 것처럼 느껴지더군요.
많은 리드급 개발자들이 자바에 익숙하고, 다른 언어를 배우기 꺼려하다보니 그냥 본인들에게 익숙한 자바를 사용하는 것이고 그런 사람들이 스타트업으로 몰리고나면 인프라가 다 자바 베이스로 바뀌는 것 같습니다.
개인적으로 익숙함이라는 이유만으로 인프라를 뜯어고치는게 이해가 되지는 않습니다만, 사람이라는게 원래 새로운것을 배우는것을 꺼려하고 대한민국에 자바 생태계가 워낙 견고하다보니 이를 바꾸는것은 아주 어려울 것으로 보입니다.
Java , Spring 은 대규모 서비스를 안정적으로 제공하기 좋은데,
최초 스타트업의 서비스는 규모가 작아 자바의 장점을 발휘하기 쉽지않아서
최초 스타트업은 적은 인원으로 Front, Back 을 해야하는 상황도 있는데, 이는 자바보다는
Node.js 나 JS 로 한번에 짜기 편해서
결국 스타트업 시리즈 투자 받으면 다 자바, 스프링으로 전환하던데
Java , Spring 은 대규모 서비스를 안정적으로 제공하기 좋은데,
1번은 전 가끔 잘 모르겠어요. 그렇다고 다른 언어들이 불안정 하냐면 그건 또 아니라서요. 어차피 대규모로 가면 자바도 튜닝해야할 테고 말이지요.
보면 그저 익숙해서 본인들이 성능튜닝,트러블슈팅 하기 편한것을 “안정적” 이다라고 말하는 것 같은 느낌이 들 때가 있어요.
다들 아시다시피 Java는 메모리 관리를 자동으로 해주는 등 지금은 너무도 당연하게 여겨지는 여러 가지 것들을 초기 버전에서부터 제공해주고 있습니다. 그리고 Java가 처음 등장했던 1990년대에는 C나 C++처럼 개발자의 사소한 실수가 메모리 누수를 일으키는 등 애플리케이션 전체의 신뢰성에 훨씬 큰 영향을 주기 쉬운 언어들이 지금보다 훨씬 많이 사용되고 있었지요. 그런 시대에 설령 일시적인 실행 중단(Stop-the-world)은 있을지언정 메모리 문제로 아예 서비스가 죽을 확률은 확 낮춘 언어의 등장은 상당한 센세이션이었다고 합니다. 그래서 Java는 등장 초기부터 다른 언어보다 훨씬 안정적이라는 이미지를 깔고 시작하였고, 그것이 지금까지 이어진 것이 아닌가 생각합니다.
또한 현 시점에서 Java는 각종 서비스에서 오랫동안 널리 쓰이면서 쌓인 신뢰도와 축적된 경험이 있지요. 따라서 말씀하신 것처럼 성능 튜닝이나 트러블슈팅을 하기가 용이하기도 하고, 상용과 오픈소스를 막론하고 각종 도구와 솔루션도 많이 있습니다. 널리 쓰이는 제품의 생태계는 그 자체로 문제해결을 쉽게 만드는 효과가 있고, 장애 발생시 문제해결이 쉬워서 다운타임을 줄일 수 있다는 것은 안정성을 중시하는 입장에서는 큰 메리트일 것입니다.
그리고 다른 댓글에서 많이 언급되는 Kotlin의 경우는, 여기 GeekNews에 달린 다른 분의 댓글에 의하면 의외로 아직까지도 컴파일러 버그나 호환성과 관련된 이슈가 많다고 합니다. 같은 JVM을 쓰는데다 공개된 지가 이제 10년이 다 되어가는 언어도 이러니, 판단 기준에서 안정성을 가장 중시한다면 웬만해서는 오랜 세월을 통해 충분히 검증된 것을 택하려는 것이 충분히 합리적이지 않나 싶습니다.
참고로 현 시점에서는 굉장히 이상하게 느껴질지도 모르지만, Java가 처음 등장했을 때는 임백준님의 저서 『폴리글랏 프로그래밍』(2014)의 표현을 빌리자면 “참신하고 젊어서 섹시한 느낌마저 주었”다고 하는군요. 이와 관련하여, Java의 아버지인 제임스 고슬링이 1997년에 작성한 글의 번역문을 소개합니다.
스프링으로 가는 이유는 한국 개발자 시장의 특수성에 있다고 봅니다.
해외에서는 JVM 은 이 글처럼 대체로 코틀린으로 전환하고 있죠.
저도 spring 추종자 때문에 java 이미지가 안 좋아짐.
특히 한국은 java한다 그러면 그냥 죄다 spring boot라. java = spring boot 이런 식이 많아서.