👀 오늘부터 시작한 나와의 약속.. 키워드 정리는 멘토링 당일에 하기,, 멘토님께서 알아보면 좋을 것 같다고 하신 내용 말고도 공부할 게 많다. 그러니 미루지 말고 키워드 정리는 당일에 하자! 사실 요즘 일하고 공부하고,, 그동안의 피로가 쌓여서 2주동안 아무것도 안하고 누워있던 적이 꽤 많았다.. 조금 쳐지는 것 같다고 말한걸 캐치한 멘토님이 TIL(Today I Learned) 을 말씀해주셨고 주 3회씩 작성하기로 했다. 다시 동기부여도 되고 열심히 하려는 의지가 뿜뿜한다!
📝 Java 에서 StrongReference 와 WeakReference의 차이
자바의 참조 유형에는 약한 참조(Weak Reference), 강한 참조(Strong Reference), 소프트 참조(Soft Reference), 팬텀 참조(Phantom Reference)가 있다. 그 중 StrongReference와 WeakReference에 대해서 간단히 알아보자.
StrongReference란 일반적으로 new 키워드를 사용하여 객체를 생성하게 되면 생기게 되는 참조이다. 강한 참조를 통해 참조되고 있는 객체는 GC의 대상에서 제외된다.
WeakReference란 GC가 발생하면 무조건 수거되는 참조이다. GC의 실행주기와 수거 시점이 일치하며, 짧은 주기에 자주 사용되는 객체를 캐시할 때 유용하다. 또한, 명시적으로 weak reference를 사용함으로써 해당객체가 GC 되도록 유도가 가능하다.
📝 단축URL은 어떤 원리로 동작할까?
단축 URL 서비스는 짧은 URL을 통해 긴 URL로 이동할 수 있도록 해주는 서비스이다. 특정 URL을 요청하면 다른 URL로 응답하는 URL Redirection 기법을 사용한다.
https://bitly.com/ 해당 사이트에 들어가면 원래 URL을 입력하면 아래와 같이 짧게 줄여서 반환해준다. 그리고 짧게 줄인 URL을 클릭하면 원하는 페이지가 나오는 것을 볼 수 있을 것이다. 그렇다면 어떤 원리로 동작할까?
https://yeoonjae.tistory.com/entry/6주차멘토링-키워드-정리 --> https://bit.ly/3ojBVXI
우선 짧은 URL로 이동해보자. 아래의 캡쳐화면을 보면 GET Request로, Status Code 가 301(영구적 리다이렉트)이 찍히고 response의 location이 실제 URL 정보가 찍하는 것을 볼 수 있다. 또한 응답 결과는 nginx에서 오는 것을 알 수 있다.
즉, 사용자가 짧은 URL 링크를 클릭하면영구적 리다이렉트로 해당 URL에 접근하면 nginx에서 location에 등록된 실제 URL로 리다이렉트 시켜준다.
📝 PreparedStatement 의 보안적인 이점은 무엇이 있을까
SQL Injection이란? 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법
Statement 는 executeQuery() 또는 executeUpdate() 를 실행하는 시점에 파라미터로 SQL문을 전달하며 전달할 때마다 컴파일의 과정을 거친다. 때문에 성능상의 이슈가 있다. 또한, 전달되는 SQL문은 완전한 SQL문으로 보고 파악하기 쉽다. 그렇기 때문에 SQL Injection이 발생할 수 있다.
PreparedStatement는 준비된 Statement로 컴파일을 미리 실행해 캐시메모리에 저장하고 데이터가 바인딩될 때까지 기다리다 바인드된 데이터가 있으면 실행한다. 실행이 완료되고 동일한 sql문 실행을 할 때 다시 컴파일을 실행하는 것이 아니라 캐시 메모리에 있는 정보를 가져다가 바인딩를 실행한다. 떄문에 Statement보다 성능상 좋다. 또한 데이터를 바인딩해서 처리하기 때문에 SQL Injection 으로부터 대비할 수 있다.
📝 객체지향적 관점에서 MVC 패턴을 사용해야하는 이유
MVC패턴이란 Model-View-Controller 의 약자로 애플리케이션을 세가지 역할로 구분한 개발 방법론이다. Model은 비즈니스적인 로직을 수행하는 부분을, View는 사용자에게 보여주는 화면을, Controller는 데이터와 비즈니스 로직 사이의 상호작용을 관리하는 역할을 함으로써 서로 분리되어 각자의 역할에 집중할 수 있게끔한다. 이와 같이 개발을 진행하면 아래와 같은 장점을 가질 수 있다.
- 유지보수성
- 애플리케이션의 확장성
- 유연성 증가(클라이언트의 새로운 요구사항에 대해 최소한의 비용으로 보다 유연하게 대처)
- 중복코딩의 문제점 감소
📝 filter vs interceptor
필터(Filter)는 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹컨테이너에 의해 관리가 되므로 디스패처 서블릿으로 가기 전에 요청을 처리하는 것이다. 일반적으로 인코딩 변환 처리, XSS 방어를 개발할 때 사용한다.
인터셉터(interceptor)란 Spring이 제공하는 기술로써, 디스패처 서블릿(Dispatcher Servlet)이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 즉, 인터셉터는 스프링 컨텍스트에서 동작을 하는 것이다. 인터셉터는 로그인 체크, 권한체크, 프로그램 실행시간 계산작업 로그확인 등의 처리를 할 때 사용한다.
📝 서블릿이란?
클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다.
즉, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술이다. 클라이엍느가 어떠한 요청을 하면 그에 대한 결과를 응답해야 하는데 서블릿이 이러한 역할을 수행한다.
- 사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송합니다.
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
- web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.
- 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출합니다.
- doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.
📝 JSP란?
JSP란 자바코드가 들어가 있는 HTML코드이다. 서블릿은 자바 소스코드 속에 HTML코드가 들어가있는 형태인 반면, JSP는 HTML코드속에 자바 코드가 들어가는 구조를 갖는 웹 어플리케이션 프로그래밍 기술이다. HTML속 자바코드는 <% %> , <%= %> 형태로 들어가며 자바 소스코드는 웹 서버에서 실행된다. JSP페이지를 요청할 때에는 JSP를 직접 실행하는 것이 아니라 자바 소스 코드로 변환한 뒤 컴파일해서 생성한 서블릿을 실행하는 것이다. 다음과 같은 과정을 거친다.
'기타' 카테고리의 다른 글
면접 질문 정리 (1) (0) | 2021.10.13 |
---|---|
[8주차] 멘토링 키워드 (0) | 2021.10.06 |
[6주차] 멘토링 키워드 (0) | 2021.09.19 |
[5주차] 멘토링 키워드 정리 (0) | 2021.09.12 |
[Eclipse] Git 연동시 Can't connect to any URI 에러 (0) | 2021.08.16 |
댓글