본문 바로가기

728x90

면접 질문

Spring 특징 요약 Spring은 Java 언어로 구현된 오픈 소스 프레임워크로서, 다음과 같은 특징을 가지고 있습니다. 경량 컨테이너: 스프링은 객체의 생명주기와 설정, 관리 등을 담당하는 컨테이너입니다. 이 컨테이너는 EJB와 같은 무겁고 복잡한 컨테이너와는 달리, 가볍고 간단한 구조를 가지고 있습니다. Inversion of Control(IoC): 객체 간의 의존성을 낮추기 위해, 객체가 직접 자신이 필요로 하는 의존 객체를 생성하지 않고, 외부에서 생성하여 주입하는 방식을 IoC라고 합니다. 의존성 주입(Dependency Injection, DI): 객체가 직접 의존하는 객체를 생성하지 않고, 외부에서 의존 객체를 주입하는 방식을 의존성 주입이라고 합니다. 스프링은 이를 지원하기 위해 다양한 방법을 제공합니다. .. 더보기
트랜잭션 격리 수준 (Transaction Isolation level) 트랜잭션 격리 수준(Isolation Level)은 데이터베이스에서 동시성 제어를 위해 사용되는 개념입니다. 여러 개의 트랜잭션이 동시에 실행될 때, 격리 수준은 각 트랜잭션에서 어떤 다른 트랜잭션의 결과를 볼 수 있는지를 결정합니다. 4가지 트랜잭션 격리 수준 READ UNCOMMITTED: 커밋되지 않은 데이터도 읽을 수 있고, 다른 트랜잭션에서 변경 중인 데이터도 읽을 수 있습니다. 이 격리 수준에서는 Dirty Read 문제가 발생할 수 있습니다. READ COMMITTED: 커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션에서 변경 중인 데이터는 읽을 수 없습니다. 이 격리 수준에서는 Non-Repeatable Read 문제가 발생할 수 있습니다. REPEATABLE READ: 트랜잭션 동안 같.. 더보기
수평적 확장과 수직적 확장 수평적 확장과 수직적 확장은 데이터베이스 시스템에서 확장성을 높이는 방법 중에서 가장 대표적인 두 가지 방법입니다. 수직적 확장(Vertical Scaling 또는 Scale Up) 단일 서버의 성능을 개선하는 방법으로, 기존 서버의 CPU, 메모리, 디스크 등의 하드웨어 사양을 업그레이드하여 서버 자체의 성능을 향상시키는 방법입니다. 즉, 서버의 스펙을 업그레이드하여 더 많은 리소스를 할당하거나, 빠른 CPU와 빠른 메모리를 사용하여 데이터베이스 성능을 향상시키는 것입니다. 수평적 확장(Horizontal Scaling 또는 Scale Out) 여러 대의 서버에 데이터를 분산하여 처리하는 방법으로, 서버의 대수를 늘려서 데이터베이스 성능을 향상시키는 방법입니다. 즉, 여러 대의 서버를 클러스터링하여 데.. 더보기
NoSQL과 RDBMS 비교 NoSQL과 RDBMS는 데이터베이스의 유형을 나타내는 용어로, 각각의 특징이 다릅니다. 다음은 NoSQL과RDBMS의 주요 차이점을 비교한 표입니다. NoSQL RDBMS 데이터모델 스키마 없음 (Schema-less) 스키마 있음 (Schema-based) 데이터저장 도큐먼트 (Document), 키-밸류 (Key-Value), 와이드 컬럼 (Wide Column), 그래프 (Graph) 등 테이블 (Table), 로우 (Row), 컬럼 (Column) 확장성 수평적 확장이 쉬움 수직적 확장이 쉬움 데이터일관성 일관성 보장이 어려움 일관성 보장이 가능함 쿼리 언어 제품마다 지원하는 언어가 다름 SQL 트랜잭션 ACID (원자성, 일관성, 고립성, 지속성)을 보장하지 않는 경우가 있음 ACID를 보장하.. 더보기
CI/CD CI/CD는 Continuous Integration(지속적 통합)와 Continuous Deployment(지속적 배포)의 줄임말입니다. 이는 소프트웨어 개발의 라이프사이클에서 중요한 역할을 하는 두 가지 개념입니다. CI(Continuous Integration) 코드를 작성한 후, 빌드, 테스트의 작업을 자동화하여, 지속적으로 코드 변경을 반영하는 개발 방법론입니다. 이를 통해 여러 명의 개발자들이 동시에 작업하고, 작업한 코드를 쉽게 통합하고, 테스트를 통해 코드 품질을 유지할 수 있습니다. CD(Continuous Deployment) CI의 결과물을 자동으로 배포하여, 최종 사용자에게 빠르게 서비스를 제공하는 것을 목표로 하는 개발 방법론입니다. CI의 결과물이 바로 프로덕션 환경에 배포되는 .. 더보기
Docker와 VM(Virtual Machine) Docker와 VM은 모두 가상화 기술이지만, 그 방식과 목적이 다릅니다. VM (Virtual Machine)은 하나의 물리적 서버에서 여러 개의 가상 서버를 구축하여, 각각의 가상 서버에서 OS와 애플리케이션을 실행하는 가상화 기술입니다. VM은 하이퍼바이저를 이용하여 하나의 물리적 서버를 여러 개의 가상 서버로 분할하는 방식으로 동작합니다. 각각의 가상 서버는 독립적인 운영 체제를 가지고 있으며, 하나의 물리적 서버에서 여러 개의 운영 체제가 동시에 실행됩니다. 반면에, Docker는 OS 수준의 가상화 기술입니다. Docker는 하나의 물리적 서버에서 여러 개의 컨테이너를 구축하여, 각각의 컨테이너에서 애플리케이션을 실행하는 방식으로 동작합니다. 컨테이너는 호스트 OS와 커널을 공유하므로, VM보.. 더보기

728x90