Java/Spring
-
개발환경 : Spring Boot, Thymeleaf, javascript, html ajax 를 이용해 csv 파일 다운로드를 구현하는 과정에서 데이터가 많아질수록 느려지고 실패하는 경우도 있었다. 이러한 이유는 csv 데이터는 String 형태로 "," 콤마로 구분해 데이터를 만들어 넘기는데 반복문이 많아질수록 서버가 죽을 위험이 있다. 그래서 더 좋은 방법을 구현하는 과정에서 Html 파일을 사용하여 다운받는 방법을 사용했다. Html 위와 같이 Controller 에서 받아 처리할 데이터를 Form 태그를 통해 Submit 을 한다. 넘길 파라미터가 존재하지 않을 경우 Form 태그만 사용하여 action 으로 던져도 가능하다. Javascript ... $("#downloadForm").subm..
html 을 이용한 대용량 파일 다운로드개발환경 : Spring Boot, Thymeleaf, javascript, html ajax 를 이용해 csv 파일 다운로드를 구현하는 과정에서 데이터가 많아질수록 느려지고 실패하는 경우도 있었다. 이러한 이유는 csv 데이터는 String 형태로 "," 콤마로 구분해 데이터를 만들어 넘기는데 반복문이 많아질수록 서버가 죽을 위험이 있다. 그래서 더 좋은 방법을 구현하는 과정에서 Html 파일을 사용하여 다운받는 방법을 사용했다. Html 위와 같이 Controller 에서 받아 처리할 데이터를 Form 태그를 통해 Submit 을 한다. 넘길 파라미터가 존재하지 않을 경우 Form 태그만 사용하여 action 으로 던져도 가능하다. Javascript ... $("#downloadForm").subm..
2023.07.03 -
제네릭(Generic)이란? List list1 = new ArrayList(); Map map = new HashMap(); 위의 List 과 같이 "" 꺽쇠 안의 클래스 타입이 명시되어 있는 것을 확인할 수 있다. 이러한 "" 꺽쇠 안에 데이터 타입을 컴파일 시에 미리 지정하는것을 제네릭이라고 한다. 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하여 타입검사를 할 수 있다. 클래스나 메서드 내부에서 사용되는 객체 타입의 유연성과 안정성을 확보한다. 런타임 시 발생할 수 있는 타입 에러를 컴파일 전에 검출하여 안정성을 확보한다. 아래 예시를 확인해보자 List list = new ArrayList(); list.add("obo"); // type error Integer..
Java Generic(제네릭)제네릭(Generic)이란? List list1 = new ArrayList(); Map map = new HashMap(); 위의 List 과 같이 "" 꺽쇠 안의 클래스 타입이 명시되어 있는 것을 확인할 수 있다. 이러한 "" 꺽쇠 안에 데이터 타입을 컴파일 시에 미리 지정하는것을 제네릭이라고 한다. 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하여 타입검사를 할 수 있다. 클래스나 메서드 내부에서 사용되는 객체 타입의 유연성과 안정성을 확보한다. 런타임 시 발생할 수 있는 타입 에러를 컴파일 전에 검출하여 안정성을 확보한다. 아래 예시를 확인해보자 List list = new ArrayList(); list.add("obo"); // type error Integer..
2023.06.26 -
DispatcherServlet DispatcherServlet 의 Dispatcher 는 "보내다" 라는 뜻을 가지고 있다. 이러한 뜻에 따라 DispatcherServlet 은 HTTP 프로토콜로 들어오는 모든 요청을 맨 앞쪽에서 받아 요청에 맞는 적절한 Controller 를 찾아 전달하는 Front Controller 라고 정의할 수 있다. 여기서 Front Controller 는 서블릿 컨테이너의 제일 앞쪽에서 모든 요청을 받아 처리하는 Controller 로써 MVC 구조에서 사용되는 디자인 패턴입니다. 위 이미지를 보면서 자세하게 설명을 하게 되면 클라이언트로부터 요청이 들어오게 되면 Tomcat 과 같은 서블릿 컨테이너가 요청을 받게 됩니다. 서블릿 컨테이너에서 Filter 를 통해 인증 ..
DispatcherServlet(디스패처 서블릿, Front Controller)DispatcherServlet DispatcherServlet 의 Dispatcher 는 "보내다" 라는 뜻을 가지고 있다. 이러한 뜻에 따라 DispatcherServlet 은 HTTP 프로토콜로 들어오는 모든 요청을 맨 앞쪽에서 받아 요청에 맞는 적절한 Controller 를 찾아 전달하는 Front Controller 라고 정의할 수 있다. 여기서 Front Controller 는 서블릿 컨테이너의 제일 앞쪽에서 모든 요청을 받아 처리하는 Controller 로써 MVC 구조에서 사용되는 디자인 패턴입니다. 위 이미지를 보면서 자세하게 설명을 하게 되면 클라이언트로부터 요청이 들어오게 되면 Tomcat 과 같은 서블릿 컨테이너가 요청을 받게 됩니다. 서블릿 컨테이너에서 Filter 를 통해 인증 ..
2023.06.13 -
HttpMessageConverter 란? 클라이언트(웹브라우저) 측에서 데이터를 HTTP Request Body 로 넘길때 서버측에서 DTO 같은 객체에 변환하기 위해 사용한다. 또한 반대로 서버측에서 HTTP Response Body 로 응답 데이터를 클라이언트로 전달할 때 사용한다. 보통 서버측에서 받을때 주로 사용하는 건 @RequestBody 어노테이션과 클라이언트로 응답 데이터를 넘길때 @ResponstBody 를 사용한다. Spring MVC 요청/응답 과정 1. 클라이언트로부터 HTTP 요청이 들어오면 Front Controller 라고 불리우는 Dispatcher Servlet 이 받는다. * 클라이언트의 요청은 Front Controller 라고 하는 Dispatcher Servlet ..
HttpMessageConverter, DispatcherServlet 동작원리HttpMessageConverter 란? 클라이언트(웹브라우저) 측에서 데이터를 HTTP Request Body 로 넘길때 서버측에서 DTO 같은 객체에 변환하기 위해 사용한다. 또한 반대로 서버측에서 HTTP Response Body 로 응답 데이터를 클라이언트로 전달할 때 사용한다. 보통 서버측에서 받을때 주로 사용하는 건 @RequestBody 어노테이션과 클라이언트로 응답 데이터를 넘길때 @ResponstBody 를 사용한다. Spring MVC 요청/응답 과정 1. 클라이언트로부터 HTTP 요청이 들어오면 Front Controller 라고 불리우는 Dispatcher Servlet 이 받는다. * 클라이언트의 요청은 Front Controller 라고 하는 Dispatcher Servlet ..
2023.06.07 -
@RequestBody HTTP 요청으로 넘어오는 Body 의 내용을 HttpMessageConverter 를 통해 Java Object로 역직렬화한다. 바이너리 파일을 포함하고 있지 않은 데이터를 받는 역할을 한다. * HttpMessageConverter : HTTP 요청과 응답에 대해서 "전략 패턴"을 사용해 Converting 해주는 역할 @RequestBody 어노테이션은 HTTP 요청으로 같이 넘어오는 Header 의 Content-Type을 보고 어떤 Converter 를 사용할지 정하므로 Content-Type 은 반드시 명시해야한다. 자주쓰는 Content-Type 종류 application/json : { key : value } 형태인 json 형태로 전송 application/x-w..
@RequestBody, @RequestParam, @RequestPart@RequestBody HTTP 요청으로 넘어오는 Body 의 내용을 HttpMessageConverter 를 통해 Java Object로 역직렬화한다. 바이너리 파일을 포함하고 있지 않은 데이터를 받는 역할을 한다. * HttpMessageConverter : HTTP 요청과 응답에 대해서 "전략 패턴"을 사용해 Converting 해주는 역할 @RequestBody 어노테이션은 HTTP 요청으로 같이 넘어오는 Header 의 Content-Type을 보고 어떤 Converter 를 사용할지 정하므로 Content-Type 은 반드시 명시해야한다. 자주쓰는 Content-Type 종류 application/json : { key : value } 형태인 json 형태로 전송 application/x-w..
2023.05.15 -
XSS 란?Cross Site Scripting 의 줄임말로 XSS의 약어이다.원래는 CSS가 맞지만 이미 CSS 라는 스타일 시트(.css) 가 사용되고 있어 XSS라고 칭한다. XSS 공격이란?크로스 사이트 스크립팅의 뜻처럼 사이트 간 스크립팅 이라는 이름의 웹 취약점이다.웹 사이트의 관리자가 아닌 제 3자가 악의적인 목적을 가지고 악성 스크립트를 삽입하여의도하지 않은 명령을 실행시키거나 쿠키, 세션 등을 탈취할 수 있는 취약점이다. 예를 들어 게시판의 글을 작성할 때 작성 내용 안에 아래와 같은 문장을 삽입한다.그럼 DB 데이터에 위와 같은 내용이 삽입되고 사용자는 게시판 글을 확인하면alert 창으로 사용자의 쿠키값이 보여진다.이렇게 사용자가 악의적인 목적을 가지고 악성 스크립트를 삽입하는 공격을..
Spring Boot XSS Filter 설정(lucy-xss-servlet-filter)XSS 란?Cross Site Scripting 의 줄임말로 XSS의 약어이다.원래는 CSS가 맞지만 이미 CSS 라는 스타일 시트(.css) 가 사용되고 있어 XSS라고 칭한다. XSS 공격이란?크로스 사이트 스크립팅의 뜻처럼 사이트 간 스크립팅 이라는 이름의 웹 취약점이다.웹 사이트의 관리자가 아닌 제 3자가 악의적인 목적을 가지고 악성 스크립트를 삽입하여의도하지 않은 명령을 실행시키거나 쿠키, 세션 등을 탈취할 수 있는 취약점이다. 예를 들어 게시판의 글을 작성할 때 작성 내용 안에 아래와 같은 문장을 삽입한다.그럼 DB 데이터에 위와 같은 내용이 삽입되고 사용자는 게시판 글을 확인하면alert 창으로 사용자의 쿠키값이 보여진다.이렇게 사용자가 악의적인 목적을 가지고 악성 스크립트를 삽입하는 공격을..
2023.05.02