국내에서 개발자를 지망하는 사람들이라면 왜 이토록 국내 웹시장에서는 Java 그리고 Spring이 주력을 이루는 걸까.. Nodejs나 Python(Django) 같은 서버사이드를 위한 언어, 프레임워크가 각광 받음에도 불구하고 라는 생각을 할 것입니다.
Java의 등장과 웹시장으로 확장
Java는 본래 클라이언트의 GUI를 만드는데 목적을 둔 언어였지만 당시 서버는 C, C++을 미들웨어와 함께 사용해 개발되었습니다. 미들웨어는 소프트웨어가 운영체제의 기능 말고도 추가적인 기능을 사용할 수 있게 해주는 소프트웨어입니다.
이런 미들웨어를 같이 사용하게 되면 그 운영체제와 미들웨어에 종속될 수밖에 없는 구조였습니다.
이러한 점에서 Java의 플랫폼에 독립적인 특성이 실마리로써 작용하였습니다. 단순 미들웨어에 필요한 API만 제공함으로 이런 종속 관계를 풀었습니다. 이를 기점으로 Java는 서버를 구축하기 위한 언어로써 각광을 받습니다.
Java J2EE의 등장과 비판
이후 Java에선 J2EE(현재의 Java EE(Enterprise Edition))라는 서버 개발 플랫폼이 나왔습니다.
이는 JSP, Servlet, JDBC, JNDI, JTA, EJB 등 웹 프로그래밍을 위한 기술이 포함하였습니다.
다양한 기능들이 웹 개발에서의 Java를 흥행시켰지만 당시 J2EE의 핵심은 EJB(Enterprise Java Beans)라는 기술이었습니다. Servlet이나 JSP는 웹 GUI를 만들기 위한 기술이었지만 EJB는 미들웨어에서 돌아가던 분산처리, 트랜잭션, 보안 등을 지원하는 컴포넌트 모델을 제공하는 기술이었기 때문입니다.
허나 EJB는 그 구조 자체가 실무와는 거리가 있고 실용성보다는 API의 형태나 플랫폼 독립성 같은 자바의 특성만을 강조하여 만들어졌기에 실용적이지 못한 점이 많았습니다. EJB를 제대로 쓰려면 당시 기준 천만원대 이상의 서버가 필요하였습니다.
Spring의 등장
그리고 이러한 문제를 해결하기 위해 등장한 것이 POJO 기반의 Spring입니다. 이 Spring은 고가의 Java J2EE 서버가 아닌 Tomcat 같은 단순 서블릿 컨테이너에서도 구동이 가능하였습니다.
* (POJO는 plain old java object의 준말로 특정 자바 모델이나 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말입니다.)
이제 고가의 Java J2EE서버가 아니어도 EJB의 선언적 트랜잭션, 보안, 분산 환경 지원 등 기능을 문제없이 사용할 수 있었습니다. 더 이상 각 서버 제품에 따라 특화된 설정을 공부하거나 서버 제품 교체 시 이식 작업이 없어져 배포가 간단해졌습니다.
이러한 Spring의 순풍이 국내에도 닿게 된 것입니다. 당시 국내에선 EJB의 부족한 기능과 잘못된 지식으로 인해 혼란스러웠습니다. 그리고 시기의 Spring의 등장은 국내에 흥행을 일으켰습니다. 국내 전자정부 표준프레임워크에도 Java와 Spring이 들어가며 지금까지 Java와 Spring의 명맥이 이어지는데 한몫을 하였습니다.
글을 마치며
당연하게도 국내에 Java와 Spring이 흥하게 된 것인 여기 있는 정보 말고도 다른 다양한 정보가 있을 것입니다.
이번에 Java와 Spring을 공부하며 들었던 의문을 해결하기 위해 제가 알 수 있었던 정보를 바탕으로 글을 적어봤습니다.
긴 글 읽어주셔서 감사합니다. 틀린 부분이나 부족한 부분이 있다면 알려주세요.
정보 출처입니다.
https://dokdogalmaegi.tistory.com/54
https://okky.kr/article/415474
https://www.redhat.com/ko/topics/middleware/what-is-middleware
https://ko.wikipedia.org/wiki/Plain_Old_Java_Object
https://ko.wikipedia.org/wiki/%EC%9E%90%EC%B9%B4%EB%A5%B4%ED%83%80_EE
'언어와 프레임워크 > Java' 카테고리의 다른 글
[JAVA] Intellij JDK 한글 깨짐 (Open JDK18 이전, 이후 나눔) (1) | 2022.07.14 |
---|---|
[JAVA] java 입장에서 call by value와 call by reference의 짧은 고찰. (0) | 2022.06.26 |
[JAVA] 클래스 메서드와 인스턴스 메서드 (0) | 2022.06.25 |
[JAVA] JVM의 메모리 구조 (0) | 2022.06.25 |
[JAVA] 클래스변수, 인스턴스변수, 지역변수 (0) | 2022.06.25 |
댓글