7. JVM의 스택과 힙 메모리 영역에 대해 아는 만큼 설명해주실 수 있을까요? 핵심 키워드 : 정적 / 동적 할당, 스레드, GC, 생성, 수거 "JVM 내에서 스택 메모리 영역은 각 스레드 별로 생성되며, 메소드 호출과 로컬 변수에 대한 정보를 정적으로 할당합니다. 이 영역은 메소드 실행이 시작될 때 생성되고, 메소드가 종료되면 해제되는 구조로, 스레드 별 실행 컨텍스트를 관리하는 데 사용됩니다. 반면, 힙 메모리는 JVM이 관리하는 더 큰 저장 공간으로, 모든 스레드가 공유하는 영역입니다. 힙은 주로 동적으로 할당되는 객체와 배열을 저장하는데 사용되며, 이 공간에 저장된 객체들은 가비지 컬렉터(GC)에 의해 더 이상 참조되지 않는 객체가 자동으로 수거되어 메모리를 관리합니다. 스택은 빠르고 효율적인..
기술
1. JWT(토큰) 기반의 인증 방식에 대한 설명과 함께 JWT의 보안 취약점과 해결 방법에 대해 설명해주세요. "JWT(JSON Web Token) 인증 방식은 디지털 서명이 된, URL에 친화적인 토큰을 사용하여 서버와 클라이언트 사이에 안전하게 정보를 교환합니다. 이는 상태를 유지하지 않는 RESTful API에 이상적으로, 인증 정보를 클라이언트 측에 저장합니다. 그러나 토큰 탈취 시 정보 노출 위험이 있어, 이를 방지하기 위해서는 HTTPS로 통신을 암호화하고, 토큰의 만료 시간을 짧게 설정하며, 접근 토큰과 갱신 토큰의 사용을 분리하는 등의 보안 조치가 필요합니다." 꼬리 질문 > JWT 토큰 방식을 선택한 이유는 무엇이며 JWT 토큰의 동작 방식에 대해 설명해 주세요. "JWT(JSON We..
1. Call by reference란 무엇이고 보통 어떻게 쓰이나요? 핵심 키워드 : 값, 참조, 복사, 객체 전달 / 값 전달 "Call by reference는 메소드 호출 시 변수의 메모리 주소를 전달하는 방식으로, 이를 통해 메소드 내에서 직접 변수의 값을 변경할 수 있습니다. 이 방식을 사용하면, 메소드 내의 변경사항이 호출한 쪽의 변수에도 반영되기 때문에, 대규모 데이터 처리나 필요한 상태의 변경을 보다 효율적으로 수행할 수 있습니다." 꼬리 질문 > Java에서는 Call by reference를 직접 지원하나요? "Java에서는 모든 메소드 호출이 기본적으로 Call by value 방식으로 이루어집니다. 이는 기본 데이터 타입이든 객체 참조이든, 전달된 인자의 복사본을 생성해 메소드에 ..
Redis에 대해서 설명해주세요 "Redis는 고성능 키-값 저장소로 널리 알려진 오픈 소스 인메모리 데이터 구조 서버입니다. "Remote Dictionary Server"의 약자인 Redis는, 문자열, 해시, 리스트, 셋, 정렬된 셋 등 다양한 데이터 구조를 지원합니다. 이러한 특성 덕분에, Redis는 캐싱, 메시지 브로커, 큐, 세션 관리 등 다양한 시나리오에서 사용될 수 있습니다. Redis의 가장 큰 장점 중 하나는 빠른 속도입니다. 데이터를 메모리에 저장하고 접근하기 때문에, 디스크 기반 데이터베이스 시스템보다 훨씬 빠른 읽기와 쓰기 성능을 제공합니다. 이러한 특징은 고속 데이터 읽기/쓰기가 필요한 애플리케이션에 매우 적합합니다. Redis는 단순한 키-값 저장소를 넘어서, 트랜잭션, 펍/..
Docker에 대해 설명해주세요 "Docker는 컨테이너화 기술을 사용하여 애플리케이션을 개발, 배포 및 실행할 수 있게 해주는 오픈 소스 플랫폼입니다. 컨테이너화란 애플리케이션과 그 종속성을 컨테이너라는 격리된 환경에 패키징하는 과정을 의미합니다. 이를 통해 애플리케이션이 실행되는 환경에 구애받지 않고 일관된 동작을 보장할 수 있습니다. Docker의 가장 큰 장점 중 하나는 'Build once, run anywhere'입니다. 즉, 한 번 빌드한 Docker 이미지는 어느 환경에서나 동일하게 실행할 수 있습니다. 이는 개발에서부터 테스트, 스테이징, 프로덕션 환경에 이르기까지 애플리케이션의 일관성과 호환성 문제를 대폭 줄여줍니다. Docker는 이미지와 컨테이너라는 두 가지 핵심 개념을 사용합니다...
모놀리식 아키텍처와 MSA의 장단점은 무엇인가요? "모놀리식 아키텍처는 애플리케이션의 모든 기능이 하나의 코드베이스에 통합되어 있는 구조로, 초기 개발과 배포가 간단하다는 장점이 있습니다. 이는 특히 작은 규모의 프로젝트나 단순한 애플리케이션에서 유리하며, 트랜잭션 관리가 용이합니다. 그러나 애플리케이션이 커지면서 복잡성과 유지보수 난이도가 증가하고, 전체 시스템의 재배포가 필요해지는 단점이 있습니다. 반면에, 마이크로서비스 아키텍처는 애플리케이션을 작고 독립적인 서비스로 분할하여 개발하고 배포합니다. 이는 큰 규모의 애플리케이션을 용이하게 관리하고 확장할 수 있게 하며, 다양한 기술 스택의 사용을 가능하게 하는 기술적 유연성을 제공합니다. 단, 서비스 간의 통신 복잡성, 데이터 일관성 유지, 분산 시스..