
Spring vs Spring Boot
https://www.youtube.com/watch?v=6h9qmKWK6Io&t=102s 아주 간단하게 아래 사진 한장으로 정리되는 것 같다.
https://www.youtube.com/watch?v=6h9qmKWK6Io&t=102s 아주 간단하게 아래 사진 한장으로 정리되는 것 같다.
개요 JAVA 에서는 checked 예외를 다음과 같이 처리한다. 처리되지 않으면 컴파일이 불가능하다. 메소드 선언부에 throw 키워드로 처리 try-catch 문과 throws 키워드로 처리 @SneakyThrows 는 checked 예외를 처리하지 않아도 컴파일이 가능하게 해준다. 컴파일러를 속인다고 표현한다. 모든 예외에 대해 throw 를 발생시켜준다고 한다. 구체적으로 실제 컴파일된 class 파일을 보면 try-catch 문이 자동으로 생성되고 Throwable 로 처리하는 것을 볼 수 있다. //컴파일된 .class 파일 예시 public void sneakyThrowsCheckedAndSkips() { try { throw new IOException("Checked exception")..
@Repository 어노테이션 스프링에서 지원하지 않는 Exception을 Spring Exception으로 전환하기 위해서 @Repository어노테이션을 사용한다. Exception이 발생할 경우 Unchecked Exception을 DataAccessException으로 전환시켜준다. 주로 DAO(Data Access Object)에서 사용하는데 예를들어 트랜잭션을 적용한 메소드에서 DB오류가 발생해도 롤백이 가능한 이유이다. Spring Data Jpa 사용 시, 꼭 필요한가? @Repository 는 빈 등록을 위해 사용한다. 하지만 JpaRepository 인터페이스를 상속받은 리포지토리는 @Repository 가 없어도 정상적으로 빈 등록이 된다. public interface TestRe..
JPQL (Java Persistence Query Language) 란? JPA (Java Persistence API) 의 일부로 정의된 플랫폼 독립적인 객체지향 쿼리 언어이다. 객체지향 쿼리이므로 테이블이 아닌 엔티티를 대상으로 한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. 하지만 결국 SQL로 변환된다. SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있다. (참고로 엔티티 저장은 그냥 entityManager.persist를 사용하면 되므로 INSERT 문은 없다.) JPQL에서 UPDATE, DELETE 문은 벌크 연산이라고 해서 뒤에서 따로 설명할 것이고, SELECT 문 먼저 작성하겠다. 기본 문법 SELECT m FROM Me..
연관관계를 가진 두 엔티티 중 한쪽의 데이터만 필요해서 조회하려고 할 때, 나머지 반대쪽 엔티티도 조회할 필요는 없을 것이다. 그것은 리소스 낭비이다. JPA에서 이와 관련된 문제가 즉시로딩과 지연로딩이다. 코드로 먼저 지연로딩(LAZY) 이해하기 member 엔티티와 team 엔티티가 N:1 관계로 양방향 설정이 되어있다. FetchType 속성은 @ManyToOne 에서 사용한다. 이번 코드에서는 FetchType.LAZY 를 설정하였다. member 엔티티 @Entity @Getter @Setter public class Member extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long i..
JPA 에서 가장 중요한 것 JPA 에서 가장 중요한 것은 "객체와 관계형 테이블간의 매핑" 이다. JPA는 자바의 ORM(Object Relational Mapping) 기술에 대한 표준 명세이다. ORM 의 의미가 "객체와 관계형 데이터베이스 테이블의 매핑"이며 JPA 의 목적은 "객체 지향 프로그래밍과 데이터베이스 사이의 패러다임 불일치를 해결" 하는 것이다. Hibernate Document 를 살펴봐도 객체와 테이블의 매핑이 내용의 절반 이상을 차지한다. 객체와 테이블간의 매핑을 구체적으로 둘로 나눌 수 있다. 객체와 데이터베이스 사이의 일대일 매핑 : @Entity, @Column, @Id, @GenertatedValue ... 등 테이블 사이의 연관관계 매핑 : @OneToMany, @Man..