반응형

웹 개발 273

spring boot에서 mybatis ${} 사용시 sql injection 방어하기

mybatiss를 사용할 경우 ${param}, #{param}과 같이 # 또는 $으로 parameter를 받을 수 있는데, 보통 아래와 같이 #을 사용해서 받는 것을 권장합니다. 그 이유는, #{}이 SQL Injection 공격에 안전하기 때문인데요 SELECT * FROM TB_USER WHERE USER_ID = #{userId} #이 SQL Injection에 안전한 이유는, #이 내부적으로 PreparedStatement를 사용하기 때문입니다. PreparedStatement는 값을 binding 하는 시점에 전달된 값에 대한 특수 문자, 쿼리 등을 필터링하여 SQL Injection을 막습니다. 하지만 ${}를 부득이하게 사용해야 할 경우가 있습니다. 제가 다니는 회사를 예로 들면, 고객사가..

웹 개발 2020.11.21

NPE(Null Pointer Exception)으로부터 안전한 프로그래밍 하기

NullPointerException은 개발 과정에서 가장 많이 접하면서 간과하기 쉬운 예외 중 하나입니다. reference type을 다룰 때는 항상 null에 대비하여 프로그래밍을 해야 합니다. 이 과정에서 불필요한 null check code가 포함되며, nessted object 참조 과정에서 반복적인 null check로 코드의 가독성을 떨어뜨리곤 합니다. NPE(NullPointerException)이란? java 데이터 타입은 기본 타입(primitive type)과 참조 타입(reference type)이 있습니다. 참조 타입은 객체의 생성 이전에는 할당된 메모리 주소가 없는 null을 참조하는 변수이며 이를 가지고 아래 작업을 수행하면 NPE가 발생하게 됩니다. null 참조는 1965..

웹 개발 2020.11.08

Spring lazy Initialization

기본적으로 스프링 IOC는 애플리케이션을 시작할 때 모든 Bean을 초기화합니다. 이 과정에서 Bean 초기화에 실패할 수도 있는데 이로 인해 애플리케이션 실행 시점에 장애를 사전에 발견할 수 있습니다. 반면에, 시작할 때 모든 Bean을 초기화하는 경우, 애플리케이션의 설정이 많고 무겁다면, 애플리케이션을 초기화할 때 많은 시간이 걸립니다. 반면에, Lazy로 설정이 되어있다면 다른 Bean이 참조하거나 BeanFactory에서 명시적으로 검색할 때까지 Bean은 초기화되지 않습니다. Lazy Initialization 활성화하는 방법 1) Spring Boot application.properties에 spring.main.lazy-initialization 의 값을 true로 설정하면 모든 Bean..

웹 개발 2020.10.13

javascript ajax 크로스 도메인 요청하기(CORS)

javascript에서 ajax 요청을 보내면 브라우저 콘솔에 아래와 같이 에러가 나면서 요청이 실패합니다. ​ 1) 크롬 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ‘[요청한 도메인]' is therefore not allowed access. ​ 2) 파이어폭스 교차 원본 요청 차단: 동일 출처 정책으로 인해 [요청한 도메인]에 있는 원격 자원을 읽을 수 없습니다. 자원을 같은 도메인으로 이동시키거나 CORS를 활성화하여 해결할 수 있습니다. ​ 이 오류가 발생하는 이유는 아래와 같습니다. 교차 출처 리소스 공유 교차 출처 리소스 공유(Cross-Origin Resource Sharing, C..

웹 개발 2020.09.30

시간 기반 UUID 생성(Generate time based UUIDs)

java.util.UUID.randomUUID(); 는 강력한 암호화 난수 발생기입니다. 이 함수를 실행하면 아래와 같은 결과가 return 됩니다. 4178b983-01f8-11eb-8cd2-47e9de425ea4 결과는 16진수 32자리 문자열입니다. 이는 256 bit라는 의미이며, 이 값의 경우의 수를 표현하면 아래와 같습니다. " 1 / 115792089237316195423570985008687907853269984665640564039457584007913129639936 " 읽을수도 없을 만큼 엄청난 경우의 수 이지만, 말 그대로 "랜덤" 이기 때문에 서버시스템의 경우 값이 중복되는 경우가 있을 수도 있습니다. 그래서 대안을 생각 하던 중, 시간 기반으로 UUID를 생성하면 중복이 발생하지..

웹 개발 2020.09.29

Lombok Annotation

val val은 lombok 0.10에 도입되었습니다. ​ val은 실제로 변수 type을 작성하는 대신 지역 변수 선언의 type으로 사용할 수 있습니다. 이렇게 하면 initializer표현식에서 type이 유추됩니다. 지역 변수도 final 키워드가 붙어서 최종적으로 만들어집니다. 이 기능은 지역 변수와 foreach loop에서만 작동하며 필드에서는 작동하지 않습니다. val은 실제로는 일종의 type이며, lombok 패키지에 실제로 클래스로 존재합니다. 1) lombok을 사용한 코드 import java.util.ArrayList; import java.util.HashMap; import lombok.val; public class ValExample { public String examp..

웹 개발 2020.09.28

Annotation을 활용한 Spring AOP 활용

1. @interface 생성 - 마커용 Annotation 생성 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LoginExecutionTime { } @Target: 어디에 쓸 수 있는지 지정 @Retention: 이 Annotation의 정보가 언제까지 유효할 것인지 지정 2. 실제 Aspect 생성(@LogExecutionTime Annotation에 적용) @Component @Aspect @Slf4j public class LogAspect { @Around("@annotation(LogExecutionTime)") public Object logExecutionTime(ProceedingJoi..

웹 개발 2020.09.24

Java에서 날짜, 시간 제대로 사용하기(LocalDate, LocalTime, LocalDateTime)

1. 사용하지 않는 게 좋은 Calendar, Date 클래스 Java를 처음 공부할 때나 단순하게 표현할 때는 Calendar, Date 클래스를 사용할 수 있지만, 문제가 많은 클래스 이기 때문에 실무에서는 사용하지 않는 게 좋습니다. 이런 이유로 많은 개발자들이 Joda-Time 같은 오픈소스 라이브러리를 사용했는데 JDK 8부터는 개선된 날짜/시간 API가 제공됩니다. 2. Calendar, Date 클래스의 문제점 1) 불변 객체가 아니다. Calendar와 Date 클래스에서 set 메서드를 호출해서 날짜를 저장하면 연산 결과는 같은 인스턴스에 저장됩니다. 이 때문에 Calendar 객체나 Date 객체가 여러 객체에서 공유되면 한 곳에서 바꾼 값이 다른 곳에 영향을 미치는 부작용이 생길 수 ..

웹 개발 2020.09.22

[Maven Error] you need to run build with jdk or have tools.jar on the classpath

You need to run build with JDK or have tools.jar on the classpath.If this occures during eclipse build make sure you run eclipse under JDK as well (com.mysema.maven:apt-maven-plugin:1.0.9:process:default:generate-sources) 위와 같은 오류 메시지가 발생하고 빌드가 안될 경우 eclipse.ini ( sts의 경우에는 sts.ini 또는 SpringToolSuite4.ini) 를 아래와 같이 수정하여 해결할 수 있습니다. 현상 확인 우선, 에러가 발생할 경우 아래와 같이 pom.xml의 execution에 에러가 표시됩니다. 해결방법 ..

웹 개발 2020.04.08
728x90
반응형
loading