반응형

웹 개발 273

Spring boot에서 JSON API에 XSS Filter 적용하기

웹 애플리케이션에서 기본적으로 꼭 해야 할 보안 중 하나로 XSS 방지가 있습니다. XSS(크로스 사이트 스크립트)란? 검증되지 않은 입력 값으로 인해 사용자의 웹 브라우저에서 의도하지 않은 악성 스크립트가 실행되는 취약점 외부 입력이 동적 웹 페이지 생성에 사용될 경우, 전송된 동적 웹 페이지를 열람하는 접속자의 권한으로 부적절한 스크립트가 수행되는 취약점 공격을 통해 사용자의 개인정보 및 쿠키정보 탈취, 악성코드 감염, 웹 페이지 변조 등이 발생 공격 대상은 서버가 아니라, 클라이언트이다. lucy-xss-servlet-filter lucy-xss-servlet-filter는 XSS(Cross Site Scripting)을 막기 위해 네이버에서 개발했습니다. lucy-xss-servlet-filter..

웹 개발 2020.12.12

log4j로 printStackTrace 출력

아래 코드에서는 Null Pointer Exception이 발생합니다. 이 예외를 try catch문으로 printStackTrace를 하면 에러 메시지가 표시됩니다. public class Test { public static void main(String [] args) { String a = null; try { if(a.equals("")) { System.out.println("####"); } } catch(Exception e) { e.printStackTrace(); } } } 이렇게 표시할 경우 tomcat 로그에서 error로그에 기록됩니다. 이것의 문제는, 일반 로그와 error로그가 다른 파일에 따로 기록된다는 것입니다. 이렇게 될 경우, 이력 추적이 어렵습니다. 따라서 이력 추적을..

웹 개발 2020.12.12

StringBuffer와 StringBuilder

StringBuffer/StringBuilder 사용 이것은 java code의 입니다. + 연산자는 사용하면 안됩니다. 그 이유는 String은 불변(immutable) 객체이기 때문입니다. 예를 들어, 아래와 같은 코드가 있다면 어떻게 될까요? String str = "hello"; str = str + " world"; 위 코드는 변수 str에 문자열 객체 "hello"를 생성하고 대입한 다음, str의 변수의 값에 새로운 문자열 " world"를 대입하는 코드 입니다. String 객체는 "불변" 객체이기 때문에 문자열을 + 연산자로 추가할 경우 메모리에서 새로운 문자열을 생성합니다. 즉, str객체가 가지고 있던 메모리에 " world"라는 문자열을 추가하는 것이 아니라 새로운 메모리를 할당 한..

웹 개발 2020.12.05

spring boot를 사용해야 하는 이유

Spring은 정말 편하고 좋은 프레임워크이지만 초기 설정이 정말 어려웠습니다. 실제로 스프링을 사용하면서도 왜 이렇게 쓰는지 모르고 쓰는 경우가 많았고, 심지어 자신이 세팅한 세팅한 빈 프로젝트에 설정을 다 해놓고 새로운 프로젝트를 그 빈 프로젝트를 복사 붙여 넣기 해 프로젝트를 생성했습니다. 그에 반해 Spring boot는 기본적으로 spring framework 개발자가 해야만 하는 많은 설정들을 생략해도 괜찮습니다. 기본 logback이 설정되어 있으며 spring-boot-web-stater 같은 라이브러리에는 다수의 개발자들이 반복적으로 하던 설정들이 기본 default로 잡혀있습니다. 프로젝트마다 일반적으로 설정하게 되는 사항들을 이미 내부적으로 가지고 있고 개별적으로 차이가 나는 부분만 ..

웹 개발 2020.12.04

Spring boot application 시작 시, CPU 100% 를 사용할 경우 대처 방법

애플리케이션에서 불필요한 모듈 및 Bean 정의를 제거하십시오. 개발자가 저지르는 일반적인 실수 중 하나는 애플리케이션에 웹 환경이 필요하지 않은 경우에 spring-boot-starter-web를 포함하는 것입니다. 다른 starter 모듈도 마찬가지 입니다. @ConditionalOnMissingBean, @ConditionalOnProperty, @ConditionalOnClass, @ConditionalOnBean, @ConditionalOnMissingClass, @ConditionalOnExpression를 사용하여 조건부 Bean 정의를 사용하십시오. 조건이 많은 Bean을 확인하기 위해 Spring을 만들면 역효과를 낼 수 있습니다. Spring profile을 사용하십시오. 특정 Bean..

웹 개발 2020.11.29

java에서 메모리 문제가 발생할 경우 사용해볼 수 있는 메모리 옵션

-Xms Java Heap의 최초 크기를 지정합니다. Java Heap은 -Xms 옵션으로 지정한 크기로 시작하며, 최대 -Xmx 옵션으로 지정한 크기만큼 커집니다. Java8에서 이 옵션은 Deprecated 되었습니다. -Xmx Java Heap의 최대 크기(Maximum size)를 지정합니다. -Xms 옵션으로 지정한 크기로 시작하며 최대 -Xmx 옵션으로 지정한 만큼 커집니다. Sun HotSpt JVM 계열에서는 최초 크기와 최대 크기를 동일하게 부여할 것을 권장합니다. 그 이유는 크기의 동적인 변경에 의한 오버헤드를 최소화하기 위해서입니다. Java8에서 이 옵션은 Deprecated 되었습니다. -XX:PermSize= Permanent Generation의 최초 크기를 지정합니다. Per..

웹 개발 2020.11.29

[netty] too many open files

socket 생성시 특히 linux에서 아래와 같은 메시지가 발생하는 경우가 있습니다. Caused by: java.io.IOException: 열린 파일이 너무 많음 또는 Caused by: java.io.IOException: too manny open files 보통 이 에러는, 프로그램에서 파일 close를 제대로 안했을 경우 발생하는 에러인데, 소켓 프로그램에서도 발생할 수 있습니다. 이 오류가 발생하면 해당 프로그램 뿐만 아니라 시스템 자체에 장애가 발생합니다. stackoverflow.com/questions/8170902/why-is-the-jdk-nio-using-so-many-anon-inode-file-descriptors 요점은, NIO를 사용할 경우 문제가 생길 수 있다는 것입니다..

웹 개발 2020.11.22

spring boot jar 외부에서 properties 파일을 읽는 방법

spring boot는 application.properties 파일을 통해 설정을 할 수 있습니다. properties의 값은 @Value annocation을 통해 읽어올 수 있습니다. # application.properties noroo.test=test import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class Test implement..

웹 개발 2020.11.22
728x90
반응형
loading