본문 바로가기

Back-End/Spring129

[Spring Boot] JUnit을 이용하여 테스트 코드 작성하기 (feat. Mockito) 단위 테스트(Unit Test): 비즈니스 로직에서 사용하는 각각의 메서드를 독립적으로 테스트한다. 슬라이스 테스트: 애플리케이션을 특정 계층으로 쪼개어 하는 테스트로, Mock 객체를 사용한다. 통합 테스트: 클라이언트 툴 없이 개발자가 짜 놓은 테스트 코드를 실행시켜서 기대 결과를 확인한다. Controller의 API를 호출하면 서비스 계층과 데이터 액세스 계층을 거쳐 기대 결과를 확인한다. 기능 테스트: 사용자 입장에서 애플리케이션의 기능이 올바르게 동작하는지 테스트한다. 일반적으로 테스트 전문 부서에서 진행하며, API 툴이나 데이터베이스까지 연관되어 있다. 🌳 F.I.R.S.T 원칙 Fast: 테스트 케이스는 빨라야 한다. ※ 테스트 케이스: 테스트를 위한 입력 데이터, 실행 조건, 기대 결과.. 2022. 9. 7.
ApplicationEventPublisher: How to use events in Spring | @Async ApplicationEventPublisher는 ApplicationContext가 상속받는 인터페이스(기능) 중 하나이다. 이벤트란? 회원 가입을 하면 이메일을 전송하는 서비스가 있다고 가정하자. 핵심 로직은 회원 가입 서비스이고, 이메일 전송은 부가적인 이벤트라고 볼 수 있다. 하나의 서비스에 여러 로직이 섞여 있으면 유지보수가 어렵고 코드가 복잡해진다. 이메일 전송 중에 문제가 생긴다면? 여러 로직이 존재할 때 이 모든 로직을 롤백 하는 것은 비효율적이다. Service 클래스에는 회원 가입 로직만 남기고 이메일 전송 로직은 개별 이벤트로 처리할 수 있다! 로직 사이에 이벤트 Publisher 배치 → 이벤트를 던진다! → 리스너가 이를 캐치해서 이벤트 로직 실행 🌿 이벤트 클래스 생성하기 이 클래.. 2022. 9. 5.
트랜잭션 트랜잭션이란 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 단위이다. ACID 원칙 원자성(Atomicity): 하나의 그룹 단위는 모두 성공하거나, 모두 실패해야 한다. 일관성(Consistency): 트랜잭션이 성공적으로 종료되면, 비즈니스 로직의 의도대로 일관성 있게 처리돼야 한다. 격리성(Isolation): 여러 개의 트랜잭션이 실행될 때, 서로 영향을 주지 않고 독립적으로 실행되어야 한다. 지속성(Durability): 트랜잭션이 완료되면 DB가 종료되어도 데이터는 물리 저장소에 저장되어 결과가 지속되어야 한다. 커밋과 롤백 커밋: 모든 작업을 최종적으로 DB에 반영한다. 이 명령을 수행하면 하나의 트랜잭션 과정이 종료된다. 롤백: 작업 중 문제가 생겼을 때, 트랜잭션 내 수행된 작업을 .. 2022. 9. 5.
비즈니스 예외 던지기 및 예외 처리 보호되어 있는 글 입니다. 2022. 8. 24.
Spring MVC 패턴의 예외 처리 | @ExceptionHandeler, @RestControllerAdvice 보호되어 있는 글 입니다. 2022. 8. 24.
서비스 계층에서의 DI DI를 통한 서비스 계층과 API 계층의 연동 API 계층에서 구현한 Controller 클래스와 서비스 계층의 Service 클래스의 상호작용 Service: 도메인 업무 영역을 구현하는 비즈니스 로직과 관련을 가진다. 도메인 모델: 빈약한 도메인 모델과 풍부한 도메인 모델로 구분하며 DDD(도메인 주도 설계)와 관련이 깊다. 매퍼를 이용한 DTO 클래스와 엔티티 클래스 매핑 📄 Member 도메인 엔티티 DTO의 역할: 클라이언트의 요청 데이터 ↔ Controller의 핸들러 메서드 (@ReqeustBody) Member 클래스의 역할: API 계층 ↔ 서비스 계층 @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Member {.. 2022. 8. 23.