iBatis의 설정파일인 SqlMapConfig.xml 에서 datasource 설정하는 방법에 대해 기술하고자 한다. application에 DB 정보를 입력하여 DB Access를 하는 JDBC 방식이 있고 application이 올라가는 WAS에 DB 정보를 입력하여 DB Access를 하는 JNDI 방식이 있다. JDBC 방식의 연결 ... 생략 ... 위의 설정에서 눈여겨 봐야 할 부분은 dataSource type을 SIMPLE 로 지정을 했다는 것이다. db.properties 파일에 작성한 datasource 정보를 가지고 와서 각 property 설정을 해주는 방식이다. JNDI 방식의 연결 ... 생략 ... 여기서는 dataSource type을 JNDI로 설정을 하였다. 필자는 WA..
springboot version을 2.3.x에서 2.5.x로 migration을 하였다. 다른 기능은 다 잘 되는데 한가지.. 바로 기동시킨 application의 port가 unknown port로 표시가 되었다. 표시만 이렇게 되고 기동시에는 내가 지정한 port로 정상적으로 잘 기동이 된다. sts dashboard에 display 시에만 이렇게 보인다. 개발을 하는데 있어서 엄청나게 크리티컬한 이슈는 아니지만 성격상 잡고 넘어가야 마음이 편하다. 일단 증상은 springboot version up을 하고 발생을 했으니 최신버전의 server.port 설정이 변경이 되었나 mig guide를 살펴보았으나 그런건 없었다. 혹시 springboot version을 내가 사용하고 있는 sts가 지원을 ..
프로젝트를 진행 시 phase(local, dev, prd..)에 따라 다른 resource를 바라봐야 할 때가 있다. 예를들면 DB 같은 경우이다. dev(개발)에서는 개발 DB를 바라보고 prd(운영)에서는 운영 DB를 바라봐야 한다. 이것뿐만 아니라 많은 설정들이 개발이냐 운영이냐에 따라 바뀌어야 한다. 이럴때 소스의 변경 없이 profile 으로 손쉽게 갈아끼울수 있다. springboot에서는 어떻게 spring profile을 설정하는지 알아보자. Spring Profile 설정방법 (application.yml) server: port: 8080 servlet: context-path: / session: timeout: 1800 spring: datasource: driver-class-n..
이전에 Spring + MyBatis에서 Query 변경시 서버 재시작 없이 Reload 하기에 대한 글을 작성했었다. Spring + Mybatis 에서 Query 변경시 서버 재시작 없이 Reload 하기 MyBatis 를 사용하여 개발하는 경우 쿼리를 수정했을때 WAS를 재기동해야 변경된 내용이 반영된다. 클래스가 몇개 없는 작은 프로젝트에서는 이렇게 재기동을 해서 확인을 하는것이 큰 부담이 없 oingdaddy.tistory.com 하지만 요즘 대세인 Springboot 환경에서 적용하기 위해서 Java Config로 이를 전환하였다. Xml Config에서 Java Config로 전환을 하는데 RefreshableSqlSessionFactoryBean을 그대로 사용하니 잘 동작하지 않았다. 그래..
MyBatis 를 사용하여 개발하는 경우 쿼리를 수정했을때 WAS를 재기동해야 변경된 내용이 반영된다. 클래스가 몇개 없는 작은 프로젝트에서는 이렇게 재기동을 해서 확인을 하는것이 큰 부담이 없지만 재기동되는데 시간이 오래 걸리는 프로젝트인 경우는 이것은 큰 부담이 된다. 이를 해결해주기 위해 어느 능력자분이 서버의 재기동 없이 Query Reload를 해주는 로직을 개발해주셨다. RefreshableSqlSessionFactoryBean 라는 아주 유명한 로직이다. 언제 누가 만든건지 모르지만 일단 그분께 감사를 드린다. 2011년도에도 이걸 사용했던것 같은데 벌써 10년이 지났다. 시간 참 빠르다. RefreshableSqlSessionFactoryBean.java import java.io.IOEx..
Spring Batch를 실행할 때 ORA-08177: can't serialize access for this transaction (이 트랜잭션에 대한 직렬화 액세스를 할 수 없습니다) 오류가 발생하였다. 여러개의 Spring Batch Job이 하나의 JobRepository를 가지고 동시에 실행이 될 때 발생할 수 있는 문제이다. 이는 JobRepository 설정 중 transactionManager의 IsolationLevelForCreate 속성은 따로 지정하지 않을 경우 디폴트 값인 ISOLATION_SERIALIZABLE으로 설정되기 때문이다. 이를 ISOLATION_DEFAULT으로 변경하면 문제는 해결된다. 변경을 하는 방법은 다음과 같다. Java Config @Bean public..
OWASP는 Open Web Application Security Project의 약자이고 웹 어플리케이션 보안을 위해 힘쓰는 비영리 조직이 진행하는 프로젝트이다. 매년 보안상 이슈가 될 항목들에 대해 10가지를 선정하여 발표한다. 그게 OWASP top 10이다. 매년 top 10에 속해있는 항목이 바뀌지만 굵직한 놈들(Injection, XSS, CSRF..) 은 항상 껴있다. 2021년에는 어떤 항목들이 Top 10에 선정이 되었는지 살펴보자. (잘 나온 원문을 번역기 돌렸으니 이해를..) THE OWASP TOP 10 LIST 1. INJECTION ATTACKS (인젝션) 주입 공격은 공격자가 악성 코드를 응용 프로그램에 입력함으로써 데이터 또는 전체 응용 프로그램을 손상시키는 명령을 강제로 실..
Spring (Springboot) 에서는 선언적 Transaction 관리를 한다. 이는 비즈니스 로직에 트랜잭션 로직을 심는것이 아닌 설정이나 어노테이션으로 간편하게 트랜잭션을 정의하는것을 말한다. 이렇게 트랜잭션 정의를 할때 timeout은 어떻게 설정하는지 알아보자. Transaction에서의 timeout은 지정한 시간 내에 해당 메소드 수행이 완료되지 않은 경우 rollback 수행하는것을 말한다. 참고로 Spring의 default timeout은 -1 이다. (timeout 무제한) 전역 timeout 설정 (application.yml or application.properties) spring: transaction: default-timeout: 10 이렇게 spring.transac..