IT면접 이야기

기술면접 준비#3

로춘남 2020. 7. 15. 12:00
728x90

41. 자바를 쓰면서 불편했던점은?

속도가 느리다. 하드웨어에 맞게 완전히 컴파일 되는 것이 아닌, 실행시에 해석 되기 때문에 속도가 느림. 하지만 바이트 코드(byte code)를 하드웨어의 기계어로 변환해주는 JIT컴파일러와 Hotspot(향상된 최적화 기술)과 같은 기술적용으로 JVM 기능이 향상되어 속도문제가 상당히 개선됨.

 

불편한 예외처리. 프로그램을 돌리다가 프로그램이 의도된대로 동작하지 않는 상황에서 예외를 발생시켜 처리를 할 수 있음. 자바는 유독 예외가 등장하면 무조건 개발자가 선언을 해줘야함.

 

42. JVM란?

자바 가상 머신(Java Virtual Machine)으로 우리가 작성한 자바 프로그램. WAS(Web Application Server) 등을 구별하지 않고 자바 프로그램의 범주에 들어가는 모든것들을 실행하는 역할.

 

43. 다중 상속을 많이 하는 것은 설계가 잘 못된것일까요?

 

44. 추상 클래스란 무엇인가?

하나 이상의 추상 메소드를 포함하는 클래스. 추상 메소드는 선언만 있고 본체는 없는 함수이며 선언부에 abstarct라는 키워드를 붙인다. 실체 클래스의 공통적인 부분을 추출하여 어느정도 규격을 잡아놓은 추상적인 클래스

 

45. MVC1과 2의 차이

Model: 프로그램의 내부 상태, 즉 프로그램의 정보(데이터)를 말하는 것

Controller: 데이터와 비즈니스 로직 간의 상호 작용을 뜻함

View: 사용자 인터페이스 요소를 뜻하는데, 유저에게 보여지는 것을 말함.

 

MVC1: JSP로 구현한 기존 웹 어플리케이션은 모델 1구조로 웹 브라우저의 요청을 JSP가 받아서 처리하는 구조.

JSP페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관리 코드가 뒤섞여 있는 구조. JSP 페이지 안에서 모든 정보를 표현(view)하고 저장(model)하고 처리(control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어짐.

정의: 모든 클라이언트 요청과 응답을 JSP가 담당하는 구조

장점: 단순한 페이지 작성으로 쉽게 구현 가능. 중소형 프로젝트에 적합

단점: 웹 애플리케이션이 복잡해지면 유지보수 문제가 발생

 

MVC2: MVC1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 됨. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 JSP로 포워딩

정의: 클라이언트의 요청처리와 응답처리, 비즈니스 로직 처리하는 부분을 모듈화시킨 구조

장점: 처리작업의 분리로 인해 유지보수와 확장이 용이

단점: 구조 설계를 위한 시간이 많이 소요되므로 개발 기간이 증가

 

46. 웹 서버와 웹 어플리케이션 서버의 차이는?

웹 서버: 웹 브라우저와 같은 클라이언트로부터 http 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 정적으로 처리해 반환하는 프로그램. 이때 웹 페이지는 그림, 스타일 시트, 자바 스크립트를 포함.

웹 페이지를 클라이언트로 전달하고, 클라이언트로부터 컨텐츠를 전달 받는 역할을 담당. 이외 인증, 정적 컨텐츠 관리, https 지원, 컨텐츠 압축, 가상 호스팅, 대용량 파일 지원, 대역폭 스로틀링 등의 기능을 지원.

종류: 아파치, 인터넷 정보 서버(IIS), 엔터프라이즈 서버

 

장점: 웹 서버는 월드 와이드 웹 뿐만 아니라 프린터, 라우터, 웹캠과 같은 임베디드 장치, 그리고 근거리 통신망(local network)에서도 사용된다. 시스템의 모니터링 또는 장치 관리를 위한 목적으로 사용되는데, 이렇게 웹 서버는 클라이언트에 추가적인 소프트웨어의 설치없이 대부분의 운영체제에 포함된 웹 브라우저만으로 서비스를 제공할 수 있음.

 

웹 어플리케이션: HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(SW 엔진). 동적 서버 콘텐츠를 수행한다는 것으로 일반 WEB 서버와 구별되며, 주로 데이터베이스 서버와 같이 서비스를 수행한다. 프로그램 실행환경과 데이터베이스 접속 기능을 제공하며, 여러 개의 트랜잭션을 관리.

종류: Web Logic / Jeus / Tomcat / JBoss

 

차이점: 웹 서버는 정적 데이터를 처리하고, 웹 어플리케이션 서버는 동적 데이터를 처리.

 

이 특징으로 실무에서는 이 둘을 연동하여 사용하는데, WAS는 동적 처리에 최적화 되어 있는 서비스이기 때문에 처리 속도를 위해, 정적처리는 웹 서버에서 처리를 하고, 동적 컨텐츠는 WAS에서 처리.

웹 서버에 웹 문서를 처리하는 기능을 분배하여 서버의 부담을 줄일 수 있고, 이로인해 웹 어플리케이션에서 정적 데이터 처리를 위해 지연되는 시간이 줄어들어 동적 컨텐츠의 처리 속도가 빨라진다.

 

47. 랜섬웨어란?

사용자 디바이스 또는 네트워크 스토리지 디바이스의 파일을 암호화하는 멀웨이의 한 가지 유형. 암호화된 파일에 대한 접속 권한을 복구하려면 사용자가 일반적으로 추적이 어려운 비트코인과 같은 전자 결제 방식을 통해 랜섬(몸값)을 사이버 범죄에게 지불해야 합니다. 대부분 스팸 이메일을 통해 감염됨.

 

48. SQL Injection 이란?

악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위. 인젝션 공격은 공격이 비교적 쉬운 편이고 공격에 성공 할 경우 큰 피해를 입힐 수 있는 공격.

대응 반안: 입력 값에 대한 검증. Prepared Statement 구문사용. Error Message 노출금지(쿼리문이 노출될 수 있음) / 웹 방화벽 사용

 

49. SSL이란?

웹은 개발하면 기본적으로 회원을 관리하고 로그인하는 부분을 개발하기 마련. 웹 서핑을 하다보면 브라우저에 자물쇠 표시가 되어있는 경우를 종종 보게된다. 해당 웹 사이트는 SSL이라는 보안 프로토콜을 사용한다는 표시. Secure Socket Layer의 약자. 보통 443 포트로 https:// 사용.

Netscape사에서 웹 서버와 웹 브라우저간의 보안을 위해 만들어졌으며, 공개키/개인키 대칭키 기반으로 사용됨.

 

50. 컬렉션 프레임워크(CollectionFramework)란?

* Collection 인터페이스 

1) List 인터페이스 : 배열과 유사하되, 추가할때마다 자동으로 Boundary를 늘려주는 구조로, 중복된 데이터를 허용하며, 순서가 존재한다.

ex)

- ArrayList : 배열로 구현됬으며, 인접해 있기 때문에 데이터 조회에 매우 빠르다 하지만, 빈번한 삽입, 삭제시 새로 배열을 만들고 데이터를 옮겨야 하기 때문에 LinkedList에 비하여 속도가 느리다.

 - LinkedList : 링크 구조로 되어 있기 때문에 조회는 ArrayList에 비해 느리지만, 삽입 삭제시 링크를 끊고 새로 추가되는 데이터에 링크만 연결하면 되기 때문에 삽입, 삭제에 유리

- Vector : 구현 방식은 ArrayList와 유사하지만 Vector를 개선한 것이 ArrayList. 또한 Vector의 경우에는 ArrayList와 달리

Synchronized(동기화)가 걸려 있어 여러 쓰레드에서 동시에 접근할 수 없다.

 

2) Set 인터페이스 : 집합처럼 중복된 데이터를 허용하지 않으며, 순서가 없다. 또한, 객체 내부의 중복된 데이터를 배제하고 싶은 경우 Object 클래스의 equals 메서드와 hashCode 메서드의 재정의가 반드시 필요

ex)

- HashSet

- TreeSet : 순서가 있는 HashSet으로 이진 트리 구조로 만들어 졌다. 순서에 맞게 정렬되어 저장되기 위해서 Comparable을 구현해야함.

 

3) Map 인터페이스 : key value 쌍으로 데이터를 저장하며, key는 중복될 수 없고, value는 중복 저장이 가능하다.

ex) - HashMap

     - TreeMap

     - Properties : key value 쌍으로 저장되지만 value의 타입이 String만 가능하다.

     - Hashtable : HashMap과 구조는 같으며, 단지 Synchronized(동기화) 되어져 있다는 점이 다른점

 

51. Request 전송 방식에는 어떤것들이 있나요?

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

- POST 방식 : 헤더에 데이터를 넣어 보내기 때문에 보안에 조금 더 유리하고 데이터 길이에 제한이 없다. 하지만, Get에 비해 다소 느리다.

- DELETE 방식 : RESTFUL에서 삭제 기능을 할 때 주로 사용

- PUT/PUSH 방식 : RESTFUL에서 수정 작업을 할 때 주로 사용

 

52. Spring에서 DI란?

DI Dependency Injection(의존성 주입)의 약자로, 객체들 간의 의존성을 줄이기 위해 사용되는 Spring IOC 컨테이너의 구체적인 구현 방식.

DI는 기존처럼 개발코드 부분에서 객체를 생성하는 것이 아니라, 팩토리 패턴처럼 객체의 생성과, 데이터를 주입만 담당하는 Factory에 해당 하는 별도의 공간에서 객체를 생성하고 데이터간의 의존성을 주입해 개발코드에서는 이를 가져다 씀으로서 의존성을 줄이는 방식입니다. 이때Factory 패턴의 Factory Class의 역할을 스프링의 환경설정 파일이 담당.

 

53. Spring의 AOP란?

AOP Aspect Oriented Programming 관점 지향 프로그래밍의 약자로, 기존의 OOP(객체 지향 프로그래밍)에서 기능별로 class를 분리했음에도 불구하, 여전히 로그, 트랜잭션, 자원해제, 성능테스트 메서드 처럼 공통적으로 반복되는 중복코드가 여전히 발생하는 단점을 해결하고자 나온 방식으로 이러한 공통 코드를 "횡단 관심사"라 표현하며 개발코드에서는 비지니스 로직에 집중하고 실행시에 비지니스 로직 앞, 뒤 등 원하는 지점에 해당 공통 관심사를 수행할 수 있게 함으로서 중복 코드를 줄일 수 있는 방식.

흩어진 Aspect들을 모아서 모듈화 하는 기법. 핵심 기능과 공통 기능을 분리 시켜놓고, 공통 기능을 필요로 하는 핵심 기능들에서 사용하는 방식.

 

54. MVC 패턴이란?

- Model : data 처리와 접근을 담당

- View : Client에 보여지는 화면을 담당

- Controller : Model View를 제어

각각 3가지 부분으로 데이터와 화면간의 의존관계를 벗어날 수 있게하는 개발 기법

 

55. 프로젝트 개발 순서?

요구사항 분석 -> 기획 및 스토리 보드 작성-> WBS(Work Breakdown Structure) 작성 -> 논리 ERD 작성 -> 물리 ERD 작성 -> 개발 -> 테스팅 -> 유지보수

 

56. 서블릿과 JSP란?

- Servlet : 자바 언어로 웹 개발을 위해 만들어진 것으로, Container가 이해할 수 있게 구성된 순수 자바코드로만 이루어진 것

- JSP : html 기반에 JAVA 코드를 블록화하여 삽입한 것으로 Servlet을 좀 더 쉽게 접근할 수 있도록 만들어 진 것

 

57. Database에서 index란?

Table에 대한 동작 속도를 높여주는 자료구조로서 빠른 검색을 가능하게 해주는것. 목차. 색인.

 

58. 변수 명명법이 중요한 이유는?

원활한 협업을 위해서 중요함. 가독성을 높일 수 있기 때문.

 

59. JQuery와 Ajax란?

JQuery: html의 클라이언트 사이드 조작을 단순화 하도록 설계된 크로스 플랫폼의 자바스크립트 라이브러리.

Ajax: JS의 라이브러리중 하나이며, 비동기식 자바스크립트와 xml의 약자(Asysmchronous Javascript And Xml). 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법

 

60. 비동기와 동기 방식의 차이점

동기: 동기에 일어난다. 요청과 그 결과가 동시에 일어남. 설계가 간단하며 직관적이지만 결과가 주어질 때까지 아무것도 못함. 일처리를 순차적으로 일을 스스로 끝내 나가는 방식으로 작업 당 페이지 이동이 있는 경우.

 

비동기: 동시에 일어나지 않는다. 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 다른 작업을 할 수 있어 자원을 효율적으로 사용 할 수 있음. 일처리는 해야 할 일을 위임하고 기다리는 방식으로 Ajax를 이용하여 구현 할 수 있는데 페이지 이동 없이 고정된 화면에서 어떠한 처리가 이뤄지는 것을 말함.

728x90

'IT면접 이야기' 카테고리의 다른 글

[코딩테스트 후기] NH농협은행 코딩테스트 후기  (6) 2021.12.01
기술면접 준비#2  (0) 2020.07.15
기술면접 준비#1  (0) 2020.07.14