TIL 38

+38 단위테스트란? JUnit6

단위테스트란? ㅁ버그 발견 시간이 늦어짐에 따라 비용이 기하급수적으로 커지는걸 알 수 있음.. ㅁ 작은 단위로 쪼개서 각 단위가 정확하게 동작하는 지를 검사하는 테스트 기법 ㅁ 빠르게 작성할 수 있고 문제 발생시 어느 부분이 잘 못 되었는지를 빠르고 정확하게 확인할 수 있다는 장점 Development : 개발 Unit Tests (단위테스트) : 개발자 테스트 QA Testing 블랙박스 테스팅 주로 QA팀이 Production 환경과 유사한 환경에서 테스트 Producton : 실 서비스 운영 환경 :: 자바 프로그래밍 언어 용 단위 테스트 프레임워크 @BeforeEach @BeforeEach void setUp() { System.out.println("각각의 테스트 코드가 실행되기 전에 수행");..

TIL 2023.08.08

+37 Spring 고어 Entity 삭제

orphanRemoval JPA에서 관계형 데이터베이스와 엔티티 사이의 연관관계를 관리할 때 사용 :: 부모 엔티티와 연관된 자식 엔티티가 더 이상 부모엔티티와 연관되지 않을 때 자동으로 삭제 연관관계 설정 @OneToMany , @OneToOne 관계에서 orphanRemoval 속성 설정 할 수 있음 CascadeType.REMOVE를 함께 사용하는 것이 일반적 영속성컨텍스트에서 동작함 그래서 EntityManger가 활성화된 트랜잭션 내에서 동작 장점 1. 자동삭제 : 부모-자식 간의 일관성을 유지하면서 데이터베이스에 불필요한 데이터가 남지 않음 2. 편의성 : 부모엔티티에서 자식 엔티티를 삭제하는 로직을 따로 구현 할 필요 없음 사용시 주의사항

TIL 2023.08.04

+36 영속성 전이

● 영속성 전이란? :: CASCADE의 PERSIST 영속 상태의 Entity에서 수행되는 작업들이 연관된 Entity까지 전파되는 상황을 뜻한다. 부모엔티티의 상태변화가 자식 엔티티에도 전파되어 자동으로 처리됨 즉, 부모 엔티티의 영속성 상태 변화에 따라 연관된 자식 엔티티도 같은 변화를 따라 갈 수 있음 영속성 작업 1. 저장(INSERT) : 새로운 엔티티를 데이터베이스에 저장하는 작업 2. 수정(UPDATE) : 엔티티의 변경 내용을 데이터베이스에 반영하는 작업 3. 삭제 (DELETE) : 엔티티를 데이터베이스에서 삭제하는 작업 4. 병합 (MERGE) : 엔티티의 변경 내용을 데이터베이스에 병합하는 작업 5. 새로고침(REFRESH) : 데이터베이스에서 엔티티의 최신상태를 가져와 엔티티를 갱..

TIL 2023.07.27

+35 Spring 지연로딩

지연로딩(Lazy Loading)? :: 필요한 시점에 데이터를 로드하는 방법을 의미 :: Hivernate라는 ORM 프레임워크를 기반으로 함 :: Hivernate는 JPA 구현체 중 하나로 엔티티를 로드할 때 지연로딩을 사용 할 수 있음 @ManyToOne 과 @OneToOne 관계에서는 즉시로딩 (Eager Loading) @OneToMany 와 @ManyToMany 관계에서는 지연로딩 (Lazy Loading) 지연로딩 애플리케이션 에서 필요한 시점에 실제로 데이터를 로드 할 수 있음 JPA에서는 Fetch Type 라는 방식을 사용 ㄴ Fetch Type에는 LAZY , EAGER 방식있음 LAZY :필요한 시점에 정보를 가져옴 EAGER : 이름의 뜻 처럼 조회할 때 연관된 모든 Entity..

TIL 2023.07.26

+34 Spring N 대 M관계

@ManyToMany N 대 M 관계를 맺어주는 역할을 가지고 있음 ● N : M관계를 풀어내기 위해서 중간 테이블 생성 강의에서 다룬 코드 음식 Entity (외래키의 주인) 단방향 @Entity @Table(name = "food") public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private double price; @ManyToMany @JoinTable(name = "orders", // 중간 테이블 생성 joinColumns = @JoinColumn(name = "food_id"), // 현재 위치인 Food Entity 에서 중간 테이블..

TIL 2023.07.22

+33 Spring 1대N 연관관계

@OneToMany :: 1대 N관계를 맺어주는 역할 :: 1 : N 한쪽에 엔티티 관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있는 것을 의미 :: 소유( has a) 관계라 생각하자 단방향 @OneToMany 일대다 관계를 설정하는 에노테이션, 여러 개의 사용자가 하나의 음식에 속 할 수 있음 @JoinColumn(name = "food_id") User엔티티와 조인을 할 때 사용할 컬럼의 이름을 지정 users테이블에 food_id 라는 컬럼이 생성 private List userList = new ArrayList(); 해당 음식을 소유하는 사용자 목록을 저장하는 리스트 양방향 원래 일반적으로 1대N관계에서는 양방향 관계 x 양방향 관계를 맺으려면 음식 Entity를 외래키의 주인으로 정해주기 ..

TIL 2023.07.20

+32 Entity 연관관계 1 대 1 관계

더보기 @OneToOne :: 1 대 1 관계를 맺어주는 역할 단방향 관계 먼저 외래키 (FK)를 정해야 한다 1 대 1 관계에서는 외래 키의 주인을 직접 정해야함 ※ 외래 키 주인만이 외래 키를 등록, 수정 , 삭제 할 수 있으며 주인이 아닌 쪽은 오직 외래키를 읽기만 가능 @JoinColumn() :: 외래키의 주인이 활용하는 애너테이션 ex) 컬럼명, null여부, unique 여부 등 지정 가능 ● 고객 Entity가 외래 키의 주인인 경우 (단방향) 양방향 관계 양방향 관계에서는 외래 키의 주인을 지정해 줄때 mappedBy 옵션을 사용 mappedBy의 속성값은 외래 키의 주인인 상대 Entity 필드명을 의미 양방향에서는 외래 키의 주인은 상대 Entity 타입의 필드를 가지면서 @JoinC..

TIL 2023.07.18

+31 Entity 연관 관계

연결 안했을 때(기본) food_id / user_id컬럼추가 ALTER TABLE users ADD food_id bigint; ALTER TABLE food ADD user_id bigint; user 테이블 food 테이블 하지만 이런식으로 하면 위의 테이블 처럼 중복한 값이 들어가있음 참고(일반적으로 이런 방식으로 넣으면 안됨) 예외도 있음 중간역할을 해줄 주문테이블 생성 create table orders ( id bigint not null auto_increment, user_id bigint, food_id bigint, order_date date, primary key (id) ); 중간 테이블을 생성하게 되면 중복도 제거할 수있으며 주문 테이블ID값으로 조회 가능 이렇게 되면 고객:음..

TIL 2023.07.17

+29 RestTemplate의 exchange

RestTemplate의 exchange 개발자가 RestTemplate으로 요청을 보낼 때 Header에 특정 정보를 같이 전달할 때 사용 클라이언트 입장의 서버 - service public List exchangeCall(String token) { // 요청 URL 만들기 URI uri = UriComponentsBuilder .fromUriString("http://localhost:7070") .path("/api/server/exchange-call") .encode() .build() .toUri(); log.info("uri = " + uri); User user = new User("Robbie", "1234"); RequestEntity requestEntity = RequestEnt..

TIL 2023.07.14