목록CS 지식/면접준비 (78)
개발놀이터
4부터 시작하는 것은 넘어가주시길 바랍니다... 따로 정리하면서 공부한거라 Java 면접질문이 아닌 123번을 제외하고 4번부터 수록했습니다. 꼬리질문에 대한 답변도 수록했기 때문에 조금 길게 느껴질 수 있습니다. 이 글을 보고 면접질문을 공부하실 분들은 우선 질답을 외우고 (저와 똑같이 안외워도 됩니다) 따로 찾아서 공부하시고 꼬리질문도 생각해보시면 좋을 것 같습니다. 4. OOP가 뭔가요? OOP는 객체지향 프로그래밍의 약자로서 데이터를 객체로 취급하여 프로그램에 반영하고, 순차적으로 프로그램이 동작하는 것이 아니라 객체와 상호작용을 통해 프로그램이 동작하는 것을 말합니다. 이렇게 객체를 연결시켜 프로그래밍하게 되면 캡슐화, 다형성, 상속을 통해 코드의 재사용성을 높이고 유지보수를 줄여준다는 장점이 ..
Q. 검색창에 google.com을 검색하면 벌어지는 일을 OSI 7계층 / TCP 4계층와 연관지어 설명해주세요 A. google.com을 검색하면 브라우저는 TCP 4계층인 애플리케이션 계층의 DNS 캐시 레코드에서 URL과 상응하는 IP 주소를 찾습니다. 만약 요청된 URL이 캐시에 없으면 ISP의 DNS서버는 google.com을 호스팅하고 있는 서버의 IP 주소를 찾기위한 DNS쿼리를 날립니다. 그리고 그 후 브라우저는 TCP 3계층인 전송계층의 TCP 연결을 시작합니다. 연결이 끝난 후 브라우저는 HTTP 요청을 보내고 서버는 요청과 돌아오는 응답을 핸들링합니다. 웹 서버는 HTTP응답을 보내고 브라우저는 HTML문서 결과를 보여줍니다.
Q. OSI 7계층에 대해서 설명해주세요. A. OSI 7계층은 1계층부터 물리계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 나눠져 있습니다. OSI 모델은 네트워크가 어떻게 동작하는지에 대해서 시각화를 도와주는 역할을 합니다. 그리고 네트워크 문제에서 문제를 어떻게 해결해야 하는지에 대한 방법을 제공해줍니다.
Q. 공개키 암호화, 개인키 암호화에 대해서 설명해주세요. A. 기존 대칭키 암호화에서 해커가 둘 중 하나의 키만 갈취해도 데이터를 복호화할 수 있기 때문에 이를 보완하고자 비대칭키 암호화가 등장하였습니다. 비대칭키 암호화의 주된 개념은 암호화와 복호화에 서로 다른 키를 사용하다는 것이고, 데이터를 암호화하는 키의 종류에 따라 사용되는 분야가 다릅니다. 공개키로 암호화하면 데이터 보안에 초점을 맞춘 것이고, 개인키로 암호화 하면 사용자 인증에 초점을 맞춘 것입니다.
Q. Stateless, Stateful에 대해서 설명해주세요. A. Stateful은 하나의 세션에 다음 트랜잭션에 필요한 정보를 가지고 있는 프로토콜입니다. 때문에 클라이언트가 보내는 정보의 양은 적지만 서버가 가지고 있어야 하는 양은 많습니다. Stateful은 데이터가 하나의 세션에 연결되어야 하는 온라인 뱅킹, SMTP 프토콜에서 주로 사용합니다. Stateless는 Stateful과 반대로 다음 트랜잭션에 필요한 정보를 가지고 있지 않은 프로토콜입니다. 때문에 클라이언트가 보내는 양은 많지만 서버가 가지고 있어야 하는 양이 적습니다. Stateless는 확장성과 멀티태스킹에 능하고 이는 HTTP 프로토콜, SMS, DNS등에서 주로 사용됩니다.
Q. 클러스터링, 레플리케이션, 샤딩에 대해서 설명해주세요 (이거 안물어볼 가능성이 매우 높습니다) A. 클러스터링이란 하나의 DB 스토리지에 여러 DB 서버를 달아서 원래였다면 하나의 서버에서 감당해야할 부하를 여러 서버가 나눠 담당하기 때문에 성능적인 이점을 볼 수 있습니다. 하지만 DB 스토리지가 하나밖에 없기 때문에 DB스토리지에 문제가 생긴다면 전체 애플리케이션이 죽어버릴 수 있다는 단점이 있습니다. 이를 보완하기 위한 방식이 바로 레플리케이션인데, 레플리케이션은 복제된 DB 스토리지를 각각의 DB서버와 묶어서 DB 스토리지가 죽어버릴 경우에 대비할 수 있습니다. 하지만 슬레이어 DB서버가 많이 늘어난다는 단점이 있습니다. 이를 보완하기 위한 방식이 바로 샤딩입니다. 샤딩은 데이터를 특징에 맞춰..
Q. 로드 밸런싱에 대해서 설명해주세요 A. 로드 밸런싱은 트래픽을 적절히 서버에 분담해주는 기술입니다. 구현한 알고리즘은 정적 로드 밸런싱 알고리즘과, 동적 로드 밸런싱 알고리즘이 있습니다. 정적 알고리즘은 옆 서버의 상태와 성능을 고려하지 않고 순서에 따라 트래픽을 분배한다는 특징이 있습니다. 비효율적으로 보이지만 개발이 단순하다는 장점이 있습니다. 정적 알고리즘에는 라운드 로빈, 가중치에 기반한 라운드 로빈, IP Hash 가 있습니다. 동적 알고리즘은 가용성, 상태, 작업상황에 맞춰 트래픽을 분배한다는 특징이 있습니다. 굉장히 효율적이지만 구현이 까다롭고, 오버헤드가 발생할 수 있다는 단점이 있습니다. 동적 알고리즘에는 Least Connection, Weighted Least Connection..
Q. 동기, 비동기 프로그래밍에 대해서 설명해주세요. A. 동기 프로그래밍은 싱글스레드, Blocking Architecture로 대표되는 프로그래밍으로 요청을 보내면 그에 상응하는 응답이 올때까지 기다린다는 특징이 있습니다. 따라서 속도가 좀 느리고, 확장성이 낮다는 단점이 있지만 개발자 친화적이고, 메모리를 적게 먹으며, 오버헤드가 발생하지 않는다는 장점이 있습니다. 비동기 프로그래밍은 멀티 스레드, Non-Blocking Architecture로 대표되는 프로그래밍으로 요청과 응답이 각각 다른 스레드에 할당되어 응답을 기다리지 않아도 된다는 특징이 있습니다. 그렇기 때문에 속도가 빠르고, 확장성이 높다는 장점이 있지만 구현하기 까다롭고, 메모리를 많이 잡아먹으며, 오버헤드가 발생한다는 단점이 있습니다.
Q. NoSQL이 뭔가요? A. NoSQL은 비관계형 데이터베이스로서 기존 RDBMS가 엄격한 스키마에 따른 정형 데이터를 저장하는 것에 특화된 것과 다르게 NoSQL은 ACID를 엄격히 지키지 않고, 스키마에서도 자유롭기 때문에 비정형 데이터를 저장하고 RDBMS에 비해 수평적으로 확장하기 쉽다는 특징이 있습니다. NoSQL의 타입으로는 Key-Value Store, Document Store, Wide Column Store, Graph Store가 있습니다. Q. NoSQL과 RDBMS의 차이에 대해서 설명해주세요 A. 우선 크게 확장성, 성능, 보안적으로 설명할 수 있습니다. 수직적인 확장만 가능하던 RDBMS와 다르게 NoSQL은 수평적으로 확장이 가능하기 때문에, NoSQL의 경우 빅데이터를 ..
Q. 트랜잭션 전파단계에 대해서 설명해주세요 A. JPA Propagation은 트랜잭션 동작 도중 다른 트랜잭션을 호출하는 상황에 선택할 수 있는 옵션입니다. @Transactional의 Propagation 속서을 통해 피호출 트랜잭션의 입장에서는 호출한 쪽의 트랜잭션을 그대로 사용할 수도 있고, 새롭게 트랜잭션을 생성할 수도 있습니다. Q. 전파단계의 종류에 대해서 설명해주세요 A. REQUIRED는 부모 트랜잭션 내에서 실행하며, 부모 트랜잭션이 없을 경우 새로운 트랜잭션을 생성합니다. 그 외에는 REQUIRES_NEW, SUPPORTS, NOT SUPPORT, MANDATORY, NESTED, NEVER등이 있습니다.