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 데이터의 주소를 갖고 있는 것을 의미하며, 원하는 데이터를 빠르게 찾을 수 있다는 장점을 가지고 있습니다.
6. GC 가비지 컬렉션에 대해 아는 대로 설명하시오
GC 가비지 컬렉션은 프로그래머가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 가비지 영역을 찾아서 해제하는 기능을 의미합니다. 답변 시 Full GC에 대해서도 설명할 수 있으면 좋습니다.자바 메모리는 Young, Old, Perm 세 영역으로 나뉩니다. 이 중 Perm(Permanent) 영역은 거의 사용되지 않으며 Yong(Eden, Survivor), Old 2가지 영역으로 나뉘어있습니다. 객체는 처음 생성되었을 때 Yong 영역에 있다가 Old 영역으로 넘어가게 되는데, Old 영역이 꽉 찼을 때 Full GC 가 발생하게 됩니다. Full GC가 발생하면 애플리케이션에 부하가 발생하여 성능이 Full GC 발생 순간에 저하됩니다. 자바 성능상 이슈를 유발할 수 있는 Full GC의 이론에 대해 알아두면 좋습니다.
7. 병렬 프로그래밍에 대해 아나요? 프로그래밍을 해본 적이 있나요?
큰 문제를 작게 나누어 동시에 해결할 때 병렬 프로그래밍을 사용합니다. 지원자분께서 멀티 프로세싱 or 멀티 쓰레딩을 구현해 본 경험을 함께 설명할 수 있다면 좋습니다. ex) python의 pthread 라이브러리를 사용한 멀티 스레딩 경험추가적으로 병렬 프로그래밍은 큰 문제를 프로세스 혹은 스레드가 나누어 처리를 하기 때문에 처리 속도가 향상된다는 장점을 가지고 있습니다. 단점으로는 구현 난이도가 올라간다는 점입니다. 특히 큰 문제를 일정량씩 나누고, 각 분리된 테스크를 어떻게 배정해서 처리할 것인지에 대한 고민이 필요합니다. 또한, 여러 스레드가 하나의 데이터를 공유한 경우에 아래 8번 문제를 유의해야 합니다.
8. 병렬 프로그래밍을 할 때 어떤 부분을 유의해야 하나요? 세마포어와 뮤텍스에 대해 알고 있나요? 생길 수 있는 문제는?