본문 바로가기

전체 글360

[JPA] 연관관계 매핑 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 객체와 테이블 연관 관계의 차이 객체의 참조와 테이블의 외래키 매핑 방향, 다중성, 연관관계의 주인 객체를 테이블에 맞춰서 모델링 하면 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾지만, 객체는 참조를 사용해서 연관된 객체를 찾기 때문이다. 아래와 같이 외래키의 식별자를 직접 다루게 된다. member1이 속한 팀을 알고 싶을 때에도 member1의 teamId를 통해 team 객체를 찾아야 하는 과정이 계속 생긴다. 객체 지향적이지 않다. // 팀 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team).. 2022. 9. 10.
[Day 80] Spring MVC : 테스팅 Ⅱ 학습 주제 슬라이스 테스트 실습 Hamcrest 새롭게 배운 내용 2022.09.07 - [Back-End/Spring MVC] - 테스팅 슬라이스 테스트란 애플리케이션을 특정 계층으로 쪼개어 하는 테스트로, Mock 객체를 사용한다. 보강할 내용 스모크 테스트 MockMvc MockMvc의 Reqeust 수행 메서드 Introduction to JsonPath MockMvcResultMatchers JsonPathResultMatchers JsonPath 회고 API 계층인 컨트롤러의 각 핸들러 메서드를 슬라이스 테스트하는 실습을 했다. JUnit 기반에서 사용하는 Assertion Framework인 Hamcrest를 이용했다. 슬라이스 테스트는 계층을 나누어서 테스트하는 것으로, 서비스 계층과 데이.. 2022. 9. 8.
[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.
[Day 77] Spring MVC : 트랜잭션 학습 주제 트랜잭션이란? 트랜잭션 경계 Spring에서의 트랜잭션 방식 트랜잭션 적용 선언형 트랜잭션 방식 로컬 트랜잭션과 분산 트랜잭션 새롭게 배운 내용 2022.09.05 - [Back-End/Spring MVC] - 트랜잭션 트랜잭션 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 단위 ACID 원칙 원자성(Atomicity): 하나의 그룹 단위는 모두 성공하거나, 모두 실패해야 한다. 일관성(Consistency): 트랜잭션이 성공적으로 종료 cookiee.tistory.com 보강할 내용 ACID 원칙 H2 commit rollback JDBC Connection 사용하기 JTA를 이용한 분산 트랜잭션 적용 회고 오늘은 페어 프로그래밍 시간과 라이브 세션 시간이 없는데 학습할 내용도 많지 않.. 2022. 9. 5.