자바는 선행을 찍먹했지만, 자바 기반 프레임워크인 스프링은 생애 태어나서 처음 접했다. 당장 다음주부터 스프링 주특기 공부를 시작해야 되는데 알고리즘만 주구장창 풀다가는 개발자가 아니라 수학자로 노선을 틀 우려(?)에 당장 시중에 펼쳐진 스프링 강의를 틀어 배속으로 보기 시작했다.
심드렁하게 보는 와중에 드는 의문이 있었다.
나는 왜 이걸 보고 있냐..?
좀 어째 보면 원초적인 질문인데 단순히 스프링을 공부하기 위해서라는 답변은 나한테 맞지 않았다. 왜 스프링을 공부하냐면, 당연히 자바 기반 프레임워크니까라는 꼬리를 문 답변 역시 나를 만족하지 않았다.
내일부터 스터디 진입이고, 스터디 1주차 주제가 제어 역전인데, 단순히 개념을 암기하는 식의 공부는 나랑 영 맞지 않아서 공부의 지침을 삼기 위해 조금 시간이 걸리더라도 공부 방향과 목적을 확실하게 잡을 필요성이 있다.
기존의 자바스크립트는 타입을 지정하지 않고 실행 시에 메모리 할당이 이뤄지는 대표적인 동적 언어였다. 프로그래밍의 기초 문법을 익히는 데에는 너무 좋았지만 직접 프로젝트를 해보면서 서서히 수면 아래 잠긴 불편함들이 부상했다.
(지극히 개인적인) 동적 언어(특히 JS)의 불편함
1. 객체지향이 뭐임...?
정말로 객체지향이 무엇인지 이해하는 데에 너무 힘들었다. 특히나 공부하던 때의 자바스크립트는 클래스 문법 형식에서 점점 벗어나는 추세였고 프로토타입 체이닝 기반 상속 구현은 나한테 너무 낯설게 다가왔다.
2. 출력 메소드를 찍어야만 드러나는 오류의 원인
코드의 문법은 옳다. 그렇다고 코드가 무조건 실행되지 않는다는 진리를 뼈저리게 느꼈다... 오류가 발생했다고 추리(!!!)한 곳에서 무수한
console.log()
를 찍어야 오류의 원인을 파악할 수 있었다.3. 싱글스레드로 인한 비동기 무간지옥
바닐라 자바스크립트로 프로젝트를 진행할 때, 함수의 실행 서순을 제어하는 것이 정말 어려웠던 기억이 난다. 자바스크립트는 싱글 스레드 언어여서 콜백 함수,
Promise
,async/await
등의 비동기 문법을 활용하는 것이 나한테는 어려웠다.
사실 위의 불편함은 어쩌면 간단하게 해결될 수 있는 부분들(특히 2번은, 타입스크립트라는 아주아주 강력한 언어로 해결이 가능하다.)일 수도 있지만, 지금의 포스팅은 매우 사적인 사실(?)들의 모음이기 때문에 난 개의치 않음.
프론트엔드를 공부하던 시절에도 주로 클라이언트와 서버 간의 통신 처리, 데이터 관리 등의 역할을 주로 맡았고 자연스럽게 백엔드에도 관심이 가게 됐다. 그 당시에는 백엔드? 그럼 자바지!라는 좀 안일한 마음도 없지 않아 있던 것 같다. 물론, 자바를 선택한 걸 후회하지는 않는다. 자바 공부는 2회독까지 진행할 정도로 꽤 재밌었거든(물론 덜 끝냄)
사실 이건 다른 언어도 마찬가지이지만, 자바를 직접 코드로 작성하면서 클래스 문법에 매우 빠르게 익숙해지고 프로그램의 동작 흐름을 클래스로부터 생성한 인스턴스, 혹은 정적 클래스를 기준으로 사고할 수 있는 감각을 약간이나마 익힐 수 있었다. 개인적으로 생각했던 최고의 장점. 덤으로 객체지향과 관련된 상속, 다형성 등에 대해서 자바 공부만으로도 개념을 어느 정도 잡을 수 있었다.
이건 케바케겠지만, 나는 타입을 직접 지정하고 제네릭을 세팅하는 것이 편했다. 오히려 타입을 지정하지 않는 자바스크립트나, 심지어 변수 할당을 중요하게 여기지 않는(!) 파이썬의 코드 작성보다 자바의 클래스 작성하고... 필드 작성하고... 생성자 작성하고... 메소드 작성하고... 의 과정이 나한테는 꽤 편했으며, 수많은 예외 처리를 요구한다는 것은 공부의 수준에서는 오히려 장점이었던 것 같다.(물론 개발의 과정에서는 광광우럭따가 될 예정)
이 말인 즉슨, 특정 운영체제에 종속적이지 않다는 것이다. 물론 내가 컴퓨터를 여러 대 갖고 있는 갑부가 아니어서 피부에 와닿는 장점은 아니지만, 특정 운영체제에 구속되지 않는다는 점은 확장성을 갖추고 있다는 특징의 증명일 수 있다.
지극히 현실적인 관점. 물론 스타트업이나 기타 기업에서는 Node JS
, Python
등의 가벼운 프로그래밍 언어를 기반으로 백엔드를 구현하는 곳도 많지만 대중적인 인식과 서버의 안정성 추구와 가장 부합한 언어로써의 입지는 여전히 자바가 대세다. 그리고 이건 사담인데, 난 자바에서 끝내지 않을 거라서.
참고로 난 아직 순수 자바만을 활용한 프로젝트를 진행한 적이 없다. 그렇기 때문에 후술하는 단점은 지극히 내 개인적인 주관 100프로만 들어갔다.
강타입 언어는 그 자체가 양날의 검이다. 타입을 일일이 지정해주고 예외를 전부 고려하고 처리 로직을 짜줘야 되는 것은 극도의 안정성을 챙김과 동시에 극도의 생산성 저하를 불러일으킨다. 융통성이 없다.
위의 단점과 연결되는 부분인데, 코드가 길다는 건 그만큼 문법이 많다는 뜻^^... 공부를 하면서 느낀 건데 선택과 집중이 꽤 어려운 언어에 속했다. 다른 언어도 마찬가지지만 자바는 정적 언어여서 그런지 신경쓸 게 많았고 그 이상으로 숙지해야 할 게 많은데... 이걸 개발에서 그대로 쓴다...? 사망
아직 스프링을 공부하지 않았지만, 스프링이 자바 기반 프레임워크라는 것을 숙지하고 있기 때문에 프레임워크의 정의적인 관점에서 스프링을 바라볼 예정이다. 그리고 이제까지 공부했던 자바 개념 및 내용과 비교하면서 스프링의 이점과 사용 의의를 최대한 체득하는 방식으로 공부 진행 생각중,