분류 전체보기

DataBase

[DataBase] CLI에서 쿼리할 때도 트랜잭션을 쓰자

😭 서론 실서버에 데이터를 추가, 업데이트, 삭제!!를 할 때는 살이 떨린다. 명령문을 작성하고 모니터를 바라보면서 내가 뭘 고민하는지도 모르지만 고민을 하면서 바라본다. 실수라도 하게되면.. 진짜 눈물난다.. (경험담) Spring에서 아주 쉽게 애노테이션으로 트랜잭션을 사용하지만, 왜 CLI에서 할 생각은 못했을까. 후회하면서 트랜잭션 하는 법을 정리한다.. 😇 본론 BEGIN; /* or START TRANSACTION */ SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT; /* or ROLLBACK */ 끝이다. 매우 간단하다. 꼭.. 꼭 하자.. (나한테 하는 말) h..

JVM/Spring

[Spring] 그냥되는 건 없다 1 - Spring-Boot AutoConfiguration

😏 서론 spring-boot 2.6.6 기준 스프링부트에서 빈 기본설정파일들을 intellij로 아무리 눌러도 불러오는 곳을 쉽게 찾지 못한 김에 정리하게 된 기본설정하는 곳. 🧐 본론 133개의 설정파일들이 정의되어 있다. 그런데 AopAutoConfiguration, BatchAutoConfiguration과 같이 기본적으로 의존성이 추가되어 있지 않는 녀석들이 있다. @ConditionalOnProperty - property가 참일 경우 컨테이너 등록 @ConditionalOnClass - 해당 클래스가 경로에 존재할 경우 컨테이너 등록 @ConditionalOnMissingClass - 해당 클래스가 존재하지 않을 경우 컨테이너 등록 이처럼 스프링부트와 호환된다고 명시된 녀석들의 의존성을 추가..

JVM/Spring

[Spring] CaffeineCache key는 Object

🥺 본론 key가 Object이기 때문에 key를 지정할 때 타입을 신경써서 해야된다. 자칫 Integer로 지정했다가 String으로 조회하게 되면 조회가 안된다.. 🙂 결론 개인적으로는 하나의 타입으로 통일 (ex - String)하는 게 헷갈리지 않고 좋을 것 같다.

JVM/Kotlin

[kotlin] kotest After/before each not working for withData

😏 서론 글작성 기준 kotest version 5.5 data-driven test를 위해 withData를 사용했을 때 afterEach / beforeEach가 예상과 달리 동작하지 않았다. 🤩 본론 간단하게 kotest의 TestType부터 살펴보고 넘어가보자면.. Type Description Container 다른 테스트를 포함할 수 있는 컨테이너 Test 중첩 테스트를 포함할 수 없는 리프 테스트 Dynamic Container, Test 둘 다 일 수 있으며, Propery test, data test와 같은 기능을 통해 테스트가 동적으로 추가될 때 사용 withData는 보다시피 TestType이 Dynamic을 사용하고 있다. 공식문서에서 나온 내용으로 살펴보자면 Dynamic은 모든 ..

JVM/Spring

[Spring] Spring의 ObjectMapper 쉽게 Custom 만들기

🤔 서론 프로젝트를 진행하다 보면 objectMapper를 새로 만들어서 할 일이 종종 생긴다. 이때 새로 만들게 되면 Spring에서 기본적으로 제공해주는 옵션들을 찾아 동일하게 적용한 후에 내가 원하는 옵션들을 추가하고 싶을 수 있다. 어떻게 쉽게 만들 수 있을까? 😏 본론 스프링에서 기본적으로 설정하는 properties와 기본적으로 넣어주는 모듈들이다. 이런 걸 할 때마다 일일이 찾아 설정해 주고, 반복적으로 하는 건 매우 귀찮은 일이다. 스프링에서 기본으로 제공하는 ObjectMapper를 쉽게 만드는 법은 간단하다. fun objectMapper(): ObjectMapper = Jackson2ObjectMapperBuilder().build() 위처럼 Jackson2ObjectMapperBui..

DataBase

[SQL] MODIFY 시 기존 옵션 조심!

🥲 서론 MODIFY로 comment를 추가할 일이 있어서 추가를 진행했었다. 그런데, 적용 후에 확인해보니 not null -> null로 변경되었다. 😅 본론 ALTER TABLE user MODIFY name varchar(50) COMMENT '사용자명'; 이렇게 적용하면 not null 옵션이 null로 변경된다. ALTER TABLE user MODIFY name varchar(50) not null COMMENT '사용자명'; not null이었어도 not null을 명시해주어야 null로 변경되지 않는다. null만 그러냐? 아니다. 이번엔 NOT NULL이 빠졌으니 NOT NULL 옵션만을 추가해보자. ALTER TABLE user MODIFY name varchar(50) NOT NUl..

HisStory

[독서] 식사가 잘못 됐습니다.

😳 서론 중3, 고1부터 나기 시작했던 여드름이 25살인 올해까지 멈추지 않고 끊임 없이 난다. 식습관이 잘못됐나 먹는 걸 좀 바꾸면서 이 기회에 건강한 식습관을 가져볼까 하면서 책을 읽기로 마음먹었다. 요즘 책을 읽으면서 드는 생각은, 책 모든 내용을 기억할 수 없다. 다른 사람들도 그런가.. 난 책을 읽다보면 앞 부분을 계속 까먹게 된다. 다 읽고 나서도 기억되는 부분이 많지는 않다. 그렇기에 난 새로 알게 된 것들과, 알고는 있었지만 앞으로 계속 기억하고 싶은 것들, 꾸준히 지켜보고 싶은 것들을 정리하려한다! 🙂 본론 살이 찌는 원인은 대부분 탄수화물 문제다. 칼로리는 비만과 무관하고, 지방은 먹어도 살찌지 않는다. 설탕 또한 탄수화물이다. (쌀, 밀가루, 설탕) 이온 음료 또한 설탕물이기 때문에 ..

JVM/Kotlin

Kotest 5.1 이상 버전 java.lang.NoClassDefFoundError: kotlinx/coroutines/test/TestDispatcher 해결방법

😳 서론 사용 중인 버전 정보 kotlin - 1.6 kotest - 5.5.4 spring boot - 2.6.x 😎 본론 kotest 도입을 위해 모듈을 추가해서 테스트를 돌렸더니 아래와 같은 에러가 발생했다. 원인 kotest 5.1 버전부터 kotlin-coroutiones 1.6 버전을 사용하고 있다. 하지만, spring boot 2.6.x 대의 kotlin-coroutiones 버전은 1.5.2 를 사용하고 있어서 문제가 발생했다. 해결방법 io.spring.dependency-management 에서 정의한 기본 버전정보를 변경해주면 된다. build.gradle.kts extra["kotlin-coroutines.version"] = "1.6.0" or gradle.properties k..

Hyo Kim
'분류 전체보기' 카테고리의 글 목록 (4 Page)