- JPA 에서의 연관관계2025-03-07 02:39:30이전에 연관관계에 대해서 헷갈리던 걸 정리하기 위해 작성했던 글이 있다. 연관관계 매핑지금 다시 확인해보니 빈약한 부분이 많다고 생각하여 좀 더 자세히 알아보도록 하자. JPA 에서 가장 중요한 개념이라고 하면 연관관계 매핑과 영속성 컨텍스트가 있다. 객체지향 프로그램에서의 객체와 RDB 에서의 테이블이 서로 연관관계를 맺는 방법이 다르다.그렇기 때문에 이 둘의 차이를 채우기 위한 매핑과정이 필요하고 이를 ORM 인 JPA 가 수행하게 된다. 연관관계에서는 아래와 같은 용어들이 등장한다. 방향(Direction) : 단방향 연관관계, 양방향 연관관계다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)연관관계의 주인(Owner)데이터 중심의 모델링JPA..
- @AllArgsConstructor 과 record 클래스의 차이2024-11-15 15:19:19아마 이 글을 읽는 사람들은 @AllArgsConstructor와 record를 왜 비교하는지 의문일 것이다.이 의문을 가지게 된 이유는 트러블 슈팅으로부터 시작된다. 트러블 슈팅 글을 보고 난 뒤, RequireArgsConstructor 가 final로 선언된 멤버 필드만을 포함한 생성자를 만들어주기 때문에 문제라면 모든 멤버 필드를 만들어 주는 @AllArgsConstructor는 돼야 하지 않을까?라는 의문으로 테스트를 해보았다 결론은 역시 실패하고 말았다.record 클래스도 기본 생성자를 생성하지 않는 것으로 알고 있는데 @AllArgsConstructor와 차이가 뭐지?? 라는 의문이 들어이유를 찾아보니 record 클래스는 애초에 컴파일러에서 기본 생성자가 없으면 자동으로 생성해준다고 한다..
- ThreadLocal이란?2024-04-28 12:51:55Thread Local이란?Java에서 지원하는 Thread safe한 기술로 멀티 스레드 환경에서 각각의 스레드에게 별도의 저장공간을 할당하여 별도의 상태를 갖을 수 있게끔 도와준다. ThreadLocal이 필요한 이유예를들어 Spring의 tomcat을 보면 매 요청마다 생성해놓은 Thread pool에서 Thread를 할당하여 유저의 요청을 처리하도록 되어있다. 여기서 문제가 발생하는데 Spring에서 bean을 등록하게 되면 해당 객체는 단 1개만 만들어져서 모든 Thread가 공유하여 사용하도록 되어있다. 이때 해당 인스턴스의 특정 필드를 모든 Thread가 공유하게 되는 것인데 여기서 Thread 동기화 문제가 발생하게 된다. 이해하기 쉽도록 그림을 통해 예시를 들어보도록 하겠다.fieldSe..
- 연관관계 매핑2024-01-22 22:26:27포트폴리오 준비를 하면서 가장 헷갈렸던 내용으로 연관관계 매핑과 데이터베이스의 외래키와 똑같이 생각하다가 함정에 빠진적이 있기에 알아보겠다. 데이터베이스에서는 외래키라는 하나의 컬럼을 가지고 연관관계를 표현한다. 그러나 JPA에서는 객체를 매핑한다. 따라서 JPA에서의 연관관계 매핑은 관계의 방향 다중성(다대일? 일대다? 다대다?) 연관관계의 주인 이 세가지가 중요하다. 아래에 정리한 내용에서 위의 3가지를 알아볼 것이다. 단방향 연관관계 연관관계 중 다대일(N:1)을 먼저 알아보겠다. 다음에서 설명할 예제의 객체들은 다음의 관계이다. 게시글은 작성자가 있습니다. 게시글은 한명의 작성자에게만 소속되어 있습니다. 게시글은 작성자와 다대일 관계입니다. 위의 관계를 나타낸 객체 연관관계와 테이블 연관관계는 아..
- Spring Data JPA란?2024-01-09 19:06:10JPA는 인터페이스로서 자바 표준 명세서이다. 인터페이스를 구현하기 위해서는 구현체가 필요한데 대표적으로 Hibernate, Eclipse, Link 등이 있다. 하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루진 않는다. 어플리케이션의 데이터 액세스 계층을 구현하는 것은 꽤 오랫동안 성가신 일이었다. 간단한 쿼리를 실행하고 pagination 및 auditing을 수행하려면 너무 많은 boilerplate코드를 작성해야 한다. Spring Data JPA는 실제로 필요한 양으로 노력을 줄여 데이터 액세스 계층의 구현을 크게 개선하는 것을 목표로 만들어졌다. 그래서 Spring에서는 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA ..
- Spring JPA란?2024-01-09 18:42:58이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고 한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제 적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임 워크이다. JPA를 구현한 대표적인 오픈 소스로는 Hibernate가 있다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록 하자. ORM(Object-Relational Mapping) 우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화해주는 것이라고..
- Spring Cache란?2024-01-07 22:00:59애플리케이션을 개발하며 쓰기 동작보다 읽기 동작이 많은 데이터가 있다면 캐시 도입을 고민할 수 있다. 예를 들어, 상품의 카테고리 목록은 자주 바뀌지 않는 데이터들인데 쇼핑몰 내에서 페이지를 이동할 때마다전체 카테고리들을 DB에서 매번 Query해서 모두 불러오는 것은 비효율적이기에 이런 경우에도 캐시를 적용하면 좋은 케이스다. 일반적으로 캐시는 메모리에 데이터를 미리 적재하고 이를 빠르게 읽어 응답하는 구조다. 그래서 읽기 동작이 많은 서비스에 캐시를 사용하면 서비스 응답 속도를 향상할 수 있고, 시스템 리소스도 효율적으로 사용할 수 있다. Spring은 다양한 저장소에 데이터를 캐시할 수 있는 기능을 제공한다. 또한 저장소에 독립적이고 추상화된 캐시 매커니즘을 제공한다. AOP 기반의 어노테이션을 제..
- Spring Boot란?2024-01-04 17:00:511. spring boot 란? 스프링 부트는 단독적이고, 상용화 수준의 스프링 기반 어플리케이션을 단지 실행할 수 있을 정도로 쉽게 만들 수 있다. 기존 스프링 프레임워크 위에 구축되었다. 스프링 부트를 사용하면 독립실행형과 프로덕션 등급 스프링 기반 어플리케이션을 쉽게 만들 수 있다. 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 도와준다. 2. spring과 spring boot의 차이 spring framework의 경우, dependency를 설정해 줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 해주어야 한다. org.springframework spring-web 5.3.5 org.springframework spring-web..