[Web] 웹(Java, JVM, JDK, IDE, Servlet Container)

2022. 10. 18. 17:28·Programming/Web
728x90

자바의 대표적인 특징

  • 간결하면서도 강력한 객체지향 프로그래밍 언어다.
  • 플랫폼에 독립적이어서 여러 운영체제나 하드웨어에서도 동일하게 실행할 수 있다.
  • 많은 오픈소스 라이브러리를 통해 생산성이 향상되고 유지보수 비용이 절감된다.
  • GUI 기반의 응용 프로그램 개발에는 적합하지 않다.
  • 하드웨어를 정밀하게 제어해야 하는 프로그램 개발에는 비교적 적합하지 않다.
  • 최신 모던 프로그래밍 언어에 비해 간결함이 떨어지고 코드가 복잡하며 불필요한 코드가 많다.
Java 8~11의 버전 변화를 거치며 많이 보안되었다.

자바의 버전

매년 버전업되어 최신 버전이 나오지만 개발의 안정성과 호환을 위해 LTS(Long Term Support) 버전을 사용하는 것이 좋다. 11은 최대 2026년까지 기술 및 보안 업데이트 등이 보장되어 있다.

자바 가상머신(JVM)

자바의 가장 큰 특징은 가상머신(Virtual Machine)이라는 개념이다. 가상머신은 말 그대로 물리적인 기계 장치가 아닌 가상의 기계를 의미한다. 즉 소프트웨어로 구현된 하드웨어를 말하는데, 자바의 전신인 OAK 프로젝트에서 TV, 냉장고 등의 가전제품에서 구동할 수 있는 소프트웨어 개발을 위해 고안된 아이디어다. 가상머신이라는 개념을 자바에서 처음 만든 것은 아니지만 당시에 실제로 성공한 프로젝트는 자바가 대표적이다. 이러한 가상머신의 특징으로 인해 특정 하드웨어나 운영체제의 영향을 받지 않고 동일한 프로그램의 개발이 가능해진 것이다.

 

자바 가상머신(JVM)의 특징

  • JVM은 자바의 가장 큰 특징으로 특정 하드웨어나 운영체제에 종속되지 않고 동일한 프로그램 개발과 실행이 가능한 기술이다.
  • 자바 소스는 컴파일 후 바이트코드가 생성되며, JVM은 바이트코드를 해석하여 운영체제에서 실행할 수 있도록 번역하는 역할을 담당한다.
  • 가상머신의 개념은 윈도우 .NET 플랫폼에도 영향을 미쳤으며 최근에는 코틀린, 스칼라(Scala), 그루비(Groovy) 등의 JVM 기반 언어도 유행하고 있다.
언어의 문법 구조는 다르지만 모두 자바와 같은 바이트코드를 생성해 JVM에서 실행이 가능하기 때문이다.

JVM과 자바 플랫폼

자바 플랫폼

자바 플랫폼은 API와 JVM으로 구성되며 특정 자바 프로그램이 실행되는 환경을 의미한다. 자바 플랫폼에는 Java SE, Java EE, Java ME, Java Card, Java TV 등이 있다.

실행 환경에 따라 API 구성 등이 달라지는데, 일반적인 목적으로 사용할 때는 Java SE(Standard Edition)를 설치한다. 만약 대규모 개발을 위한 기업 수준의 요구사항을 포함해야 한다면 Java EE(Enterprise Edition)를 추가로 설치해야 한다.

Java EE 시장의 축소
스프링과 같은 오픈소스 프레임워크의 성장으로 인해 Java EE 시장이 점차 축소되고, 오라클은 Java EE를 이클립스 재단으로 이관했다. 따라서 자바 웹 개발을 위해 Java EE 플랫폼까지는 필요하지 않으며 아파치 톰캣과 같은 서블릿 컨테이너만 설치해도 충분하다.

자바 웹 개발환경

자바 웹 개발을 위해서는 기본적으로 자바 개발도구JDK, 통합개발환경IDE, 서블릿 컨테이너가 필요하다. 이와 더불어 데이터베이스와 연동을 한다면 데이터베이스도 필요하다.

자바 개발도구(JDK)

자바 개발도구(Java Development Kit, JDK)는 자바 실행을 위한 JRE(Java Runtime Environment)와 컴파일러 등을 포함하며, 보통 JDK로 불린다. 이클립스, IntelliJ 등 통합개발환경을 비롯해 아파치 톰캣(Apache Tomcat)과 같이 자바로 만들어진 서버 실행을 위해서도 JDK는 필요하다. 

오라클의 자바 라이선스 상용화 정책에 따라 기본적인 자바 소스코드는 오픈소스 정책에 따라 배포된다. 하지만 JDK 패키지는 상용 제품인 Oracle JDK와 공개 버전인 Open JDK로 나뉘어 배포되는데, 몇몇 구성요소와 설치 방법 등의 차이를 제외하면 기본적인 기능과 성능은 동일하다. 그렇지만 라이선스 문제가 발생할 수 있으므로 자바를 이용한 제품이나 서비스를 개발할 때 중요하게 고려해야 한다.

특별히 오라클에 종속되거나 반드시 라이선스를 지불해야만 하는 환경이 아니라면 Open JDK의 사용이 권장된다. 다만 오라클에서 공식적으로 배포하는 Open JDK는 설치 방법 등이 불편하기 때문에 몇몇 회사(혹은 단체)나 개인이 깃허브(GitHub) 등을 통해 배포하는 패키지를 사용한다.

통합개발환경(IDE)

본격적인 개발을 위해서는 통합개발환경(Integrated Development Environment, IDE)이 필요하다. 마이크로소프트의 Visual Studio, VS Code를 비롯해 NetBeans, IntelliJ 등 다양한 개발도구가 있으며 회사의 정책이나 개인의 취향에 따라 적절한 개발도구를 사용할 수 있다. 대표적인 도구로서 가장 많은 사용자를 확보하고 있는 IDE를 살펴보면 다음과 같다.

이클립스

이클립스(Eclipse)는 대표적인 자바 통합개발도구로 IBM에서 1999년에 개발해 오픈소스로 기증한 개발도구다. 이클립스는 자바 이외의 개발도구로도 사용할 수 있으며 플러그인 구조로 인해 이클립스 기반의 여러 개발도구를 만들 수 있는 형태다. 안드로이드 스튜디오가 나오기 전까지는 안드로이드의 공식 개발도구였으며 무료로 사용할 수 있다는 장점과 다양한 플러그인 등으로 오랜 기간 대표적인 자바 개발도구로 자리 잡아왔다. 하지만 획기적인 변화 없이 유지되는 UI 및 고급기능의 부재 등으로 상용도구인 IntelliJ에 자리를 내어주고 있는 상황이다.

이클립스는 개발 목적에 따라 여러 버전이 있으며, 웹 개발을 위해서는 Eclipse IDE for Java Enterprise Developer를 설치해야 한다.

IntelliJ IDEA

젯브레인스(Jetbrains)라는 회사에서 개발한 자바 개발도구로, 코틀린 역시 이 회사에서 개발했다. IntelliJ는 저사양의 컴퓨터에서 사용하기 어렵다는 단점이 있음에도 불구하고 많은 기능과 편리함으로 인해 가장 대표적인 자바 개발도구가 되었다. 다만 본격적인 개발을 위해서는 상용버전을 사용해야 하고, 특히 자바 웹 개발은 상용버전인 Ultimate 버전을 사용해야 한다는 문제가 있다.

학생이라면 학교 이메일 인증을 통해 1년간 Ultimate 버전을 무료로 사용해볼 수 있다.참고로, 매년 갱신이 필요하다.

VS Code

Visual Studio Code는 프론트엔드 개발이 본격화되면서 가장 빠르게 성장하고 있는 개발도구다. 마이크로소프트에서 제공하는 오픈소스 개발도구로서 가벼운 기본 구조로 저사양의 컴퓨터에서도 비교적 쉽게 사용할 수 있이며, 필요한 기능을 익스텐션 형태로 설치해 자신만의 환경을 구축하는 것이 가능하다.

스프링을 비롯해 모든 자바 기반의 개발이 가능하기는 하지만 관련된 익스텐션을 직접 설치해야 하고 개별적인 환경 설정을 해야 하기 때문에 다소 불편할 수 있다.

서블릿 컨테이너

WAS(Web Application Server)는 이름과 같이 웹 애플리케이션을 구동하는 서버를 의미한다. 물리적인 서버의 역할 관점에서 붙여진 이름이며, 서버 컴퓨터가 WAS로 동작하려면 Java EE 또는 아파치 톰캣과 같은 서블릿 컨테이너(Servlet Container)가 필요하다.

그렇다고 WAS가 단순히 Java EE 또는 서블릿 컨테이너 구동을 위해 사용되는 것은 아니며, 운영 및 관리, 장애 대응 등을 포함한 여러 역할을 하는 시스템이다. 실제 서비스 시스템을 구축할 때는 정적 콘텐츠 서비스를 위한 웹 서버와 WAS를 병행해 운영하며 설정을 통해 상호 연동되는 구조를 가진다. 서블릿 컨테이너로는 아파치 톰캣, Jetty, Undertow 등이 널리 사용된다.

서블릿 컨테이너 구조

 

'Programming > Web' 카테고리의 다른 글

[Web] 웹 프로그래밍의 기초(HTML)  (1) 2022.10.18
[Web] 웹(DevOps)  (0) 2022.10.18
[Web] 웹(요약)  (0) 2022.10.18
[Web] 웹(웹 개발 트렌드)  (0) 2022.10.18
[Web] 웹(Server, Front-end, Back-end)  (0) 2022.10.18
'Programming/Web' 카테고리의 다른 글
  • [Web] 웹 프로그래밍의 기초(HTML)
  • [Web] 웹(DevOps)
  • [Web] 웹(요약)
  • [Web] 웹(웹 개발 트렌드)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CSS
    TypeScript
    Java
    object
    자바스크립트
    MySQL
    next.js
    Python
    제어문
    파이썬
    타입스크립트
    리액트
    JavaScript
    변수
    array
    event
    객체
    web
    HTML
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Web] 웹(Java, JVM, JDK, IDE, Servlet Container)
상단으로

티스토리툴바