면접가는 길에 정리해보는 백엔드 기초 지식

개발

오전10시까지 면접이 있어서 지하철 타고 가는 길에

자리가 생각보다 널널해져서 막간을 이용해서 신입 백엔드 개발 면접 질문을 정리해보려고 한다

 

누가 보더라도 이해하기 쉽게 간단하게 작성할 생각이다

 

1. HTTP METHOD에 대한 설명

 

HTTP METHOD에는 get, post, put, delete 가 있다.

 

단순 종류 나열이 아닌 get과 post의 차이를 말할 수 있어야 한다.

 

get은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 method이다.

즉, 서버에서 어떤 데이터를 가져와서 보여줄 때, 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용한다.

 

post는 리소스를 생성/업데이트 하기 위해 서버에 데이터를 보내는 데 사용되는 method이다.

 

서버상의 데이터 값이나 상태를 바꾸기 위해서 사용한다.

 

주요 차이점으로는, get 요청은 캐시가 되나, post는 캐시 되지 않는다.

 

get은 브라우저에 기록되지만 post는 기록되지 않는다.

 

2. HTTP 상태 코드에 대해 아는 대로 설명

 

주요 상태코드 (200, 404, 503)정도는 알고 있어야 한다.

 

-200 : OK, 요청이 성공적으로 되었다. 정보는 요청에 따른 응답을 반환함

 

-404 : 서버는 요청받은 리소스를 찾을 수 없다. 브라우저에서는 알려지지 않은 URL을 의미함.

APL에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미함. 서버들은 인증받지 않은 클라이언트로부터

리소스를 숨기기위하여 이 응답을 403 대신에 전송할 수도 있다.

 

* 쉽게말해 사용자 즉 클라이언트 문제

 

-503 : 서버가 요청을 처리할 준비가 되지 않았다. 유지 보수를 위해 작동이 중단되거나 과부하가 걸린 서버일 경우

발생한다.

 

* 쉽게말해 서버문제

 

백엔드 설계 과정에서 상황별로 어떤 코드를 반환하도록 설계하였는지 설명을 할 수 있어야 한다.

 

이 외에도, 1번 대 부터 5번대 상태 코드까지 각각 대략적으로 어떤 의미인지를 알고 있어야 한다.

1xx(정보) : 요청받았고, 프로세스가 계속 진행됨

2xx(성공) : 요청 성공적으로 받아서 인식했고 수용함

3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요함

4xx(클라이언트 오류) : 요청 문법이 잘못되거나 요청을 처리할 수 없음

5xx(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패함 

 

3. 프로세스와 스레드의 차이에 대해 설명

 

프로세스는 자원을 할당받는 작업의 단위이며, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위,

스레드는 자원을 공유한다는 점에서 차이가 있다

 

* 즉 프로세스는 삽을 들고 흙을 푸려고 준비중인 사람

그 흙은 삽으로 푸는 행위 자체가 스레드 이렇게 이해하자

 

4. RDB와 NoSQL의 차이에 대해 설명

 

RDBMS는 정해진 스키마가 존재하고, NoSQL은 정해진 스키마가 없다는 것이 가장 큰 차이다.

NoSQL은 정해진 스키마가 없을 때 데이터 구조 변화가 자유롭고 데이터 분산이 용이하다는 장점이 있지만,

데이터 중복이 발생하거나 데이터 변경 시에 연산이 오래 걸린다는 단점이 있음

 

5. DB에서 인덱스를 잘 사용하면 어떤 장점이 있을까요?

 

DB의 인덱스를 잘 사용하는 것은 데이터를 검색하는 시점에 성능 차이에 큰 영향을 미친다.

대용량 데이터를 담고 있는 DB테이블에서 필요한 데이터를 빨리 찾기 위해 인덱스가 필요함

인덱스가 없거나 적절한 인덱스를 찾지 못할 경우 데이터가 담겨있는 테이블 전체를 읽어야 하기에 

데이터 조회 시간이 오래 걸린다. 인덱스는 DB데이터의 주소를 갖고 있는 것을 의미하며, 원하는 데이터를 

빠르게 찾을 수 있다는 장점을 가지고 있다.

 

<70%는 알아야 하는 백엔드 협업 관련 질문>

 

6. GC 가비지 컬렉션에 대해 아는대로 설명하시오.

 

GC가비지 컬렉션은 프로그래머가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 가비지 영역을 찾아서

해제하는 기능을 의미함. 답변 시 Full GC에 대해서도 설명할 수 있으면 좋다.

 

* Full GC란? Old 영역도 메모리가 가득차면 비워주는 것을 뜻하는데 시간이 오래걸리는 단점이 있다

 

자바 메모리는 Young, Old Perm 세 영역으로 나뉜다. 이 중 Perm(Permenent)영역은 거의 사용되지 않으며

Yong(Eden, Survivor), Old 영역이 꽉 찾을 때 Full GC가 발생하게 된다.

 

Full GC가 발생하면 애플리케이션에 부하가 발생하여 성능이 Full GC 발생 순간에 저하된다.

자바 성능상 이슈를 유발할 수 있는 Full GC의 이론에 대해 알아두면 좋다.

 

7. 병렬 프로그래밍에 대해 아는가? 프로그래밍을 해본 적이 있는가?

 

큰 문제를 작게 나누어 동시에 해결할 때 병렬 프로그래밍을 사용한다. 본인이 멀티 프로세싱 or 멀티 쓰레딩을

구현해 본 경험을 함께 설명할 수 있으면 더욱 좋다. ex) python의 pthread 라이브러리를 사용한 멀티 스레딩 경험
추가적으로 병렬 프로그래밍은 큰 문제를 프로세스 혹은 스레드가 나누어 처리를 하기 때문에 처리 속도가 향상된다는
장점을 가지고 있다. 단점으로는 구현 난이도가 올라간다는 점이다. 특히 큰 문제를 일정량씩 나누고, 각 분리된
테스크를 어떻게 배정해서 처리할 것인지에 대한 고민이 필요하다. 또한, 여러 스레드가 하나의 데이터를 공유한 경우에

아래 8번 문제를 유의해야 한다.

 

8. 병렬 프로그래밍을 할 때 어떤 부분을 유의해야 하는가? 세마포어와 뮤텍스에 대해 알고 있는가? 생길 수 있는 문제는?

 

뮤텍스는 한 스레드, 프로세스에 의해 소유될 수 있는 key를 기반으로 한다. 반면 세마포어는 현재 공유자원에 접근 할 수 있는
스레드, 프로세스의 수를 나타내는 값을 기반으로 한다. 뮤텍스나 세마포어를 쓰더라도 데드락이 발생 할 수 있다.

 

9. 트러블슈팅을 해본 경험이 있는가? 

 

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

 

10. 가장 기억에 남는 백엔드 프로젝트의 구조를 알려줄 수 있는가?

 

프로젝트 DB 설계부분과 백엔드 사이의 관계가 보이도록 그려야한다.

spring boot 프로젝트를 한 경우에 아래의 이미지처럼 controller, service, repository를 나누어 

백엔드 프로젝트를 구성했음을 명시해야한다.

 

 

 

* 위 내용은 제로베이스 김조현 강사님이 명시한 내용을 숙지하기위해 직접 한 자 한 자 타이핑하여 정리하였습니다.