내가 받은 '백엔드 기술 면접 질문' 모음

wijoonwu·2022년 11월 1일
287
post-thumbnail

JPA

JPA의 특징

  • 쿼리를 일일히 작성할 필요가 없어 코드 작업량이 줄어든다.
  • 가독성이 뛰어나다.
  • 수정이 간편해 유지보수, 리팩토링에 용이하다.

JPA의 한계점

  • 매핑 설계를 잘못했을 때 성능 저하가 발생할 수 있다.
  • 동적 쿼리를 사용하면 가독성이 떨어져 유지보수 시 어려움이 있다.

MySQL

5.7 vs 8.0 차이점

  • 사용자 인증방식 변경
  • 외래키 이름의 길이(64bit)
  • MySQL 8.0과의 호환성 체크 (*추가 공부 필요)
  • 인덱스 힌트(*추가 공부 필요)
  • GROUP BY 에 사용된 정렬 옵션(*추가 공부 필요)
  • 파티션을 위한 공용 테이블 스페이스(*추가 공부 필요)

MySQL 8.0 특징

  • 데이터 딕셔너리 업그레이드

    MySQL 5.7 버전까지는 데이터 딕셔너리 정보가 FRM 확장자를 가진 파일로 별도로 보관됐었는데, MySQL 8.0 버전부터는 데이터 딕셔너리 정보가 트랜잭션이 지원되는 InnoDB 테이블로 저장되도록 개선됐다. 데이터 딕셔너리 업그레이드는 기존의 FRM 파일의 내용을 InnoDB 시스템 테이블로 저장한다. MySQL 8.0 버전부터는 딕셔너리 데이터의 버전 간 호환성 관리를 위해 테이블이 생성될 때 사용된 MySQL 서버의 버전 정보도 함께 기록한다.

  • 서버 업그레이드

    MySQL 서버의 시스템 데이터베이스(performance_schema와 information_schema, 그리고 mysql 데이터베이스)의 테이블 구조를 MySQL 8.0 버전에 맞게 변경한다.

UNION vs UNION ALL

UNION과 UNION ALL 모두 여러개의 SQL문을 합쳐 하나의 SQL문을 만들어 준다.
그러나 차이점이 있다.

UNION

  • 두 쿼리의 결과 중에서 중복되는 값을 삭제하여 나타낸다.

UNION ALL

  • 두 쿼리의 결과 중에서 중복되는 값을 모두 보여준다.
  • 중복체크를 하지않기 때문에 속도가 더 빠르다.

PK와 FK

PK 특징

  • 엔티티를 식별하는 대표 Key
  • Null 값을 가질 수 없고, 중복된 값을 가질 수 없다.
  • table당 1개만 지정해야한다.

FK 특징

  • 외부 식별자Key로 테이블 간의 관계를 의미한다.
  • 두 테이블 간의 종속이 필요한 관계이면 그 접점이 되는 칼럼을 FK로 지정하여 서로 참조할 수 있도록 관계를 맺어준다.
  • 테이블 간의 잘못된 매핑을 방지하는 역할도 한다.

원형 링크드 리스트

  • 단순 연결 리스트에서 마지막 원소가 널 대신 처음 원소를 가리키게 하면 원형 연결 리스트가 된다.

시간복잡도

  • 노드의 삽입과 삭제 시에는 시간 복잡도가 O(1) 이고, 탐색의 경우는 O(N)이다.

스택과 힙

스택

  • 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의 자료 구조
  • 가장 최근에 스택에 추가한 항목이 가장 먼저 제거될 항목이다.
  • 웹 브라우저의 뒤로가기, 실행 취소, 수식의 올바른 괄호 검사를 판단하는데 유용하다.

  • 완전 이진 트리를 기초로 하는 자료 구조
  • 마지막을 제외한 모든 노드에서 자식들이 꽉 채워진 이진트리
  • 최대힙과 최소힙으로 나뉜다. (위 이미지는 최소힙)
  • 최대 힙은 부모노드의 값이 항상 자식 노드들의 값보다 크다.
  • 최소힙은 부모노드의 값이 자식 노드의 값보다 항상 작다.
  • 최댓값 또는 최솟값을 쉽게 뽑기 위한 자료구조임으로 중복을 허용함.

프로세스와 스레드

프로세스

  • 실행파일로 존재하던 프로그램이 메모리에 적재되어 CPU에 의해 실행되는 것을 process라고 한다.

스레드

  • 프로세스 내에서 실행되는 흐름의 단위

프로세스와 스레드의 비교

  • 멀티 프로세스와 멀티 스레드는 양쪽 모두 여러 흐름이 동시에 진행된다.
  • 멀티 프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있다.
  • 멀티 스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다.
  • 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 더 빠르다.

swagger

백엔드 입장에서 swagger의 단점

  • 테스트 코드 없이도 문서를 생성할 수 있기에 API 문서를 신뢰하기 어렵다.
  • 컨트롤러 코드에 swagger 코드가 아주 많이 작성되어야 한다.

JWT

JWT에 대해서 얼마나 알고 있는지?

  • . 을 기준으로 좌측부터 Header, Payload, Signature를 의미하는 문자열의 조합이다.
  • Header 에는 JWT 에서 사용할 타입과 해시 알고리즘의 종류가 담겨있다.
  • Payload 는 서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있다.
  • Signature 에는 Header, Payload 를 Base64 URL-safe Encode 를 한 이후 Header 에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명이 담겨있다.
  • 전자서명에는 비대칭 암호화 알고리즘을 사용하므로 암호화를 위한 키와 복호화를 위한 키가 다르다.
  • 암호화(전자서명)에는 개인키를, 복호화(검증)에는 공개키를 사용한다.

점근성능 시간복잡도

  • 입력크기(실제 처리하는 데이터 개수) n이 무한대로 커짐에 따라 결정되는 성능
  • 데이터 개수가 증가하면 알고리즘 성능결정에 가장 큰 요인은 무엇인지 따지는 것
  • 수행시간의 다항식 함수에서, 데이터 개수가 증가할 수록(입력크기가 증가할 수록) 최고차항이 성능결정요인에 가장 큰 요인이 됨
  • 계수 없이 최고차항만으로 시간복잡도를 표현

TCP/IP 4계층

4계층 : Application Layer

  • OSI 7 Layer에서 세션계층 , 프레젠테이션계층, 애플리케이션 계층에 해당한다. (5, 6, 7계층)
  • 응용프로그램들이 네트워크서비스, 메일서비스, 웹서비스 등을 할 수 있도록 표준적인 인터페이스를 제공한다.
  • TCP/IP 기반의 응용 프로그램을 구분할 때 사용한다.
  • 프로토콜 : HTTP, FTP, Telnet, DNS, SMTP

3계층 : Transport Layer

  • OSI 7 Layer에서 전송계층에 해당한다.
  • 네트워크 양단의 송수신 호스트 사이에서 신뢰성 있는 전송기능을 제공한다.
  • 시스템의 논리주소와 포트를 가지고 있어서 각 상위 계층의 프로세스를 연결해서 통신한다.
  • 정확한 패킷의 전송을 보장하는 TCP와 정확한 전송을 보장하지 않는 UDP 프로토 콜을 이용한다.
  • 데이터의 정확한 전송보다 빠른 속도의 전송이 필요한 멀티미디어 통신에서 UDP 를 사용하면 TCP보다 유용하다.
  • 통신 노드 간의 연결을 제어하고, 자료의 송수신을 담당
  • 프로토콜 : TCP, UDP

2계층 : Internet Layer

  • OSI 7 Layer의 네트워크 계층에 해당한다.
  • 인터넷 계층의 주요 기능은 상위 트랜스포트 계층으로부터 받은 데이터에 IP패킷 헤더를 붙여 IP패킷을 만들고 이를 전송하는 것이다.
  • 통신 노드 간의 IP 패킷을 전송하는 기능 및 라우팅 기능을 담당
  • 프로토콜 : IP, ARP, RARP, ICMP, OSPF

1계층 : Network Access Layer

  • OSI 7 Layer에서 물리계층과 데이터링크 계층에 해당한다.
  • OS의 네트워크 카드와 디바이스 드라이버 등과 같이 하드웨어적인 요소와 관련되 는 모든 것을 지원하는 계층
  • 송신측 컴퓨터의 경우 상위 계층으로부터 전달받은 패킷에 물리적인 주소은 MAC 주소 정보를 가지고 있는 헤더를 추가하여 프레임을 만들고, 프레임을 하위계층인 물 리 계층으로 전달한다.
  • 수신측 컴퓨터의 경우 데이터 링크 계층에서 추가된 헤더를 제거하여 상위 계층인 네트워크 계층으로 전달한다.
  • CSMA/CD, MAC, LAN, X25, 패킷망, 위성 통신, 다이얼 모뎀 등 전송에 사용
  • 프로토콜 : Ehternet(이더넷), Token Ring, PPP

Java

오버로딩과 오버라이딩

오버로딩

  • 이름은 같지만 매개변수/리턴타입이 다른 메소드

오버라이딩

  • 부모 클래스의 메소드를 자식 클래스에서 재정의

클래스와 객체, 인스턴스의 차이

클래스

  • 클래스(Class)란 Java 프로그램에서 객체를 생성하기 위한 일종의 설계도이다. 객체가 가지는 속성(필드)과 동작(메소드)으로 이루어져 있다. 흔히 붕어빵(객체)을 만들기 위한 붕어빵 틀(클래스)이라고 비유를 한다. 클래스는 필드(Field), 생성자(Constructor), 메소드(Method)로 구성되어 있다. 이들은 생략될 수도 있고 하나 이상 작성될 수도 있다.

객체

  • 객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다. 예를 들어 물리적(유형)으로 존재하는 자동차, 컴퓨터, 사람과 추상적(무형)으로 존재하는 강의, 주문 등이 모두 객체가 될 수 있다.

인스턴스

  • 클래스가 붕어빵 틀이라면 그 틀을 통해 생성된 객체(붕어빵) 하나하나를 해당 클래스의 인스턴스(Instance)라고 부른다. Java 프로그램 실행 시 클래스는 JVM 메모리의 클래스 영역(Class Area)에 로드되고 이 클래스를 사용하여 힙 영역(Heap Area)에 새로운 인스턴스(객체)를 생성할 수 있다. 즉, 인스턴스란 현실의 객체를 소프트웨어 내에서 구현한 실체라고 볼 수 있다. 이렇게 생성된 인스턴스들은 각자 고유의 특성을 가지고 독립적으로 존재한다.

의존성 주입(DI)

  • 객체 생성과 관리, 주입이 개발자의 코드가 아닌 컨트롤러에 의해 제어되고 프로그램의 흐름이 외부에 의해 통제되는 개념을 IoC라고 한다. 그리고 필요 객체를 외부에서 또다른 객체로 주입하는 방식을 DI라고 한다.

암호화

대칭키와 비대칭키

대칭키

  • 어떤 정보를 암호화, 복호화할 때 사용하는 키가 동일(대칭)한 경우
  • 암호화된 정보를 전달하고 확인하기 위해서는 송수신자 둘 다 똑같은 키를 가지고 있어야 함
  • 키를 안전하게 교환하는 것이 대칭키 암호화 방식의 핵심

비대칭키

  • 어떤 정보를 암호화, 복호화할 때 사용하는 키가 서로 다른 경우
  • 대칭키와 달리 비대칭키를 활용한 암호화에는 개인키와 공개키 두가지가 사용됨.

그 외 질문들 (추가 예정)

  • 자주쓰는 리눅스 명령어
  • nginx 에 대해서 공부한 것
  • 자바8과 11의 차이점
  • API, HTTP API와 REST API의 차이점
  • XML vs JSON
  • H2 데이터 베이스는 언제 썼는지
  • DB 인덱싱에 대해서 알고 있는지
  • 외래키가 NULL이 허용되는지
  • PK와 FK의 차이
  • PK와 FK를 왜 쓰는지
  • left outer join, inner join 차이
  • extends와 implements 차이
  • 자바 캡슐화, 은닉화에 대한 설명을 할 수 있는지
  • 다형성
  • 접근 제어자에 대해 설명해봐라
  • 브랜치 전략
  • 쿠키와 세션의 차이
  • HTTP 요청이 들어왔을 때 스프링에서 일어나는 동작 과정
  • 사용한 프로젝트 Dependency에 대해서 설명해봐라

References

24개의 댓글

comment-user-thumbnail
2022년 11월 1일

키워드 얻어갑니다. ^^

1개의 답글
comment-user-thumbnail
2022년 11월 1일

잘보고갑니다~

1개의 답글
comment-user-thumbnail
2022년 11월 1일

지식 배우고 갑니다!

1개의 답글
comment-user-thumbnail
2022년 11월 2일

좋은 자료 감사합니다.

1개의 답글
comment-user-thumbnail
2022년 11월 6일

잘 보고 갑니다. :) 쓰느라 고생하셨어요.

1개의 답글
comment-user-thumbnail
2022년 11월 7일

감사합니다!

1개의 답글
comment-user-thumbnail
2022년 11월 7일

잘읽었습니다

1개의 답글
comment-user-thumbnail
2022년 11월 7일

container나 Docker, MSA, DDD와 관련된 질문은 없었나요??

1개의 답글
comment-user-thumbnail
2022년 11월 8일

감사합니다~

1개의 답글
comment-user-thumbnail
2022년 11월 9일

감사합니다!

1개의 답글
comment-user-thumbnail
2022년 11월 10일

An external identifier Key indicates a relationship between tables https://banksnear-me.com/bank-of-america-near-me/
If a relationship between two tables is required, the column that is the point of contact is designated as FK, and a relationship is established so that they can refer to each

1개의 답글
comment-user-thumbnail
2022년 11월 15일

asdasd

1개의 답글