반응형
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)
특징
- 간결한 문법: 가독성이 뛰어나 초보자에게 적합합니다.
- 다목적 언어: 웹, 데이터 분석, 머신러닝 등 다양한 분야에서 활용됩니다.
- 프레임워크:
메모리 관리
- 참조 카운팅: 객체 참조 횟수를 추적해 참조가 0이 되면 메모리에서 제거합니다.
- 가비지 컬렉션: 순환 참조된 객체를 주기적으로 탐지해 정리합니다.
예외 처리
- try-except-finally:
-
pythontry: 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:
-
phptry { // 코드 } 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 | 스타트업, 프로토타이핑 |
실무 적용 팁
- Java: 대규모 트래픽에는 CompletableFuture로 비동기 처리 최적화
- Python: CPU 병목 작업은 multiprocessing으로, I/O 작업은 asyncio로 분리
- Node.js: 이벤트 루프 블로킹을 피하기 위해 CPU 작업을 워커 스레드로 오프로드
- PHP: Laravel Horizon으로 큐 모니터링 및 워커 관리 자동화
- 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 |