JSP 기술면접 질문들 정리
실제 기술면접 기출
⭐JSP와 스프링 차이
사용자가 모두 같은 화면을 보는, 동적인 처리를 해주는 _> 동적 데이터를 처리하는 CGI! : 웹서버와 프로그램 사이의 규약 동적 웹페이지로 바뀜! CGI 사용자 증가!
- 리퀘스트가 들어올때마다 프로세스가 생성
프로세스는 메모리에 적ㅈ된 프로그램, 실행중인 프로그램 인스턴스(프로세스는 메모리를 통으로 가지는데 스레드는 한프로세스 내의 동작 흐름으로 공유되면서 사용)
- 개선점 : 프로세스에서 쓰레드로 바꿔야함 가같
- 같은 구현체라도 스레드가 다르다면 각각의 구현체로 만들어짐
- 개선점 : 여러 인스턴스에서 싱글톤으로 바꿔줘야
→ 그래서 나온게 서블릿! CGI를 보완하여 나온게 서블릿이다. 거기다가 웹어플케이션 서버가 나옴 동적데이터 처리 웹컨테이너: 요청이 들어오면 스레드를 생성하고, 서블릿을 실행시킨다. 서블릿 인터페이스에 따라 서블릿을 관리한다.서블릿이 web.xml에 ㅕ기 매핑된것을 보고, 서비스 즉 두포스트로 오면 리퀘스트이 파라미터를 받고 비즈니로직을 처리하고 data를 담은 뷰를 처리하고, 클라이언트에게 전송빈 핸들러 매핑 빈 이름과 url을 매핑하는 방식핸들러매핑에서 찾은 핸들러의 메서드를 호출해준다. 뷰이름으로 실제 뷰 찾아주
- 스프링 웹 MVX없을 때는 Url마다 서블릿을 생성, Web.xml로 서블릿 관리 스프링 웹 MVC는 서블릿이 디스패쳐서블릿 하
- 익숙한 방법 어노테이션 매핑!
- 모든 요청이 들어오면 Dispatcher Servlet으로 가라고 등록해줌 요청에 따라 적절한 컨트롤러를 찾는다! 찾는 방법은 스프링 프레임워크에서 제공해준다.
- 그래서 크게 init, service, destroy 서블릿은 인터페이스고 그걸 구현한게 HTTP 메서드! (겟 포스트 풋 딜레이트) Destroy → 서블릿 인스턴스가 사라진다.
- 하지만 단점이 있음
- 서블릿은 웹 애플리케이션을 만들 때 필요한 인터페이스 스프링 웹 MVC - 스프링 프레임워크에 있는 MVC 패턴을 사용해서 웹서비스를 만든다
⭐ GET과 POST 차이
GET 방식 데이터 전송
데이터를 URL에 포함하여 링크를 통해 값을 전달하는 방식
- URL의 길이가 제한되기 때문에 전송할 수 있는 데이터의 한계가 있다.
- 요청 URL에 파라미터를 붙여서 전송 →모든 데이터가 URL에 노출되기 때문에 보안에 취약하다.
- 한글, 공백은 URLEncoding 처리를 해줘야 전송할 수 있다.
- 자료 길이 제한도 있다.
POST 방식의 데이터 전송
- 전송할 수 있는 데이터에 한계가 없다. (20MB 정도로 설정 되어있어 GET방식 대비)
- 전송하는 내용이 URL에 노출되지 않기 때문에 GET방식에 비해서 보안에 유리하다.
- 한글, 공백에 URLEncoding 처리가 필요 없다.
- 자료 길이 제한도 없음
request.getMethod() 함수를 이용해서 찍어보면 (request 는 HttpServletRequest 클래스의 객체)GET 인지 , POST 인지 확인 할 수 있다.
SQL Injection 관련하여 알아본 결과, URL 인증우회로 GET 방식일 경우 취약 하므로 jsp 에서 POST 방식으로 submit() 해 주는 것이 좋다.
- GET 방식은 URL의 경로 뒤에 물음표('?')와 함께 파라미터를 붙여 전송하는데, 이를 쿼리 문자열(query string)이라고 한다.
각각의 파라미터는 앰퍼샌드(&) 기호로 구분하며, 파라미터의 이름과 값은 등호기호(=)로 구분한다. 만약 파라미터의 값이 한글일 경우에는 이상한 문자로 표시가 되는데, 이유는 파라미터 값을 RFC 2396 규약에 정의된 규칙에 다라 인코딩해서 전송하기 때문이다.
⭐ 쿠키와 세션의 차이점
- 세션 : 정보를 서버에 저장
- 서버가 종료되면 사라짐
- 브라우저별로 하나씩 생성
- 정확한 데이터를 사용
- 쿠키 : 정보를 클라이언트에 저장(사용자PC의 하드디스크에 저장)
- 서버가 종료되면 안 살아짐
- 쿠기 사용기간이후 사라짐
- 쿠기 삭제할 수 있음
- 사용자의 PC가 바이러스로 인해서 파일이 손상될 가능성이 큼
- 쿠키 : 사용자의 정보를 클라이언트에 .txt로 저장
- 세션 : 사용자의 정보를 서버에 객체로 저장
→서버는 세션을 사용해서 클라이언트 상태를 유지할 수 있기 때문에, 로그인한 사용자 정보를 유지
- 접속시간에 제한을 두어 일정시간 응답이 없으면 유지를 못하게 설정이 가능하다.
- 쿠키보다 보안적으로 유리하다.
- 웹 컨테이너에 정보를 보관한다
- 웹 브라우저마다 별도의 세션을 갖는다.(세션 고유ID 할당)
세션 관련 메소드
- setAttribute() : 세션의 속성을 설정한다. ex) session.setAttribute("id", "test");
- getAttribute() : 세션의 속성을 가져온다. ex) String id = (String)session.getAttribute("id");
- getAttributeNames() : 세션에 저장되어 있는 모든 데이터의 이름을 얻어온다.
- removeAttribute() : 세션에서 특정 데이터를 제거한다. ex) session.removeAttribute("id");
- invalidate() : 세션의 모든 데이터를 삭제한다. ex) session.invalidate();
- getId() : 자동으로 생성된 세션 아이디를 얻어온다.
- isNew() : 세션이 최초로 생성되었는지 여부를 확인할 수 있다. (true, false 리턴)
- getMaxInactiveInterval() : 세션의 유효시간을 얻어올 수 있다.
- getAttribute()의 리턴타입은 Object이다. 따라서 캐스팅을 해줘야한다.
⭐ 로그인하면 어떤 경로로 실행
뷰단에서 사용자가 데이터를 입력하면 서블릿에서 DAO의 값을 불러와서 일치하는지 여부를 판단합니다. 만약 데이터가 일치하다면 세션 객체 생성(JSP내장객체) -> 값을 저장 -> 저장된 값을 확인
⭐ Servlet과 JSP의 차이점에 대하여 말해주세요
- servlet은 java 소스에 HTML코드가 삽입된다
- JSP는 반대로 HTML코드에 java코드가 삽입된다.
- Servlet Class는 컴파일과정과 등록 과정이 필요하지만 JSP는 필요없다.
- 간단한 로직을 구현할 때는 JSP가 더 간편하다. 복잡한 로직을 구현할 때에는 HTML 중심의 코드가 이해하기 어렵게 만들 수 있고, 유지보수가 어렵다.. 그리고 힘들게 개발한 로직의 유출을 막기 위해서도 Servlet 기술이 필요하게 된다.
⭐ JSP구성 요소가 뭐에요
지시어, 주석문, 선언문, 수행문
- 지시어(Directive) -> <%@ %>
1)page : JSP 페이지에 대한 정보를 지정(문서의 타입 , 출력 버퍼 크기, 에러 페이지 등)
2)tablib : JSP 페이지에서 사용 할 태그 라이브러리 지정
3)include : JSP 페이지의 특정 영역에 다른 문서를 포함
- 주석문(Comment)
1)HTML <!-- --> , JAVA // , /* */ , JSP <%-- --%>
- 선언문(Declarations)
<%! %> : java 메서드를 만든다.
- 연산문(Expressions)
<%= %> : 값을 출력한다.
- 수행문(Scriptlets)
<% %> : 자바 코드를 실행한다.
- Action tage : <jsp: ~ />
- Custom Tag
- EL
- Implicit Object - 내장 객체
⭐ Session과 Cookie 사용 이유
현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
⭐ request와 response 객체에 대해 말해보세요
request, response는 개발자가 객체를 별도로 생성하지 않아도 JSP에서 바로 사용 할 수 있는 객체 라는 공통점을 가지고 있다.
request : 클라이언트에서 넘어오는 데이터를 전달 받기 위한 객체
- request의 기능
- 클라이언트 와 관련된 정보읽기(클라이언트:웹브라우저)
- 서버와 관련된 정보읽기
- 클라이언트가 전송한 요청 파라미터 읽기기능
- 클라이언트가 전송한 요청헤더 읽기기능
- 클라이언트가 전송한 쿠키 읽기기능
- 속성처리 기능
response : 서버에서 클라이언트로 데이터를 전달하기 위한 객체
⭐ 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?
Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감
⭐ MVC란?
디자인패턴 중 하나로 Model View Controller의 약자이다.
- Model : View에 출력할 데이터를 담아두는 역할
- View : Model에 담겨있는 데이터를 통해 화면에 렌더링 하는 역할
- Controller : HTTP 요청 파라미터를 검증 / 비즈니스 로직 수행 / 결과 데이터를 Model에 담음
- Controller에 비즈니스 로직을 둘 수 있지만, 그렇게 되면 너무 많은 일을 담당
- 그래서 일반적으로 비즈니스 로직을 수행하는 Service(서비스) 계층을 별도로 만듬
- Servlet을 Controller로 사용
- JSP를 View로 사용
- HttpServletRequest를 Model로 사용