앞서 AWS ec2에 git, gitlab도 설치하고 Jenkins도 설치했었다. CI/CD가 구성되면 그다음은? 품질이다. 정적 소스 분석도구인 Sonarqube를 설치해보자. 기본적으로 java가 설치가 되어 있어야 하는데 이건 Jenkins 설치 글을 보면서 설치해보자. 그리고 간단히 구성을 할것이기 때문에 DB 연동은 하지 않겠다. 폴더 생성 및 설치 # mkdir /app/sonarqube # cd /app/sonarqube 필자는 위와 같은 경로에 sonarqube를 설치할 것이다. 어떤 소나큐브를 설치할지 version을 확인해보자. Index of /Distribution/sonarqube binaries.sonarsource.com 위에서 내 프로젝트에 맞는 sonarqube versio..
Jenkins에서 Execute Shell을 통해 sudo를 사용해서 어떤 작업을 하려고 했다. We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. sudo: no tty present and no askpass program specified 그때 이런 메세지가 나오며 Job이 fail이 되었다. Jenkins를 설치할때 jenkins..
MyBatis를 사용해서 select를 날렸을때 결과에 null이 나오면, 이에 대해 null을 허용할지 안할지를 설정을 통해 할 수 있다. null이 나온다고 하는건 column이 될 수도 있고 row가 될 수도 있다. 잘 이해가 안갈수도 있어서 예시를 들어 설명하자면 사용자 table이 있다고 하고 이중 특정 컬럼만 조회를 했을때 다음과 같은 결과가 나왔다. 빨간 네모를 친 부분은 row 의 모든 항목이 null인 것이고 파란 네모를 친 부분은 column 만 null 인 경우이다. 결과가 null인 경우 MyBatis에서는 별도의 설정을 하지 않으면 생략을 해버리기 때문에 원하는 결과가 나오지 않을 수 있다. 그럴때는 MyBatis 설정을 통해 내가 원하는 상황에 맞게 조치를 해주자. select ..
하나의 application에서 여러개의 DB에 connection을 해야 하는 상황이다. springboot에서는 이를 어떻게 처리해야 할까? 약간의 설정을 추가해줌으로써 쉽게 가능하다. application.yml 변경 AS-IS spring: datasource: driver-class-name: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@xx.xx.xx.xx:1521:OINGDADDY username: oing password: daddy 기존에는 기본 datasource와 sqlSessionFactory를 사용을 했었다. 따라서 이렇게만 설정해주면 어디서든 DataSource와 SqlSessionFactory를 주입받아 사용할 수 있었다. 하지만 다중 ..
Springboot에서 datasource 설정을 Config class에서 할 때 보통 다음과 같이 한다. @Bean @ConfigurationProperties(prefix = "spring.datasource-mysql") public DataSource mysqlDataSource() { return DataSourceBuilder.create() .type(HikariDataSource.class) .build(); } 이때 @ConfigurationProperties 부분이 warning이 뜬다. @ConfigurationProperties은 *.properties , *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서 사용할 수 있게 해주는 어노테이션이다. @Configur..
Springboot를 사용하면 기본적으로 사용할 수 있는 환경설정 파일은 application.properties이다. 작은 프로젝트에서는 이것만 사용해도 문제는 없지만 규모가 커지면 이 파일 하나에 설정을 관리하기 벅찰수도 있다. 이럴 때 용도에 맞게 이 파일을 분리해서 사용하면 여러모로 유용하다. 1. properties 파일 분리 일단은 application.properties 파일을 사용했을 때 다른 properties 파일을 추가로 생성하고 이것도 동일하게 외부 환경변수를 관리하고자 한다. 예를들면 db.properties 파일을 추가로 설정하는 경우이다. @PropertySource(value = { "classpath:project.properties" }) @SpringBootApplica..
XSS(Cross-site Scripting)는 서버단에서도 방어가 되어야 하지만 화면단에서도 방어가 필요하다. 다음과 같이 JavaScript 메소드를 활용함으로써 간단히 XSS 방어를 할 수 있다. function XSSCheck(str, level) { if (level == undefined || level == 0) { str = str.replace(/\|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); } else if (level != undefined && level == 1) { str = str.replace(/\/g, ">"); } return str; } XSS 방어를 적용해야 하는 문자열이 있다면 이것을 XSSCheck를 태워서 "" (빈 문자열)로 치환을 해주는 방식..
예전부터 ojdbc는 maven repository에 있지 않고 3rd party library로 다운받아서 직접 참조해서 사용하곤 했다. 그러다가 ojdbc8 버전을 사용하려고 했는데 maven repo에 똭! 이제 더이상 ojdbc를 3rd party에 올리지 않고 이렇게 central repo에서 다운받아서 쓸수 있겠구나 했다. 그래서 내게 맞는 버전을 찾아서 pom.xml에 추가를 했다. 그리고 was를 기동했더니.. [18:44:22.348][INFO ][org.apache.catalina.core.StandardEngine.log:line173] - Starting Servlet engine: [Apache Tomcat/9.0.41] [18:44:22.900][WARN ][org.apache...