본문 바로가기
other

[질문정리] 백엔드 면접 질문 정리 (기술면접)

by 할리갈리0 2023. 11. 16.

백엔드 (Spring, nodeJS, DB 등) 기술면접 질문 정리입니다. 

(뒤죽박죽 섞여있습니다. 나중에 정리하겠습니다.)

 

1.         NodeJS Spring의 차이점

NodeJS는 자바스크립트를 사용해 서버를 구축하기 위한 도구입니다.
이를 이용하면 손쉽게 서버를 구축하고, 비동기 처리를 통해 빠른 처리속도를 보장합니다.
반면에 Spring은 자바를 사용한 서버 사이드 애플리케이션을 구축하기 위한 프레임워크입니다.
강력한 보안 기능과 트랜잭션 관리 등과 같은 엔터프라이즈급 기능을 지원하며, 큰 규모의 안정적인 애플리케이션을 만드는데 적합합니다.

NodeJS는 자바스크립트 기반의 간단하고 빠른 서버 구축을,

Spring은 자바 기반의 복잡하지만 강력한 기능을 지원하는 서버 구축을 가능하게 합니다.

 

2.         JSP JavaScript의 차이점

JSP(Java Server Pages)는 서버 측에서 실행되는 Java 기반의 웹 페이지 기술입니다.
반면에 JavaScript는 클라이언트 측에서 실행되는 스크립팅 언어입니다.

 

3.         CORS와 CORS 에러

CORS(Cross-Origin Resource Sharing)는 웹 페이지가 다른 도메인의 리소스에 접근할 수 있도록 하는 방식이며,
보안상의 이유로 웹 브라우저는 같은 출처에서만 리소스를 불러올 수 있는 동일 출처 정책(Same-Origin Policy)을 따릅니다.

API 서버와 같이 다른 출처의 리소스를 필요로 하는 경우를 해결하기 위해 서버 측에서 특정 도메인이나 모든 도메인에 대해 자신의 리소스에 대한 접근을 허용하도록 설정할 수 있는 CORS가 도입되었습니다.

 

CORS 에러는 웹 브라우저가 CORS 정책에 따라 다른 출처의 리소스에 대한 접근을 제한할 때 발생합니다.

이는 서버 측에서 특정 출처에 대한 접근을 허용하도록 설정되지 않았을 때 일어나는데,

이러한 에러를 해결하기 위해서는 서버 측에서 해당 출처에 대한 접근을 허용하도록 CORS 설정을 변경해야 합니다.

 

4.         JVM이란? 그리고 동작 과정

JVM은 자바를 실행하기 위한 가상 기계입니다.
자바의 바이트 코드를 운영체제에 맞게 해석해주는 역할을 하는데요.
자바 컴파일러가 .java 파일을 컴파일 하면, .class라는 자바 바이트 코드로 변환시켜줍니다.
이때 바이트 코드가 기계어가 아니기 때문에 운영체제에서 바로 실행이 되지 않습니다.
이때 운영체제가 이해할 수 있도록 해석해주는 것이 JVM입니다.

JVM의 주요 동작 과정은 클래스 로딩, 링크, 초기화, 그리고 실행입니다.

 

5.         동기와 비동기의 차이점

동기 방식은 작업이 순차적으로 이루어지며, 한 작업이 완료될 때까지 다음 작업은 대기 상태입니다.
반면에 비동기 방식은 한 작업이 완료되기를 기다리지 않고, 다음 작업을 실행합니다.

 

6.         정규화란?

하나의 테이블에 하나의 의미만 존재하도록 테이블을 분해하는 과정이며,
테이블을 분해하여 데이터의 중복을 없애는 작업으로 무결성 유지와 DB 저장용량 절감을 목표로 합니다.
테이블의 칼럼이 하나의 값을 갖도록 테이블을 분리하는 것을 제 1정규화라고 합니다.

 

7.         DB 샤딩이란?

데이터베이스 샤딩(Database Sharding)은 데이터베이스의 부하를 분산시키기 위한 방법 중 하나로,
대용량의 데이터베이스를 여러 개의 작은 데이터베이스로 분할하는 방식입니다.
샤딩을 할 때는 주로 데이터의 특정 키 값을 기준으로 분할합니다.

예를 들어, 사용자 ID의 해시 값, 지역 정보 등을 기준으로 데이터를 분할할 수 있습니다.
이렇게 분할된 샤드에 대한 쿼리는 해당 샤드만을 대상으로 실행되므로, 전체 데이터베이스를 대상으로 쿼리를 실행하는 것에 비해 훨씬 빠른 성능을 기대할 수 있습니다. 하지만 샤딩은 데이터베이스 설계와 관리를 복잡하게 만들 수 있습니다.

 

8.         CSR vs SSR 특징 및 차이점

CSR(Client Side Rendering)은 클라이언트 측에서 모든 렌더링이 이루어지는 반면,
SSR(Server Side Rendering)
은 서버 측에서 렌더링이 이루어집니다.
SSR
은 초기 로딩 속도가 빠르고 SEO에 유리하지만, 전체 페이지를 다시 렌더링해야 하는 단점이 있습니다.
반면 CSR은 사용자 인터랙션에 빠르게 반응하지만, 초기 로딩 속도가 느리고 SEO 문제가 있을 수 있습니다.

 

9.         쿠키(Cookie)와 세션(Session)

쿠키는 클라이언트 측에 저장되는 작은 정보 조각이며, 세션은 서버 측에 저장되는 사용자의 상태 정보입니다.

쿠키는 사용자가 웹 사이트를 방문할 때마다 서버에 전송되며, 세션은 사용자가 로그인 상태를 유지하는 데 사용됩니다.

 

10.       RDBMS Nosql의 차이점

RDBMS는 구조화된 데이터를 효율적으로 관리하기 위한 관계형 데이터베이스 모델이며,
NoSQL
은 비구조화된 데이터를 저장하고 검색하는 데 적합한 비관계형 데이터베이스 모델입니다.
RDBMS
는 데이터 무결성을 보장하지만, NoSQL은 확장성과 유연성에 초점을 맞추고 있습니다.

 

11.       JOIN

Join은 두 개 이상의 테이블에서 관련된 열을 기반으로 행을 결합하는 SQL 연산입니다.
INNER JOIN
ON 절과 함께 사용되며, ON 절의 조건을 만족하는 데이터만을 가져옵니다. (교집합)

 

LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN입니다.

이때 ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져옵니다.

하지만 해당 레코드의 두 번째 테이블의 필드 값은 모두 NULL로 표시됩니다. (첫 번째 테이블 + 교집합)

 

RIGHT JOIN LEFT 조인과는 반대로 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN입니다.

이때 ON 절의 조건을 만족하지 않는 경우에는 두 번째 테이블의 필드 값은 그대로 가져옵니다.

하지만 해당 레코드의 첫 번째 테이블의 필드 값은 모두 NULL로 표시됩니다. (두 번째 테이블 + 교집합)

 

12.       UNION UNION ALL

UNION은 두 개 이상의 SELECT 문의 결과를 결합하며, 중복된 행을 제거합니다.
반면에 UNION ALL은 중복된 행을 제거하지 않고 모든 결과를 반환합니다.
UNION
은 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용합니다.
이때 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 합니다.
(DISTINCT
키워드를 따로 명시하지 않아도 기본적으로 중복되는 레코드를 제거)

UNION ALL 키워드를 사용하면 중복되는 레코드까지 모두 출력할 수 있습니다.

 

13.       Override / Overload

Overloading은 함수의 이름은 같으나 반환 타입이나 인자의 갯수, 인자의 타입이 다른 경우이고,
Overriding
부모 클래스의 메소드를 자식 클래스에서 재정의 하는 것, 인터페이스의 메소드를 구현하는 경우입니다.

 

14.       http method

1) get 방식: URL의 쿼리문자열에 데이터를 같이 전달하는 방식으로 데이터 길이에 제한이 있고, 보안에 취약합니다.

쿼리스트링을 통해서 전달합니다. 검색 시 사용 됩니다.
2) post
방식: 헤더에 데이터를 넣어 보내기 때문에 보안에 조금 더 유리하고 데이터 길이에 제한이 없습니다.

하지만, Get에 비해 다소 느립니다. JSON을 서버에 전송해야 할 경우에도 사용됩니다.

 

15.       Docker 사용 이유

도커(Docker)는 컨테이너 기반의 오픈 소스 가상화 플랫폼입니다.
도커를 사용하면 개발, 테스트, 운영 환경에서 일관된 환경을 제공할 수 있습니다.

이로 인해 "내 컴퓨터에서는 잘 돌아가는데 왜 서버에서는 안 되지?" 같은 문제를 방지할 수 있습니다.
도커 이미지는 레이어 시스템을 사용해 버전 관리를 제공합니다. 이미지는 재사용이 가능해 중복 작업을 피할 수 있습니다.

 

16.       telnetssh 차이

telnet ssh는 모두 원격으로 컴퓨터를 제어하기 위한 프로토콜입니다.
하지만 telnet은 데이터를 암호화하지 않아 보안에 취약한 반면,
ssh
는 모든 통신을 암호화하여 안전하게 원격 제어를 할 수 있습니다.

 

17.       httphttps 프로토콜이란?

HTTP는 웹에서 정보를 주고받기 위한 프로토콜입니다. 하지만 HTTP는 보안에 취약합니다.
HTTPS
HTTP에 보안 기능을 추가한 프로토콜로, 데이터를 암호화하여 안전하게 전송할 수 있습니다.

 

18.       데이터베이스 언어(DDL, DML, DCL)?

1) 데이터 정의 언어(DDL) : 데이터베이스, 테이블, 인덱스 등의 구조를 생성, 변경, 삭제하는 데 사용됩니다.
 DDL
에는 주로 CREATE, ALTER, DROP 등의 명령어가 포함됩니다.
2)
데이터 조작 언어(DML) : 데이터를 조회, 삽입, 수정, 삭제하는 데 사용됩니다.
 DML
에는 주로 SELECT, INSERT, UPDATE, DELETE 등의 명령어가 포함됩니다.
3)
데이터 제어 언어(DCL) : 데이터베이스에 접근하거나 객체를 사용할 수 있는 권한을 제어하는 데 사용됩니다.
 DCL
에는 주로 GRANT, REVOKE 등의 명령어가 포함됩니다.

 

19.       트랜잭션이란?

트랜잭션은 데이터베이스의 상태를 변환시키는 하나 이상의 SQL 명령어들의 집합을 의미합니다.
트랜잭션을 통해 데이터베이스의 안정성을 보장하며, 오류가 발생했을 때 원래 상태로 복구할 수 있습니다.

 

20.       DELETE, TRUNCATE, DROP의 차이

1) DELETE: DELETE 문은 테이블의 특정 레코드를 삭제합니다.
 WHERE
절과 함께 사용하여 특정 조건을 만족하는 레코드만 삭제할 수 있습니다.
2) TRUNCATE: TRUNCATE
문은 테이블의 모든 레코드를 삭제하며, 테이블 구조는 그대로 유지합니다.
 DELETE
보다 빠르지만, 개별 레코드를 지정하여 삭제할 수는 없습니다.
3) DROP: DROP
문은 테이블 자체를 삭제합니다. 테이블에 속한 모든 레코드와 테이블 구조를 모두 삭제하므로,

 삭제한 후에는 복구할 수 없습니다.

 

21.       HAVING WHERE의 차이

1) WHERE: WHERE 절은 SELECT, UPDATE, DELETE 문에서 레코드를 필터링하기 위해 사용됩니다.
 
개별 레코드에 조건을 적용하여 원하는 레코드만 선택합니다.
2) HAVING: HAVING
절은 GROUP BY 절과 함께 사용되어 그룹화된 레코드를 필터링하기 위해 사용됩니다.
 HAVING
절은 그룹 함수를 포함한 조건을 사용할 수 있습니다.
 WHERE
절이 적용되지 않는 집계 함수에 대한 조건을 지정할 때 사용합니다.

 

22.       콜백함수

콜백 함수는 한 함수를 실행하면서 그 내부에서 다른 함수를 인자로 받아 실행하는 함수를 말합니다.
이렇게 인자로 받은 함수가 나중에 필요한 시점에 호출되거나 비동기 처리 패턴에서 많이 사용됩니다.

반응형