스케일 아웃과 스케일 업의 차이점을 설명해 주세요.
·
백엔드 면접
스케일 업은 기존의 서버를 더 높은 사양으로 업그레이드하는 것을 의미합니다. 예를 들어 AWS EC2 t2.micro에서 t2.small로 업그레이드하는 것입니다. 스케일 업은 상대적으로 간단하게 서버의 성능을 향상시킬 수 있습니다. 하지만 성능 향상에 한계가 있고, 성능 향상에 따른 비용 부담이 크며 서버 한 대가 부담하는 양이 많아서 서버에 문제가 생기면 큰 타격을 입게 됩니다. 또한 향후 사용량을 추정하여 미리 고사양의 서버를 확보하는 경우, 실제 필요한 서버의 사양보다 과한 사양의 장비를 확보할 수 있기 때문에 비용적인 손실이 있을 수 있습니다. 스케일 아웃은 비슷한 사양의 장비를 추가하여 수평으로 확장하는 방식입니다. 서버로 들어오는 많은 요청을 비슷한 사양의 서버 n대로 분산시켜 성능을 향상시..
ACID에 대해서 설명해 주세요.
·
백엔드 면접
ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 속성을 의미합니다. 원자성(Atomicity)은 트랜잭션 내부 연산들이 부분적으로 실행되고 중단되지 않는 것을 보장합니다. 즉 트랜잭션은 전체 성공 또는 전체 실패 중 한 가지만 수행합니다. 일관성(Consistency)은 트랜잭션이 커밋되면 일관성 있는 데이터베이스 상태로 유지되는 것을 보장합니다. 제약조건과 같이 데이터베이스에 정의된 규칙을 특정 트랜잭션이 위반하는 경우에는 해당 트랜잭션은 롤백되어야 합니다. 격리성(Isolation)은 동시에 실행되는 여러 트랜잭션이 서로 독립적임을 보장합니다. 즉 트랜잭션이 수행될 때 다른 트랜잭션이 사이에 끼어들지 못하도록 보장합니다. 적절한 트랜잭션 격리 수준을 사용하여 높은 동시성 또는..
REST란 무엇인가요?
·
백엔드 면접
REST(Representational State Transfer)란 자원의 표현을 이용하여 상태를 주고받는 것을 의미합니다. HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD 연산을 적용합니다. 또한 최근에는 일반적으로 자원의 상태를 나타내기 위해 JSON 포맷을 사용합니다.REST의 장단점은 무엇인가요?REST는 서버와 클라이언트의 역할을 명확하게 분리해 주며, HTTP 프로토콜을 따르는 모든 플랫폼에서 사용할 수 있습니다. 또한 Curl, Postman 등을 사용하여 간단하게 테스트할 수 있으며, REST API가 의도하는 바를 명확하게 파악할 수 있습니다.하지만 단점으로는 특정 표준이 존재하지 않고, HTTP Method가 제한적이어서 HTTP Met..
캐싱 전략에 대해서 설명해주세요.
·
백엔드 면접
캐싱 전략은 크게 읽기 전략과 쓰기 전략으로 나눌 수 있습니다. 읽기 전략에는 Look Aside(Cache Aside), Read Through 전략이 있고, 쓰기 전략에는 Write Through, Write Around, Write Back(Write Behind) 전략이 있습니다.읽기 전략Look Aside(Cache Aside) 방식은 캐시는 독립적으로 존재하고, 애플리케이션이 캐시와 데이터베이스 모두 직접 통신합니다. 캐시와 데이터베이스 사이에는 직접적인 연결이 없으며, 모든 캐시 및 데이터베이스 작업은 애플리케이션에서 관리합니다. 동작 방식에 대해서 설명하자면, 1. 애플리케이션이 먼저 캐시를 확인합니다.2. 캐시 히트가 발생하면, 해당 데이터를 읽어서 바로 클라이언트에 반환합니다.3. 캐시..
동시성과 병렬성에 대해서 설명해 주세요.
·
백엔드 면접
동시성(Concurrency)이란 논리적으로 동시에 실행되는 것처럼 보이게 만드는 개념입니다. 단일 코어를 기준으로 시간 분할을 통해 여러 스레드를 번갈아 가며 작업을 수행함으로써, 마치 동시에 여러 작업이 처리되는 것처럼 보이게 합니다.사용자의 입력을 기다리거나 네트워크 요청, 파일 입출력 등의 I/O 작업 시에는 CPU가 유휴 상태로 대기하게 됩니다. 이때 CPU가 아무 일도 하지 않고 대기하는 대신, 컨텍스트 스위칭을 통해 다른 스레드의 작업을 처리할 수 있습니다. 덕분에 서버는 여러 클라이언트의 요청을 동시에 처리할 수 있어 효율적입니다. 다만 여러 스레드를 사용하면서 Deadlock, Race Condition, Starvation 등의 동시성 문제가 발생할 수 있기 때문에 동시성 환경을 고려해..
로드 밸런싱에 대해서 설명해 주세요.
·
백엔드 면접
로드 밸런싱은 트래픽의 고른 분배를 위해 사용되는 기술입니다. 로드 밸런싱은 로드 밸런서에 의해 수행되며, 일반적으로 클라이언트와 다중화된 서버 사이에 위치하여 클라이언트는 로드 밸런서에 요청을 보내고, 로드 밸런서는 해당 요청을 각 서버에 균등하게 분배합니다. 로드 밸런싱을 통해 애플리케이션의 가용성, 확장성, 보안 및 성능을 확보할 수 있습니다.로드 밸런싱 알고리즘은 무엇인가요?부하가 균등하게 분산되도록 부하 대상, 즉 서버를 선택하는 방법을 로드 밸런싱 알고리즘이라고 합니다.  라운드 로빈 방식은 모든 요청이 순서대로 처리되는 방식입니다. 예를 들어 A, B, C 서버 3대가 존재하면 요청은 ABCABC 순서대로 전달됩니다. 모든 서버의 처리 능력이 동등하고, 요청의 고른 분산이 중요한 경우 고려할..
다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은 무엇이 있을까요?
·
백엔드 면접
다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우에는 세션 불일치 문제가 발생할 수 있습니다. 만약 서버 A와 B를 관리하고 있는 상황에서 로드밸런서는 사용자의 요청을 상황에 맞게 A, B 중 한 곳으로 전달합니다. 유효한 로그인 요청이 A 서버로 처음 도착하면 사용자에 대한 세션 정보는 A 서버에 저장됩니다. 이후에 해당 사용자의 또 다른 요청이 로드밸런서에 도착했을 때, B 서버로 전달되면 사용자의 세션 데이터가 존재하지 않아 요청이 제대로 처리되지 않습니다. 이를 세션 불일치 문제라고 합니다.세션 불일치 문제는 어떻게 해결할 수 있나요?세션 불일치 문제는 크게 스티키 세션 방식, 세션 클러스터링 방식, 스토리지 분리 방식 3가지 방식으로 해결할 수 있습니다. 스티키 세션 방식은 사용자 요청이..
SOLID 원칙에 대해서 설명해 주세요.
·
백엔드 면접
SOLID 원칙은 좋은 객체 지향 설계의 5가지 원칙입니다. 여기서 좋은 설계는 시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조를 의미합니다. 즉, SOLID 원칙을 준수하면 시스템에 예상하지 못한 변경사항이 발생하더라도 유연하게 대처하고 확장하기 용이한 시스템 구조를 만들 수 있습니다. 단일 책임 원칙(Single Responsibility Principle)은 클래스는 오직 하나의 목적이나 이유로만 변경되어야 한다는 것을 의미합니다. 여기서 책임이란 단순히 메서드 개수보다는, 특정 사용자나 기능 요구사항에 따라 소프트웨어의 변경 요청을 처리하는 역할을 의미합니다.즉, 클래스는 한 가지 이유로만 변경을 해야 하며,  이를 통해 변경이 발생했을 때 다른 기능에 영향을 덜 ..
DB Replication에 대해서 설명해 주세요.
·
백엔드 면접
DB Replication은 데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 활용되는 기술입니다. 특히, 대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 중요하기 때문에 원본(Source) 서버와 복제(Replica) 서버 간의 데이터 동기화가 필수적입니다. MySQL 기준으로 설명하겠습니다. Replication은 Source 서버에서 발생하는 모든 데이터 변경 사항을 Replica 서버로 복제하여 두 서버 간의 일관성을 유지하는 메커니즘입니다. 이러한 과정은 주로 Binary log를 기반으로 이루어집니다. Binary log는 Source 서버에서 실행된 모든 데이터 변경 쿼리를 기록하는 역할을 합니다. MySQL에서는 Binary log를 저장하는 방식으로 Row, Sta..
Record에 대해서 설명해 주세요.
·
백엔드 면접
Record는 자바 16에서 정식 출시된 특별한 유형의 클래스로 불변성을 기본으로 합니다.기존의 클래스와 달리 모든 필드가 자동으로 final 키워드로 선언되며, 객체 생성 후 변경할 수 없습니다. 또한 필드 선언만으로 자동으로 생성자, getter(), equals(), hashCode(), toString() 메서드를 자동으로 생성해 주어 보일러 플레이트 코드를 줄일 수 있습니다. 이러한 특성으로 인해 멀티 스레드 환경에서 데이터가 의도치 않게 변경되지 않고 안전하게 전달할 수 있습니다.Record로 생성한 모든 객체는 DTO인가요?모든 Record 객체가 DTO인 것은 아닙니다. Record는 단순히 데이터를 캡슐화하는 역할을 하는데, DTO 외에도 값 객체(VO) 등의 다양한 용도로 사용될 수 있..