Spring - 엔티티 간의 연간관계 매핑(일대다,다대일,다대다,일대일)
2022. 11. 5. 18:38
Spring
📌단방향 연관관계 한쪽 클래스만 다른 쪽 클래스의 참조 정보를 가지고 있는 관계를 단방향 연관 관계라고 한다. 📌양방향 연관 관계 양쪽 클래스가 서로의 참조 정보를 가지고 있는 관계를 양방향 연관 관계라고 한다. 📌일대다 단방향 연관 관계(일에서 다의 정보를 가지고 있음) 일대다- 일(1)에 해당하는 클래스가 다(N)에 해당하는 객체를 참조할 수 있는 관계 한명의 회원이 여러 건의 주문을 할 수 있으므로 Member와 Order는 일대다 관계이며, Member만 List 객체를 참조할 수 있으므로 단방향 관계이다. 일대다 단방향 매핑은 잘 사용하지 않는다. 위의 일대다 단반향 연관 관계에서 Order 클래스가 ‘테이블 관계에서 외래키에 해당하는 MEMBER 클래스의 참조값’을 가지고 있지 않아 일반적인 ..
Spring - JDBC기반 Domain Entity와 테이블 설계
2022. 11. 2. 11:55
Spring
👀애그리거트 루트(Aggregate Root) 선정 기준 애그리거트 내의 도메인들 중에서 다른 모든 도메인들과 직간접적으로 연관이 되어 있는 도메인 데이터베이스의 테이블 간 관계로 보자면, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인들은 자식 테이블 즉, 애그리거트 루트(Aggregate Root)의 기본키 정보를 다른 도메인들이 외래키 형태로 가지고 있다고 볼 수 있다 관계형 데이터베이스에서 A 테이블의 기본키를 B 테이블이 가지고 있다면 A는 부모 테이블이 되고, B는 자식 테이블이 됩니다. B인 자식 테이블이 가지고 있는 A 테이블의 기본키를 외래키라고 함 📋샘플 애플리케이션 도메인 엔티티 및 테이블 설계 도메인에서 애그리거트 루트 찾기 📜애그리거트 간의 관계 회원 정..
Spring - @MapStruct로 MapperImpl생성 시 입력값으로 null이 들어오는 오류
2022. 10. 31. 10:17
Error
@MapStruct를 이용해 자동 mapper구현체 생성을 하여 코드를 작성한 후 postman으로 다음과 같은 값을 입력하려 하였으나 전부 null값이 들어오며 500오류가 발생하였다. 콘솔창에 뜨는 에러메세지는 다음과 같다. NULL not allowed for column 코드를 확인해보았다. 원인은 @MapStruct를 통해 자동 작성된 Mapper의 구현체가 제대로 작성되지 않았기 때문이었다. 원래는 mapper구현체에서 Dto객체가 들어오면 다음과 같이 get,set으로 값을 가져와 변환하고 Entity객체로 리턴해주어야 하나 get과 set메서드가 들어가는 부분이 전부 제대로 만들어지지 않았다. @Component public class CoffeeMapperImpl implements Co..
Spring - 유효성 검증
2022. 10. 30. 14:23
Spring
MemberPostDto 클래스의 각 멤버 변수에 유효성 검증을 위한 애너테이션을 추가한 후 컨트롤러로 전달받는 DTO 매개변수 앞에 @Valid를 붙여줌 @NotBlank 값이 비어있지 않은지를 검증 null 값이나 공백(””), 스페이스(” “) 같은 값들을 모두 허용하지 않는다. 유효성 검증에 실패하면 에러 메시지(400 ‘Bad Request’)가 콘솔에 출력 @Email 유효한 이메일 주소인지를 검증 유효성 검증에 실패하면 내장된 디폴트 에러 메시지(400 ‘Bad Request’)가 콘솔에 출력 @Pattern 정규 표현식(Reqular Expression)에 매치되는 유효한 값인지를 검증 📌쿼리 파라미터(Query Parameter 또는 Query String) 및 @Pathvariable에..
Spring - Mapper 클래스의 구현, MapStruct
2022. 10. 30. 14:19
Spring
매퍼(Mapper)를 이용한 DTO 클래스 ↔ 엔티티(Entity) 클래스 매핑하는 과정을 정리해 보려 한다. 요그림에서 Controller 에서 DTO Entity Class 요 과정을 매퍼라 한다!! 먼저 매퍼클래스를 구현해보자! //MemberController에서 사용하는 DTO 클래스와 Member 간에 서로 타입을 변환해주는 매퍼(Mapper)클래스 import org.springframework.stereotype.Component; @Component // (1)스프링빈 등록을 위해 추가 public class MemberMapper { // (2) MemberPostDto를 Member로 변환 public Member memberPostDtoToMember(MemberPostDto mem..
Spring - 컨트롤러(DI를 통한 서비스 계층 ↔ API 계층 연동과정)
2022. 10. 30. 14:15
Spring
DI를 통한 서비스 계층 ↔ API 계층 연동과정을 정리해보려 한다. 순서 -Entity클래스인 member 클래스 생성 -memberController 코드구현 -MemberService에 @Service 에너테이션 추가 (Spring Bean으로 만들어주기 위해) -위 코드의 문제점 먼저 Entity클래스인 member 클래스를 생성해준다. 도메인 엔티티(Entity) 클래스란 서비스 계층에서 데이터 액세스 계층과 연동하면서 비즈니스 로직을 처리하기 위해 필요한 데이터를 담는 역할을 하는 클래스 DTO와 비슷한 역할을 하지만 DTO는 클라이언트와 API 계층 사이에서 데이터를 담아 전달하고, 도메인 엔티티 클래스는 API계층과 서비스 계층 사이에서 데이터를 전달한다. 📝member 클래스 생성 imp..
Spring - NoSuchBeanDefinitionException오류
2022. 10. 26. 01:12
Error
김영한님의 스프링 강의를 들으며 컴포넌트 스캔을 사용하는 테스트를 돌리던 중 다음과 같은 오류가 발생하였다. NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 대충 해석해보면 MemberRepository타입 중 autowire 가능한 bean이 한개도 없다는 것이었다. 혹시 해서 코드를 확인해보니 모두 맞게 작성하였음에도 오류가 발생하였다. 원인은 패키지 위치에 있었다. @ComponentScan은 해당 ..
자료구조- DFS와 BFS의 탐색과정 차이
2022. 10. 26. 01:11
Java
DFS와 BFS가 많이 헷갈려서 이해하기 가장 편했던 방식으로 정리해보려 한다. 정말정말 풀어서 썼기에 깔끔하게 핵심만 넣었다기 보단 DFS와 BFS를 처음 접하는 사람이 이것을 이해하는 과정을 상세하게 다 적었구나 생각하면 될 것 같다. DFS vs. BFS DFS는 깊이우선 탐색 BFS는 넓이 우선 탐색을 뜻한다. 깊이 우선 탐색은 말 그대로 정점에서 갈 수 있는 가장 먼(깊은) 점까지 들어가서 탐색하는 것이고, 넓이우선 탐색은 현재 정점에 연결된 가장 가까운 점들부터 탐색한다. 검색 속도는BFS가 빠르지만 DFS가 더 간단하다. 따라서 검색 대상 그래프가 크거나 경로의 특징을 저장해둬야 하는 문제는 DFS를, 검색 대상의 규모가 크지 않고 최단거리를 구해야 하는 문제는 BFS가 유리하다. 일상생활에..
Java- StringTokenizer()사용 중 ArrayIndexOutOfBoundsException 오류
2022. 10. 15. 13:38
Error
처음 백준 문제를 풀때 가장 많이 헷갈리는 부분이 입출력을 어떻게 받는가이다. 아직 StringTokenizer의 사용법이 헷갈려서 오류가 뜰 때가 많다. 처음에 가장 많이 떳던 오류는 NoSuchElementException였다. 아직 정확한 원인은 모르지만 nextToken으로 받은 후 값을 사용하지 않고 바로 nextToken을 사용하여 다른 값을 받으려고 하면 뜬다. 또 StringTokenizer는 무조건 '공백'으로만 입력받는다! 줄 단위로 입력받고 싶으면 그냥 readLine()을 바로 쓰면 된다. 추후에 다른 오류들을 만나며 더 알아봐야겠다. 이번에는 백준 2675번 문제를 풀던 중 다음과 같이 ArrayIndexOutOfBoundsException이 발생하였고 해석해보면 인덱스 1은 배열..