본문 바로가기

분류 전체보기

ideavimrc Intellij ideavim 플러그인 사용 시 다음의 파일을 홈 경로에 넣어준다. (윈도우의 경우 C:\Users\donnert\.ideavimrc) 인텔리제이의 경우 액션(:action)을 지원해서 그냥 가져다가 키랑 매핑해서 쓰기만 하면 된다 (https://gist.github.com/zchee/9c78f91cc5ad771c1f5d) 주요기능 세미콜론도 콜론으로 jj : 입력모드 탈출 H : 줄 제일 앞 L : 줄 제일 뒤 컨트롤+H : 뒤로가기 컨트롤+L : 앞으로 가기 gfu : 클래스/메소드 사용하는부분 찾기 gd: 변수 선언으로 이동 gb: 변수 타입 선언으로 이용 grn : 이름 변경(변수 클래스 등) gw : 단어 선택 .ideavimrc " 기본설정 set ignorecase set .. 더보기
히카리 풀 모니터링 히카리 풀을 사용하게 되면 housekeeper란 놈이 기본으로 30초마다 풀 상태를 debug모드로 찍고있는데 커스터마이징이 잘 안되서 별도로 찍기로 함 @SpringBootApplication @EnableScheduling class ApiApplication( val dataSource: DataSource) { @Scheduled(fixedDelay = 10000) fun hikariPoolMonitor() { (DirectFieldAccessor(dataSource).getPropertyValue("pool") as HikariPool?)?.let { hikariPool -> logger().info("Pool stats (total=${hikariPool.totalConnections}, a.. 더보기
도커 빌드 속도가 느릴 경우 Dockerfile을 소스와 같이 관리하기 위해 프로젝트 최상단에 위치 시킴 gradle build 후 docker build 수행하니 시간이 엄청 길어지면서 용량도 커지는 현상 발생 원인은 도커 빌드시 Dockerfile 하위 파일을 다 이미지에 넣어버리는 것으로 확인 .dockerignore파일을 프로젝트 최상단에 위치시켜서 예외 항목 등록 후 정상 동작 확인 .dockerignore ** !/target/*.jar 더보기
동기(Synchronous)/비동기(Asynchronous) 처리 다음과 같이 여러개의 작업을 동시에 처리할때 작업1,2가 메인작업과 별개의 작업일때 비동기(@Async)로 던져놓고 메인 작업만 완료 후 응답을 주기도 합니다. (응답시간 0.5초, 작업1,2의 결과 받을 수 없음) 메인작업 : 0.5초 작업1 : 1초 작업2 : 2초 하지만 3가지 작업의 결과가 모두 필요할 경우 동기 처리를 하면 3.5초가 걸리지만 작업1, 2를 비동기로 처리하면 일찍 처리가 끝난 작업은 모든 작업이 완료될때까지 대기 후 응답을 줍니다. (응답시간 2초, 3개의 작업 결과 확인 가능) Kotlin @RestController @EnableAsync class ThreadTest( val taskService: TaskService, val mainService: MainService .. 더보기
RestTemplate 한글 깨짐 FCM 연동 중 한글 깨짐 현상 발생 시 다음과 같이 메세지 컨버터의 인코딩을 변경한다. Kotlin val restTemplate = RestTemplate().apply { messageConverters.forEach { if(it is StringHttpMessageConverter) { it.defaultCharset = Charset.forName("UTF-8") } } } 더보기
윈도우10에서 도커 용량 줄이기 윈도우에서 도커를 사용하다보면 사용하지 않는 이미지가 쌓여서 용량이 무한증식하는 사태가 벌어집니다 범인 : "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx" 미사용 이미지 삭제 > docker images REPOSITORY TAG IMAGE ID CREATED SIZE ddanzit-api_api latest 1287e2e8862d 13 days ago 971MB 310c3191c7df 4 weeks ago 971MB 19dc6cd2a496 7 weeks ago 971MB shippang-api_shippang_server latest 662739236085 3 months ago 1.53GB nginx_nginx lates.. 더보기
Kotlin toIntOrNull 코틀린에서 숫자 변환시에 자주 쓰이는 함수입니다. 다른 용도로 숫자인지 아닌지를 판단할때도 자주 쓰는데 주의할 점이 있습니다 fun main(args:Array) { "1234".run { println(this.toIntOrNull() ?: "$this is not number") } "349505749735".run { println(this.toIntOrNull() ?: "$this is not number") println(this.toBigIntegerOrNull() ?: "$this is not number") } } //1234 //349505749735 is not number //349505749735 위 예제를 보시면 문자열이 숫자인지 아닌지 판단하기 위해 toIntOrNull을 사용하.. 더보기
mysql 사용자 추가 및 권한 제목 그대로 mysql 8 버전 기준 사용자 / db / 권한 추가 create user testuser identified by 'mypassword'; create database testdb; grant all privileges on testdb.* to 'testuser' with grant option; 더보기
http 응답에서 특정 헤더가 읽어지지 않을때 axios를 이용해서 통신하는 도중 헤더를 읽지 못하는 현상 발생 서버에서 201 created 응답 헤더에 생성된 자원의 Location을 보냈으나 받지 못함(크롬의 network 탭에서는 보이나 response.headers.location이 undefined로 찍힘) CORS 이슈로 다음의 헤더만 사용가능Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma 추가적인 헤더 사용하기 위해서는 다음과 같이 CORS설정 시 명시해줘야함 @CrossOrigin(origins = ["http://localhost:3000"], exposedHeaders = ["Location"]) 더보기
nginx 로그 로테이트 nginx 로그를 로테이트 하고 싶을때 os의 log rotate 모듈을 많이 사용하지만시간별로 남기는 기능을 지원하지 않는다. nginx 설정만으로 하려면 다음과 같이 설정한다. nginx.confif ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {set $year $1;set $month $2;set $day $3;set $hour $4;set $minutes $5;set $seconds $6;} access_log logs/access_${year}-${month}-${day}_${hour}.log main; 더보기