Backend

·Backend/JPA
JPA 에서 가장 중요하다고 생각하는 영속성 컨텍스트에 대해 정리한 글입니다. 영속성 컨텍스트란? 엔티티 매니저로 엔티티를 저장하거나 조회하면 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 한 마디로 요약하면 "엔티티를 영구 저장하는 환경" 이다. 엔티티의 4가지 상태 먼저 엔티티에는 4가지 상태가 존재한다. 비영속 영속 준영속 삭제 1. 비영속 Member member = new Member(); // 객체 생성 member.setId("member1"); member.setUsername("회원1"); 순수한 객체 상태이며 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없는 상태 2. 영속 em.persist(member); // 객체를 저장 영속성 컨텍스트에 저장한 상태, 영속 상태로써 영속성 컨텍..
·Backend/JPA
자바 스프링 기반 백엔드 개발자라면 꼭 알아야 할 JPA의 기초에 대해서 요약 정리한 글입니다. JPA란 무엇인가? JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준 ORM 이란? ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻 ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해줌 자바 진영의 대표적인 ORM 프레임워크는 하이버네이트 프레임워크가 있다. JPA 의 대표적인 장점! 지루하고 반복적인 CRUD SQL을 알아서 처리해준다. 객체 모델링과 관계형 데이터베이스 사이의 차이점도 해결해준다. JPA를 사용하는 개발자는 SQL을 직접 작성하는 것이 아니라 어떤 SQL이 실행..
·Backend/Spring
스프링 부트 테스트 실행 시 업로드 된 파일도 롤백 시점 사라질까?? 스프링 부트 테스트는 @Transactional 을 테스트 케이스에 선언 시 테스트 완료 후 항상 롤백을 하여, 다음 테스트에 영향을 주지 않는다. (물론 rollback false 지정하는 설정이 있음) 하지만 테스트 실행시 생성된 파일은 데이터 롤백 이후에도 그대로 남아있다. 파일 업로드 후 업로드된 파일을 삭제하는 테스트 코드를 작성해보자 먼저 아래를 보면 파일 업로드 테스트를 위한 파일 정보를 저장하는 엔티티가 있다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "attach_file") public class AttachFile..
·Backend/Querydsl
Querydsl Alias 사용 시 주의사항 및 최적화 방법Querydsl은 자바 기반의 타입 안전한 SQL 빌더로, 복잡한 쿼리를 쉽게 작성할 수 있도록 도와줍니다.그러나, Querydsl을 사용할 때, 특히 여러 엔티티를 조인(join)하는 상황에서는 주의해야 할 사항들이 있습니다.이 글에서는 그중에서도 조인을 명시했음에도 불구하고 불필요한 조인이 한 번 더 나가는 경우와 관련된 문제와 해결 방법에 대해 다루겠습니다.   1. 잘못된 조인으로 인한 성능 저하 문제예시에 활용될 엔티티 설명우선, 이 예시에서 사용할 엔티티들을 소개하겠습니다. 이 엔티티들은 OrderItem, Goods, Importer, OrderHistory로 구성되어 있으며, 각 엔티티의 역할과 관계를 간단히 설명하겠습니다.publ..
·Backend/Java
싱글톤을 구현해야 하는 상황 하나만 유지하면 좋은 경우 반드시 하나만 유지해야 하는 경우 (여러개가 생성된다면 문제가 생기는 경우) 첫번째 방법 private 생성자 + public static final 필드를 사용하는 방법 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {} } 장점 간결하고 싱글턴임을 API에 드러낼 수 있다. 단점 싱글톤을 사용하는 클라이언트 코드를 테스트하기 어려워진다. 리플렉션으로 private 생성자를 호출할 수 있다. // 리플렉션을 통해 싱글톤을 깨뜨리는 방법 예제 public static void main(String[] args) { try { Construct..
·Backend/Java
Long 타입 값 비교를 하다 보면 true를 제대로 반환할 때도 있고 false를 반환하는 경우도 만난다. 이유 Java는 -128 ~ 127 범위의 Long , Integer 객체는 내부적으로 캐싱하여 동일한 객체로 취급 하기 때문에 == 비교를 해도 true가 나온다. // -128 ~ 127 은 == 로 비교가능 Long a = 127L; Long b = 127L; Long _a = -128L; Long _b = -128L; boolean resultA = a == b; boolean resultB = _a == _b; System.out.println("a == b = " + resultA); // a == b = true System.out.println("_a == _b = " + resul..
dami97
'Backend' 카테고리의 글 목록 (3 Page)