웹 개발
-
[Kotest, Mockk, JUnit] 테스트 중 자주하는 착각 모음웹 개발/Spring Framework 2024. 3. 12. 00:27
업무 중에 테스트 코드를 작성하다가 착각해서 잘못 사용해뒀던 것들을 정리하기. 알아두면 테스트 코드 작성하다 왜 안되지? 왜 이상하지하는 시간을 줄여줄 것이다! 별거 아닌 것처럼 보이는지만 원인을 알아채는데도 시간을 꽤 썼다. 1. Mockk 사용 시, Mocking 하지 않았는데, Mock 함수를 호출한다.실제 인스턴스를 생성하더라도 mockk 기능을 쓰면 해당 객체의 함수 리턴 결과를 조작할 수 있을거라 생각하지만 그렇지 않다. mock 처리된 객체만 mockk 기능이 동작한다. 착각하는 예시// 클래스 class Confusion { fun getHello(language: String): String { return when(language) { "kr" -> "안녕" else -> "Hello"..
-
[Spring boot + JPA] Hibernate 성능 분석을 위한 로깅하기웹 개발/Spring Framework 2023. 12. 28. 17:43
1. 하이버네이트 세션 관련해서 걸린 시간들을 통계내기 * 주의: 성능 이슈를 유발하므로 운영환경에선 쓰지말자. // application.yaml spring.jpa.properties.hibernate.generate_statistics=true // logback.xml 2. 슬로우 쿼리 찾기 필요한 경우, 운영환경에 적용해서 모니터링 해보자. // application.yaml spring.jpa.properties.hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=1 // logback.xml (스크린샷 내용하고 다름)아래처럼 찍힌다 2021-08-15 10:54:52.397 INFO 31972 --- [ main] org.hibernate.SQ..
-
[트러블 슈팅] Spring 3.1 이상, Hibernate(JPA) 사용시 발생할 수 있는 이슈 및 내부동작 파헤치기웹 개발/Spring Framework 2023. 11. 24. 01:11
하이버네이트 6.2 마이그레이션 가이드 https://docs.jboss.org/hibernate/orm/6.2/migration-guide/migration-guide.html#ddl-changes 문제 상황 스프링 부트 3.0 → 3.1 버전업을 하면서 하이버네이트도 덩달아 6.1 → 6.2로 업그레이드 되었다. 이 영향으로 timezone을 다루는 date 타입이 DB에 저장될 때 의도와는 다른 시간으로 저장될 수 있다. 각자 상황에 따라서 의도된대로 잘 동작할 수 있다. (별 다른 설정이 없으면 하이버네이트에서 시간 변환을 UTC로 강제하기 때문에 DB의 타임존이 UTC로 쓰고 있으면 문제가 없을 수 있다 또는 MySQL 이외에 타임존을 지원해주는 DBMS 사용하면 UTC를 강제하진 않는다) 결론..
-
[Spring Batch] 이제 LocalDate도 지원돼요!웹 개발/Spring Framework 2023. 9. 2. 16:50
많은 블로그를 보면 스프링 배치에서 LocalDateTime, LocalDate, LocalTime 등이 jobParameters로 지원되지 않아서 String을 파싱하는 방법으로 알려준다. 이전에는 java 8의 time api를 지원하지 않아서 String을 파싱하는 방법 밖에 없었다. 그 이후로 최신 글이 없다보니 지금의 개발자들도 String으로 파싱해서 사용하고 있지 않을까해서 포스팅 하기. 스프링 배치에서 java 8의 time api를 2022년 10월부터 지원하고 있다. 참고글 : https://github.com/spring-projects/spring-batch/issues/1035 테스트 해봅시다. 준비물 - 버전: 스프링 배치 5.0.0 이상, 스프링 부트 배치 3.0 이상(아직까지..
-
KeyspaceEventMessageListener 이용 시, RedisCommandExecutionException: ERR unknown command 'CONFIG', with args beginning with: 'GET' 'notify-keyspace-events' 에러 해결웹 개발/Spring Framework 2023. 6. 18. 02:48
기존에 사용하던 레디스를 deprecated 시키고, 사내 인프라 도구를 이용해 새로 레디스를 만들었다. 그랬더니 기존에 없던 에러가 발생했는데, 아래의 에러가 발생했다. RedisCommandExecutionException: ERR unknown command 'CONFIG', with args beginning with: 'GET' 'notify-keyspace-events' 근본적인 원인은 레디스 서버에서 CONFIG 명령어를 허용하지 않아서 클라이언트측에서 발생하는 에러다. 클라이언트측이라 함은 결국 내가 운영하는 서버. spring data redis에서 Redis keyspace notifications 기능을 사용한다치면 서버가 올라올 때 자동으로 redis에다가 CONFIG 명령어를 날린..
-
[Redisson] SearchDomainUnknownHostException 이슈 해결웹 개발/Spring Framework 2023. 6. 18. 02:30
이건 무지성 해결 방법 공유이다.Failed to resolve '{레디스 호스트}' [A(1)] and search domain query for configured domains failed as well: [여러 도메인들] Spring에서 Redisson을 쓰고 있는데 이런 에러가 계속 발생했다. 구글링을 해보니 아래 방법으로 해결할 수 있다고한다. import io.netty.channel.socket.DatagramChannel; import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.resolver.ResolvedAddressTypes; import io.netty.resolver.dns.DnsAddressResolverG..
-
[WebClient] Content type 'application/octet-stream' not supported for bodyType='' 에러웹 개발/WebFlux 2023. 3. 15. 01:15
webClient를 사용중에 bodyToMono를 사용했더니 에러가 발생했다. // 대략 이런 코드 fun convertErrorResponse(clientResponse: ClientResponse): Mono { return clientResponse.bodyToMono(ErrorResponse::class.java) } 위의 코드처럼 사용하려고 했더니 발생한 에러문구 Content type 'application/octet-stream' not supported for bodyType='변환하려는 클래스' webClient 요청시 Content-Type을 application/json으로 붙여서 보내라는 해결법도 있었는데, 난 이미 그렇게 처리하고 있어서 그게 이유는 아닌듯했고, 내가 클라이언트일 ..
-
'마이크로서비스' 단어에 대한 오해웹 개발/웹&프로그래밍 2023. 3. 12. 20:49
우리가 보통 마이크로서비스 아키텍처 또는 마이크로서비스라고 불리는 아키텍처 스타일에서 한국말로 번역되면서 오해를 불러일으킬만한게 있다. 마이크로서비스를 영어로 표기할 때 Microservice가 아닌 Microservices가 정식 명칭이다. 정확히 말하려면 '마이크로서비스들'이라고 말해야겠지만, 한국말로 번역하면서 '들'이라는 복수 표현이 사라진듯하다. 우리나라 말 특성상, 매번 말할 때마다 마이크로서비스들이라고 말하거나 표현하기 불편해서 생략한게 아닐까? AWS, red hat 같은 공식 사이트에 번역된 글을 봐도 모두 마이크로서비스라고 적혀있다. 원래 2011년 소프트웨어 아키텍처 워크샵에서 microservice라는 용어가 사용되었는데, 2012년 이 용어를 쓴 그룹에서 microservices가..