학부때 Java를 조금 했었습니다. 물론 완전 완전 쌩 기초 수준이었지요. 그때 뭘 했는지 기억을 더듬어보니, Java Swing하고 자바 네트워크 프로그래밍 API로 1:1 온라인 틱택토 게임을 만들었던 기억이 납니다. 틱택토 아시지요? ㅎㅎ
그후로는 C++에만 올인하면서 자바를 쓰지 않게 되었습니다. 이상한 도그마에 같혀서, C++을 찬양하면서 Java를 경시 했지요.. ㅎㅎ C++을 바닥이 나올때까지 박박 긁으면서 파들어가다보니, 이정도 퍼포먼스는 자바로는 도저히 따라올수없을거야라고 확신하면서, 자바도 성능이 좋다라고 하는 사람들을 보며 "귀엽네.. " 하면서 우월감을 느꼈던 적이 있었습니다. 지금 생각하면 정말 부끄럽네요.
어느덧 세월이 흘러, JVM의 비약적인 발전으로, 퍼포먼스튜닝의 끝판왕인 HFT (High Frequency Trading) 서버에서조차 자바가 쓰이기 시작하는 단계에 이르렀고, C++만 신봉하던 저는 몹시 혼란스러워 했지요. ASIC과 연동은 그래도 C++가 좋을꺼야 하면서 막연히 기대를 해 봤지만, 점점 Java의 영역이 넓어져 가는것이 느껴졌습니다.
그렇게 십년을 넘게 싸고돌던 C++에 회의가 들고, 작은 옵티마이제이션에 집착하는것에 환멸을 느끼며 스타트업으로 이직했었죠. 그때 정말 자바스크립트와 파이썬으로 신나게 놀았었습니다. 조각칼로 세밀하게 나무를 다듬다가, 도끼로 팍팍 내리치는것같은 변화였지요. 만들고싶은걸 뚝딱뚝딱 만드는 재미를 C++할떄는 절대 느낄수 없었기때문에 다시 C++로 돌아가고 싶지 않았습니다.
그리고 아마존으로 이직하면서, 세팀중 하나를 고를 수 있었는데, 두팀은 C++ 하는 팀이어서 패스하고, 지금 고른 팀에 들어 왔습니다. 여러가지 이유가 물론 있지만 C++을 안해서라는 이유가 매우 컸습니다 ㅎㅎ 이팀은 자바스크립트, 리액트, 루비온레일즈 그리고 자바를 쓰는 풀스택 엔지니어를 뽑고 있었는데, 제가 루비랑 자바랑 리액트 못하는데 (ㅋㅋ 지금 생각해보니 필요한거 거의 못하는거였네요) 괜찮냐고 하니까 상관없다고 해서 들어왔지요.
들어오자마자 리액트랑 루비로 일하게 되었는데, 사실 별거 없더라구요. 루비는 그냥 깊이 쓸일없이 레일즈에 관련된 부분만 만져서 아직도 잘 모르지만 필요하면 구글링해서 짤 수 있는 수준은 되었구요. 리액트는 완전 완전 팬이 되어 버렸지요. 문제는 자바인데... 자바는 아마존에서 엄청나게 많이 쓰이는 언어라서 모르고 지나가면 불리했습니다. 심지어 AWS의 코어 네트워크도 자바로 작성된것이 대부분이라고 하더군요. 그래서 이번에 새로운 시스템을 개발하는데 백엔드로 파이썬이나 노드를 쓸까 고민고민 하다가, 그냥 자바로 짜기로 결정 했습니다. 팀원들은 파이썬과 노드로 대규모 백엔드를 만들어 본 경험이 없어서, 내심 제가 그쪽으로 추진해주길 바라는 눈치였는데, 제입장에서는 자바 경험을 쌓아야 했기때문에 초반에 리스크(제가 자바 완전 까막눈인지라..)를 감안하고라도 자바로 가기로 결정 했습니다.
그리고 이제 이틀째 자바로 코딩을 하고 있는데, 자바 완전 괜찮네요. 무엇보다 일단 IntelliJ 에디터가 진짜 대박이구요. 이클립스는 정말 엄청나게 초반 버젼 이후로 써본적이 없는데, 비슷하게 좋나요? IntelliJ는 막 코딩하다가 웃음이 날정도로 좋더라구요.. ㅋㅋㅋㅋ
그리고 Google Guice 로 Dependency Injection 방식으로 코딩을 하고 있는데, 이거 신세계네요. 물론 스크립트랭귀지만큼의 자유도는 바랄 수 없지만, strictly typed language 로써 이정도 자유도를 누릴 수 있다는게 정말 훌륭한것 같습니다. Mockito 로 유닛테스트 짜는것도 C++ 유닛테스트 짜는것에 비하면 춤이라도 춰야 할 수준입니다.
단점은, 다른애들은 다 자바 "꾼"들인데 저만 뉴비라서, 무시당하고 있습니다. 제가 뭐 물어보면 답답하다는 표정을 짓는애도있고. 제가 태클걸면, "너 모르면서 왜자꾸 댐비니" 하는 눈빛을 쏘는 애도 있습니다. ㅋㅋ 그래도 저는 개의치 않습니다. 어느 수준만 넘어서면 그때부터는 C++을 디립다 팠던 제가 더 유리해질거라는것을 알고 있거든요. Java만 아는거랑 C++과 Java를 둘다 해본거랑 큰 차이라고 생각하니까요. 그래서 쪽팔리단 생각 없이 마구 묻고 귀찮게 굴고 있습니다. ㅎㅎ
앞으로 빨리 익혀서 뉴비 딱지 떼고, 슬슬 Kotlin을 응용 해 보려고 합니다. 자바에는 Coroutine 이 없기때문에, Asynchronous로 들어가면 생산성에 한계가 올것 같아서요. Python 할때 Coroutine 으로 코딩 한번 해보고는 푹 빠져서 이거 없이는 코딩 못하겠더라구요. 자바스크립트도 Async Await 없이는 역시 갑갑하구요.
이렇게 자바 2일차 뉴비의 자바 일기를 전해 드렸습니다. 자바 고수님들의 많은 조언 부탁드립니다. ^^
굽신굽신..