개발지식 먹는 하마 님의 블로그
CS 스터디 - MSA, JAVA, JVM & GC 본문
오늘도 발생해버린 3인의 뉴런 공유... 신기하다
✅ JAVA
1) Java의 장점과 단점이 무엇인가요?
더보기
Java는 객체지향 프로그래밍 언어로 JVM기반으로 실행되기 때문에 운영체제의 종류와 상관없이 실행 가능하고,
자동으로 메모리가 관리되며 멀티스레딩과 네트워킹을 지원한다는 장점이 있습니다.
다만, JVM이 먼저 실행되어야 하기 때문에 상대적으로 느리다는 것과 메모리 사용량이 높다는 단점이 있습니다.
자동으로 메모리가 관리되며 멀티스레딩과 네트워킹을 지원한다는 장점이 있습니다.
다만, JVM이 먼저 실행되어야 하기 때문에 상대적으로 느리다는 것과 메모리 사용량이 높다는 단점이 있습니다.
2) Java가 플랫폼 독립성을 어떻게 보장하나요?
더보기
JVM에서 자바 컴파일러(Javac)가 Java 소스 코드를 바이트 코드로 변환하고,
사용하는 플랫폼에 따라 JIT 컴파일러가 기계어로 변환하기 때문에 플랫폼 독립성이 보장됩니다.
사용하는 플랫폼에 따라 JIT 컴파일러가 기계어로 변환하기 때문에 플랫폼 독립성이 보장됩니다.
3) Java의 자동 메모리 관리 방식은 어떻게 동작하고, 개발자에게 어떤 이점을 주며 주의할 점은
무엇인가요?
더보기
GC가 더 이상 참조되지 않는 객체의 메모리를 주기적으로 회수하면서 자동으로 메모리를 관리합니다.
따라서 개발자가 메모리 관리를 신경쓰지 않아도 된다는 장점이 있지만
GC 도중에는 STW가 발생하고, 방치된 참조 또는 컬렉션으로 인해 메모리 누수가 발생할 수 있기 때문에 주의가 필요합니다.
따라서 개발자가 메모리 관리를 신경쓰지 않아도 된다는 장점이 있지만
GC 도중에는 STW가 발생하고, 방치된 참조 또는 컬렉션으로 인해 메모리 누수가 발생할 수 있기 때문에 주의가 필요합니다.
✅ JVM
1) JDK, JRE, JVM이 각각 무엇인지 설명해주세요
더보기
JDK는 개발자가 Java로 개발을 할 수 있게 해주는 키트입니다.
JRE는 자바 프로그램이 실행되기 위해 필요한 패키지이고
JVM은 자바 파일이 어느 OS에서도 구동될 수 있도록 도와주는 가상 머신입니다.
JRE는 자바 프로그램이 실행되기 위해 필요한 패키지이고
JVM은 자바 파일이 어느 OS에서도 구동될 수 있도록 도와주는 가상 머신입니다.
2) JVM이 자바 파일을 실행시키는 흐름에 대해 얘기해주세요
더보기
자바 컴파일러가 Java 파일을 바이트 코드인 Class 파일로 변환하면
JVM의 Classloader가 클래스파일을 Runtime Data Area에 업로드 합니다.
메모리에 로딩되면 실행 엔진에서 각 운영체제가 이해할 수 있는 기계어로 인터프리터와 JIT 컴파일러가 변환합니다.
마지막으로 GC가 불필요하게 할당된 메모리를 해제합니다.
JVM의 Classloader가 클래스파일을 Runtime Data Area에 업로드 합니다.
메모리에 로딩되면 실행 엔진에서 각 운영체제가 이해할 수 있는 기계어로 인터프리터와 JIT 컴파일러가 변환합니다.
마지막으로 GC가 불필요하게 할당된 메모리를 해제합니다.
3) JVM 메모리 구조에 대해 설명해주세요
더보기
Stack, Heap, Method, PC 레지스터로 구성됩니다.
Heap 영역은 프로그램이 실행되며 생성된 모든 객체를 저장하는 곳,
Stack은 쓰레드 당 독립적으로 존재하는 영역으로 메서드 내에서 정의하는 지역 변수의 데이터 값이 저장되는 곳,
Method는 클래스에 있는 정보들을 저장하는 곳
마지막으로 PC 레지스터는 메서드에서 몇번째 코드를 실행해야하는지를 기억하는 곳입니다.
4) Stack과 Heap의 차이점
더보기
Heap 영역은 공유 메모리 영역이고 Stack은 쓰레드 별로 관리되는 독립적인 영역으로
Stack은 메서드를 호출할 때마다 스택 프레임이 생성되고 끝나면 제거되기 때문에 Stack에 저장된 데이터는 언젠간 제거되지만, Heap에 저장된 객체가 프로그램 종료까지 사용된다면 끝까지 살아남기 때문에 Stack의 생명주기가 Heap보다 짧다는 차이가 있습니다.
Stack은 메서드를 호출할 때마다 스택 프레임이 생성되고 끝나면 제거되기 때문에 Stack에 저장된 데이터는 언젠간 제거되지만, Heap에 저장된 객체가 프로그램 종료까지 사용된다면 끝까지 살아남기 때문에 Stack의 생명주기가 Heap보다 짧다는 차이가 있습니다.
✅ GC
1) GC는 무엇이고 어떻게 동작하는가?
더보기
GC는 가비지 콜렉터로 JVM에서 자동으로 메모리 관리를 위해 사용되는 핵심 요소입니다.
JVM의 Heap 영역에 저장되어있으나 더이상 참조되지 않은 객체를 주기적으로 제거하는 프로세스입니다.
mark - sweep - compact 방식으로
살아있는 객체를 식별하고, 도달 불가능한 객체를 해제하며 단편화를 줄이기 위해 객체들을 연속적으로 재배치해 동작합니다.
JVM의 Heap 영역에 저장되어있으나 더이상 참조되지 않은 객체를 주기적으로 제거하는 프로세스입니다.
mark - sweep - compact 방식으로
살아있는 객체를 식별하고, 도달 불가능한 객체를 해제하며 단편화를 줄이기 위해 객체들을 연속적으로 재배치해 동작합니다.
2) Stop-the-world 는 무엇이면, 성능에 어떤 영향을 미치는가?
더보기
Stop-The-World는 GC가 실행되는 동안 JVM이 모든 애플리케이션 스레드를 일시정지 시키는 현상을 말합니다.
STW 시간이 길어지면 응답 지연, 서비스 장애로 이어질 수 있기 때문에 GC 알고리즘을 통해 STW 시간을 최소화하는 것을
목표로 해야합니다.
STW 시간이 길어지면 응답 지연, 서비스 장애로 이어질 수 있기 때문에 GC 알고리즘을 통해 STW 시간을 최소화하는 것을
목표로 해야합니다.
3) GC 알고리즘에는 어떤 것들이 있고 선택 기준은 무엇인가?
더보기
대표적으로 사용되는 알고리즘은 G1 GC로 Region개념을 도입해 전체 Heap 영역을 Region 영역으로 분할하여 동적으로 메모리가 많이 차있는 영역을 인식해서 우선적으로 GC하는 방법으로 대규모 서비스에 적합합니다.
Parallel GC는 GC를 멀티 쓰레드로 처리하는 방식으로 처리량이 중요한 배치 작업에서 적합하고
그 외 ZGC나 Shenandoah 같은 초저지연 GC 알고리즘도 있습니다.
Parallel GC는 GC를 멀티 쓰레드로 처리하는 방식으로 처리량이 중요한 배치 작업에서 적합하고
그 외 ZGC나 Shenandoah 같은 초저지연 GC 알고리즘도 있습니다.
4) JVM 튜닝을 통한 성능 최적화 방법을 설명해주세요
더보기
상황에 따라 적합한 GC 알고리즘을 선택하거나 Region이나 Survivor Ratio 같은 파라미터를 최적화하는 방법,
Heap 크기 조정, JIT 컴파일러 기반 자주 사용되는 코드를 warm-up하는 등의 방법으로 성능을 최적화하는 방법이 있습니다.
Heap 크기 조정, JIT 컴파일러 기반 자주 사용되는 코드를 warm-up하는 등의 방법으로 성능을 최적화하는 방법이 있습니다.
✅ MSA
1) MSA는 무엇인가?
더보기
MSA는 애플리케이션을 작고 독립적인 서비스들로 분리하여 개발하고 운영하는 아키텍처입니다. 각 서비스는 하나의 비즈니스 기능을 담당하고, 독립적으로 배포, 확장, 유지보수가 가능합니다.
2) MSA 전략 패턴에 대해 아는 것이 있다면 말해주세요
더보기
... 매우 많지만 보통 Saga 패턴을 많이 쓰는 편
(근데 잘 몰라서 공부가 필요 - 토이 프로젝트에 쓰면 좋을 것 같다!)
(근데 잘 몰라서 공부가 필요 - 토이 프로젝트에 쓰면 좋을 것 같다!)
3) 보통 Saga 패턴을 많이 사용하는데 어떤 방식으로 동작하는지 설명해주세요
더보기
마이크로서비스에 걸친 작업을 각각의 지역 트랜잭션(Local Transaction)으로 나누고, 정해진 순서대로 실행하면서 실패 시에는 보상 작업(rollback)을 수행하는 비동기 트랜잭션 관리 패턴입니다.
(이 부분은 패턴 자체에 대한 이해도가 적어서인지 이 설명을 들어도 감이 잘 잡히지 않음)
'면접 준비' 카테고리의 다른 글
CS 스터디 - 커널, DNS, N+1 (3) | 2025.08.26 |
---|---|
CS 스터디 - 그래프, NAT, 배열, 분산락 (2) | 2025.08.26 |
CS 스터디 - OOP, 프로세스와 스레드, 배열과 연결 리스트 (0) | 2025.08.20 |
CS 스터디 - 본격 CS 스터디 시작! (DI, 트랜잭션, Https, AOP, 로드밸런싱) (0) | 2025.08.19 |