부트캠프 개발일기/Spring MVC19 53일차: @Async 비동기처리와 Spring Event (+ Transaction) 오늘은 트랜잭션 구현 실습을 진행했다. 사실 스프링에서 트랜잭션은 @Transactional을 사용하면 쉽게 구현할 수 있다. 그래서 실습에서 몇가지 제약 조건을 걸고 트랜잭션을 구현했다. (Case) 회원가입을 하면 가입한 메일로 가입 완료 메일이 전송된다. 만약 가입 완료 메일이 정상적으로 전송되지 않으면 가입 과정에서 오류가 생긴 것으로 보고 회원가입 정보를 삭제하는 코드를 구현하였다. (실제 상황이라면 메일 전송에 오류가 생기면 카톡이나 SMS를 보내거나, 혹은 회원가입을 진행 중 상태로 두는 등 여러 가지 조치방법이 있을 수 있다.) 회원 데이터 저장과 메일 전송을 *비동기적으로 처리하여 실행 시간을 단축시키는 방법을 사용해야한다. "동기(Synchronous) 방식"은 진행 과정이 순차적으로 .. 2023. 4. 27. 52일차: Transaction(트랜잭션) ❯ Transaction(트랜잭션) Transaction은 31일차 SQL 학습에서 가볍게 다루고 넘어갔던 내용이다. 여러개의 작업을 하나의 그룹처럼 묶어서 처리하는 작업 단위이다. 작업 중 하나라도 처리에 실패하면 전체가 실패한 것으로 간주하며, 모든 작업이 성공해야 정상적으로 종료되는 단위를 말한다. 트랜잭션은 ACID의 특성을 가진다. (참고: 2023.03.28 - [부트캠프 개발일기/Database] - 부트캠프 31일차 - SQL, ACID) Commit: 모든 작업을 최종적으로 데이터베이스에 반영하는 명령어이다. commit 명령을 수행하면 하나의 트랜잭션이 종료되며 변경된 내용이 데이터베이스에 영구적으로 저장된다. Rollback: 작업 중 문제가 발생했을때 트랜잭션에서 수행했던 작업을 취.. 2023. 4. 26. 51일차: Spring Data JPA(데이터 액세스 계층 구현) ❯ Spring Data JPA 기술 적용 (Spring Data JDBC -> Spring Data JPA) 1. 엔티티 클래스 Spring Data JPA에 맞게 수정(+ @JoinColumn과 mappedBy 차이) Spring Data JDBC에서는 단방향 연관관계만 지원하는 반면 Spring Data JPA는 양방향 연관관계를 지원한다. 따라서 다대일 관계에 일대다 매핑을 추가하여 양방향 연관관계를 만들어주면 양쪽 클래스에서 상호 참조가 가능해진다. 다대다 관계의 경우 @ManyToMany로 바로 적용시키는 것이 아니라, 두 엔티티를 연결하는 엔티티를 통해 연관관계를 매핑할 수 있다. ex. [주문 - 커피] 관계 하나의 커피는 여러개의 주문에 포함될 수 있으며, 하나의 주문은 여러개의 커피를 .. 2023. 4. 25. 50일차: 엔티티간 연관관계 매핑 ❯ 연관관계 매핑 엔티티 클래스간의 관계를 만들어주는것을 연관관계 매핑이라고 한다. 테이블간의 관계를 만들때 외래키를 사용하는것과는 달리 엔티티 클래스간 관계는 객체 참조를 통해 이루어진다. 엔티티간 참조하는 객체 수에 따라 [1 : N], [N : 1], [N : N], [1 : 1] 의 관계로 구분된다. 1. 단방향 연관관계 단방향 관계는 크게 두가지로 구분할 수 있다. -> 일대다 연관관계 Member가 Order를 참조하는 단방향 관계 Member에서는 Order 정보를 얻을 수 있으나 Order 에서는 Member의 정보를 얻을 수 없다. -> 다대일 연관관계 Order가 Member를 참조하는 단방향 관계 Order에서 Member 정보를 얻을 수 있으나 Member 에서는 Order의 정보를.. 2023. 4. 24. 49일차: JPA(Java Persistence API) ❯ JPA(Java Persistence API) 자바에서 객체를 관계형 데이터베이스에 저장, 검색, 업데이트 및 삭제할 수 있는 API를 말한다. Java 인터페이스로 사양이 정의되어있으며 이를 구현한 구현체를 통해 기능을 사용할 수 있다. 대표적인 구현체로는 Hibernate ORM, EclipseLink, OpenJPA, DataNucleus 등이 있다. (그 중 Hibernate ORM을 학습할 예정) ❯ P(Persistence), Persistence Context(영속성 컨텍스트) 사전적으로 영속성, 지속성이라는 의미를 갖는다. 오랫동안 지속된다는 개념이다. JPA에서는 Persistence Context(영속성 컨텍스트)를 통해 엔티티 객체의 영속성을 관리하게 된다. 1. 새로운 엔티티 객.. 2023. 4. 21. 48일차: Pagination(페이지네이션) API Pagination 이란 데이터가 대량으로 있을 때 이를 일정하게 나누어서 페이지에 필요한 만큼만 보여주는 것을 말한다. Spring에서 제공하는 페이지네이션 API를 사용하면 보다 쉽게 구현할 수 있다. 페이지 번호가 page, 한 페이지에 담기는 데이터 개수가 size 인 경우 쿼리문을 이용하면 [SELECT * FROM table명 LIMIT (page-1)*size, size] 혹은 [SELECT * FROM table명 LIMIT size OFFSET (page-1)*size] 등의 구문을 사용해 데이터를 조회해야 한다. 이러한 페이지네이션은 스프링에서 Pageable, PageRequest 를 사용해 적용할 수 있다. Pageable 아래 내용에 표기된것처럼 Pageable 은 페이지네이션을 .. 2023. 4. 20. 이전 1 2 3 4 다음