
Spring Boot와 kotlin을 사용하는 개발자들이 @Transactional 어노테이션을 통해 데이터베이스 트랜잭션을 관리합니다.저도 위와 같은 개발 스택으로 개발을 하고있는데...분명히 예외가 발생했는데도 데이터가 롤백되지 않는 경우를 겪었습니다. "아니 @Transactional 달았고 예외도 났는데 왜 DB에 저장된거지..." 제가 놓친 부분에 대해, try-catch 블록이 롤백을 방했던 경험을 정리했습니다. 기본적으로 예외 발생 시 롤백된다.unchecked exception (RuntimeException 등) 이 발생하고,그 예외가 메서드 바깥으로 전파될 때예시로@Transactionalfun createUser(name: String?) { if (name == null) t..

Kotiln에서는 문자열 처리 시 null 안정성을 확보하기 위해 여러 편리한 확장 함수들을 제공합니다.그중 자주 사용되는 함수는 isNullOrEmpty()와 isNullOrBlank()입니다.두 함수는 문자열이 null인지, 비어있는지 판단할 때 사용하지만, 미묘한 차이가 있어서 구분해서 사용하는 게 좋습니다. 결론 요약값이 없거나 빈 문자열만 체크 → isNullOrEmpty()값이 없거나 빈 문자열 또는 공백만 체크 → isNullOrBlank() isNullOrEmpty()문자열이 null이거나 길이가 0인 경우에 true를 반환합니다.문자열이 아예 없거나 빈 문자열("") 일 때만 true 가 되는 함수입니다. val str1: String? = nullval str2: String? = ..

시스템이 다양한 타임존에서 동작할 때, UTC(협정 세계시)를 기준으로 작업해야 하는 경우가 많습니다. 제가 하는 프로젝트가 세계 어디에서든 사용할 수 있도록 i18n까지 도입하고 협정 세계시도 적용해서 동적으로 바꿔 보여주는 작업을 거칩니다.사용자에게는 로컬 시간을 보여줘야 하죠.Spring Boot에서 LocalDateTime과 처리했던 일을 기록해 봅니다. LocalDateTime과 ZonedDateTime의 차이 LocalDateTime은 타임존 정보를 가지지 않는 시간 정보를 제공합니다. 즉, 시스템의 로컬 타임존에 기반한 날짜와 시간 정보를 나타냅니다. 시간대 정보가 없으므로 단순하게 현재의 시간 정보만을 나타냅니다. ZonedDateTime은 타임존을 포함하는 시간 정보를 제공합니다. 즉,..

제가 백엔드 spring 공부하기 시작할 때부터는 스프링 프로젝트 만들어주는 사이트가 있었는데 옛날 없던 시절에는 직접 코드로 한줄한줄 프로젝트 설정해줬다고하네요... 그래도 인터넷에서 공유해서 복붙정도는 했겠죠. 그래서 소개드릴 spring project 클릭 몇번으로 만들 수 있는 사이트입니다. 이미 많은 개발자들은 알고계셔도 이런 글을 계속 올려줘야 최신 정보로 업데이트되니 가볍게 작성해 보겠습니다. https://start.spring.io/ Spring Boot프로젝트 생성 화면 간단히 설명드리자면 프로젝트를 gradle로 할지 maven으로 할지 선택할 수 있습니다. Project Gradle-Groovy : Groovy언어를 사용하여 Gradle프로젝트를 생성합니다. Gradle-Kotlin..