[JPA] 연관관계 매핑
객체와 테이블의 연관관계 차이 테이블의 연관관계 테이블은 외래키 하나로 양방향 조회가 가능하다. -- MEMBER 테이블 ID (PK) USERNAME TEAM_ID (FK) -- TEAM 테이블 ID (PK) NAME -- 양방향 조회가 모두 가능 -- 멤버 → 팀 조회 SELECT * FROM MEMBER M JOIN TEAM T ON M...
객체와 테이블의 연관관계 차이 테이블의 연관관계 테이블은 외래키 하나로 양방향 조회가 가능하다. -- MEMBER 테이블 ID (PK) USERNAME TEAM_ID (FK) -- TEAM 테이블 ID (PK) NAME -- 양방향 조회가 모두 가능 -- 멤버 → 팀 조회 SELECT * FROM MEMBER M JOIN TEAM T ON M...
JPA(Java Persistence API) SQL 없이 객체를 데이터베이스에 직접 저장할 수 있게 하고, 객체와 관계형 데이터베이스를 명확히 구분해준다. 즉, 중간에서 매핑 역할을 수행하는 ORM(Object-Relational Mapping) 기술의 표준 인터페이스이다. 객체지향과 관계형 데이터베이스의 패러다임 불일치를 해결해준다. ...
점점 비대해지는 savePlan 공급사 점검계획 등록/수정 기능을 만들다가 요구사항이 추가되면서 하나의 메서드에 모든 로직이 쌓이기 시작했다 // 최초저장 if (vo.getPlanId() == null || vo.getPlanId().isEmpty()) { planRepository.save(vo); processAddedSchedu...
User 엔티티의 문제점 엔티티는 도메인 모델이자 비즈니스 로직과 상태만 가져야 한다. 하지만 기존 코드는 SRP와 DIP를 위반하고 있었다. public static User register(UserDto dto, UserValidator validator, PasswordEncoder passwordEncoder) { validator....
DDD 전체 구조 전략적 설계 (Strategic Design) “무엇을 만들 것인가?” - 큰 그림 관점 1. 유비쿼터스 언어 (Ubiquitous Language) 개발자, 기획자, 도메인 전문가가 똑같은 용어로 소통 예: 경매 시스템 “입찰한다” → placeBid() “낙찰된다” → closeAuction() “재등록한다...
Factory method “객체를 어떻게 만드는지” 보다 “왜/언제 만들어 지는지” 를 드러내고 복잡한 생성과정을 감추는 역할 Factory method의 장점 생성 로직이 복잡한 경우 new User(username, email, password, …) 같이 끝나지 않고 암호화, 중복체크, 값 객체 조립 같이 여러 단...
순회란? 자료구조에서의 순회는 자료구조에 들어있는 데이터를 차례대로 접근해 처리하는 것을 순회라 한다. ArrayList, LinkedList, HashSet, Set, Tree 등 다양한 자료구조가 있는데 각 자료구조마다 순회하는 방법이 모두 다르기 때문에 자바는 자료구조의 구현과 상관없이 모든 자료 구조를 동일한 방법으로 순회할 수 있는 Ite...
Map Map은 Key-Value 의 쌍을 저장하는 자료구조 Key는 유일, Value는 중복 가능 같은 Key로 저장하면 Value 교체 순서를 유지하지 않음 HashMap, LinkedMap, TreeMap 등 다양한 구현체 제공 (HashMap이 가장 널리 쓰인다) Map 인터페이스의 주요 메서드 - 자바 공식문서 Ha...
Set Set은 중복을 허용하지 않고, 순서를 보장하지 않는 자료구조. 어떤 요소도 같은 Set 내에 두 번 이상 나타날 수 없다. Set은 수학적 집합 개념을 구현한 것으로 순서를 보장하지 않고 특정 요소가 집합에 있는지 여부를 확인하는데 최적화. Set 인터페이스는 HashSet, LinkedHashSet, TreeSet 등 다양한 ...
문자열 해시 코드 해시 인덱스를 사용하면 데이터의 값을 배열의 인덱스로 사용해야 한다. 하지만 배열의 인덱스는 1,2,3 같은 숫자만 사용할 수 있다. A, B, C 와 같은 문자열은 배열의 인덱스로 사용할 수 없다. 문자열을 저장할 때 해시 인덱스를 사용해 보자. 문자를 숫자로 변경하는 방법 public class StringHashMain {...