Java Spring은 어떤 언어일까?

Myeong Ho Song
모이면 뭔가 하겠지(MOMU)
3 min readJan 11, 2016

어제 spring을 들은 후 바로 들었던 생각은 java를 플랫폼으로 해서 사용한다 하였는데 그러면 다른 인터프리터 언어보다 느리지 않을까. 아니면 기반만 java이고 인터프리터를 사용하는 걸까였습니다.

그래서 찾다보니 어제 제대로 이해하지 못했던 부분이 있었는데 인터프리터와 컴파일러의 차이, 자바 컴파일러과정을 제대로 모르고 있었던 부분에서 생겨난 오류였더군요.

Java Spring은 Maven이라는 빌드 툴을 사용하고 있었습니다. (물론 gradle도 사용하긴 하였으나 찾아본 바로는 Maven을 더 많이 사용하더군요. 예전 글들이어서 그런지…) 따라서 Spring은 Java기반이니 컴파일언어가 되는게 맞았습니다.

그래도 속도에 대해서 의문이 풀리지 않았었는데 Java의 빌드과정을 다시 살펴보니 괜한 고민을 했다는 생각이 들었습니다. 다른 컴파일언어의 컴파일 결과물과는 달리 자바는 바이트 코드로 컴파일의 결과가 나오게 되는데 이를 JRE를 통해서 해석이 되므로 결국 속도가 많이 느리진 않는… 형식이 되지 않나 싶습니다.

오랫만에 정말 사소한(?) 것에 궁금증이 생겨 찾으면서 제가 잘못알고 있는 부분까지 고치게 되었네요. 속도에 관한 부분은 찾아봐도 확실한 결과가 나오지 않아 유추형식으로 해보았습니다. 혹시 틀렸다면 피드백 부탁드립니다.

  • 찾으면서 배우게 된 & 다시 알게 된 것들

1. 빌드툴

: 소스파일을 컴파일, 빌드, 배포 등의 작업을 지원하는 툴로 Apache Ant, Maven, Gradle이 있다. Ant, Maven, Gradle 의 순서로 전 것의 문제점을 보완하여 만들어졌다. 최근에는 Maven에서 Gradle로 옮겨가고 있다고 한다. 개인적으로 Gradle만 써봐서(필요한 부분만 일부 배워서 써봄) Maven의 장점이나 단점은 잘 모르지만 일부 기능이 가끔 의외로 작동을 하였다 한다. 또한 Maven은 xml을 사용하는데 반해 Groovy를 사용하는 Gradle보다 비교적 동적이게 사용이 가능한다는 점과, 프로젝트를 구성하는 구조도 Maven은 상속방식으로 하는 반면 Gradle은 구성주입(?)( Configuration Injection)방식을 사용하는 점 등에 있어서 Gradle을 선호한다 한다.

2. 컴파일러와 인터프리터의 차이

: 사실 알고 있던 개념이긴 한데 번역 속도만 두고 생각을 하였던 것같다. 번역속도는 컴파일러는 한 소스 코드 전체를 한번에 번역을 하게 되어 느리지고, 인터프리터는 한줄한줄하므로 비교적 빠르다. 하지만 실행속도는 컴파일러가 다시 번역이 필요하지 않으므로 인터프리터보다 빠르게 되는 것이었다.

3. Java 컴파일 과정

: Java는 컴파일의 결과가 class가 아닌 바이트코드로 이루어져 있고, 이결과를 JRE를 통해 번역을 하게 된다.

--

--