본문 바로가기
스터디 트래블/CS

4. 프로그래밍 언어 및 프레임워크

by 유니프 2025. 5. 10.
반응형

1. Java (Spring Framework)

특징

  • 객체 지향: 캡슐화, 상속, 다형성 등 OOP 원칙을 엄격히 따릅니다.
  • 플랫폼 독립성: JVM(Java Virtual Machine) 위에서 실행되며, "Write Once, Run Anywhere"를 지향합니다.
  • 강력한 생태계: Spring Boot, Spring Security, Spring Data 등 풍부한 라이브러리 지원

메모리 관리

  • 가비지 컬렉션(GC): 개발자가 직접 메모리를 해제하지 않아도 JVM이 자동으로 관리합니다.
    • Young Generation(신규 객체), Old Generation(오래된 객체) 영역으로 나누어 관리.
  • 메모리 누수 주의점: 정적(static) 변수, 캐시, 리스너 미해제 등이 누수의 주요 원인입니다.

예외 처리

  • Checked Exception: 컴파일 시 검사되는 예외 (예: IOException). 반드시 try-catch 또는 throws로 처리해야 합니다.
  • Unchecked Exception: 런타임 예외 (예: NullPointerException). 처리하지 않아도 컴파일 오류가 발생하지 않습니다.
  • Spring 예외 처리: @ControllerAdvice로 전역 예외 핸들링 가능

동시성/병렬성

  • 스레드(Thread): java.util.concurrent 패키지의 ExecutorService로 스레드 풀 관리.
  • 동기화: synchronized 키워드 또는 ReentrantLock으로 크리티컬 섹션 제어.
  • Spring에서의 비동기 처리: @Async 애노테이션으로 메서드 비동기화

2. Python (Django/Flask)

특징

  • 간결한 문법: 가독성이 뛰어나 초보자에게 적합합니다.
  • 다목적 언어: 웹, 데이터 분석, 머신러닝 등 다양한 분야에서 활용됩니다.
  • 프레임워크:
    • Django: "배터리 포함" 방식으로 관리자 패널, ORM 등이 내장2.
    • Flask: 경량 프레임워크로 확장성을 위해 필요한 기능만 선택 사용2.

메모리 관리

  • 참조 카운팅: 객체 참조 횟수를 추적해 참조가 0이 되면 메모리에서 제거합니다.
  • 가비지 컬렉션: 순환 참조된 객체를 주기적으로 탐지해 정리합니다.

예외 처리

  • try-except-finally:
  •  
    python
    try: file = open("test.txt") except FileNotFoundError: print("파일 없음!") finally: file.close()
  • Django 예외 처리: 미들웨어에서 process_exception 메서드로 전역 처리 가능.

동시성/병렬성

  • GIL(Global Interpreter Lock): CPython에서 한 번에 하나의 스레드만 실행해 병렬성 제한
  • 대안:
    • 멀티프로세싱: multiprocessing 모듈로 CPU 병목 작업 처리.
    • 비동기: asyncio와 async/await 문법으로 I/O 병목 작업 처리
  • Django 채널스: WebSocket 등 실시간 기능을 위해 비동기 지원 확장.

3. Node.js (Express)

특징

  • 이벤트 기반: 단일 스레드 + 이벤트 루프로 비동기 I/O 처리에 강점
  • NPM 생태계: 150만 개 이상의 패키지로 빠른 개발 가능.
  • Express: 미들웨어 기반의 경량 프레임워크로 REST API 구축에 적합

메모리 관리

  • V8 엔진: 크롬의 자바스크립트 엔진이 메모리 관리를 담당합니다.
  • 메모리 누수 원인: 클로저, 이벤트 리스너 미해제, 큰 데이터 캐시.

예외 처리

  • 동기 vs 비동기:
    • 동기: try-catch로 처리.
    • 비동기: 콜백의 err 파라미터 또는 Promise.catch()로 처리.
  • Express 미들웨어: 에러 핸들링 미들웨어를 끝단에 배치해 전역 처리

동시성/병렬성

  • 이벤트 루프: 단일 스레드에서 논블로킹 I/O 작업을 병렬 처리합니다.
  • Worker Threads: CPU 집약적 작업을 워커 스레드로 분리
  • 클러스터 모드: cluster 모듈로 멀티 코어 활용 가능.

4. PHP (Laravel)

특징

  • 서버 사이드 스크립팅: 웹 개발에 특화된 언어입니다.
  • Laravel: 엘로퀀트 ORM, 블레이드 템플릿 등 강력한 기능 내장

메모리 관리

  • 참조 카운팅: Python과 유사하게 참조 횟수로 메모리 관리.
  • 가비지 컬렉션: 주기적으로 사용되지 않는 객체를 정리합니다.

예외 처리

  • try-catch-finally:
  • php
    try { // 코드 } catch (Exception $e) { echo $e->getMessage(); } finally { // 정리 작업 }
  • Laravel 예외 처리: App\Exceptions\Handler 클래스에서 전역 처리.

동시성/병렬성

  • 기본 단일 스레드: 대부분의 PHP 애플리케이션은 단일 스레드로 동작.
  • 확장 라이브러리: pthreads로 멀티스레딩 지원 (실무에서 거의 사용되지 않음).
  • Laravel 큐: 비동기 작업을 위해 Redis, Beanstalkd와 연동해 백그라운드 처리

5. Ruby (Ruby on Rails)

특징

  • 개발자 친화적: "Convention over Configuration" 원칙으로 빠른 개발 가능.
  • 레일즈: Scaffolding, Active Record ORM 등 풍부한 기능 제공.

메모리 관리

  • 가비지 컬렉션: MRI Ruby는 Mark-and-Sweep 알고리즘 사용.

예외 처리

  • begin-rescue-ensure:
  •  
    begin # 코드 rescue StandardError => e puts e.message ensure # 정리 작업 end

동시성/병렬성

  • GIL 존재: Python과 유사하게 GIL로 인해 스레드 병렬성 제한.
  • 프로세스 기반: Unicorn, Puma 등 멀티프로세스 서버로 확장.
  • Ractor: Ruby 3.0부터 도입된 액터 모델 기반 병렬 처리 도구.

종합 비교표

언어프레임워크메모리 관리동시성 처리 방식주요 사용 분야
Java Spring GC 자동 멀티스레드 + ExecutorService 대규모 엔터프라이즈 시스템
Python Django/Flask GC 자동 멀티프로세싱 + asyncio 빠른 프로토타이핑, AI 통합
Node.js Express V8 GC 이벤트 루프 + Worker Threads 실시간 애플리케이션, API 서버
PHP Laravel GC 자동 큐 + 백그라운드 워커 중소형 웹 애플리케이션
Ruby Rails GC 자동 멀티프로세스 + Ractor 스타트업, 프로토타이핑
 
 

실무 적용 팁

  1. Java: 대규모 트래픽에는 CompletableFuture로 비동기 처리 최적화
  2. Python: CPU 병목 작업은 multiprocessing으로, I/O 작업은 asyncio로 분리
  3. Node.js: 이벤트 루프 블로킹을 피하기 위해 CPU 작업을 워커 스레드로 오프로드
  4. PHP: Laravel Horizon으로 큐 모니터링 및 워커 관리 자동화
  5. Ruby: Sidekiq + Redis로 백그라운드 작업 처리 성능 향상

이처럼 각 언어와 프레임워크는 고유한 장단점을 가지므로, 프로젝트 요구사항에 맞춰 선택하는 것이 중요합니다.

반응형

'스터디 트래블 > CS' 카테고리의 다른 글

6. 운영체제와 시스템  (0) 2025.05.10
5. 자료구조와 알고리즘  (1) 2025.05.10
3. 서버/백엔드 아키텍처  (0) 2025.05.03
2. 데이터베이스  (1) 2025.05.03
1. 네트워크 기본  (1) 2025.04.29