주니어 자바 개발자를 위한 질문(Java Web)

박재언·2023년 10월 18일
0
post-thumbnail

jsp와 servlet의 차이점은 무엇인가요?

  • jsp와 servlet은 웹 페이지를 동적으로 생성하기 위한 서버 프로그램으로 같은 기능을 한다.
    하지만 servlet은 JAVA 코드 안에 HTML 코드를 사용하고 jsp는 HTML 코드 안에 JAVA 코드를 사용 하는 차이점이 있다.
    servlet은 DB와의 통신과 비즈니스 로직 호출, 데이터를 읽고 확인하는 작업에 유용하지만 코드가 수정된 경우 전체 코드를 업데이트하고 다시 컴파일한 후 재배포하는 작업이 필요하여 개발 생산성이 저하된다.
    jsp는 요청 결과를 나타내는 HTML로 작성하는데 유용하고 코드가 수정된 경우 WAS가 알아서 처리하여 재배포 할 필요가 없다.

📌 하지만 각각 따로 사용 됐을 때 servlet과 jsp는 비즈니스 로직과 뷰를 한 곳에서 처리하여 유지 보수에 어려움이 있다는 문제점이 존재했다.
이를 해결하기 위해 servlet과 jsp를 같이 사용하는 MVC 패턴이 등장하게 되었다.

jsp를 기본 제공하는 객체는 무엇이 있나요?

기본객체실제 타입설명
requestjavax.servlet.http.HttpServeltRequest클라이언트의 요청정보 저장
responsejavax.servlet.http.HttpServeltResponse응답정보 저장
pageContextjavax.servlet.jsp.PageContextJSP 페이지의 정보 저장
sessionjavax.servlet.http.HttpSessionHTT세션 정보 저장
applicationjavax.servlet.ServletContext웹 어플리케이션 정보 저장
outjavax.servlet.jsp.JspWriterJSP페이지가 생성하는 결과를 출력할 때 사용하는 출력 스트림
configjavax.servlet.ServletConfigJSP페이지에 대한 설정정보 저장
pagejava.lang.ObjectJSP페이지를 구현한 자바 클래스 인스턴스
exceptionjava.lang.THrowable예외 객체(에러페이지에서만 사용)

4개의 jsp scope에는 무엇이 있나요?

영역소유 객체설명
page scopepageContext 기본객체하나의 JSP 페이지를 처리할 때 사용되는 영역
Request scoperequest 기본객체하나의 HTTP 요청을 처리할 때 사용되는 영역
Session scopesession 기본객체하나의 웹 브라우저와 관련된 영역
Application scopeapplication 기본객체하나의 웹 어플리케이션과 관련된 영역
  • Page scope
    한번의 클라이언트 요청에 대해 하나의 JSP 페이지를 범위로 갖는다.
    웹 브라우저의 요청에 따라 JSP 페이지를 실행할 때, JSP 페이지를 실행하는 범위이다.

  • Request scope
    웹 브라우저의 요청이 발생할 때마다 새로운 Request 영역이 생성된다.
    Request 영역은 하나의 요청을 처리하는데 사용되는 모든 JSP 페이지를 포함된다.

  • Session scope
    session이 생성되면 하나의 웹 브라우저와 관련된 모든 요청은 하나의 session 영역에 포함된다.

  • Application 영역
    모든 JSP 페이지, 모든 요청, 브라우저의 세션은 모두 하나의 Application 영역에 속한다.

세션과 쿠키의 차이는 무엇인가요?

  • 쿠키
    서버에 인증하기 위한 클라이언트의 정보를 클라이언트 단에 저장
    별도의 인증 과정을 거치지 않고 서버가 나를 기억하도록 한다.
    쉽게 수정이 가능하여 악의적인 공격에 변조될 가능성이 크다.

  • 세션
    서버에 인증하기 위한 클라이언트의 정보를 서버 단에 저장
    쿠키 안에 세션 ID가 저장되고 ID 정보는 서버에 있기 때문에 쿠키에 비해서 안전하다.
    세션 ID를 주고 받은 다음 인증을 거쳐 서버의 데이터를 참조해야 하므로 속도가 비교적 느리다.
    세션은 서버의 자원을 사용하므로 속도 저하나 오버헤드 등 서버에 부하를 줄 수 있다.

사진 출처: https://velog.io/@damiano1027/CS-%EC%BF%A0%ED%82%A4Cookie%EC%99%80-%EC%84%B8%EC%85%98Session

세션 과정을 설명해주세요.

  • 클라이언트가 서버에게 페이지 정보를 요청한다.
    서버는 클라이언트에 대한 쿠키 생성 후, HTTP 응답 헤더에 세션 ID 값이 담긴 쿠키를 포함하여 응답하며 클라이언트의 요청과 서버의 응답이 끝나면 HTTP의 비연결성으로 인해 끊긴다.
    새로운 요청을 할 경우, 이전에 받은 쿠키값을 보관 하고 있다가 HTTP 요청 헤더에 세션 ID 값이 담긴 쿠키를 포함하여 요청하고 서버는 쿠키 내 세션 ID 값을 보고 이전에 요청을 보낸 클라이언트를 인식하여 상태를 기억하여 HTTP의 무결성을 보안한다.

사진 출처: https://velog.io/@damiano1027/CS-%EC%BF%A0%ED%82%A4Cookie%EC%99%80-%EC%84%B8%EC%85%98Session

쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까요?

  • 쿠키를 사용할 수 없으면 세션도 사용할 수 없다.
    세션과 쿠키는 서로 양립적인 기술이 아니라 상호 보안 기술이다.
    세션을 이용하여 인증을 처리할 때는 처음 로그인 시 서버에 세션을 생성한다.
    그리고 다른 요청을 처리할 때마다 쿠키에 세션 ID를 담아 서버로 요청하고 서버에서는 세션의 유무를 통해 인증을 처리하는 방식으로 작동한다.
    이와 같이 세션을 사용할 때는 쿠키 사용도 필수적으로 세션 대신 쿠키를 사용할 수 없다.

스프링 MVC와 struts의 차이는 무엇인가요?

  • Struts는 웹에만 특화된 프레임워크지만 스프링 MVC는 컨테이너를 통해 빈의 라이프 사이클을 관리하고 자바 기반의 어노테이션을 사용하여 빈 관리를 할 수있기 때문에 웹 뿐만아니라 JAVA에도 특화된 프레임워크라는 차이점이 있다.
    또한 스프링 MVC는 모델, 뷰, 컨트롤러로 계층화된 아키텍처가 존재하지만 Struts는 계층구조가 존재하지 않는다.
스프링struts
경량 프레임워크헤비급 프레임워크
느슨하게 결합된 프로그래밍 모듈긴밀하게 결합된 프로그래밍 모듈
ORM 기술과 통합하여 더 적은 코딩수동 코딩
계층화 된 아키텍처 존재계층화된 아키텍처 X
테스트가 쉽다테스트가 어렵다

SQL Injection을 피할 수 있는 방법을 설명해주세요.

  • SQL Injection은 크게 인증 우회, 데이터 노출, 원격명령 실행이 있다.
    SQL Injection은 피하는 방법은 서버에서 입력받은 값이 원하는 데이터인지를 체크하는 화이트 리스트 체크 방식을 이용하여 원치않는 입력값이 발생하는 것을 방지한다.
    SQL오류가 발생했을 때 에러메세지를 보이지 않게 하며 데이터를 가져 올때 실제 테이블을 가져오는 것이 아닌 View를 이용하여 전체 테이블을 갖고오지 않게 한다.
    프로시저를 사용하여 지정된 형식의 데이터가 아니면 Query를 실행되지 않도록 한다.
    사용자의 입력값을 해시함수로 해싱하여 암호화해서 데이터를 저장한다.

XSS 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.

  • XSS 공격은 권한이 없는 사용자가 악의적인 용도로 웹 사이트에 스크립트를 삽입하는 공격 기법을 의미하며 사용자로부터 입력받은 값을 제대로 검사하지 않고 사용할 경우 나타난다.
    이를 피하기 위해서 사용자의 입력값에 대해 항상 검증하고 데이터의 유효성 검사를 실시해야 한다.
    자세하게는 태그 문자 등 위험한 문자 입력을 동일한 의미의 문자로 치환하고 입력값을 자체를 제한하여 스크립트를 삽입하지 못하는게 하는 것, 스크립트 영역에 사용자 입력을 출력하는 것을 자제, 위치에 따라 정해진 유형의 값만 입력되도록 해야 한다.

CSRF 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.

  • CSRF 공격은 사이트가 갖는 신뢰를 악의적인 공격에 사용하여 사용자가 인증된 대상 사이트로 원하지 않는 HTTP 요청을 전송하는 것을 의미한다. 이를 통해 특정 웹 사이트의 보안을 취약하게 하고 데이터의 수정, 삭제 등의 작업을 하도록 만드는 공격 방법이다.
    CSRF의 방어 기법으로는 GET, POST으로 요청을 구분하기, Token을 사용하여 요청할 때마다 서버의 검증을 거치도록 하는 방법, CAPCHA와 같은 추가 인증 수단을 사용하는 방법이 있다.
    이 외에도 JWT와 Oauth2를 사용하여 세션 쿠키를 사용하지 않아 무상태성을 지키는 방법이 있다.

질문 출처: https://medium.com/@xjpp22/top-100-java-interview-questions-for-1-to-3-years-experienced-programmers-63ad74069cb6

0개의 댓글