TIL

TIL_20221101

번잔중 2022. 11. 1. 23:52

오늘 할 일

🧊 코드 스테이츠 49일차

[Spring MVC] JPA 기반 데이터 액세스 계층

  • Daily Coding
  • JPA(Java Persistence Api)란?
  • 엔티티 매핑

다른거

  • 1일 1커밋
  • 복습
  • 아침 운동
 

오늘 배운 것

🍬 [Spring MVC] JPA 기반 데이터 액세스 계층

JPA(Java Persistence API) 개요

  • JPA(Java Persistence API)는 Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양(또는 명세, Specification)이다.
  • Hibernate ORM은 JPA에서 정의해둔 인터페이스를 구현한 구현체로써 JPA에서 지원하는 기능 이외에 Hibernate 자체적으로 사용할 수 있는 API 역시 지원하고있다.
  • JPA에서는 테이블과 매핑되는 엔티티 객체 정보를 영속성 컨텍스트(Persistence Context)에 보관해서 애플리케이션 내에서 오래 지속 되도록 한다.
  • 영속성 컨텍스트 관련 JPA API
    • em.persist()를 사용해서 엔티티 객체를 영속성 컨텍스트에 저장할 수 있다.
    • 엔티티 객체의 setter 메서드를 사용해서 영속성 컨텍스트에 저장된 엔티티 객체의 정보를 업데이트 할 수 있다.
    • em.remove()를 사용해서 엔티티 객체를 영속성 컨텍스트에서 제거할 수 있다.
    • em.flush()를 사용해서 영속성 컨텍스트의 변경 사항을 테이블에 반영할 수 있다.
    • tx.commit()을 호출하면 내부적으로 em.flush()가 호출된다. 이후 데이터베이스에 모두 추가된다. 이후 데이터베이스에 모두 추가된다.

JPA 엔티티(Entity) 매핑과 연관 관계 매핑

엔티티 매핑

  • @Entity 애너테이션을 클래스 레벨에 추가하면 JPA의 관리대상 엔티티가 된다.
  • @Table 애너테이션은 엔티티와 매핑할 테이블을 지정한다. 필수는 아니고 옵션인데, 추가하지 않는 경우에는 엔티티 클래스 이름이 테이블 이름이 된다. 주로 테이블 이름이 클래스 이름과 다른 경우에 사용한다.
  • @Entity 애너테이션과 @Id 애너테이션은 필수로 추가해야 한다. 보통 둘을 같이 사용한다!
  • JPA는 IDENTITY, SEQUENCE, TABLE, AUTO 전략 같은 다양한 기본키 생성 전략을 지원한다.
    • IDENTITY 전략
      • 기본키 생성을 데이터베이스에 위임하는 전략이다.
    • SEQUENCE 전략
      • 데이터베이스에서 제공하는 시퀀스를 사용해서 기본키를 생성하는 전략이다.
    • TABLE 전략
      • 별도의 키 생성 테이블을 사용하는 전략이다.
    • AUTO 전략
      • JPA가 데이터베이스의 Dialect에 따라서 적절한 전략을 자동으로 선택한다.
  • Java의 원시 타입 필드에서 @Column 애너테이션이 없거나 @Column 애너테이션이 있지만 애트리뷰트를 생략한 경우, 최소한 nullable=false는 설정하는 것이 에러를 미연에 방지하는 길이다.
  • java.util.Date, java.util.Calendar 타입으로 매핑하기 위해서는 @Temporal 애너테이션을 추가해야하지만 LocalDate, LocalDateTime 타입일 경우, @Temporal 애너테이션은 생략 가능하다.
  • @Transient 애너테이션을 필드에 추가하면 JPA가 테이블 컬럼과 매핑하지 않겠다는 의미로 인식한다.
  • 테이블에 이미 저장되어 있는 enum 순서 번호와 enum에 정의되어 있는 순서가 일치하지 않게 되는 문제가 발생하지 않도록 EnumType.STRING 을 사용하는 것이 좋다.

다른거

- 1일 1커밋

프로그래머스에서 Lv.0 공 던지기를 풀었습니다. 습관처럼 for문을 돌려서 해결하려고 했는데, 던지는 횟수마다 값을 저장하는 것 자체가 낭비라는 생각이 들어서 규칙을 식으로 만드는 것이 낫겠다고 생각했습니다. 공을 던지는 횟수인 k에는 첫 시행이 포함되어 있으므로 2씩 증가하는 값을 찾기 위해서는 1을 뺀 값에 2를 곱해야 합니다. 그 결과를 배열의 길이로 나눈 것이 numbers의 인덱스이므로 정답에는 해당 인덱스에 위치한 배열 값을 반환하면 됩니다. 사실 문제에서는 번호가 순차적으로 1부터 증가한다고 했으므로 (k - 1) * 2 % numbers.length + 1을 해주었어도 정답입니다.

 

Programmers 공 던지기

 

GitHub - chaning49/algorithm: 코딩테스트를 위한 알고리즘 공부

코딩테스트를 위한 알고리즘 공부. Contribute to chaning49/algorithm development by creating an account on GitHub.

github.com

 

- 복습

양이 생각보다 방대해서 하루가 모자란 양이었다. 오늘 복습한 내용에 이어서 내일 해야겠다.

 

- 아침 운동

28일차

느낀점

  • 내용이 전반적으로 어려워지고 양이 방대해져서 하루가 모자라도 너무 모자라다는 느낌이 강하게 든다. 피로가 쌓이지 않을 수 없는 학습량이라는 생각이 든다.
  • 학습량이 늘면서 힘든 부분은 알고리즘에 관련된 커밋 활동이 학습에 방해가 된다는 점이다. 커밋에 시간을 쓰면 쓸수록 시간이 아까워진다... Spring 공부 내용을 커밋해야 할지 고민중이다.
  • 운동을 했는데, 팔 안쪽에 통증이 있다. 자세가 무너진 상태로 해서 그런 것 같다. 당분간은 유산소와 하체 운동만 하면서 상황을 지켜봐야 할듯...

내일 할 일

🎊 코드 스테이츠 50일차

[Spring MVC] JPA 기반 데이터 액세스 계층

  • Daily Coding
  • 연관 관계 매핑
  • 연관 관계 매핑 실습

다른거

  • 1일 1커밋
  • 복습

'TIL' 카테고리의 다른 글

TIL_20221103  (3) 2022.11.03
TIL_20221102  (0) 2022.11.02
TIL_20221031  (0) 2022.10.31
TIL_20221030  (0) 2022.10.30
TIL_20221029  (0) 2022.10.29