FPT kor technical interview 에서 받았던 질문 中 1
Java Core / Java EE / Java Spring / Java Spring Boot 를 비교해주세요.
Java Core (자바 코어)
- 자바 프로그래밍 언어의 기본으로, 자바 프로그램을 작성할 때 필수적인 기본 라이브러리와 기능들이 포함.
- 주요 특징:
- 컬렉션, I/O, 스레드 처리, 예외 처리 등 기본 API 포함.
- 객체 지향 프로그래밍(OOP) 개념(상속, 다형성, 캡슐화) 구현.
- 사용 사례: 데스크톱 애플리케이션, 커맨드라인 도구 및 일반적인 프로그램 작성에 사용.
Java EE (Enterprise Edition, 자바 EE)
- 자바 코어를 확장하여 엔터프라이즈급 애플리케이션을 구축하기 위한 명세. 대규모 분산 시스템을 위한 기능을 제공.
- 주요 특징:
- 웹 애플리케이션을 위한 Servlet, JSP, EJB, WebSocket 같은 API 제공.
- 트랜잭션 관리, 보안, 확장성 등의 기능을 지원.
- 멀티 티어(Multi-tier) 엔터프라이즈 애플리케이션을 구축할 수 있습니다.
- 사용 사례: 은행, 전자상거래 시스템 같은 복잡하고 대규모 엔터프라이즈 시스템 구축에 적합.
Java Spring (자바 스프링)
- 자바 EE 개발을 더 간소화한 프레임워크. 의존성 주입과 관점 지향 프로그래밍(AOP)을 통해 더 모듈화된 개발 가능.
- 주요 특징:
- 자바 EE보다 더 가벼운 대안.
- 의존성 주입, 트랜잭션 관리, 데이터 접근 기능 제공.
- 웹 애플리케이션(Spring MVC), 보안(Spring Security), 데이터베이스 통합(Spring Data) 등의 모듈 포함.
- 사용 사례: 웹 애플리케이션, 마이크로서비스, 엔터프라이즈 애플리케이션 개발에 유연하게 사용.
Java Spring Boot (자바 스프링 부트)
- Spring Framework를 확장하여 더 쉽게 애플리케이션을 시작하고 배포할 수 있게 해주는 도구. 자동 설정과 내장 서버를 통해 설정 간소화.
- 주요 특징:
- 내장 서버(Tomcat 또는 Jetty) 및 자동 설정 기능 제공.
- 설정 파일이 거의 필요 없고, 코드를 더 빠르게 작성하고 실행.
- 독립적으로 실행 가능한 애플리케이션을 만들 수 있음.
- 사용 사례: 마이크로서비스, REST API, 빠른 프로토타입 개발에 적합하며, 빠르게 설정하고 배포할 수 있음.
비교 요약
- Java Core: 일반적인 자바 프로그래밍을 위한 기본 구성 요소.
- Java EE: 대규모 엔터프라이즈 애플리케이션을 위한 강력한 기능 제공.
- Java Spring: 더 가볍고 유연한 프레임워크로, 다양한 모듈을 통해 복잡한 애플리케이션을 쉽게 개발하게 도와줌.
- Java Spring Boot: Spring을 기반으로 더 간단하게 애플리케이션을 설정하고 실행할 수 있게 도와줌.
정리표
항목 | Java Core | Java EE | Java Spring | Java Spring Boot |
정의 | 자바 프로그래밍의 기본 기능과 라이브러리 | 엔터프라이즈 애플리케이션을 위한 확장 | 자바 EE 개발을 간소화한 프레임워크 | Spring을 쉽게 설정하고 실행하게 해주는 도구 |
주요 특징 | - 컬렉션, I/O, 스레드 처리, 예외 처리 등 기본 API 포함 - 객체지향 프로그래밍(OOP) 지원 |
- Servlet, JSP, EJB, WebSocket 등의 API 제공 - 트랜잭션 관리, 보안 기능 포함 |
- 의존성 주입(DI) 및 트랜잭션 관리 지원 - 웹 개발, 데이터베이스 통합 가능 |
- 자동 설정 및 내장 서버 제공 - 최소한의 설정으로 애플리케이션 실행 가능 |
용도 | 데스크톱 애플리케이션, 기본 자바 프로그램 | 대규모 엔터프라이즈 시스템 (은행, 전자상거래 등) | 유연한 웹 애플리케이션 및 마이크로서비스 개발 | 마이크로서비스, REST API, 빠른 프로토타입 개발 |
설정난이도 | 낮음 (기본 라이브러리 사용) | 높음 (복잡한 설정 필요) | 중간 (모듈화된 설정, 유연성 제공) | 낮음 (자동 설정, 빠른 시작 가능) |
유연성 | 제한적 | 높은 수준의 유연성 제공 | 높은 유연성, 모듈형 설계 | 높은 유연성, 빠른 설정 및 시작 가능 |
의존성 관리 | 수동 관리 | 수동 관리 | 의존성 주입(DI) 기능 제공 | 자동 설정으로 의존성 관리 |
대표적인 사용 사례 |
간단한 도구 및 데스크톱 애플리케이션 | 복잡한 기업 애플리케이션 (멀티 티어) | 마이크로서비스, 엔터프라이즈 웹 애플리케이션 | 마이크로서비스, RESTful 웹 애플리케이션 |