목록분류 전체보기 (134)
나만의 개발 로그 | 고민 로그

☑️ 엔티티 이름 vs 테이블 이름도메인 모델의 이름은 코드 안에서, 테이블 이름은 DB·SQL 매퍼에서 사용 @Entity @Table(name = "orders") // 실제 RDB 테이블명 public class Order { … } // JPQL · Querydsl 에서 쓰일 도메인 이름 구분어디서 쓰나왜 분리하나클래스명 (Order)JPQL, Querydsl, 단위 테스트도메인 용어를 그대로 표현 → 가독성 ↑테이블명 (orders)JDBC, SQL 매퍼(MyBatis 등)예약어·네이밍 규칙(복수형) 충돌 방지@Table 한 줄로 DB 네이밍 규칙을 따르면서도, 코드 쪽 도메인 용어 일관성을 유지할 수 있음!☑️ @NoArgsConstructor(access = PROTECTED) 를 쓰는 이..
☑️ 쓰레드 start() vs run() 호출작동 방식결과 run()그냥 일반 메서드 호출새 스택·새 쓰레드 없음 → 순차 실행start()JVM이 새 스택을 만들고 run()을 비동기로 호출동시 실행(멀티쓰레드) 가능 JVM 메모리 구조: Heap, Method, Static 영역은 공유하지만 각 쓰레드마다 Stack 영역이 따로 생성됨start()를 호출해야만 이 독립 스택이 마련되어 진짜 병렬 작업을 수행할 수 있다!☑️ 쓰레드풀 기초 ExecutorService pool = Executors.newFixedThreadPool(8); pool.submit(task); // 필요할 때마다 재사용 pool.shutdown();장점쓰레드 생성 비용 절감동시 실행 개수 제한 → 리소스 고갈 방지☑️ ..
☑️ 생성자에서 연관관계까지 처리하지 말자// 생성자에 연관관계 편집 로직까지 넣은 경우(이렇게 사용 x)public Order(User user, Item item) { this.user = user; // INSERT this.addItem(item); // flush 시 UPDATE 가능성 } 문제설명단일 책임 원칙 위배“객체 생성”과 “연관관계 변경”은 성격이 다름불필요한 UPDATE 발생영속성 컨텍스트 flush 시 INSERT → UPDATE 두 번 기록될 수 있음 권장: 연관관계 편의 메서드로 분리@Entity public class Order { @ManyToOne private User user; @OneToMany(mappedBy = "order") private List items =..