개발/Spring 7

Spring에서의 트랜잭션 개념과 적용 사례

1. 트랜잭션의 개념과 특징트랜잭션이란?트랜잭션이란 더 이상 쪼갤 수 없는 하나의 작업 단위를 뜻합니다. 여러 데이터 변경 작업을 하나로 묶어 원자적으로 처리하여, 모든 작업이 성공하면 커밋, 한 작업이라도 실패하면 롤백되어 이전 상태로 복구됩니다. 일상 생활에서는 은행 계좌에서 현금을 인출할 때 현금이 계좌에서 인출되거나, 인출되지 않을 뿐이지 그 중간의 상태는 없는 것과 같습니다. 트랜잭션은 이러한 속성을 ACID 속성인 4가지로 분류하고 있습니다.Atomicity(원자성) : 모든 작업이 완료되거나, 하나라도 실패하면 전체 작업이 취소Consistency(일관성) : 트랜잭션이 끝난 후에도 데이터베이스는 항상 일관된 상태를 유지Isolation(고립성) : 동시에 여러 트랜잭션이 실행되더라도 각각은..

개발/Spring 2025.03.23

TDD의 개념과 적용 사례

기존 항해 학습간 TDD를 처음 접하게 되었고 사내 전파를 위해 귀찮기만 한, 오히려 작업량이 늘어버리는 이미지를 가진 TDD의 효용성에 대해 설득을 위해 간단한 정리를 해보고자 합니다.  TDD란?개발을 하다 보면 이런 경험 한 번씩 있으실겁니다.코드 다 짰는데 안 돌아가네? ⇒ 디버깅 ⇒ 버그 발견 ⇒ 수정 ⇒ 또 안 됨 ⇒ OTL 이런 지옥의 무한 루프에 빠지지 않기 위해 탄생한 것이 바로 TDD(Test-Driven Development) 즉 테스트 주도 개발입니다. TDD의 핵심 개념은 아주 간단합니다. 코드를 짜기 전에 실패하는 테스트를 먼저 작성하자! 즉, 기능을 만들고 테스트하는 게 아니라 테스트부터 만들고 그걸 통과하는 개발을 진행하는 방식입니다. 쉽게 말하면 시험 문제를 보고 거기에 맞..

개발/Spring 2025.03.15

이제 와서 고쳐보는 2024 내 코드

2025년도 두 달이나 지나 벌써 3월입니다. 작년 10월 항해 플러스 백엔드 교육을 통해 많은 인사이트를 얻었고 사용하지 않으면 까먹을게 뻔하니 틈틈이 사내 SI용 템플릿을 개발하고 있었습니다. 당연히 학습과는 달리 실무에 적용하며 많은 어려움을 겪고 있어 다시 한 번 이전에 작성한 코드를 보며 또 다른 인사이트를 얻어보려 합니다.과제 선정항해 당시 선택할 수 있었던 과제는 콘서트 예매 사이트와 E-Commerce 사이트가 있었고 비록 팀 미션은 아니지만 상호 피드백을 위해 학습 매니저님과 팀원들과의 논의 끝에 선정했던 과제는 E-Commerce로 진행하게 되었습니다. Spring Boot로 API 서버만 구현했었고 주요 기능으로는 잔액 충전 및 조회 / 상품 조회 / 장바구니 / 주문 및 결제가 있습..

개발/Spring 2025.03.09

[Spring] json deserialize ClassCastException

내부 API 통신 중 T 타입으로 받은 DTO가 해당 DTO 객체가 아닌 LinkedHashMap으로 인식되는 문제를 겪었습니다. 이유를 찾아보니 WebClient의 bodyToMono(Class) 를 통해 역직렬화시 내부적으로 Jakson 라이브러리를 사용하며 json 데이터를 단순히 List로 지정시 "객체"가 어떤것인지 명확하게 알지못하기 때문에 기본 타입인 LinkedHashMap으로 변환하게 됩니다. 구글링에서 흔히 나오는 간단한 해결 방법은 다음과 같았습니다. ObjectMapper mapper = new ObjectMapper(); mapper.convertValue(타겟 클래스, new TypeReference()); 하지만 별도의 후처리가 번거롭다면 문제점 자체가 어떤 타입인지 명확히 알..

개발/Spring 2022.06.16

InvalidDefinitionException 에러

WebClient를 사용하여 크롤링할 데이터를 받는 도중 InvalidDefinitionException 에러가 발생했다. 에러 로그를 읽어보니 기본 생성자가 없다고 나오고 관련 검색을 해봐도 기본 생성자를 생성해봐라! 라는 답변이었다. 이는 불변 객체를 선언하고 싶은 나에게는 맞지 않는 해답이기 때문에 더 찾아보니 @JsonCreateor와 @JsonProperty를 사용하는 방법을 찾았고 다음과 같이 수정 후 정상 작동하는것을 확인했다. 참고 https://www.baeldung.com/jackson-deserialize-immutable-objects Deserialize Immutable Objects with Jackson | Baeldung Learn how to use Jackson to d..

개발/Spring 2022.06.08

Spring Data JPA - 2

패스트캠퍼스 강의를 보며 정리한 내용입니다. 1. @Repository persistence layer를 구현하는 클래스는 @Component와 마찬가지로 해당 클래스를 빈으로 등록해서 사용해야 합니다.@Repository로 등록을 하게되면 persistence layer에서 발생하는 에러를 DataAccessException으로 Spirng error로처리해주기 때문입니다. 하지만 JPA를 사용할 때 어노테이션 없이 extends 받는것만으로 사용하고 있는데 그 이유는 상속받는 JpaRepository의 구현체를 따라가보면 알 수 있습니다 따라서 Spring Data JPA를 사용하게 될 경우 직접 @Repository 어노테이션을 사용할 일은 없다고 봐도 무방합니다. JpaRepository의 상속 ..

개발/Spring 2022.02.25

Spring Data JPA - 1

1. JPA 개요 1-1. ORM Object Relational Mapping의 약자로 한글 해석은 객체 관계형 매핑입니다. 간단하게 말하면 관계형 데이터베이스의 테이블 데이터를 자바 객체와 매핑하는 기술을 뜻합니다. ORM을 통해 얻고자 하는 것들은 다음과 같습니다. 특정 DB에 종속된 표현이나 구현들을 할 필요가 없기에 DB 변경에 유연함. DB에 종속된 표현이 아닌 객체의 이점을 살릴 수 있기에 객체간 참조나 type-safety에 유리함. 연결 관리, 자원의 관리 등의 동작을 프레임워크에 맡겨 필요한 비즈니스 로직에만 집중할 수 있음. 1-2. JPA Jakarta(Java) Persistence API의 약자로 자바에서 ORM 기술을 활용하여 RDBMS를 다루기 위한 인터페이스의 집합입니다. ..

개발/Spring 2022.02.24