728x90

개발/Java & Kotlin 134

[Spring] 비즈니스 로직 층의 설계와 구현

비즈니스 로직 층의 역할은 도메인 모델인지, 트랜잭션 스크립트인지 관계없이 업무 처리(비즈니스 로직)를 하는 것 비즈니스 로직과 밀접한 관계가 있는 트랜잭션 처리는 잘 대응해야 함 5.1 트랜잭션이란? - 트랜잭션이란 관련된 여러 처리를 하나의 큰 처리로 취급할 경우의 단위 - 트랜잭션 내의 모든 처리가 성공했을 때 트랜잭션이 확정 - 트랜잭션 내에서 하나라도 실패할 경우 트랜잭션이 시작하기 전의 상태로 롤백 (1) 여러 업무에 걸쳐진 트랜잭션 예) 고객이 주문한 상품을 공장에 발주하고 물건이 도착하면 고객에게 출하하기 전까지의 트랜잭션 단위 (2) 하나의 사례에서 사용자로부터의 여러 요청에 걸쳐서 발생하는 트랜잭션 예) 상품의 재고를 화면에 표시하고, 출하할 상품 수를 입력한 후 확정 버튼을 누르기까지..

[JPA] 값 타입

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. JPA의 데이터 타입 분류 - 엔티티 타입 (1) @Entity로 정의하는 객체 (2) 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 나이 값을 변경해도 키는 식별자로 인식 - 값 타입 (1) int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 (2) 식별자가 없고 값만 있으므로 변경 시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 2. 값 타입 분류 - 기본값 타입 (1) 자바 기본 타입(int, double) (2) 래퍼 클래스(Integer, Long) (3) String - 임베디드 타입(embedded type, 복합 값 타입) - 컬렉션 값 ..

[Spring] 데이터 액세스 층의 설계와 구현

4.1 데이터 액세스 층과 스프링 - 데이터 액세스 층은 데이터 액세스 처리를 비즈니스 로직 층에서 분리하여 따로 만들어준 층 - 데이터 액세스 처리와 비즈니스 로직이 섞여있으면 유지보수가 어렵고, 코드 가독성이 떨어진다. 4.1.1 DAO 패턴이란? - DAO 패턴은 데이터의 취득, 변경 등 데이터 액세스 처리를 DAO라고 하는 오브젝트로 분리하는 패턴 - 데이터 액세스 방식이 바뀌어도 DAO만 변경하면 된다. - DAO 클래스는 DB의 테이블별로 만든다. 4.1.2 자바의 데이터 액세스 기술과 스프링의 기능 - 자바의 데이터 액세스 기술 (1) JDBC (2) 하이버네이트 & JPA 등 고성능 ORM 프레임워크 (3) MyBatis(iBATIS) (4) 독자 개발한 프레임 워크 등 - 스프링은 여러 ..

[Java] Map안에 Map 안에 List 만들기

회사에서 Java, Spring Boot, Thymeleaf로 작업하고 있다.화면에 테이블을 그리는데, (A, B 영역 / ㄱ, ㄴ, ㄷ 교재 / 1, 2 유닛)Aㄱ12ㄴ1Bㄷ11이런 식으로 그려줘야 했다.Javascript로 할 수도 있었지만, 최대한 로직을 Java쪽에서 만들어주기로 했기 때문에 Map>> 이러한 형태로 만들어서 화면에서 그릴 생각이었다.// 화면으로 보낼 최종 맵Map>> resultMap = new LinkedHashMap();// 임시 맵Map> tempMap = new LinkedHashMap();// 전체 데이터List studyDto = xxxService.findStudyByUserId(userId);맵을 먼저 만들어 놓고 전체 데이터에서 맵에 넣어줄 생각이다.// 영역 ..

[JPA] 프록시와 연관관계 관리

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 프록시 - Member에 프로퍼티로 Team을 가지고 있을 때 em.find로 member을 조회하면 쿼리로 member와 team을 같이 조회한다. - team은 사용하지 않을 것이고 member의 username만 사용한다면 굳이 team을 조회할 필요가 없다. - 필요할 때 조회하기 위해 프록시를 사용한다. 2. 프록시 기초 - em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference(): 데이터 조회를 미루는 가짜(프록시) 엔티티 객체 조회(DB로 쿼리를 날리지 않고 파라미터로 넣어준 클래스를 상속받은 가짜(프록시) 엔티티를 만들어서 프록시 객체가 영속성 컨텍스트에 들어간다.) 3. 프록시 ..

[JPA] 고급 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 - 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 (1) 각각 테이블로 변환 -> 조인 전략 (2) 통합 테이블로 변환 -> 단일 테이블 전략 (3) 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 2. 조인 전략 - 장점 (1) 테이블 정규화 (2) 외래 키 참조 무결성 제약조건 활용가능 (3) 저장공간 효율화 - 단점 (1) 조회 시 조인을 많이 사용, 성능 저하 (2) 조회 쿼리가 복잡함 (3) 데이터 저장 시 IN..

[Java] 트리

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 10-1 트리 - 트리란? 데이터 사이의 계층 관계를 나타내는 자료구조 - 트리 관련 용어 트리는 노드와 가지로 구성 (1) 루트: 트리의 가장 윗부분에 위치하는 노드 (2) 리프: 트리의 가장 아랫부분에 위치하는 노드 (3) 안쪽 노드: 루트를 포함하여 리프를 제외한 노드 (4) 자식: 어떤 노드로부터 가지로 연결된 아래쪽 노드 (5) 부모: 어떤 노드에서 가지로 연결된 위쪽 노드 (6) 형제: 같은 부모를 가지는 노드 (7) 조상: 어떤 노드에서 가지로 연결된 위쪽 노드들 (8) 자손: 어떤 노드에서 가지로 연결된 아래쪽 노드들 (9) 레벨: 루트로부터 얼마나 떨어져 있는지에 대한 값 (10) 차수: 노드가 갖는 자식의 수 (11) 높이: ..

[JPA] 다양한 연관관계 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 연관관계 매핑시 고려사항 3가지 - 다중성 - 단방향, 양방향 - 연관관계의 주인 2. 다중성 - 다대일: @ManyToOne - 일대다: @OneToMany - 일대일: @OneToOne - 다대다: @ManyToMany -> 실무에서 사용 X 3. 단방향, 양방향 - 테이블 (1) 외래키 하나로 양쪽 조인 가능 (2) 사실 방향이라는 개념이 없음 - 객체 (1) 참조용 필드가 있는 쪽으로만 참조 가능 (2) 한쪽만 참조하면 단방향 (3) 양쪽이 서로 참조하면 양방향 - 연관관계의 주인 (1) 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 (2) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 (3) 객체 양방향 관계는..

[Java] 정렬 (2)

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 https://devhooney.tistory.com/35 [Java] 정렬 (1) Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 6-1 정렬 - 내부정렬과 외부정렬 1. 내부 정렬: 정렬할 모든 데이터를 하나의 배열에 저장할 수 있는 경우에 사용하는 알고리즘 2. 외부 정 devhooney.tistory.com 이 글에 이어서... 6-5 셸 정렬 셸 정렬 - 셸 정렬은 단순 삽입 정렬의 장점을 살리고, 단점을 보완한 정렬 알고리즘 class ShellSort { // 셸 정렬 static void sheelSort(int[] a, int n) { for (int h = n/2; h > 0; h/=2) { for (int i =..

[JPA] 연관관계 매핑 기초

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 단방향 연관관계 - 객체를 테이블에 맞춰 모델링(연관관계가 없는 객체) - 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없음 (1)테이블은 외래키로 조인하여 연관된 테이블을 찾는다. (2) 객체는 참조를 사용해서 연관된 객체를 갖는다. - 객체 지향 모델링(객체 연관 관계 사용) - 객체와 테이블의 차이는 이렇게 해결 가능 // Member와 Team 클래스가 Entity 애노테이션을 붙였다고 가정 @Entity public class Member { // 다른 필드 생략 /* @Column(name="TEAM_ID") private Long teamId; 위는 객체를 테이블에 맞추어 모델링 한 것인데 협력 관..

728x90