일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Container
- 배포
- virtualization
- 영속성 컨텍스트
- web server
- 컨테이너
- spring cloud
- 도커
- CS
- spring boot
- vm
- 스프링 부트
- Spring
- 스프링 배치
- Spring Security
- JPA
- 웹 서버
- mysql
- 데이터베이스
- computer science
- 백엔드
- spring batch
- 가상화
- CI/CD
- 자바
- 스프링 시큐리티
- 스프링
- ORM
- HTTP
- Java
- Today
- Total
목록JPA (8)
개발 일기

스프링과 스프링 부트 차이스프링은행 시스템과 같이 몇 백만, 몇 천만의 사람이 한꺼번에 잔고 조회를 하고, 입금 및 출금 요청을 처리하는 등 많으 유저의 요청을 동시에 처리해야하는 엔터프라이즈 애플리케이션는 성능, 안정성 그리고 보안이 매우 중요해 졌다. 그러나 이러한 것들을 고민하며 비즈니스 로직까지 개발하는 것은 비효율적이였기에 이러한 엔터프라이즈 애플리케이션을 위한 개발 환경을 제공해서 기능 개발에만 집중할 수 있도록 하기 위해 스프링 프레임워크를 제공했고 개발자들은 비즈니스 로직에만 집중할 수 있게 됐다. 스프링 부트그러나 설정이 매우 복잡하다는 단점이 있었고 이러한 단점을 극복하여 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만든 도구가 스프링 부트이다. 빠르게 스프링 프로젝트를 설정할..

JPA에서의 UPDATE문Spring Data JPA를 적용하게 되면 SELECT 문은 JPA를 사용해 쿼리를 만들 수 있지만 INSERT, UPDATE, DELETE 와 같은 DML을 특정 조건을 곁들여 사용할 경우 쿼리를 직접 작성해야 한다.이 때 쿼리는 JPQL 로 작성하게 된다.@QuerySpring 공식 문서 : '리포지토리 메서드에서 직접 파인더 쿼리를 선언하는 주석입니다.'@Query Annotation은 JPA를 사용하여 UPDATE 문, DELETER 문과 같은 DML을 수행하기 위해 쿼리를 직접 작성해야 할 때 사용한다.위에서 잠깐 언급했듯이 쿼리를 작성할 때 JPQL로 작성해야한다.public interface MemberRepository extends JpaRepository { ..

경로 표현식 .(점) 을 통해 객체 그래프를 탐색하는 것으로 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 (ex: m.username) 경로 탐색의 끝으로 더이상 탐색 불가하다. 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 묵시적 내부 조인(inner join) 발생, 탐색O 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 묵시적 내부 조인 발생, 탐색X -> 결과가 컬렉션이기 때문에 속성 값에 접근할 수 없다. 묵시적 조인은 실무(큰 프로젝트)에서는 사용을 지양해야한다. 튜닝하기 엄청 어려워진다..

기본값 타입 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능하다. ex) 회원 엔티티의 키, 나이 값이 변경 되도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 - 자바 기본 타입(int, double) - primitive type - 래퍼 클래스(Integer, Long) - String 생명 주기를 엔티티에 의존, ex) 회원 삭제 시 이름, 나이 등 필드들 함께 삭제 값 타입은 공유하면 X, ex) 회원 이름 변경 시 다른 회원의 이름도 함께 변경되..

프록시 프록시를 이해하고 아래의 즉시로딩 지연로딩에 대해서 이해할 수 있다. 우선 왜 프록시가 쓰이는가? Member를 조회할 때 Team도 함께 조회해야 하는가? // 1. 회원과 팀 함께 출력 public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); } // 2. 회원만 출력 public void printUserAndTeam(String memberId) ..

상속관계 매핑 객체 상으로는 상속 관계가 존재한다. 그러나 관계형 데이터베이스는 상속 관계가 없다! 그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 = `객체의 상속과 구조`와 `DB의 슈퍼타입 서브타입` 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 1. 각각테이블로변환 -> 조인전략 만약 그냥 객체만 고려하여 Item 객체를 만들어 Album, Movie, Book에서 extends Item을 통해 처리해놓고 Item객체에 @Inheritance(strategy = InheritanceType.JOINED)를 걸어주면 아래와 같이 매핑됨. ex) movie의 경우 movie.setDirector/Actor/Name/Price()해주면 ..

영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 위의 그림과 같이 EntityManagerFactory가 유저의 요청이 들어올때마다 EntityManager를 생성한고 EntityManger들은 내부적으로 데이터베이스 커넥션을 사용해서 DB를 사용하게 된다. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 중 하나로 EntityManager.persist(entity);는 DB에 저장한다는 뜻이아니라 사실 영속성 컨텍스트에 저장한다는 의미이다. 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티의 생명주기 //객체를 생성한 상태(비영속(new/trasient): 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태) Member member = new Member(); member.se..

SQL 중심적인 개발의 문제점 데이터베이스는 대게 관계형 DB를 활용한다. 즉, 실무에서 객체를 관계형 DB에 보관하고 관리한다. 이 과정에서 CRUD(CREATE, READ, UPDATE, DELETE)를 하는 과정에서 수많은 SQL이 쓰일 것이다. 이것이 바로 "SQL 중심적 개발"이다. 만약, 요구사항 변경으로 Member 객체에 tel이라는 연락처 필드를 추가해야 하는 경우 기존 INSERT, SELECT 그리고 UPDATE 쿼리문 들에 TEL이라는 필드를 찾아가서 하나하나 추가해주어야 하기 때문에 상당히 효율적이지 않다. 실무에서는 8~90% 관계형 데이트베이스를 채택하고 NoSQL을 보조적으로 쓸텐데 그렇다면 객체를 관계형 데이터베이스로 다루게 되는데 이때 둘 사이에 차이가 존재한다. 하나씩 ..