본문 바로가기

분류 전체보기

(66)
Spring XSS Filter 개발 및 적용 개발자들이 항상 고민하는 XSS를 막기위한 XSS Filter를 간단하게 개발하고 적용해봤다. 처음엔 XSS 필터링을 인터셉터에서 리퀘스트에서 데이터 뽑아서 replace 하고 다시 넣어주면 되지않나? 라고 생각했다. 인터셉터에서 한다는게 안일한 생각이지만, 전부 틀린말은 아니다. 1. 요청에서 데이터를 가져온다. 2. XSS를 escape한 문자로 replace해서 다시 넣어준다. 1번 경우 inputStream을 사용해야하는데 이때 already called 에러를 뱉기 때문에 HttpServletWrapper를 따로 정의해서 새 스트림을 리턴하는 형식으로 해야한다. 2번 경우 인터셉터에서 단순 setparameter같은 메서드가 없기 때문에 HttpServletWrapper를 따로 정의해서 데이터를..
Java String CompareTo 메서드 Java를 쓰면서 String 비교 메서드를 사용하는데 equals()는 많이 사용했지만 CompareTo는 써보지 않았다. 그래서 String의 CompareTo()에 대해서 정리를 해보려 한다. 참고 문서 : https://www.w3schools.com/java/ref_string_compareto.asp Java String compareTo() Method Java String compareTo() Method ❮ String Methods Example Compare two strings: String myStr1 = "Hello"; String myStr2 = "Hello"; System.out.println(myStr1.compareTo(myStr2)); // Returns 0 becaus..
Java 데이터 타입 Primitive type(기본형) Reference Type(참조형) 자바에서 변수의 데이터 타입은 크게 원시 타입이라고도 불리는 Primitive Type(기본형)과 Reference Type(참조형)으로 나뉜다. 영어로 말해서 뭘 말하는 건지 모를 수 있으니 알아두자 Primitive Type 기본형 자바 메모리 영역중 스택 영역에 실제 값이 할당되는 기본 데이터 타입들이다. 자바에서 데이터 타입의 최소 크기는 1byte다. boolean : 논리형 1byte true 또는 false char : 문자형 2byte 유니코드 문자데이터 byte : 정수형 1byte -2^7 ~ 2^7-1 short : 정수형 2byte -2^15 ~ 2^15-1 int : 정수형 4byte -2^31 ~ 2^31-1 long : 정수형 8byte -2^63 ~ 2^63-1 float :..
Spring Bean Scope 빈 스코프 Bean Scope란? Bean Scope는 빈 객체를 정의할 때 지정 하는 범위를 말한다. 개인적으로 정의하자면 빈 객체가 어디 부분에서 쓰이고 얼마나 쓰일지에 대한 내용을 말하는것으로 생각한다. scope 값을 설정 하지 않으면 singleton(싱글톤)이 디폴트 값이다. 참고 문서 : https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes Core Technologies In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly wh..
Java String, StringBuilder, StringBuffer 자바에서 문자열 클래스는 대표적으로 String, StringBuilder, StringBuffer가 있다. 사실 String밖에 다루지 않아봐서 잘 몰랐는데 좋은 경험을 하게 되어서 나머지 두 클래스도 다뤄야 겠다고 생각했다. String과 (StringBuilder, StringBuffer)의 차이 String과 StringBuilder/StringBuffer의 차이는 String 클래스는 immutable(불변), StringBuilder와 StringBuffer 클래스는mutable(가변)적인 클래스라는 차이가 있다. 불변/가변은 자바의 Heap메모리 영역과 관련이 있다. 자바에서 객체들은 Heap영역에 메모리를 할당을 받게되는데, String처럼 불변 속성의 클래스인 경우 값이 변하면 기존에 할..
Spring AOP (Aspect Oriented Programming) AOP란? AOP는 관심 지향 프로그래밍이라는 뜻으로 실제 서비스 기능을 나타내는 비즈니스 로직 전, 후로 로깅이나 성능 검사, 권한 체크 등의 부가적인 기능, 즉 인프라 로직을 추가할 때 사용하는 나타나는 개념으로 인프라 로직이 기능별로 횡단적으로 공통적으로 나타나기 때문에 이를 횡단 관심사라고 한다. AOP는 쉽게 생각하면 이런 횡단 관심사에 따라 프로그래밍 하는 것이라고 생각할 수 있다. 개인적으로는 기능마다 공통적으로 비즈니스 로직 전, 후에 인프라 로직을 추가하는 프로그래밍 이라고 생각한다. AOP는 객체 지향 프로그래밍을 의미하는 OOP와 대비되는것으로 오해할 수 있는데, 실제로 AOP는 OOP를 보완하는 역할로 Spring Document에 나와있다고 한다. (참고 : https://docs..
Spring DI(의존성 주입)와 IoC(제어의 역전) 의존성 주입 DI(Dependency Injection)에 대해 DI는 스프링의 핵심 장점중 하나다. 한 객체가 다른 객체로부터 의존되어있는, 다른 객체의 변화에 영향을 받는 것이 의존되어있다고 한다. 그림과 같이 A객체안에는 B객체와 C객체를 new로 생성하고 있는데 이 경우 A객체는 B객체와 C객체에 의존되어 있다. 의존성을 주입은 아래 그림과 같이 직접 new로 B와 C객체를 생성하는게 아닌 외부로부터 객체를 받는것이다. 이렇게 의존성 주입으로 얻을 수 있는 장점은 관심사가 분리되어있다는 점이다. 이는, 관심사 분리 -> 수정이 쉽다 -> 유연성과 확장성 상승을 의미한다. 이러한 의존성 주입은 스프링에서 주로 IOC 컨테이너로 부터 *Bean 객체를 주입받을때 일어난다 *Bean : 스프링의 IOC..
[알고리즘] 안정 정렬 (Stable Sort) 버블정렬, 삽입정렬, 퀵정렬, 선택정렬 등 정렬 알고리즘은 정렬의 안정성에 따라서 안정 정렬과 불안정 정렬로 나뉜다. 그 중 안정 정렬을 먼저 정리하려고 한다. 안정 정렬 안정 정렬이란 정렬 전 동일한 키 값의 요소 순서가 정렬 후 유지가 되는 정렬 알고리즘을 안정 정렬이라고 한다. 예시로 [3, 2, 1, 5, 7, 5] 배열이 있다고 가정한다. 이를 오름차순으로 정렬한다고 할때 [1, 2, 3, 5, 5, 7]이 된다면 안정 정렬 [1, 2, 3, 5, 5, 7]이 될 수 있다면 불안정 정렬이다. 안정 정렬에 해당하는 정렬 버블 정렬 (Bubble Sort) 삽입 정렬 (Insertion Sort) 병합 정렬 (Merge Sort) 정렬 과정을 볼 수 있는 참고 사이트 : https://visualg..