분류 전체보기
[Test] 통합 Test를 위한 DB는 어떻게 구성하면 좋을까? - Testcontainers
[Test] 통합 Test를 위한 DB는 어떻게 구성하면 좋을까? - Testcontainers
2021.05.03pdf 내용 요약 Spring Batch는 통합TC 수행하고 나서 자동 rollback이 불가하다. TC에 alpha DB를 사용하는 경우 아래와 같은 문제가 생긴다. Spring MVC에서는 TC에 @Transactional @Rollback 처리하면, TC 수행 후 자동 롤백이 되기 때문에, 테스트 수행 시 alpha DB를 사용하도록 구성하는 경우가 많다. 그러나 Spring Batch에서는 TC에 @Transactional 사용이 불가하다. 따라서 @Rollback도 사용 불가하다. 롤백이 없으니 TC를 수행하고 나면 DB 상태가 매번 바뀌게 되며, alpha QA하며 실시간으로 변경되는 DB 상태와 TC 수행으로 변경되는 DB 상태가 서로에게 영향을 미치게 된다. TC에서 시작 전 어떤 테이블을..
프로그래밍 언어는 그냥 도구인가? 에 대한 견해
프로그래밍 언어는 그냥 도구인가? 에 대한 견해
2021.05.01이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
CQRS : Command and Query Responsibility Segregation
CQRS : Command and Query Responsibility Segregation
2021.04.21martinfowler.com/bliki/CQRS.html (번역) https://martinfowler.com/bliki/CommandQuerySeparation.html CRUD를 모두 하나의 도메인 모델을 사용해 처리했었다면, CQRS는 CUD를 Command용 모델로, R을 Query용 모델로 분리하여 설계하는 방법 하지만 문서 전체에서 CQRS는 잘 들어맞는 부분에만 일부 사용할 것을 권장하고 있다. 문서에서 발췌 CQRS는 시스템의 특정한 부분(DDD 표현으로는 Bounded Context)에서만 사용돼야 하고, 시스템 전체에서 사용해서는 안 된다. 이러한 사고방식은 각 Bounded Context는 개별적으로 모델링을 해야 한다는 의미다. (Bounded Context: https://www..
[Spring] DB 관련 : Mybatis CustomTypeHandler
[Spring] DB 관련 : Mybatis CustomTypeHandler
2021.03.31jdbcType : nullable column에 null이 들어갈 때? MyBatis는 nullable 컬럼의 parameter로 null이 넘어왔을 때, jdbcType이 명시되어 있지 않으면 TypeException을 던진다. setNull로 해당 타입에 맞는 null값(VARCHAR인 경우 "")을 넣어줘야 하는데, 뭘 넣어줄지 모르니까 예외가 발생하는 것 The JDBC Type is required by JDBC for all nullable columns, if null is passed as a value. You can investigate this yourself by reading the JavaDocs for the PreparedStatement.setNull() method. [..
[Java] HmacUtils, Mac이 thread-safe하지 않다?
[Java] HmacUtils, Mac이 thread-safe하지 않다?
2021.03.17일반적으로 Hash, HMAC 만들 때는 아래 Util 클래스 사용한다. org.apache.commons.codec.digest.DigestUtils org.apache.commons.codec.digest.HmacUtils 그러나 HmacUtils은 thread-safe 하지 않다. 정확히는, HmacUtils는 thread-safe 하지만 그 안에서 사용되는 Mac이 thread-safe 하지 않다. https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/HmacUtils.html https://stackoverflow.com/questions/31898802/is-macdofinal-thread-..
Shell Script
Shell Script
2021.03.15linuxsig.org/files/bash_scripting.html Table 1: Built-in shell variables. Variable Use $# Stores the number of command-line arguments that were passed to the shell program. $? Stores the exit value of the last command that was executed. $0 Stores the first word of the entered command (the name of the shell program). $* Stores all the arguments that were entered on the command line ($1 $2 ...). "..
[Spring] WebClient
[Spring] WebClient
2021.03.14왜 WebClient ?: RestTemplate은 deprecated 예정. docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern API and supports syn..
[Oracle] longest match
[Oracle] longest match
2021.02.16https://dba.stackexchange.com/questions/42997/longest-prefix-search-in-oracle https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4246230700346756268 일단... 쿼리 하나로 해결하자면 이렇게도 가능은 한데, 성능 관점에서는? ```sql SELECT MIN(t.BIN_NO) KEEP (DENSE_RANK FIRST ORDER BY LENGTH(t.BIN_NO) DESC) FROM CARD_BIN t WHERE '654103' LIKE t.BIN_NO || '%'; ``` DBA 문의 결과... 다음과 같이 인덱스 걸고 ```sql create index CARD..
[Kotlin] java의 static final 변수에 대응되는 것은?
[Kotlin] java의 static final 변수에 대응되는 것은?
2021.02.11```kt class KakaoAuthHelper { companion object { const val REDIRECT_URI = "http://webpage-observer" val AUTHZ_CODE_URL = "https://kauth.kakao.com/oauth/authorize?client_id=${KakaoConfig.app_rest_api_key}&redirect_uri=${REDIRECT_URI}&response_type=code" } } ``` AUTHZ_CODE_URL은 변수가 들어가야 해서 const를 안붙였지만... Byte Code -> Java Decompile 해보면 ```java public static final String REDIRECT_URI = "http://web..
spring-webmvc 5.2.4 이하(springboot 2.2.5 이하) 버전에서 발생하는 응답지연 현상
spring-webmvc 5.2.4 이하(springboot 2.2.5 이하) 버전에서 발생하는 응답지연 현상
2021.01.14최근 알 수 없는 이유로 운영 서버에 응답 지연 현상이 발생했었는데요, 특정 request 수신 시 spring-webmvc 5.2.4 이하 버전에서 발생하는 것으로 밝혀졌습니다. -- 응답지연 현상 분석 결과, 재현 방안, 대응책 공유 상황 11/27 보안 스캐닝 진행 중 API-A 서버에서 응답지연 발생 보안스캐닝 중지 후에도 응답지연 지속됨 재시작 후 정상화 9/8에 발생했던 API-B 서버 응답지연과 양상이 비슷함 응답지연 발생 시점 PINPOINT log 보안스캐닝 패킷이 인입된 시간은 16:26 부근 응답지연이 발생하기 시작한 시간은 16:33 api-a 재시작 16:54 보안스캐닝 패킷 일부 재현 beta api-a 테스트 beta api-a 서버에 ngrinder로 부하 주면서 보안스캐닝으..
SonarQube
SonarQube
2020.12.08Pull Request decoration 기능? PR 시 changes만 가져와서 sonarqube 돌리고 이를 PR 댓글로 리포팅해주는 기능. SonarQube v7.2부터는 유료(Developer Edition)로 바뀜. 7.1 까진 무료 버전에서도 플러그인 형태로 제공. https://docs.sonarqube.org/display/PLUG/GitHub+Plugin https://github.com/SonarSource/sonar-github 7.1 무료버전에서 플러그인으로 설정하는 경우, PR에 대한 리포트는 SonarQube 서버에 저장되지 않는다. SonarQube 서버 report 저장 기능? 유료(Developer Edition)이 아니면, 어떤 브랜치에 대고 돌린 분석이든 모두 mast..
NGINX
NGINX
2020.12.04Reverse Proxy 실 운영 환경에서는 80, 443 빼고는 inbound를 막아두는 경우가 많아서 iptables 써서 80 -> xxxx로 포워딩하거나, nginx써서 80 -> xxxx로 포워딩한다. 후자를 더 많이 사용하는데 그 이유는 nginx를 쓰면 설정이 좀 귀찮기는 하지만, 한 장비에 여러 인스턴스를 띄우고 이들을 domain(혹은 location)으로 구분하므로 모두 80으로 받을 수 있다. jenkins나 sonarqube 등 설정 파일에서 home location (e.g., /jenkins)을 설정할 수 있도록 지원하는 것이 이 것 때문. 어차피 server IP가 변경될 상황을 대비해서 도메인을 쓰긴 써야하니 그럴 바에 nginx로 리버스 프록시하는게 낫다. IP로 hook ..