고현웅
40
2019-01-12 04:12:11 작성 2019-01-12 04:17:58 수정됨
6
348

스칼라,,, 스칼라의 활용처에 대해서


안녕하세요. 현재 대학교에서 컴퓨터 공부하고 있는 학생입니다. 질문을 올리는 것은 다름이 아니라, 스칼라라는 언어를  배우는 것이 어느정도의 효용이 있으며, 어느어느분야에 사용하는것이 적절할것인가에 대해  실무지의 경험 많으신 선배님들께 여쭤보고싶어서 글을 남깁니다.


현재 주로 공부하고있는 분야는 머신러닝과 데이터사이언스 영역이고 개인적으로 양자 컴퓨팅, 양자 알고리즘에 큰 흥미가 있어서 공부를 하고있습니다. 프로그래밍 언어에 대해 예전부터 관심이 많아서 딱히 사용할일이 없어도 이것 저것 느낌파악하는정도로 공부를 했었는데 (공부보다는 뭐랄까 심심해서 문법들 뒤져서 찾아보고 간단한코드 짜보고,,,? 그런 거에 가깝습니다.) 문득 스칼라라는 언어가 눈에 들어오더군요. 


함수형프로그래밍과 멀티쓰레드 환경에서의  소위말해서 '요즘 프로그래밍'에 대해서 관심이 정말 많았던 터라 스칼라 역시 눈에 사로잡혀서 문법과 특징에 대해서 찾아보면서 공부를 꽤 했는데, 뭐 코드의 양이 적어지고,,, 함수형프로그래밍의 여러 이점들이나,,, 병렬처리시 가지는 파워,, 뭐 그런건 이해가 가고 무슨 이야기를 하는지 알겠습니다만, 도통 이 스칼라를 대체 어디에 활용하면 그 능력이 극대화 될 수 있을지 잘 모르겠습니다.


Play를 통해서 웹개발이 가능하다지만, 정말 '가능'한거지 프로젝트시 팀원들 설득해서 같이 스칼라 공부하자고 할정도로 월등히 좋은지도 모르겠고.. (스칼라 말고도 팀원들이 쉽게 접할수 있는 자바 진영이나 자바스크립트 진영에서도 이미 정말 수준높은 함수형 개발 솔루션이 많다고 생각합니다.) 그나마 빅데이터 분산처리시 Spark를 사용할때 다른언어들 보다 좀 더 빠르게 병렬처리할 수 있다는 건 장점이라고 생각된다만, 그 외에 스칼라가 가진 힘을 어디에서 활용해야할지 방향을 잘 못잡겠습니다. 개인적으로 공부하고있는 데이터분석 분야, 혹은 머신러닝이나 양자알고리즘 프로토타이핑부분에서도 스칼라가 파이썬이나 R을 능가할수는 없다고 생각됩니다.


결론은 언어자체는 정말 매력적이고 파워풀해보이는데, 그 파워를 활용할 마땅한 활용처가 없다고 해야할까요.. 예를들어 코틀린은 안드로이드라는, 스위프트는 IOS라는 정말 확고한 사용처가 있는 것과 대비해서요. 현직에 계신 스칼라 개발자 선배님분들께서는 스칼라를 주로 어디에 활용중이시고 만약 널리 사용되는 자바나 파이썬등의 언어들을 스칼라로 대체하여 도입하므로써 생기는 리스크 대비 효율이 그만큼 뛰어난지, 또는 만약 제가 모르는 "정말 여기에서 만큼은 스칼라가 갑이다." 하는 분야가 있는지 등이 궁금합니다.

0
0
  • 답변 6

  • aeba
    2019-01-12 11:15:52 작성 2019-01-12 12:27:03 수정됨

    우리 회사에선 백엔드 대부분(사실상 전부)과 프론트 일부 개발에 씁니다

    스칼라 자체의 장점이라면 언어 자체는 작아도 언어 기능들을 조합하면 그것을 통한 표현력이 매우 강력해진다는 것입니다.

    자바스타일 코드랑 액터모델이랑 순수함수형 코드나 C같은 로레벨 메모리 엑세스가 한 언어 안에서 자연스럽게 표현되는 언어가 어디있겠어요? 그래서 같은 스칼라더라도 뭘 하느냐에따라 이 언어는 천차만별의 얼굴을 보여줍니다. 스칼라만의 생태계도 매력적이고요.


    백엔드를 개발하면서 스칼라의 장점이라면.. 플레이를쓰던지 akka-http를 쓰던지 http4s를 쓰던지에 그 외의 것을 쓰던지에 따라 모양이나 장점이 각각 다릅니다.

    제 관점에선 태그리스 파이널 스타일을 통한 코드베이스의 구조화, 정적 타이핑, 이펙트 타입, 프로퍼티 베이스 테스팅 정도가 킬러피처일거 같습니다.

    0
  • 초무쿤
    1k
    2019-01-12 14:48:59

    자바도 이제 람다식 제공해줘서 메리트가 없지 않나 싶습니다.

    0
  • 고현웅
    40
    2019-01-12 15:26:22

    흠 그렇군요.. 그나마 벡엔드 개발에서 활용도가 가장 높으려나요. 스칼라만의 독보적인 무대가 없어서 참 아쉽습니다ㅠ 여튼 답변감사합니다!

    0
  • aeba
    2019-01-12 16:35:18 작성 2019-01-12 16:48:15 수정됨

    @초무쿤

    람다식... 없는게 이상한거지 자바에 람다식 있다고 스칼라가 메리트없게 되진 않습니다.


    (함수형) 스칼라에서 가능한것들 중에 자바에서 불가능한거 몇가지 예를 들자면

    - 비즈니스 로직과 프로그램의 구현을 거의 완전히 분리할 수가 있습니다. 비즈니스 로직, 로깅, 트레이싱, 동기/비동기의 선택, 에러처리 로직 등등이 섞이지 않고 깔끔하게 분리됩니다.

    - 간단히 par키워드 만으로 직렬/병렬처리를 선택할 수 있습니다. (리스트 처리 뿐만 아니라, IO를 할때도 정말 간단합니다. API 호출을 여러군데 할때 생각할 필요가 없음)

    - 리플렉션을 통한 DI같은 것들 없이 모든게 다 함수호출과 함수의 합성만으로 이루어지도록 프로그래밍할 수 있습니다. 이러면 어플리케이션 프로그래머가 라이브러리의 작동을 좀더 직관적으로 이해할 수 있겠죠. 물론 스칼라에서도 내부가 어떻게 돌아가는지 이해하기 힘든 라이브러리는 많습니다만..


    그 이외에 모든것이 객체인 것도 편하고, 런타임에 퍼포먼스 저하 없는 박스타입도 편합니다. (예를들어 Width와 Height가 똑같이 런타임엔 Int라도, 컴파일타임엔 바꿔넣으면 컴파일에러가 남)


    그리고 마지막으로 자바와 퍼포먼스 차이가 크지 않습니다.


    이런 것들은 자바에 람다 달린다고 할 수 있는게 아닙니다.


    @고현웅

    독보적인 무대란게 점유율 낮은 언어에서 있기 힘들다고 생각합니다. 스파크 쪽은 좀 다른거 같던데, 전 그건 잘 몰라서요. 여러모로 강력한 언어라서 익혀놓으면 어떤 최신 개념이라도 스칼라에는 이미 라이브러리가 존재하는 신기한 경험도 하게 됩니다.

    내년 말에 스칼라 3이 출시되면 분위기가 조금 더 좋아질지도 모르겠네요.

    0
  • 고현웅
    40
    2019-01-12 18:30:42 작성 2019-01-12 18:36:49 수정됨

    @aeba


    스칼라가 강력하고 정말 멋진언어라는건 저도 동감한다만, 그렇게 멋지고 강력한 언어인 스칼라가 점유율도 낮고 메인이 되어 활용되는 무대가 많지 않다는게 정말 안타깝다는말이었네요 ㅎㅎ.. 


    모든 프로그래밍 언어가 그렇듯이 아무리 좋은 언어라고 한들 써먹질 못하면 말짱 도루묵이니까요. 제가 현재 활동할수 있는 위치에서 프로젝트 진행시 스칼라로 벡엔드를 짜는건 무리가 있어보이고 그나마 스칼라가 독보적인 위치를 가지고있는 스파크를 공부해보려고합니다.


    여튼 정성스러운 답변해주신거 정말로 감사드립니다!! 좋은 저녁시간 보내세요~

    0
  • 초무쿤
    1k
    2019-01-12 21:50:43 작성 2019-01-12 21:56:10 수정됨

    @aeba

    저 같은 경우는 spark 관란 개발이어서 처음에는 scalar로 작업을 했었는데(spark이 scalar로 되어있어서)

    어차피 java바이트코드로 떨어지는건 마찬가지인데

    미묘하게 컨트롤하기에 상당히 어려움이 있었습니다. 

    결국 JAVA로 그냥 개발하고 필요한 부분은 람다식으로 사용하는거로 ..

    그러다보니 자연스럽게 안쓰게 되더군요.

    (코드 간단해 진다는거 외에는 솔직히 지금도 장점은 잘모르겠습니다.

    제가 웹쪽 개발이 아니라서 그런걸수도 있고요.)

    비동기식 부분도 단점(이벤트드리븐 방식이다 보니 부하상태에서도 request를 다 받아먹고 서버 down.;;) 이 많은터라 동기식으로 처리해야되는 부분은 직접 컨트롤하는것이 좋더군요.






    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.