면접

백엔드 기술면접 대비 정리

wjdwwidz 2024. 9. 3. 19:52

ref : https://zero-base.co.kr/event/media_BE_school_qna#100

 

현직자가 말하는 신입 백엔드 개발 면접 질문 | 제로베이스 | zero-base

신입 백엔드 개발자 면접 전 꼭 읽어봐야 할 기본 질문 15가지

zero-base.co.kr

 

https://www.gilbut.co.kr/book/view?bookcode=BN003386

 


백엔드 기본 질문

1. HTTP METHOD에 대해 설명해 보세요.

get 과 post 간의 차이점

⇒ get은 클라이언트에서 서버로 어떤 리소스로부터 정보를 요청하기 위해 사용되는 메서드. 서버에서 데이터를 가져와서 보여줄 때, 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용.

⇒ post 는 리소스를 생성, 업데이트 하기 위해 서버에 데이터를 보내는 데 사용되는 메서드. 서버상의 데이터 값이나 상태를 바꾸기 위해 사용된다.

<aside> 💡

get 요청은 캐시가 되나, post 는 캐시가 되지 않는다. get은 브라우저에 기록되지만, post는 기록되지 않는다. (브라우저의 캐싱 기능)

</aside>

2. HTTP 상태 코드에 대해 아는 대로 말해보세요.

200 : OK 요청이 성공적으로 되었습니다.

404 : 브라우저에서 알려지지 않은 url 을 입력했을 때.

4xx: 요청의 문법이 잘못되었거나, 요청을 처리할 수 없을 때

5xx : 서버 오류 , 서버가 요청을 처리할 준비가 되지 않았을 때.

422 : 서버가 요청 엔티티의 컨텐츠 형식을 이해했고 요청 엔티티의 문법도 올바르지만 요청된 지시를 처리할 수 없음

400 : 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음

  • 포트폴리오 작성한 예시
class CustomError extends error {
  constructor(statusCode = 500, message) {
    super(message);
    this.statusCode = statusCode;
  }
}

class SystemError extends CustomError {
  constructor(statusCode, message) {
    super(422, message);
  }
}

class BadRequestError extends CustomError {
  constructor(message) {
    super(400, message);
  }
}
module.exports = (err, req, res, next) => {
  if (!(err instanceof CustomError)) {
    err = new CustomError(err.message);
  }
  res.status(err.statusCode).send({
    message: err.message,
  });
};

3. 프로세스와 스레드의 차이

  • 프로세스 : 메모리 상에서 실행중인 프로그램, 물리적 메모리(CPU 등)에 직접적으로 접근이 허용되지 않으며 가상 메모리 공간을 부여받는다.
  • 스레드 : 프로세스안에서 실행되는 흐름 단위

프로세스는 최소 하나의 스레드를 보유하고 있으며, 프로세스는 각각 별도의 주소공간을 독립적으로 할당받는다. (heap, stack)

스레드는 이중에 stack 만 따로 할당받고, 나머지 영역은 스레드끼리 서로 공유한다.

⇒ 가상메모리 : 프로세스가 부여받는 가상 메모리 공간은 물리적 메모리(RAM) 뿐만 아니라 하드디스크와 같은 2차 메모리도 포함한 메모리 공간을 추상화한 것이다. 이는 1차와 2차 메모리를 하나의 연속된 메모리 공간으로 인식하게 만든다. 간단히 말해 프로세스는 RAM 에 연결될 수도 있고, 하드디스크와 같은 느린 저장 장치에 연결될 수도 있다.

  • 프로세스로 나누는 경우 : stack 과 heap 이 부여된다.
  • 스레드로 나누는 경우 : space안에서 팀으로 묶어 진행한다.

4. RDB 와 NoSQL 의 차이

RDBMS는 정해진 스키마가 존재. NoSQL 은 스키마 존재 하지 않음.

 

 

=> 트러블슈팅을 해본 경험이 있나요?

백엔드 개발을 하면서 막혔던 부분과 해결 과정, 그리고 그 과정을 통해 깊이 알게 된 개념을 한 가지 정도 풀어서 설명할 수 있으면 좋습니다.

=> 가장 기억에 남는 백엔드 프로젝트의 구조를 그려보세요.

프로젝트의 DB 설계부분과 백엔드 사이의 관계가 보이도록 그려야 합니다. Spring boot 프로젝트를 한 경우에 아래의 이미지처럼 controller, service, repository를 나누어 백엔드 프로젝트를 구성했음을 명시해야 합니다.

 

 

객체지향 프로그래밍 OOP

데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식. 처리 속도는 다른 프로그래밍 패러다임에 비해 상대적으로 느리다.

  • 추상화 : 핵심적인 개념 또는 기능을 간추려내는 것. 일정 부분의 특징만 뽑아내는 것.
  • 캡슐화 : 은닉. 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉 하는것.
  • 상속성 : 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용, 추가, 확장하는 것.
  • 다형성 : 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 말한다. ex)오버로딩, 오버라이딩.

오버로딩 : 같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 개수 등으로 여러 개를 둘 수 있다. ex) 매개변수에 따라 다른 함수가 호출됨

오버라이딩 : 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의하는 것. 런타임중에 발생하는 ‘동적’ 다형성.

 

 

HTTPS

(p.132)

www.naver.com을 주소창에 입력하면 어떻게 될까요?

  1. 사용자가 url 입력
  2. TCP(프로토콜=규칙) 3way handshake
    1. 3way handshake : 연결 과정 : 확인 http 2.0이하는 TCP 위에서 돌아가므로 무조건 필요
  3. HTTP 패킷 생성
    1. 패킷 : (모양) = (Body + 헤더 auth 등)
  4. 브라우저가 서버로 http get 요청
  5. 서버에서는 DB에서 데이터 가져온다.
  6. 서버에서 HTTP 패킷을 만든다
  7. 브라우저에게 응답 ⇒ 렌더링

TCP 와 UDP 차이 (둘 다 프로토콜)

  • TCP : 연결 지향 프로토콜.
  • 3 way handshake를 한다 == 보내고자 하는 대상과 연결을 한다.
  • 순서 보장 등 기능 이 많음.
  • UDP : 연결 수립 절차가 필요없음.

OSI 7계층 (표준규격) 과 TCP/IP 4계층(웹 에서 주로)


DB

INDEX

  • 이분탐색과 유사 (B-tree)
  • 데이터베이스의 index는 책의 색인

표식. 검색 속도 향상을 위해 사용. 구조가 검색에 용이함, 없으면 찾는 데 오래걸림

트랜잭션

start → query → commit (쿼리를 실제로 실행)

  • 작업의 완전성을 보장해 주는 것.
  • 논리적인 작업 셋을 완벽하게 처리하거나, 처리하지 못할 때는 원 상태로 돌려서 일부만 처리되지 못하게 막는 것.
    • 작업 단위로 묶여야 하는 것. A→B→C 중 B가 잘못되었을 때 A 가 롤백되어야 한다면, ABC 가 트랜잭션
  • ACID 를 보장하여야 트랜잭션
    • A: 원자성 (모두 수행되거나, 수행되지 않는 것)
    • C : 일관성 데이터가 올바른 상태로 계속 있는 것 ex) A가 500만원, B가 0원 있다면, B가 A에게 300 송금 하는 것이 불가능 해야 한다
    • I : 격리성 다른 트랜잭션간 간섭이 생기지 않아야 하는 것 격리 수준에는 4가지 가 있는데, mySQL의 innoDB는 기본적으로 Repeatable Read 를 쓴다.
    • D : 지속성 commit (트랜잭션이 성공하는 것) 되면 영원히 반영되어야 한다.