본문 바로가기

50초짜리 IT 기술 면접 답변

프로그래밍 대답준비-심화편

안녕하세요. 진또배기입니다. 오늘은 저번에 이어서 50초의 프로그래밍 대답준비 심화편입니다.
기본편은 못보고 오신 분들을 위해 링크를 올려둘테니 이번 개념이 너무 어렵다하신분들은 기본편을 방문해주세요.

 

0. 프로그래밍 대답준비-기본편

410leehs.tistory.com/7?category=855622

 

Java 개발자 면접 준비-기본편

안녕하세요. IT린이입니다. 오늘은 Java 개발자 면접 준비 기본 답변에 대해 준비하는 시간을 가지겠습니다. 질문 한 가지가 나오면 그와 관계되어 있는 꼬리질문까지 준비해 여러분의 시각을 넓

410leehs.tistory.com

1. jdbc가 무엇인가요?

자바에서 데이터베이스를 접속할 수 있도록 해주는 자바 API입니다. JDBC는데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법들을 제공합니다.

2. serialVersionUID를 선언해야 하는 이유는 뭔가요?

JVM은 직렬화나 역직렬화를 하는 시점의 클래스에 대해 version 번호를 부여 합니다. 그런데 만약 이 시점에서 클래스의 정의가 바뀌게 되면, version 번호 도 새롭게 할당해주는데요. 직렬화와 역직렬화의 version 번호가 서로 다르면 안되기 때문에 serialVersionUID를 선언해서 문제를 해결할 수 있습니다. , 클래스 버전이 맞는지 확인하기 위한 용도로 사용된다고 말씀드릴 수 있습니다.

3. 리플렉션이란 무엇인가요?

리플렉션은 컴파일러를 무시한 채 런타임 상황에서 메모리에 올라간 클래스나 메서드 등의 정의를 동적으로 찾아 조작할 수 있는 행위를 말합니다. , 동적인 언어가 가진 특징이라고 볼 수 있고 프레임워크에서 유연성이 있는 동작을 위해 자주 사용됩니다.

4. pojo 가 무엇인가요? Plain Old Java Object

오래된 방식의 자바 오브젝트의 줄임말인데요. 특정한 자바 모델이나 기능, 프레임워크 등을 따르지 않는 자바 오브젝트를 뜻합니다. Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어입니다

5. JVM이 하는 역할이 무엇인가요?

JVM은 자바를 실행하기 위한 가상 기계입니다. 자바의 바이트 코드를 운영체 제에 맞게 해석해주는 역할을 하는데요. 자바 컴파일러가 .java 파일을 컴파일 하면, .class라는 자바 바이트 코드로 변 환시켜줍니다. 이때 바이트 코드가 기계어가 아니기 때문에 운영체제에서 바로 실행이 되지 않습니다. 이때 운영체제가 이해할 수 있도록 해석해주는 것이 JVM입니다.

6. 스프링과 MVC패턴에 대해 설명하세요

스프링은 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크입니다. 자 바 SE로 된 자바 객체 POJO를 자바 EE에 의존적이지 않게 연결해주는 역할을 합니다. 스프링의 특징으로는 크기와 부하 측면에서 경량 시킨 것과, IOC 기술 로 애플리케이션의 느슨한 결합을 도모시킨 것이 있습니다. MVC 패턴은 코드의 재사용에 유용하며, 사용자 인터페이스와 응용 프로그램 개발에 소요되는 시간을 줄여주는 효과적인 설계 방식을 말합니다. 구성요소로는 Model, View, Controller가 있는데요. 모델은 핵심적인 비즈니 스 로직을 담당하여 데이터베이스를 관리하는 부분이고, 뷰는 사용자에게 보 여주는 화면, 컨트롤러는 모델과 뷰 사이에서 정보 교환을 할 수 있도록 연결시켜주는 역할을 합니다.

7. 스프링에서 AOP가 뭔가요?

AOP 는 관점 지향 프로그래밍의 약자인데요. 기존의 OOP에서 기능별로 클래 스를 분리했음에도 불구하고, 여전히 로그나 트랜잭션, 자원해제, 성능테스트 메서드처럼 공통적으로 반복되는 중복코드가 발생하는 단점이 생깁니다. 이 를 해결할 수 있도록 개발 코드에서는 비즈니스 로직에 집중하고, 실행 시 비 즈니스 로직의 앞과 뒤에서 원하는 지점에 해당 공통 관심사를 수행할 수 있게 하면서 중복 코드를 줄일 수 있는 방식이 바로 AOP 방식입니다.

8. 스프링 DI에 대해 아는대로 말씀해주세요

DI는 의존성 주입의 약자로, 객체들 간의 의존성을 줄이기 위해 사용되는 스프 링의 IOC 컨테이너의 구체적 구현 방식을 말합니다. DI는 개발코드 부분에서 객체를 생성하는 것이 아니라, 데이터 주입만 담당하 는 별도의 공간에서 객체를 생성하고, 데이터간의 의존성을 주입해 개발코드 에서 가져다 쓰면서 의존성을 줄이는 방식입니다. 디자인 패턴 중 팩토리 패턴 을 활용하는 것과 같다고 말씀드릴 수 있겠습니다.

9. MVC1이랑 MVC2의 패턴 차이에 대해 설명해주세요

모델1JSP페이지 안에서 로직 처리를 위해 자바 코드가 함께 사용됩니다. 요 청이 오면, 직접 자바빈이나 클래스를 이용해 작업을 처리하고, 이를 클라이언 트에 출력해줍니다. 구조가 단순한 장점이 있지만, JSP 내에서 html 코드와 자 바 코드가 같이 사용되면서 복잡해지고 유지보수가 어려운 단점이 있습니다. 모델2는 이와는 다르게 모든 처리를 JSP에서만 담당하는 것이 아니라 서블릿 을 만들어 역할 분담을 하는 패턴입니다. 요청 결과를 출력해주는 뷰만 JSP 가 담당하고, 흐름을 제어해주고 비즈니스 로직에 해당하는 컨트롤러의 역할을 서블릿이 담당하게 됩니다. 이처럼 역할을 분담하면서 유지보수가 용이해지는 장점이 있지만 습득하기 힘들고 구조가 복잡해지는 단점도 있습니다.

10. 스프링 필터랑 인터셉터의 차이점이 무엇일까요?

필터와 인터셉터는 실행되는 시점에서 차이가 있습니다. 필터는 웹 애플리케 이션에 등록을 하고, 인터셉터는 스프링의 context에 등록을 합니다. 따라서 컨트롤러에 들어가기 전 작업을 처리하기 위해 사용하는 공통점이 있지만, 호출되는 시점에서 차이가 존재합니다. 25. IOC가 무엇인가요? IOC, 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너가 대신 관리해 주는 것을 말합니다. 인스턴스 생성의 제어를 서블릿과 같은 bean을 관리해주는 컨테이너가 관리합니다.

11. 스프링이랑 스프링 부트랑 차이점이 뭔가요?

스프링 부트는 스프링에서 사용하는 프로젝트를 간편하게 셋업할 수 있는 서브 프로젝트입니다. 독립 컨테이너에서 동작할 수 있기 때문에 임베디드 톰켓 이 자동으로 실행되구요. 임베디드 컨테이너에서 애플리케이션을 실행시키기 에는 다소 불안전해서 큰 프로젝트는 사용하지 않는 것이 좋습니다.

12. 스프링 MVC 구조 흐름에 대해서 과정대로 설명해보세요

우선, 디스패처 서블릿이 클라이언트로부터 요청을 받으면, 이를 요청할 핸들 러 이름을 알기 위해 핸들러맵핑에게 물어봅니다. 핸들러맵핑은 요청 url을 보고 핸들러 이름을 디스패처 서블릿에게 알려줍니 다. 이때 핸들러를 실행하기 전후에 처리할 것들을 인터셉터로 만들어 줍니 다. 디스패처 서블릿은 해당 핸들러에게 제어권을 넘겨주고, 이 핸들러는 응답에 필요한 서비스를 호출하고 렌더링해야 하는 뷰 이름을 판단하여 디스패처 서 블릿에게 전송해줍니다. 디스패처 서블릿은 받은 뷰 이름을 뷰 리졸버에게 전달해 응답에 필요한 뷰를 만들라고 명령합니다. 이때 해당하는 뷰는 디스패처 서블릿에게 받은 모델과 컨트롤러를 활용해 원 하는 응답을 생성해서 다시 보내줍니다. 디스패처 서블릿은 뷰로부터 받은 것을 클라이언트에게 응답해줍니다.

13. DAODTO를 설명해주세요

DAO는 데이터베이스의 데이터에 접근하기 위한 객체입니다. 데이터베이스에 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용되구요. 데이 터베이스를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체를 말합니다. DTO는 계층간 데이터 교환을 위한 자바 beans를 말합니다. 여기서 말하는 계층은 컨트롤러, , business layer, persistent layer를 말합니다. VO도 같은 기능을 하지만 read only 속성을 가진 차이가 있습니다.

14. Java 라이브러리란 무엇이고, 정적 라이브러리와 공유 라이브러리의 차이점에 대해 설명하시오.

Java에서는 미리 자주사용되고 유용한 기능을 하는 class들을 만들어 놓고 제공을 합니다. 이때 이 클래스들을 관련된 기능별로 분류하여 패키지단위로 묶어서 관리하는데 이 패키지 파일을 라이브러리라고 합니다. Java API는 이러한 클래스들의 코드를 문서로 제공하는 것입니다.

 

+추가답변)

1) 정적 링크 라이브러리(Static Link Library).lib으로 표현하며 컴파일 시에 함수가 실행파일에 연결됩니다. 실행 파일에 함수의 코드가 복사되기 때문에 실행파일의 크기가 커지는 단점이 있지만 실행 파일은 완전한 단독 실행 파일이 됩니다. 실행파일에 함수의 코드가 포함되어 있기 때문에 컴파일이 끝나면 lib 파일이 없어도 프로그램을 실행 할 수있습니다.

 

2) 동적 링크 라이브러리(Dynamic Link Library).dll로 표현하며 정적라이브러리처럼 컴파일 시에 함수가 연결되는 방식이 아닌 런타임시에 함수가 실행파일에 연결됩니다. 실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행 파일의 크기가 작아집니다. 하지만 실행 파일은 함수에 대한 정보만 가지고 있을 뿐 실제 코드를 가지고 있지 않기 때문에 프로그램 실행시에는 dll 파일이 항상 존재해야 합니다.

15. AJAX란 무엇이며 왜 사용하는지 설명하시오.

AjaxJavaScript의 라이브러리중 하나이며 Asynchronous Javascript And Xml(비동기식 자바스크립트와 xml)의 약자입니다. 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법 이며 Ajax를 한마디로 정의하자면 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이라고 할 수 있겠습니다.

+추가답변)

화면의 내용을 갱신하기 위해서는 request response를 하면서 페이지 전체를 갱신하게 됩니다. 하지만 이렇게 할 경우 페이지의 일부분만 갱신할 경우에도 페이지 전체를 다시 로드해야하는데 엄청난 자원낭비와 시간낭비를 초래하고 말것입니다. 하지만 ajaxhtml 페이지 전체가아닌 일부분만 갱신할수 있도록 합니다. 이 경우 Json이나 xml형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있습니다.

16. MVC 모델 1MVC 모델 2의 차이점에 대해 설명하시오.

1) MVC 모델 1은 웹 브라우저의 요청을 JSP 페이지가 받아서 처리 하는 구조입니다.

JSP 페이지 안에서 모든 정보를 표현(view)하고 저장(model)하고 처리(control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어집니다. 주로 중소형 프로젝트에 적합한 모델입니다.

2) MVC 모델 2는 모델 1과 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 됩니다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 뒤, 그 결과를 JSP로 포워딩 합니다. 처리 작업의 모듈화로 유지보수가 쉬워지는 반면 개발 시간이 늘어난다는 단점을 가지고 있습니다.

17. GET방식과 POST 방식의 차이점을 설명해주세요.

GET방식과 POST방식의 차이점을 정리하자면, Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용하고, 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙습니다. Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용하고, 전달되는 데이터가 보이지 않습니다. 웹 서버에 많은 데이터를 전달하기 위해서는 Post방식을 사용하는 것이 바람직합니다.

 

1) GETPOSTHTTP프로토콜을 이용해서 서버에 무언가를 전달할 때 사용하는 방식입니다.

GET방식은 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 keyvalue가 결합된 쿼리 스트링 형태로 전달됩니다. 주소창에 쿼리스트링이 그대로 보여지기 때문에 보안성이 떨어집니다. 길이에 제한이 있으므로 전송 데이터의 한계가 있습니다. POST 방식보다 상대적으로 전송 속도가 빠릅니다.

 

2) POST방식은 일정 크기 이상의 데이터를 보내야할 때 사용합니다. 서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 합니다. 주소창에 전송하는 데이터의 정보가 노출되지 않아 GET방식에 비해 보안성이 높습니다. 전송 속도가 GET방식에 비해 느리며 쿼리스트링 데이터 뿐만 아니라 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송이 가능합니다.

 

18. Restful API가 무엇인지 아시나요?

Restful하게 API를 디자인한다는 것은 URI를 규칙에 맞게 잘 설계했는지의 여부입니다. 규칙의 항목으로는 아래와 같습니다.

1. 동일한 URI(End point)의 행위에 맞게 POST, GET, DELETE, PATCH등의 메소드를 사용합니다.

2. 명사를 사용합니다. 리스트를 표현할 때는 복수형을 사용합니다.

3. URI Path에 불필요한 파라미터를 넣지 않습니다. , 단계를 심플하게 설계합니다.

 

19. SessionCookie에 대해 설명하시오.

서버와 클라이언트가 통신을 할 때 통신이 연속적으로 이어지지 않고 끊어진다면 서버는 클라이언트가 누구인지 계속 인증을 해줘야 합니다. 하지만 그것은 매우 귀찮고 번거로운 일임과 동시에 웹페이지의 로딩을 느리게 만드는 요인이 되기도 합니다. 그런 번거로움을 해결하는 방법이 바로 쿠키와 세션입니다.

+추가답변)

1) 쿠키는 HTTP의 일종으로 사용자가 어떤 웹 사이트를 방문할 때 생성되는 정보를 담은 임시 파일입니다. , 쿠키는 서버가 사용자의 웹 브라우저에 저장하는 데이터를 말합니다. 쿠키의 데이터 형태는 KeyValue로 구성되고 String 형태로 이루어져 있습니다. 브라우저마다 저장되는 쿠키는 다르며 서버에서는 브라우저가 다르면 다른 사용자로 인식합니다.

2) 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구사항을 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술입니다. 세션 아이디는 웹 브라우저 당 1개 씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸됩니다. 로그인한 사용자에 대해서만 세션을 생성하는 것이 아니라 로그아웃 시 새로운 사용자로 인식하여 새로운 세션이 생성됩니다.