👶주니어 자바 개발자를 위한 100가지 질문 - java Web, 예외클래스
- -
평소에 조금씩 자바 공부를 하고 있는데 기초적인 부분에 대해 너무 많이 모른다는 생각을 자주 했다. 그러던 와중 커리어리에 올라와 있는 조서희님의 주니어 자바 개발자를 위한 100가지 질문이라는 글을 보았다. 글을 보니 아직 모르는 내용도 많고 중요한 내용도 많은 것 같아 따로 정리하려고 한다.
처음 보시는 분들은 질문에 대해 먼저 고민해보고 토글을 열어 보는 것을 추천한다. 또한 답변의 정확하지 않을 수 있으므로 피드백은 환영!
🕸️Java Web
📌 jsp와 servlet의 차이점은 무엇인가요?
JavaServerPage
JSP는 HTML 내부에 자바 코드를 잡입하는 형식으로 서블릿을 활용하여 웹 프로그래밍을 할 수 있지만, 화면 인터페이스 구현에 너무 많은 코드가 필요하므로 서블릿을 작성하지 않고도 간편하게 프로그래밍을 구현하게 만든 기술이 JSP이다.
Servlet
서블릿은 서버에서 웹 페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다. servlet은 Java코드 안에 HTML태그가 삽입되며 자바언어로 되어있다.
📌 jsp에서 기본 제공하는 객체는 무엇이 있나요?
객체명 | Type | 설명 |
request | javax.servlet.http.HttpServletRequest | 사용자로부터 입력 받은 정보를 담고 있는 객체 |
response | javax.servlet.http.HttpServletResponse | 사용자에게 보낼 응답 정보를 담고 있는 객체 |
pageContent | javax.servlet.jsp.PageContext | 현재 페이지 객체로, forward나 include 기능을 활용할 때 사용됨 |
session | javax.servlet.http.HttpSession | 클라이언트에 대한 세션 정보를 담고 있음*session = false 되어있으면 생성X |
application | javax.servlet.ServletContext | 웹 서버 어플리케이션 객체 |
out | javax.servlet.jsp.JspWriter | 사용자에게 전달하는 output 스트림 객체 |
page | java.lang.Object | 현재 JSP페이지에 대한 정보를 담은 객체*isError = true면 사용 가능 |
exception | java.langException | 오류 정보를 담고 있는 객체 |
📌 4개의 jsp scope에는 무엇이 있나요?
Scope 종류 | 유지 범위 | 활용 방법 | JSP 내장 객체 | servlet 객체 |
Page Scope | 요청된 page 내부에서사용 | 지역 변수 처럼 활용 JSP에서 사용 | pageContext | |
Request Scope | 요청 부터 응답까지 | Forward를 통해 데이터를 넘길때 | request | HttpServletRequest |
Session Scope | Web Brower 종료 또는 설정 한 시간 동안 | 사용자 별로 정보를 저장할때 (Ex:장바구니) | session | HttpServletRequest의 getSession()메소드를 이용하여 session 객체를 얻는다 HttpSession session = request.getSession(false); |
Application Scope | Web Application이 종료 될때 까지 | 사용자에게 공통적으로 무엇가는 보여 주고자 할때 | application | getServletContext(); 로 얻는다 ServletContext application = getServletContext(); |
- Page : 페이지 내에서 지역변수처럼 사용
- Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
- Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
- Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용 (모든 클라이언트에게공통적으로 무언가를 보여 줄때 사용)
📌 세션과 쿠키의 차이는 무엇인가요?
세션과 쿠키 모두 서버 측에서 클라이언트를 기억하기 위해서 사용되기도 하며, 세션은 쿠키를 기반으로 사용하지만 서버에서 쿠키를 저장하여 주로 사용자 인증에 사용된다. 쿠키는 브라우저에 저장하며, JWT와 같은 형식으로 사용자를 인증하는데 사용되고, 또한 장바구니 기능과 같은 브라우저에서 어떤 이벤트을 저장하여 활용하기 위해서도 많이 활용된다.
인증과정에서 쿠키를 활용한 인증은 클라이언트 정보가 쿠키(브라우저)에 담긴다는 점과 세션을 활용한 인증은 클라이언트 정보가 서버에 담긴다는 점이 큰 차이를 가진다.
📌 세션 과정을 설명해주세요.
클라이언트에서 서버에 접속을 할 때, 서버는 해당 클라이언트에 대한 세션id를 부여한다.
서버는 해당 세션을 저장하고, 클라이언트가 서버에 요청할 때마다 쿠키에 저장된 세션을 비교하여 해당 클라이언트 정보를 가져와 처리한다.
이후 해당 클라이언트에게 처리된 결과를 반환한다.
📌 쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까요?
기본적으로 세션은 쿠키에 저장되지만, 꼭 쿠키에 저장하라는 법은 없다. 세션아이디는 브라우저의 안전한 곳에 저장하여 사용하면 되므로 쿠키외에도 세션스토리지 또는 로컬스토리지 같은 곳에 보관하여 사용할 수 있다.
📌 스프링 MVC와 struts의 차이는 무엇인가요?
Spring VS Struts
Spring | Struts |
- 가벼운 프레임워크입니다.- 웹 뿐만 아니라 자바 어플리케이션에도 특화된 프레임워크 | - 헤비급 프레임워크입니다.- 웹에 특화된 프레임워크 |
- 태그 라이브러리를 지원하지 않습니다. | - 태그 라이브러리 지시문을 지원합니다. |
- 느슨하게 결합된 모듈이 있습니다. | - 밀접하게 연결된 프로그래밍 모듈을 가지고 있습니다. |
- 메인 로직 전후에 더 적은 코딩이 필요한 ORM 기술과 통합됩니다. | - 수동 코딩을 지원합니다. |
- 모델링, 보기 및 컨트롤러를 위한 3개의 계층을 포함하는 계층화된 MVC 아키텍처가 있습니다. | - 계층 구조가 없습니다. |
전반적 흐름- 스트럿츠가 xml 설정에 따라서 움직인다면 스프링은 xml뿐만 아니라 자바 기반 어노테이션을 활용하여 자바 빈을 등록할 수 있음. | 전반적 흐름웹 브라우저 사용자의 요청 > 서블릿에서 해당 요청 받음 > xml 설정에 따라 알맞은 액션으로 연결. |
테스트 하기 쉽다 | 테스트 하기 어렵다 |
📌 SQL Injection을 피할 수 있는 방법을 설명해주세요.
SQL Injection은 로그인 입력 창이나 검색 창에 sql문법을 주입하여 데이터베이스에 접근 할 때 해당 쿼리문이 실행되며, 데이터베이스를 삭제하거나 개인정보를 빼돌릴 수 있는 해킹 방식이다.
보통은 필터링을 통해 해당 공격을 피한다. sql문법이나 특정 문자가 들어올 때 이스케이프 문자를 통해 처리하거나 없애 처리한다.
📌 XSS 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.
게시판이나 입력창에 스크립트를 주입하여 개발자가 고려하지 않은 기능이 작동하게 하는 공격이다.
위의 방식 또한 입력창을 통해 스크립트를 주입하는 방식이므로, 필터링을 통해 방지가 가능하다.
📌 CSRF 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.
CSRF는 인증된 사용자가 웹 어플리케이션에 특정 요청을 보내도록 유도하는 공격행위이다. 사용자가 인증된 세션에서 웹 어플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못한다는 점을 악용하는 공격방식이다.
이를 방지하기 위해 CSRF토큰이라는 개념이 존재하는데, 이는 서버에서 응답할 때, 랜덤으로 생성된 Token을 같이 준뒤 사용자 세션에 저장해둔다. 그리고 사용자가 서버에 작업을 요청할 때 페이지에 Hidden으로 숨어있는 Token 값이 같이 서버로 전송되는데, 서버에서는 이 Token값이 세션에 저장된 값과 일치하는지 확인하여 해당 요청이 위조된게 아니라는 것을 확인한다. 일치여부를 확인한 Token은 바로 폐기하고 새로운 뷰페이지를 발행할 때마다 새로 생성한다.
😨예외 클래스
📌 throw와 throws의 차이는 무엇인가요?
throw는 개발자가 의도적으로 예외를 던져야 할 상황에 발생시키는 것이다. throw라는 키워드를 사용하며, 컴파일에는 문제가 없지만 해당 비즈니스로직이 개발자가 의도한 대로 통과하지 못했을 경우 고의로 예외를 발생시켜야 할 때 사용된다.
throws는 메서드 내에서 예외처리를 하지 않고 해당 메서드를 사용한 곳에서 예외 처리를 하도록 예외를 위로 던지는 것이다. 사용하는 이유는 예외가 발생할 수 있는 코드가 있다는 것을 인지시키고 예외 처리를 강요하며, 여러가지 발생 가능한 예외들을 호출한 메서드에서 한 번에 처리할 수 있게 하여 관리를 용이하게 해 줄 수 있다.
📌 final, finally, finalize의 차이는 무엇인가요?
final: 변수에 적용하면 해당 변수의 값은 변경이 불가능. 변수의 참조의 경우는 다른 객체를 가리키지 못함
finally: try catch문이 끝나기 전에 항상 꼭 실행되어야 하는 로직이 있을 경우 finally절에 두면 된다. try catch문과 함께 사용되며 예외가 던져지도라도 항상 실행될 코드를 지정하기 위해 사용된다. finally블록은 try와 catch블록이 전부 실행된 후, 제어흐름이 원래 지점으로 돌아가기 전에 실행된다.
finalize: 자바 garbage collector가 더 이상의 참조가 존재하지 않는 객체를 발견한 순간 호출하는 메서드이다. 즉 더 이상 사용되지 않는 객체가 있을 때 메모리 낭비를 막기 위해서 garbage collector가 이 객체를 없애버리는데 이 때, 해당 객체의 finallize 메서드를 호출해서 없앤다.
📌 try-catch-finally에서 생략할 수 있는 부분이 무엇인가요?
catch 나 finally 둘 중에 하나는 생략이 가능하며, 둘 다 생략은 불가능하다.
📌 catch가 반환되면 finally가 실행되나요?
catch의 return문까지 모두 실행된후, finally블럭이 실행 된다음에야 return이 이루어진다.
📌 exception 클래스의 예시를 말해주세요.
RuntimeException, IOException, NullpointerException, ArrayIndexOutOfBoundsException
'Java' 카테고리의 다른 글
👶주니어 자바 개발자를 위한 100가지 질문 - Internet, Spring (0) | 2023.09.25 |
---|---|
👶주니어 자바 개발자를 위한 100가지 질문 - Reflection, Object Copy (0) | 2023.09.04 |
👶주니어 자바 개발자를 위한 100가지 질문-Container, Multi-Threading (1) | 2023.08.30 |
👶주니어 자바 개발자를 위한 100가지 질문-기초 (0) | 2023.07.17 |
자바 코드 컨벤션 (2) (0) | 2023.06.30 |
소중한 공감 감사합니다