신입 백엔드 개발자 기술면접 CS 질문 16개와 답변 구조

· · 9 분 소요

핵심 요약: 신입·백엔드 기술면접의 CS 질문은 운영체제(프로세스·스레드), 네트워크(HTTP·TCP), 데이터베이스(트랜잭션·격리 수준·인덱스), 자료구조(해시), 그리고 Java·Spring의 동작 원리에서 반복해서 나옵니다. 이 글은 외운 정의를 읊는 대신 정의 → 이유 → 예시 → 한계 순서로 말하는 답변 틀과, 공식 문서로 확인한 사실에 기반한 질문 16개를 정리했습니다. 아래 답변은 직접 쓴 예시 답안이며, 실제 기업의 출제 문제가 아닙니다.

기술면접에서 CS 질문이 나오는 방식

CS 질문은 보통 한 번으로 끝나지 않습니다. "프로세스와 스레드의 차이는?"으로 시작해 "그럼 스레드끼리 같은 메모리를 쓰면 어떤 문제가 생기나요?"로 이어집니다. 면접관이 보려는 것은 암기량이 아니라 개념을 내 코드와 연결해 설명할 수 있는지입니다. 어떤 질문이 나오는지는 회사와 직무마다 달라서, 이 글의 목록이 그대로 나온다고 보장할 수는 없습니다. 대신 아래 개념들은 공식 문서로 확인할 수 있는 기본기라서 어디서든 쓸모가 있습니다.

답변 틀은 단순합니다. ① 한 문장 정의, ② 왜 필요한지, ③ 작은 예시, ④ 한계나 트레이드오프. 모르는 부분은 아는 만큼만 말하고 "여기서부터는 확실하지 않습니다"라고 선을 긋는 편이 낫습니다.

운영체제: 프로세스와 스레드

1. 프로세스와 스레드의 차이는?

프로세스는 독립된 실행 환경으로 각자 고유한 메모리 공간을 가집니다. 스레드는 프로세스 안에서 실행되며 같은 프로세스의 메모리와 열린 파일 같은 자원을 공유합니다. Oracle의 Java 튜토리얼도 스레드가 프로세스보다 적은 자원으로 만들어지고, 자원을 공유하기 때문에 통신이 효율적이지만 문제가 생길 수도 있다고 설명합니다.

꼬리 질문: 자원을 공유하면 무엇이 문제인가요? (경쟁 상태, 동기화)

2. 경쟁 상태(race condition)는 무엇이고 어떻게 막나요?

여러 스레드가 같은 데이터를 동시에 읽고 쓰면서 실행 순서에 따라 결과가 달라지는 상황입니다. 예를 들어 카운터를 count++로 올리면 읽기, 더하기, 쓰기 세 단계라서 두 스레드가 같은 값을 읽고 덮어쓸 수 있습니다. synchronized나 java.util.concurrent의 락·원자 변수로 임계 구역을 보호합니다. 다만 락이 많아지면 성능 저하와 데드락 위험이 생깁니다.

3. 데드락이 발생하는 조건과 예방 방법은?

교과서적으로 상호 배제, 점유와 대기, 비선점, 순환 대기의 네 조건이 동시에 성립할 때 발생합니다. 락을 항상 같은 순서로 획득하게 하면 순환 대기를 끊을 수 있고, 타임아웃이 있는 락 시도로 무한 대기를 피할 수 있습니다.

네트워크: HTTP와 TCP

4. HTTP가 무상태(stateless)라는 말은 무슨 뜻인가요?

MDN은 HTTP를 같은 연결에서 연속된 두 요청 사이에 연결 고리가 없는 무상태 프로토콜이라고 설명합니다. 서버가 이전 요청을 기억하지 않는다는 뜻입니다. 로그인 상태 같은 세션은 쿠키 같은 메커니즘으로 요청마다 식별 정보를 실어 보내 구현합니다.

꼬리 질문: 세션 방식과 JWT 방식의 차이는? (서버가 상태를 저장하는가)

5. TCP의 3-way handshake는 왜 필요한가요?

TCP는 연결 지향이며 신뢰할 수 있는 순서 보장 바이트 스트림을 제공합니다(RFC 9293). 연결을 맺을 때 한쪽이 SYN을 보내고, 상대가 자신의 SYN과 확인 응답을 보내고, 처음 쪽이 이를 다시 확인합니다. 이 과정에서 양쪽이 서로의 시작 순서 번호와 통신 가능 여부를 확인합니다. 연결 종료는 보통 FIN을 주고받는 절차로 이루어집니다.

꼬리 질문: TCP와 UDP는 언제 각각 쓰나요? (신뢰성 대 지연·오버헤드)

6. 브라우저에 URL을 입력하면 어떤 일이 일어나나요?

대표적인 종합 질문입니다. 개요는 DNS 조회로 IP를 얻고, TCP 연결(HTTPS면 TLS 협상 포함)을 맺고, HTTP 요청을 보내 응답을 받고, 브라우저가 HTML을 파싱해 렌더링하는 흐름입니다. 각 단계를 어디까지 깊이 설명할지는 면접관의 반응을 보며 조절하세요. 백엔드 지원자라면 서버 쪽(로드밸런서, 애플리케이션, DB)까지 이어서 말할 수 있어야 합니다.

데이터베이스: 트랜잭션과 인덱스

7. 트랜잭션의 ACID란?

원자성(전부 반영되거나 전부 취소), 일관성(제약 조건을 지킨 상태에서 다른 상태로 이동), 격리성(동시에 실행되는 트랜잭션끼리 간섭 최소화), 지속성(커밋된 데이터는 장애 후에도 남음)입니다. 외운 단어보다 "계좌 이체에서 출금만 되고 입금이 안 되면 안 된다"처럼 예시로 말하는 편이 설득력 있습니다.

8. 트랜잭션 격리 수준과 각 수준에서 생기는 문제는?

격리 수준이 낮을수록 동시성은 좋아지지만 읽기 이상 현상(dirty read, non-repeatable read, phantom read)이 생길 수 있습니다. PostgreSQL 공식 문서 기준으로 기본 격리 수준은 Read Committed이고, 이때 SELECT는 쿼리 시작 전에 커밋된 데이터만 봅니다. Repeatable Read는 트랜잭션 시작 전에 커밋된 데이터만 보며, 동시 수정 충돌 시 직렬화 실패가 날 수 있어 재시도를 준비해야 합니다. PostgreSQL에서 Read Uncommitted는 Read Committed처럼 동작합니다. DBMS마다 구현과 기본값이 다르므로 "내가 쓰는 DB 기준으로" 말하는 것이 안전합니다.

꼬리 질문: MySQL(InnoDB)과 PostgreSQL의 기본 격리 수준을 비교해 보세요. (직접 문서로 확인하고 답하세요)

9. 인덱스는 왜 빠르고, 언제 오히려 해가 되나요?

인덱스는 정렬된 보조 구조(보통 B-Tree 계열)로 조건에 맞는 행을 전체 스캔 없이 찾게 해 줍니다. 대신 쓰기(INSERT·UPDATE·DELETE) 때 인덱스도 갱신해야 하고 저장 공간을 쓰므로, 카디널리티가 낮은 컬럼이나 쓰기가 많은 테이블에 무조건 추가하면 손해일 수 있습니다. 복합 인덱스는 컬럼 순서가 중요합니다. 실제로는 실행 계획(EXPLAIN)으로 확인하는 습관을 말해 주면 좋습니다.

10. N+1 문제란 무엇이고 어떻게 해결하나요?

Hibernate 공식 문서는 N+1 select를 "처음 쿼리로 N개 행을 가져온 뒤, 연관된 엔티티를 가져오려고 N번의 추가 쿼리가 나가는 것"으로 설명하며, Java 데이터 접근 코드에서 성능 저하의 가장 흔한 원인이라고 말합니다. JPA에서는 fetch join, 엔티티 그래프, 배치 조회로 쿼리 수를 줄입니다. 지연 로딩 자체가 나쁜 것은 아니고, 필요한 곳에서 명시적으로 함께 가져오는 것이 요점입니다.

꼬리 질문: fetch join의 한계는 무엇인가요? (페이징, 컬렉션 중복)

자료구조와 Java

11. HashMap은 어떻게 동작하고 시간 복잡도는?

키의 hashCode()로 버킷 위치를 정해 값을 저장합니다. Oracle의 HashMap 문서는 해시 함수가 요소를 버킷에 잘 분산시킨다는 가정에서 get·put이 상수 시간이라고 설명합니다. 같은 hashCode를 가진 키가 많으면 성능이 떨어지고, 순서는 보장되지 않으며, 동기화되어 있지 않아 여러 스레드가 구조를 바꾸면 외부에서 동기화해야 합니다. null 키와 null 값을 허용하는 것도 특징입니다.

꼬리 질문: equals와 hashCode를 같이 재정의해야 하는 이유는?

12. ArrayList와 LinkedList는 언제 무엇을 쓰나요?

ArrayList는 배열 기반이라 인덱스 접근이 빠르고 메모리 지역성이 좋습니다. LinkedList는 노드 기반이라 이미 노드를 잡고 있을 때의 삽입·삭제가 유리하지만, 임의 접근이 느립니다. 실무에서는 대부분 ArrayList로 충분하다고 답하고, 근거로 접근 패턴을 드는 것이 좋습니다.

13. String, StringBuilder, StringBuffer의 차이는?

String은 불변이라 변경할 때마다 새 객체가 만들어집니다. StringBuilder는 가변이라 반복 연결에 적합하고 스레드 안전을 보장하지 않으며, StringBuffer는 메서드가 동기화되어 있습니다. 단일 스레드에서 문자열을 반복해서 붙일 때는 StringBuilder를 씁니다.

Spring: 트랜잭션과 프록시

14. @Transactional은 어떻게 동작하나요?

Spring은 기본적으로 프록시 방식으로 동작하며, 프록시를 통해 들어오는 외부 호출만 가로챕니다. 그래서 같은 클래스 안에서 다른 메서드를 호출하는 자기 호출(self-invocation)은 @Transactional이 붙어 있어도 실제 트랜잭션이 생기지 않는다고 Spring 공식 문서에 나와 있습니다. 기본 롤백 규칙은 RuntimeException과 Error일 때 롤백하고, 체크 예외는 롤백하지 않는 것입니다.

꼬리 질문: 체크 예외에서도 롤백하려면 어떻게 하나요? (rollbackFor)

15. DI(의존성 주입)는 왜 쓰나요?

객체가 자신이 쓸 의존 객체를 직접 만들지 않고 외부(컨테이너)에서 받게 해 결합도를 낮추고 테스트를 쉽게 만들기 위해서입니다. 생성자 주입을 쓰면 필수 의존성을 명확히 하고 불변으로 유지하기 좋다는 점도 함께 말할 수 있습니다.

16. REST API 설계에서 신경 쓰는 점은?

자원 중심 URL, HTTP 메서드의 의미(GET은 조회, POST는 생성 등), 적절한 상태 코드, 멱등성(같은 요청을 여러 번 보내도 결과가 같은 성질), 페이지네이션과 오류 응답 형식 같은 항목을 들 수 있습니다. 자신이 만든 API가 있다면 그 예시로 답하세요.

답변을 말로 연습하는 방법

  • 질문 하나당 60~90초로 답하는 연습을 하고, 녹음해서 군말이 많은 곳을 찾으세요.
  • "왜?"를 두 번 더 스스로 던져 보세요. 꼬리 질문에서 막히는 지점이 공부할 지점입니다.
  • 모르는 질문은 아는 범위를 말하고, 어떻게 확인할지(공식 문서, 실행 계획 등)를 덧붙이면 정직하면서도 인상이 좋습니다.
  • 자기소개와 프로젝트 질문은 CS 질문과 연결되어 나옵니다. 프로젝트에서 쓴 기술의 원리를 최소한 한 단계 아래까지 설명할 수 있어야 합니다.

실시간 코딩 질문에서 설명하는 방법은 라이브 코딩 면접 가이드, 영어로 진행되는 면접은 영어 기술면접 글을 참고하세요.

면접 중 AI 도구를 써도 될까요

면접에서 AI 도우미를 써도 되는지는 회사와 전형이 정합니다. 코딩테스트 쪽 사례는 코딩테스트 AI 사용 정책 글에 정리했습니다. 허용 여부를 모르겠다면 면접 전에 채용 담당자에게 물어보세요. Interview Copilot은 통화 소리를 인식해 실시간으로 답변 힌트를 보여 주고, 화면의 코드 문제를 스크린샷으로 풀어 주는 데스크톱 앱입니다. 카드 없이 쓰는 무료 플랜이 있어 연습 단계에서 먼저 써 볼 수 있습니다. 허용되지 않는 자리에서는 쓰지 마세요. 화면 공유 시 동작은 이 페이지에 정리되어 있습니다.

출처

2026년 11월 12일 확인. 문서 버전에 따라 동작이 달라질 수 있습니다.

FAQ

신입 개발자 기술면접에서 CS 질문은 어떤 것이 나오나요?

회사마다 다르지만 프로세스와 스레드, HTTP와 TCP, 트랜잭션과 격리 수준, 인덱스, 해시 맵, 사용 언어·프레임워크의 동작 원리가 자주 다뤄지는 영역입니다. 특정 목록이 그대로 나온다고 보장할 수는 없어, 개념을 자기 프로젝트와 연결해 설명하는 연습이 중요합니다.

CS 질문에 답할 때 어떤 구조로 말하면 좋나요?

정의 한 문장, 왜 필요한지, 작은 예시, 한계나 트레이드오프의 순서를 권합니다. 60~90초 안에 끝내고, 모르는 부분은 아는 범위까지만 말한 뒤 어떻게 확인할지를 덧붙이면 정직하면서 신뢰를 줍니다.

PostgreSQL의 기본 트랜잭션 격리 수준은 무엇인가요?

PostgreSQL 공식 문서에 따르면 기본값은 Read Committed입니다. Read Uncommitted를 지정해도 Read Committed처럼 동작합니다. MySQL 등 다른 DBMS는 기본값과 구현이 다를 수 있으니 사용하는 DB의 문서를 직접 확인하세요.

@Transactional이 안 먹히는 대표적인 경우는?

Spring 프록시 방식에서는 프록시를 통한 외부 호출만 가로채므로, 같은 클래스 안에서 호출하는 자기 호출에서는 트랜잭션이 적용되지 않습니다. 또 기본 롤백 규칙상 체크 예외는 롤백되지 않으므로 필요하면 rollbackFor를 지정합니다.

N+1 문제는 어떻게 설명하면 되나요?

처음 쿼리로 N개 행을 가져온 뒤 연관 엔티티를 가져오려고 N번의 쿼리가 더 나가는 현상입니다. JPA에서는 fetch join, 엔티티 그래프, 배치 조회로 쿼리 수를 줄입니다. 지연 로딩 자체가 아니라 필요한 곳에서 명시적으로 가져오는 것이 핵심입니다.

면접 질문 답을 외워 가도 되나요?

정의는 외워도 되지만 꼬리 질문에서 막히기 쉽습니다. 개념을 예시와 함께 이해하고, 직접 만든 코드나 프로젝트와 연결해 말하는 연습이 더 효과적입니다. 이 글의 답변도 참고용 예시이며 실제 기업 출제 문제가 아닙니다.

면접 중 AI 도구를 써도 되나요?

회사와 전형이 정합니다. 허용되는지 모르면 면접 전에 채용 담당자에게 물어보세요. 허용되지 않는 자리에서는 쓰지 않는 것이 맞고, 연습 단계에서 실시간 답변 힌트에 익숙해지는 용도로 쓰는 방법도 있습니다.

이 상황에서 앱이 돕는 방식

관련 글

다음 글