LoGin
article thumbnail
Spring @Transactional 롤백 안 되는 이유? Try-Catch 사용하며 놓친 경험
Back End/Spring 2025. 5. 26. 18:52

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

article thumbnail
[Kotlin] isNullOrEmpty() vs isNullOrBlank() 차이와 사용법
코딩/Kotlin 코틀린 2025. 5. 21. 22:27

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

article thumbnail
JPA 지연로딩 (Lazy Loading)과 N+1 문제 정리 - fetchJoin, DTO활용
Back End/Spring 2025. 4. 9. 21:21

JPA의 관심이 세계적으로 뜨거워지면서 많은 사람들이 공부하고 많은 조직이 JPA를 도입하고 있습니다. JPA 지연로딩에 대해 많은 사람들이 강조하는데 나름 이해하고 공부한 내용을 정리해 보았습니다. 지연 로딩이란?JPA는 엔티티(Entity) 간의 연관 관계를 자동으로 매핑해 주는 편리한 기능을 제공합니다.이때 성능을 위해 fetch 전략을 설정하게 되는데, 가장 대표적인 것이 '지연 로딩(Lazy Loading)'입니다. 지연 로딩은 데이터를 실제로 사용할 때까지 SQL 쿼리를 실행하지 않는 방식입니다. 예를 들어,@Entityclass Member( @Id @GeneratedValue val id: Long? = null, val name: String, @ManyToOne(fetc..

article thumbnail
[프로그래머스] 공원 산책 JavaScript

문제 링크 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  문제지나다니는 길을 'O', 장애물을 'X'로 나타낸 직사각형 격자 모양의 공원에서 로봇 강아지가 산책을 하려합니다. 산책은 로봇 강아지에 미리 입력된 명령에 따라 진행하며, 명령은 다음과 같은 형식으로 주어집니다.["방향 거리", "방향 거리" … ]예를 들어 "E 5"는 로봇 강아지가 현재 위치에서 동쪽으로 5칸 이동했다는 의미입니다. 로봇 강아지는 명령을 수행하기 전에 다음 두 가지를 먼저 확인합니다.주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다.주어진 방향으로 이동 중 장애물을 만나는지 확인합니다.위 두 가지중 어느 하나라도 해..

article thumbnail
[JavaScript] 문자열(String) 배열(Array) 변환 방법
코딩/JavaScript 2024. 11. 9. 18:51

목차1. 문자열을 배열로 변환 (String -> Array)2. 배열을 문자열로 변환 (Array -> String) 요약str.split();arr.join("");  문자열을 배열로 변환split()const str = "apple,banana,orange";const array = str.split(","); // ["apple", "banana", "orange"]문자열에서 배열로 변환 시 가장 많이 사용하는 함수 Array.from()const str = "Stirng";const array = Array.from(str); // ["S", "t", "r", "i", "n", "g"]ES6에 새로 추가된 문법이라 Explor에서는 동작하지 않아 폴리필이 필요합니다. 스프레드 연산자 (...st..

article thumbnail
LocalDateTime과 ZonedDateTime 시간, UTC 타임존 적용하기
Back End/Spring 2024. 10. 28. 20:26

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

article thumbnail
[Java] NIO 기반 파일 입출력 합치기 Kotlin 예제
코딩/JAVA 2024. 8. 29. 21:26

파일 내용을 합칠 일이 드물지만 일하는 중 SQL 파일을 하나로 합쳐야 하는 경우가 생겼습니다. Java NIO(New Input/Output)는 JDK 1.4부터 도입된 새로운 입출력 API로, 기존 IO 보다 빨라졌다고 하네요. Java NIO란 뭘까New Input/Output의 약자로, 기존 IO의 느린 처리 속도를 개선하고 효율적인 입출력 작업을 제공하기 위해 도입된 API입니다. 그렇다면 IO는 뭘까자바의 표준 라이브러리로, 프로그램과 외부 (파일, 네트워크 등) 간의 데이터를 입출력하는 기능을 제공합니다. Java IO는 JDK1.0부터 포함된 API로, 스트림 기반의 동기식 입출력을 제공합니다. 자바에서 파일 읽기, 파일 쓰기, 네트워크 통신 등의 다양한 입출력 작업을 수행하는 데 사용되겠..

article thumbnail
깃허브 데스크탑(Github Desktop) 사용법 및 시작하기
깃허브, 노션 2024. 8. 12. 23:03

회사, 팀에서 깃허브 사용법이 각자 다르겠지만저는 프로젝트를 시작한다면 에자일 방법론인 git flow 방법을 애용합니다. 프로그램은 github desktop, sourcetree, github사이트 세 개를 이용해서 프로젝트를 관리합니다.인텔리제이 하나로 다 관리할 수 있지만. 인텔리제이 사용하지 않을 땐 도움을 많이 준 프로그램이에요.  깃허브 데스크탑의 장점은 코드의 바뀐점(버전관리)을 쉽게 확인할 수 있고깃허브 명령어(Push, Pull, Fetch, Commit, Revert, Checkout 등등)를클릭 몇번만으로 진행할 수 있다는겁니다. 깃허브의 기본적인 사용을 Github Desktop으로 쉽게 해결할 수 있다는 점  용어로컬(local) : 내 컴퓨터원격 : Github 사이트브렌치(b..

article thumbnail
Spring Security UsernamePasswordAuthenticationToken 사용해보자
Back End/Spring 2024. 7. 25. 20:21

spring으로 개발한다고하면 한번쯤은 들어봤을 시큐리티.처음에 공부하려고 열어봤다가 바로 닫았던 기억이 있네요.  Spring Security는 Java 애플리케이션에서 보안을 제공하는 강력한 프레임워크인데요.시큐리티는 인증(Authentication)과 권한 부여(Authorization) 작업을 처리하는데 중점을 두고 있고, 다양한 보안 기능을 제공합니다. 그 중에서도 'UsernamePasswordAuthenticationToken' 클래스를 알아보겠습니다. UsernamePasswordAuthenticationToken'UsernamePasswordAuthenticationToken' 클래스는 사용자 인증을 처리하는 중요한 역할을합니다.Spring Security에서 사용자 이름과 비밀번호를 기..

article thumbnail
Javascript 이벤트 버블링(eventBubbling) 해결 방법과 다양한 이벤트 처리 정리

이벤트 버블링(EventBubbling)은 웹 개발에서 발생하는 이벤트 처리 메커니즘 중 하나로, 특정 요소에서 발생한 이벤트가 상위 요소들로 전파되는 현상을 말합니다. 저는 이 현상을  이벤트 겹쳐있을 때 '클릭' 이벤트를 한번 클릭한 거로 겹쳐있는 리스너들이 작동해서 이 현상에 대해 공부하게 되었습니다. 이벤트 버블링의 원리이벤트 발생은 사용자가 버튼을 클릭하는 등 특정 이벤트가 발생하면, 그 이벤트는 가장 구체적인 요소에서 시작됩니다.이벤트의 Target이라고 생각하면 됩니다. 이 이벤트는 해당 요소에서 시작하여 점차 상위 요소로 전파됩니다. 이를 이벤트 버블링이라고 합니다. 이는 DOM 트리(DOM Tree)를 따라 최상위 요소까지 전파됩니다. 각 요소는 이벤트 핸들러가 연결되어 있는 경우, 이벤..

728x90