일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리챌린지
- 오픈챌린지
- 내일배움캠프
- 국비지원교육
- 국비지원취업
- baekjoon
- 패스트캠퍼스
- UXUI기초정복
- 백엔드개발자
- 디자인챌린지
- 백엔드 부트캠프
- 디자인강의
- 부트캠프
- Be
- 내일배움카드
- 오픈패스
- 국비지원
- 백엔드
- 오블완
- mysql
- Spring
- OPENPATH
- 객체지향
- UXUI챌린지
- Java
- 백준
- 디자인교육
- KDT
- UXUIPrimary
- 환급챌린지
- Today
- Total
군만두의 IT 공부 일지
신입 개발자 기술면접 예상 질문 정리 - 백엔드(1) 본문
1. HTTP METHOD에 대해 설명해 보세요.
HTTP 메서드는 클라이언트가 서버에게 요청하는 작업의 종류를 나타냅니다.
GET은 데이터를 요청할 때, POST는 데이터를 서버에 전송할 때 사용됩니다. PUT은 데이터를 업데이트할 때, DELETE는 데이터를 삭제할 때 사용됩니다. PATCH는 부분 업데이트에 사용됩니다.
HTTP 메서드는 REST API 설계 시 엔드포인트의 목적을 명확하게 구분하는 데 중요한 역할을 합니다. 예를 들어, 사용자의 정보를 가져오는 요청은 GET 메서드를, 새로운 사용자 정보를 등록하는 요청은 POST 메서드를 사용합니다.
*HTTP 메서드에 대한 자세한 내용은 https://inpa.tistory.com/entry/WEB-🌐-HTTP-메서드-종류-통신-과정-💯-총정리 참고
HTTP METHOD에는 get, post, put, delete 가 있습니다.
단순히 종류를 나열하는 것이 아닌, get과 post 간의 차이점에 대해 말할 수 있어야 합니다.
get은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 method입니다. 즉, 서버에서 어떤 데이터를 가져와서 보여줄 때, 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용합니다.
post는 리소스를 생성/ 업데이트하기 위해 서버에 데이터를 보내는 데 사용되는 method입니다. 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용합니다.
주요 차이점으로는, get 요청은 캐시가 되나, post는 캐시 되지 않습니다. get은 브라우저에 기록되지만 post는 기록되지 않습니다.
2. HTTP 상태 코드에 대해 아는 대로 말해보세요.
HTTP 상태 코드는 서버가 클라이언트의 요청에 대해 응답하는 결과를 숫자로 표현합니다.
200번대는 성공(예: 200 OK), 300번대는 리다이렉션(예: 301 Moved Permanently), 400번대는 클라이언트 오류(예: 404 Not Found), 500번대는 서버 오류(예: 500 Internal Server Error)를 나타냅니다. 이를 통해 요청의 성공 여부와 문제 발생 위치를 확인할 수 있습니다. 특히, 401 Unauthorized는 인증이 필요함을 나타내며, 403 Forbidden은 서버가 요청을 거부할 때 사용됩니다.
*HTTP 상태 코드에 대한 자세한 내용은 https://inpa.tistory.com/entry/HTTP-🌐-상태-코드-1XX-5XX-총정리판-📖 참고
주요 상태 코드 (200, 404, 503) 정도는 알고 있어야 합니다.
- 200 : OK, 요청이 성공적으로 되었습니다. 정보는 요청에 따른 응답을 반환됩니다.
- 404: 서버는 요청받은 리소스를 찾을 수 없습니다. 브라우저에서는 알려지지 않은 URL을 의미합니다. APL에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수 있습니다. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있습니다.
- 503 : 서버가 요청을 처리할 준비가 되지 않았습니다. 유지 보수를 위해 작동이 중단되거나 과부하가 걸린 서버일 경우 발생합니다.
지원자분께서 가지고 계신 백엔드 개발 경험 중 상황별로 어떤 상태 코드를 반환하도록 설계하였는지 설명할 수 있어야 합니다. 이 외에도, 1번 대 부터 5번 대 상태 코드까지 각각 대략적으로 어떤 의미인지를 알고 있어야 합니다.
1xx (정보) : 요청받았으며, 프로세스가 계속 진행합니다.
2xx (성공) : 요청을 성공적으로 받았으며 인식했고 수용합니다.
3xx (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.
4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
5xx (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했습니다.
3. 가장 기억에 남는 백엔드 프로젝트의 구조를 그려보세요.
예를 들어, 사용자 인증 시스템을 구현한 프로젝트의 구조는 다음과 같습니다.
1. 클라이언트는 로그인 정보를 DTO(Data Transfer Object) 형태로 컨트롤러에 전송합니다.
2. 컨트롤러는 로그인 요청을 받고 사용자 인증을 위해 서비스 계층에 DTO를 전달합니다.
3. 서비스 계층은 사용자 인증 로직을 처리하고, 사용자 정보를 확인하기 위해 레포지토리에 DTO를 통해 요청합니다.
4. 레포지토리는 사용자 정보 도메인을 사용하여 데이터베이스와 CRUD 작업을 수행 하고, 해당 사용자가 존재하는지를 검증합니다.
5. 사용자 검증이 완료되면, 서비스 계층은 JWT(JSON Web Token)을 생성하고 이를 DTO를 통해 컨트롤러로 전달합니다. 컨트롤러는 이 토큰을 클라이언트로 응답하여 사용자 인증 상태를 관리하게 합니다.
프로젝트의 DB 설계부분과 백엔드 사이의 관계가 보이도록 그려야 합니다. Spring boot 프로젝트를 한 경우에 아래의 이미지처럼 controller, service, repository를 나누어 백엔드 프로젝트를 구성했음을 명시해야 합니다.
4. 트러블슈팅을 해본 경험이 있나요?
서버의 응답 시간이 급격히 증가한 적이 있었습니다. 문제를 파악하기 위해 로그를 분석한 결과, 특정 API에서 쿼리 실행 시간이 길어지는 것을 발견했습니다. 이를 해결하기 위해 인덱스를 추가하고 쿼리를 최적화하여 성능을 개선했습니다. 또한, 캐싱을 적용하여 반복적인 요청에 대한 부담을 줄였습니다.
백엔드 개발을 하면서 막혔던 부분과 해결 과정, 그리고 그 과정을 통해 깊이 알게 된 개념을 한 가지 정도 풀어서 설명할 수 있으면 좋습니다.
5. 병렬 프로그래밍에 대해 아나요? 프로그래밍을 해본 적이 있나요?
병렬 프로그래밍은 여러 작업을 동시에 수행하여 처리 속도를 높이는 방법입니다.
Java에서 Thread 클래스를 사용하거나, ExecutorService와 같은 고수준 모델을 사용해 병렬 처리를 구현해본 경험이 있습니다. 병렬 처리는 CPU의 자원을 효율적으로 사용하기 위해 중요한데, 데이터 처리 작업에서 여러 개의 파일을 동시에 읽고 쓰기 위해 병렬 프로그래밍을 사용하여 전체 실행 시간을 크게 줄였습니다.
*병렬 프로그래밍에 대한 자세한 내용은 https://inpa.tistory.com/entry/👩%E2%80%8D💻-multi-programming-tasking-processing 참고
큰 문제를 작게 나누어 동시에 해결할 때 병렬 프로그래밍을 사용합니다. 지원자분께서 멀티 프로세싱 or 멀티 쓰레딩을 구현해 본 경험을 함께 설명할 수 있다면 좋습니다. ex) python의 pthread 라이브러리를 사용한 멀티 스레딩 경험
추가적으로 병렬 프로그래밍은 큰 문제를 프로세스 혹은 스레드가 나누어 처리를 하기 때문에 처리 속도가 향상된다는 장점을 가지고 있습니다. 단점으로는 구현 난이도가 올라간다는 점입니다. 특히 큰 문제를 일정량씩 나누고, 각 분리된 테스크를 어떻게 배정해서 처리할 것인지에 대한 고민이 필요합니다. 또한, 여러 스레드가 하나의 데이터를 공유한 경우에 아래 8번 문제를 유의해야 합니다.
6. 병렬 프로그래밍을 할 때 어떤 부분을 유의해야 하나요? 세마포어와 뮤텍스에 대해 알고 있나요? 생길 수 있는 문제는?
병렬 프로그래밍을 할 때는 동기화 문제, 데드락(Deadlock), 레이스 컨디션(Race Condition)과 같은 문제를 유의해야 합니다.
동기화 문제는 여러 스레드가 동시에 공유 자원에 접근할 때 발생할 수 있으며, 이를 해결하기 위해 세마포어나 뮤텍스를 사용합니다.
세마포어는 여러 스레드가 특정 자원에 접근하는 것을 제어하는 데 사용되며, 접근 가능한 스레드의 개수를 설정할 수 있습니다. 반면 뮤텍스는 오직 하나의 스레드만이 자원에 접근할 수 있도록 하는 잠금 장치입니다.
데드락은 두 개 이상의 스레드가 서로가 가진 자원의 잠금을 풀기를 기다리며 무한히 대기하는 상태를 말합니다. 이러한 문제를 방지하기 위해서는 자원의 잠금을 요청하는 순서를 정하거나 타임아웃을 설정하는 등의 방법을 사용할 수 있습니다. 또한, 레이스 컨디션은 여러 스레드가 동시에 자원에 접근하여 예기치 않은 결과를 초래하는 문제로, 이를 피하기 위해 뮤텍스와 같은 동기화 도구를 사용하여 자원 접근을 제어해야 합니다.
뮤텍스는 한 스레드, 프로세스에 의해 소유될 수 있는 key를 기반으로 합니다. 반면 세마포어는 현재 공유자원에 접근할 수 있는 스레드, 프로세스의 수를 나타내는 값을 기반으로 합니다. 뮤텍스나 세마포어를 쓰더라도 데드락이 발생할 수 있습니다.
7. LRU 캐시에 대해 설명하시오.
LRU(Least Recently Used) 캐시는 가장 오랫동안 사용되지 않은 데이터를 우선적으로 제거하는 캐시 알고리즘입니다.
이를 통해 자주 사용되는 데이터를 캐시에 유지하면서 효율적으로 메모리를 관리할 수 있습니다. LRU 캐시는 데이터 접근 이력을 관리하여, 새로운 데이터를 추가할 때 캐시가 가득 찬 경우 가장 오래 사용되지 않은 데이터를 제거합니다.
구현 방식으로는 연결 리스트와 해시 맵을 함께 사용하여 O(1)의 시간 복잡도로 데이터를 관리할 수 있습니다.
*LRU 캐시에 대한 자세한 내용은 https://f-lab.kr/insight/understanding-lru-cache-20240605 참고
LRU 캐시는 Least Recently Used 캐시로 캐시 메모리가 다 차면, 가장 오랫동안 사용되지 않았던 캐시를 메모리에서 삭제하는 알고리즘입니다. 캐시를 교체하는 알고리즘이 어떤 것 들이 있는지 이해해두면 좋습니다.
* 캐시 교체 알고리즘의 종류 예시
FIFO (first in first out)
LFU (least frequently used)
LRU (least recently used)
⭐참고자료
1) 한빛출판네트워크, "백엔드 기술 면접 TIP: 자바 기본 문법 예상 질문 5가지와 해설", 2024.02.08, https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS1626582373&cate_cd=
2) 제로베이스, "현직자가 말하는 신입 백엔드 개발 면접 질문 | 백엔드 스쿨", https://zero-base.co.kr/event/media_BE_school_qna
3) 스파르타코딩클럽, "2024 백엔드 면접 질문 문제은행 - 개발자 면접 준비 101", 2024.08.22, https://spartacodingclub.kr/blog/2024-backend-jobinterview-question
이 글은 참고자료를 바탕으로 각 질문에 대한 답변을 정리한 것으로, 틀린 부분이 있을 수도 있습니다.
'기타 > 기술면접' 카테고리의 다른 글
신입 개발자 기술면접 예상 질문 정리 - 네트워크(1) (0) | 2024.11.10 |
---|---|
신입 개발자 기술면접 예상 질문 정리 - 자바(2) (2) | 2024.11.08 |
신입 개발자 기술면접 예상 질문 정리 - 백엔드(2) (0) | 2024.11.07 |
신입 개발자 기술면접 예상 질문 정리 - 데이터베이스(1) (0) | 2024.11.06 |
신입 개발자 기술면접 예상 질문 정리 - 자바(1) (1) | 2024.11.05 |