컴공생의 발자취

[TIL] 나는 왜 Java Spring Boot를 사용했을까? 본문

🌃 TIL

[TIL] 나는 왜 Java Spring Boot를 사용했을까?

MNY 2024. 9. 5. 23:41
728x90
반응형
2024.09.05.(수)

나는 왜 Java Spring Boot를 사용했을까

Java Spring Boot를 선택한 이유는 취업이었다.

그 전에는 애초에 직무도 백엔드가 아니었고 많은 과정을 거치면서 Java Spring Boot를 선택했다.

처음 일주일 속성으로 Python을 이용한 백엔드를 배웠고 이렇다 할 공부도 하지 못했으며, 결과물도 없었다.

그 후 졸업 작품 때 Kotlin으로 Android Studio를 통한 애플리케이션 개발을 했다. Kotlin을 선택한 것은 그 당시 선호도가 높으며 자료가 많다고 판단해서 선택했으나 실제로 개발하면서 Java에 대해 남아있는 자료가 많아서 프로젝트를 변경했던 것 같다. 그 후 팀 내에서 각자 서로의 방향이 달랐고 남은 졸업 작품을 위해 새로운 팀을 만들었다. Flutter을 이용한 애플리케이션을 만들었으며,  이때 프론트 부분을 맡았다.

마지막으로 졸업을 앞두고 내가 뭘할지 갈피를 잡지못했다. 처음 백엔드를 접했을 때 이도저도 아니게 끝난 것이 아쉬웠다. 그래서 친구들과 함께 공부하기 위해 홈페이지를 만들어보자 제안했고 나는 Node.js를 이용한 백엔드를 맡았다. 차근차근 시간을 가지고 공부를 해보니 어렵고 모르는 게 많았지만, 전체적인 흐름을 만드는 부분에서 매력을 느꼈다. 

그렇게 졸업하며 나는 취업을 위해 내가 가진 것들을 살펴봤지만 내세울 게 없었으며, 취업 시장에서는 Java Spring Boot를 선호하고 있었다. 이런 과정을 거치며 나는 내세울 게 없었던 과거 대신 Java Spring Boot를 선택하며 지금이 되었다.

 

Java의 특징

  • 플랫폼 독립성
    자바는 "Write Once, Run Anywhere"라는 철학을 따른다. 한 번 작성한 자바 프로그램은 운영 체제에 상관없이 JVM(Java Virtual Machine)이 설치된 모든 환경에서 실행할 수 있다. 이 덕분에 운영 체제 간의 호환성을 신경 쓸 필요 없이 코드의 이식성이 높아진다.
  • 객체 지향 언어
    자바는 객체 지향 프로그래밍(OOP)을 기반으로 설계된 언어다. OOP의 핵심인 클래스, 객체, 상속, 다형성, 캡슐화 등의 개념을 지원하여 코드 재사용성, 유지 보수성, 확장성이 뛰어나다. 특히, 복잡한 시스템을 모듈 단위로 설계할 수 있어 큰 프로젝트에 적합하다.
  • 자동 메모리 관리
    자바는 가비지 컬렉터(Garbage Collector)를 사용해 메모리 관리를 자동으로 처리한다. 개발자는 메모리 할당과 해제를 신경 쓸 필요가 없으며, 이는 메모리 누수나 포인터 오류와 같은 문제를 방지할 수 있게 한다.
  • 강력한 디버깅 및 개발 도구 지원
    자바는 Eclipse, IntelliJ, NetBeans 같은 다양한 강력한 IDE를 제공한다. 해당 도구들은 중단점 설정, 실시간 변수 모니터링, 스택 트레이스 분석 등 강력한 디버깅 기능을 지원해 개발자들이 쉽게 오류를 찾고 해결할 수 있도록 돕는다.
  • 안전한 언어
    자바는 메모리 접근을 제한하고, 바이트코드 검증, 샌드박스 환경을 통해 보안을 강화한다. 이러한 보안 메커니즘은 자바 애플리케이션이 잠재적인 보안 위협으로부터 안전하게 보호되도록 한다.
  • 멀티스레드 지원
    자바는 내장된 멀티스레드 라이브러리를 통해 멀티스레드 프로그래밍을 쉽게 구현할 수 있다. 이를 통해 동시 실행 작업이나 백그라운드 처리를 효율적으로 처리할 수 있어 성능과 확장성 측면에서 뛰어나다.
  • 풍부한 라이브러리
    자바는 JDK(Java Development Kit)에 포함된 광범위한 표준 라이브러리를 통해 네트워킹, 데이터베이스 연동, 파일 처리 등 다양한 작업을 쉽게 구현할 수 있다. 복잡한 기능을 직접 구현하지 않고도 쉽게 기능을 추가할 수 있다.
  • 대규모 애플리케이션에 적합
    자바는 안정성, 확장성, 유지 보수성을 갖춘 언어로, 대규모 엔터프라이즈 애플리케이션에 널리 사용된다. 특히 자바의 성숙한 생태계는 대규모 시스템의 요구 사항을 충족하는 데 큰 도움을 준다.

Java의 장점

  • 플랫폼 독립성
    JVM 덕분에 운영 체제에 구애받지 않고 여러 환경에서 동일한 코드를 실행할 수 있다.
  • 강력한 커뮤니티 및 생태계
    자바는 오래된 언어로, 광범위한 커뮤니티와 라이브러리, 프레임워크 생태계가 구축되어 있어 다양한 문제 해결을 지원한다.
  • 안정성과 성능
    자바는 대규모 시스템에서 안정적으로 동작하며, JVM 최적화를 통해 성능 개선이 지속적으로 이루어지고 있다.
  • 보안성
    바이트코드 검증, 샌드박스, 강력한 접근 제어 등을 통해 자바는 보안에 있어 강력한 언어로 평가받는다.
  • 개발 생산성 향상
    자동 메모리 관리, 객체 지향 설계, 강력한 디버깅 도구 덕분에 개발자는 생산성을 높일 수 있다.
  • 멀티스레드 지원
    자바의 멀티스레드 라이브러리는 복잡한 동시 실행 작업을 쉽게 처리할 수 있도록 도와준다.

Java의 단점

  • 상대적으로 느린 성능
    자바는 바이트코드로 컴파일되어 JVM에서 실행되기 때문에, 네이티브 언어(C/C++)에 비해 성능이 떨어질 수 있다. 하지만 JVM 최적화와 JIT 컴파일 덕분에 이 성능 차이는 줄어들고 있다.
  • 메모리 사용량
    자바의 가비지 컬렉션은 메모리 관리를 자동화하지만, 그 과정에서 불필요하게 많은 메모리를 사용하는 경우가 발생할 수 있다. 이는 대규모 시스템에서는 성능에 부정적인 영향을 미칠 수 있다.
  • 복잡한 문법
    자바는 강력하고 유연한 언어이지만, 그만큼 다른 언어에 비해 문법이 복잡하고 장황할 수 있다. 특히 자바 8 이전 버전에서는 함수형 프로그래밍 지원이 제한적이어서 코드가 다소 복잡하게 작성될 수 있었다.
  • 초기 실행 속도
    자바 애플리케이션은 처음 실행될 때 JVM 로딩으로 인해 초기 시작 시간이 길어질 수 있다. 특히 대규모 애플리케이션의 경우 이러한 딜레이가 두드러지게 나타난다.
  • JVM 의존성
    자바는 JVM이 설치된 환경에서만 실행할 수 있으므로, JVM이 없는 시스템에서는 추가 설치가 필요하다. 이로 인해 경량 애플리케이션이나 자원이 제한된 환경에서 자바를 사용하는 것이 부담스러울 수 있다.

 

 

자바 언어의 장단점과 2022년 트렌드 | 요즘IT

개발자는 표준화된 객체 지향 언어인 자바를 사용해 강력한 고성능 애플리케이션을 개발할 수 있습니다. 자바는 플랫폼에 구애받지 않으며 JVM(Java Virtual Machine)이 설치된 모든 장치에서 동작합

yozm.wishket.com

 

자바(JAVA)의 특징

자바의 특징 자바에는 많은 기능이 주어집니다. 이 기능들은 자바 전문용어로 잘 알려져 있습니다. 자바 기능들은 단순하고 이해하기 쉽도록 아래와 같이 나열하였습니다. 1. Simple( 단순함 )2. Obj

tworab.tistory.com

 

Spring VS Spring Boot?

Spring과 SpringBoot...

나는 이때까지 Spring과 SpringBoot의 정확한 개념과 차이점을 모르고 그냥 SpringBoot를 사용해왔었다.

하지만, 내가 이 기술을 사용함에 있어서 왜 사용해왔었는지 어떻게 차이점이 있고 장단점을 가지고 있는지 알기 위해서 각각의 배경에 대해 알아갈 필요성을 느꼈다. 그렇기에 해당 글에서 배경과 주요특징, 차이점과 장단점에 대해 알아볼 생각이다.

 

Spring란?

Spring은 자바 기반의 오픈 소스 애플리케이션 프레임워크로, 주로 엔터프라이즈급 애플리케이션 개발에 사용된다. Spring은 의존성 주입(Dependency Injection, DI)과 관점 지향 프로그래밍(Aspect-Oriented Programming, AOP) 같은 기능을 제공하여 대규모 애플리케이션을 유연하고 확장 가능하게 설계할 수 있다.

 

주요 특징:

  • IOC(제어의 역전): 객체의 생명 주기를 개발자가 아닌 컨테이너(Spring)가 관리하여 유연한 코드 작성이 가능하다.
  • AOP(관점 지향 프로그래밍): 비즈니스 로직과 분리된 크로스컷팅 관심사(로깅, 트랜잭션 관리 등)를 깔끔하게 처리한다.
  • 모듈화 및 확장성: 웹 애플리케이션, 데이터베이스 연동, 보안, 마이크로서비스 등 다양한 모듈을 통해 확장할 수 있다.

Spring은 매우 강력하고 유연한 프레임워크이지만, 설정 파일(xml)이나 자바 설정 클래스를 통해 세부적인 설정을 많이 다뤄야 하는 불편함이 있다. 이를 해결하기 위해 Spring Boot가 등장했다.

 

SpringBoot란?

Spring Boot는 Spring 프레임워크를 기반으로 하지만, 복잡한 설정 작업을 자동화하여 더 쉽게 애플리케이션을 개발할 수 있도록 만들어진 프레임워크이다. Spring Boot의 핵심 목표는 자동 설정(Auto-configuration)의존성 관리를 통해 개발자가 최소한의 설정으로 애플리케이션을 빠르게 만들 수 있도록 지원하는 것이다.

 

주요 특징:

  • 자동 설정(Auto-configuration): 개발자가 직접 세부적인 설정을 하지 않아도 Spring Boot가 애플리케이션의 요구 사항에 맞게 자동으로 설정을 적용한다.
  • 스타터 패키지(Starter dependencies): 자주 사용하는 라이브러리 및 종속성을 간편하게 포함할 수 있도록 도와주는 스타터 패키지를 제공한다.
  • 내장 서버 제공: 별도의 톰캣(Tomcat) 서버를 설치하지 않아도, Spring Boot는 내장 웹 서버를 통해 즉시 실행 가능한 애플리케이션을 만들 수 있다.
  • 빠른 시작: Spring Initializr와 같은 도구를 사용해 손쉽게 Spring Boot 프로젝트를 시작할 수 있다.

 

Spring SpringBoot차이점

구분 Spring Spring Boot
설정 수동 설정 (XML, 자바 설정 클래스) 자동 설정 (Auto-configuration)
서버 설정 외부 애플리케이션 서버 필요 내장 서버 제공 (톰캣, 제티, 언더토우)
프로젝트 시작 복잡한 설정 필요 Spring Initializr로 간단히 시작
의존성 관리 수동 관리 스타터 패키지로 간편하게 관리
커스터마이징 세밀한 설정 가능 자동 설정으로 빠른 시작 가능

 

Spring SpringBoot 장단점

구분 Spring Spring Boot
장점 1. 유연성
2. 대규모 애플리케이션 적합
3. 다양한 모듈
1. 빠른 개발
2. 간단한 설정
3. 마이크로 서비스에 적합
4. 개발 생산성 향상
단점 1. 설정 복잡성
2. 초기 개발 속도 저하
1. 커스터마이징의 제약
2. 초기 러닝 커브
3. 대규모 프로젝트에서 비효율적일 수 있음

 

결론

Spring Boot는 Spring 프레임워크 위에서 동작하므로, Spring Boot 프로젝트 내에서 Spring의 모든 기능을 그대로 사용할 수 있다.

필요에 따라 Spring Boot의 자동 설정을 비활성화하는 방식으로 커스터마이징의 제약을 없앨 수 있다. 또한 대규모 프로젝트에서도 Spring과 함께 사용할 경우 비효율성 문제를 해결할 수 있지만, Spring Boot의 경량화된 장점을 일부 포기하게 될 수도 있다.

결국, Spring Boot를 사용하는 것은 더 나은 생산성을 위한 선택일 뿐이며, Spring의 모든 장점을 그대로 활용할 수 있는 유연성을 제공한다.

 

728x90
반응형