Spring 40

[테스트 코드] 테스트 코드의 개념과 필요한 이유

1. TDD와 단위테스트 1) TDD 개념 테스트가 주도하는 개발 방법 테스트 코드를 먼저 작성 테스트가 통과하는 프로덕션 코드를 작성 테스트가 통과하면 프로덕션 코드를 리팩토링 2) 단위테스트 개념 기능 단위의 테스트 코드를 작성하는 것 특징 테스트 코드를 꼭 먼저 작성해야 하는 것은 아님 리팩토링이 포함되지 않음 2. 테스트 코드 1) 장점 빠른 피드백이 가능 테스트 코드가 없으면 코드 수정이 발생한 경우 톰캣을 껐다가 켜는 행위를 반복해야 해서 비효율 자동 검증 가능 포스트맨이나 System.out.println()을 사용해서 수동 검증을 하지 않아도 돼서 편리 개발자가 만든 기능을 안전하게 보호 A라는 기능이 있고 B라는 기능을 추가했을 때 테스트코드가 있으면 A기능이 여전히 되는지 편리하게 확인..

Spring/test 2023.03.08

[JPA] 리포지토리 관련 어노테이션

1. @Query 1) 개념 리포지토리 메소드에 직접 쿼리를 정의하고 싶을 때 사용 2) 속성 nativeQuery 네이티브 sql을 사용하고 싶을 때 해당 속성을 true로 설정 2. @Param 1) 개념 sql을 직접 작성한 후 파라미터를 바인딩 할 때 사용 3. @Modifying 1) 개념 모든 데이터에 일괄적인 업데이트를 날려야 하는 경우 벌크성 수정 쿼리를 사용하는데 그때 사용 2) 속성 clearAutomatically 4. @Repository 1) 개념 JPA예외를 스프링이 추상화한 예외로 변환 5. @Transactional 1) 개념 서비스 계층에서 트랜잭션을 시작하지 않으면 리포지토리에서 트랜잭션을 시작하도록 함. 스프링 데이터 jpa가 제공하는 공통 인터페이스를 사용하면 데이터를..

Spring/jpa 2023.03.07

[JPA] JPA를 사용하는 다양한 방법

1. 순수 자바 환경에서 JPA 사용 엔티티 매니저 팩토리 생성 엔티티 매니저 생성 엔티티 매니저에서 트랜잭션 얻기 트랜잭션 실행 트랜잭션 안에서 로직 실행 트랜잭션 커밋 엔티티 매니저 종료 엔티티 매니저 팩토리 종료 2. 스프링이나 J2EE 컨테이너에서 JPA 사용 1) 사용법 컨테이너가 엔티티 매니저를 관리하고 제공해준다 엔티티 매니저 팩토리에서 엔티티 매니저를 직접 생성해서 사용하는 것이 아니라 컨테이너가 제공하는 엔티티 매니저를 사용해야 한다 @Repository public class MemberRepository{ @PersistenceContext // EntityManager em; public void save(Member member){ em.persist(member); } } 2) ..

Spring/jpa 2023.02.23

[스프링] controller 관련 어노테이션

1. @RestController 1) 개념 컨트롤러에서 뷰 대신 데이터를 반환하려면 @ResponseBody 어노테이션을 사용해서 json형태로 데이터를 반환할 수 있는데 @ResponseBody와 @Controller를 합쳐놓은 어노테이션 2. @RequestMapping 1) 개념 http request로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 한다. 2) 속성 path url 지정 3. @PostMapping 1) 개념 POST 요청을 받아들여서 데이터를 작성 2) 속성 path url 지정 4. @RequestBody 1) 개념 http요청의 본문(body-json형태)이 객체로 변환되어서 매핑된 메소드 파라미터로 전달된다.

Spring/spring 2023.02.22

[스프링] service 관련 어노테이션

1. @Service 에 의해 스프링 빈으로 등록 2. @Transactional 어노테이션이 붙어 있는 클래스나 메소드에 트랜잭션을 적용, 외부에서 이 클래스의 메소드를 호출할 때 트랜잭션을 시작하고 메소드를 종료할 때 트랜잭션을 커밋한다. 만약 예외가 발생하면 트랜잭션을 롤백한다 3. @Autowired 스프링 컨테이너가 적절한 스프링 빈을 주입해준다

Spring/spring 2023.02.22

[JPA] 조인 테이블

1. 데이터베이스 테이블의 연관관계를 설계하는 방법 1) 조인 컬럼 사용(외래키) MEMBER LOCKER MEMBER_ID(PK) LOCKER_ID(PK) USERNAME NAME LOCKER_ID(FK, NULL 허용) 특징 외래 키에 null을 허용하는 선택적 비식별 관계 회원과 사물함을 조인할 때 외부 조인을 사용해야 한다. 내부 조인을 사용하면 사물함과 관계가 없는 회원은 조회되지 않는다. 회원과 사물함이 아주 가끔 관계를 맺는다면 외래 키 값 대부분이 null로 저장되는 단점이 있다. 2) 조인 테이블 사용(테이블 사용) MEMBER MEMBER_LOCKER LOCKER MEMBER_ID(PK) MEMBER_ID(FK) LOCKER_ID(PK) USERNAME LOCKER_ID(FK) NAME..

Spring/jpa 2023.02.21

[JPA] 복합키와 식별 관계 매핑

1. 식별 관계 1) 개념 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계 2) 단점 식별 관계는 부모 테이블의 기본 키를 자식 테이블로 전파하면서 자식 테이블의 기본 키 컬럼이 늘어난다. 이 때문에 조인할 때 sql이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다. 식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다 식별 관계를 사용할 때 기본 키로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다. 그런데, 비즈니스 요구 사항이 시간이 지나면서 변할 수도 있다. 이 경우에 식별 관계의 자연 키 컬럼들이 자식에 손자까지 전파되면 변경이 힘들어지고, 전체적으로 관리도 어려워진다. 부모 테이블의 기본 키를 자식 테이블의 ..

Spring/jpa 2023.02.16

[JPA] 고급 매핑 관련 어노테이션

상속 관련 1. @Inheritance 1) 개념 상속 해 줄 부모 클래스에게 적용하는 어노테이션 2) 속성 strategy InheritanceType.JOINED 조인 전략: 자식 각각을 모두 테이블로 만들고 조회할 때 조인 사용 InheritanceType.SINGLE_TABLE 단일 테이블 전략: 테이블을 하나만 사용해서 통합 InheritanceType.TABLE_PER_CLASS 구현 클래스마다 테이블 전략: 서브 타입마다 하나의 테이블을 만든다 2. @DiscriminatorColumn 1) 개념 부모 클래스에 구분 컬럼 지정. 이 컬럼으로 자식 구분. 2) 속성 name 구분 컬럼의 이름 3. @DiscriminatorValue 1) 개념 엔티티를 저장할 때 구분 컬럼에 입력할 값을 지정 ..

Spring/jpa 2023.02.16

[JPA] 상속 관계 매핑, MappedSuperClass

1. 상속 관계 매핑 1) 개념 ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데베의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 2) 방법 조인 전략 개념 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본키 + 외래 키로 사용하는 전략 ITEM ITEM_ID(PK) NAME PRICE DTYPE ALBUM MOVIE BOOK ITEM_ID(PK, FK) ITEM_ID(PK, FK) ITEM_ID(PK, FK) ARTIST DIRECTOR AUTHOR ACTOR ISBN @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "dtype") public abstr..

Spring/jpa 2023.02.16