Web/팁

[Spring & JPA] 프로젝트시 주의해야할 점 (에러발생시 확인해야할 부분)

  • Many To Many 는 사용하지마라 -> (일대다 다대일 로 풀어라)
  • enum타입 사용시 @Enumerated(EnumType.STRING) 으로 사용해라
  • 양방향 연관관계는 되도록 사용하지마라
  • @Getter는 모두열어놓으면 편하다
  • @Setter는 사용하지않는다. (Setter는 생성자 주입으로 풀어라)
  • 값 타입은 변경이 되면 안되기 때문에 생성자 주입을 열고 기본생성자(protected)도 만들어주어야 한다. (new로 생성 불가)
  • ddl로 생성되는 테이블들이 맞게 되는지 확인하고 정제하는 작업을 거쳐야 한다.
  • 모든 연관관계( @XToOne )는 지연로딩으로 설정해라 (N+1문제 해결방법)
  • 컬렉션을 사용할때는
    private List<Order> orders new ArrayList<>(); 선언과 동시에 초기화 시킨다 (null point exception 문제 해결)
  • 컬렉션은 필드에서 바로 초기화하고, 수정은 하지 않는다.
  • 서비스에서 리포지토리는 final로 선언하고 @RequiredArgsConstructor를 사용한다.
  • 테스트시에 insert문이 나가지 않는다. 테스트는 트랜잭션을 롤백하기 때문이다. 그래서 insert쿼리를 보고싶다면 em.flush로 영속성 컨텍스트를 강제로 초기화시켜 보는 방법이 있다.
  • 준영속 엔티티를 수정할때는 merge를 사용하지 말고 변경감지 기능을 사용해라. merge는 모든 데이터를 바꾼다.
  • 컨트롤러에서는 어설프게 엔티티를 생성하지말고 서비스 계층에 값을 넘기는 설계가 좋다. 값이 많다면 DTO로 만들어라.
  • Controller에서 Service를 부를때 파라미터로 Id만 넘기고, 트랜잭션이 있는 Service 계층에서 엔티티를 불러오고 로직을 수행해야한다.
  • HashMap은 멀티쓰레드 환경에서 동시접근이 안되기 때문에 ConcurrentHashMap을 사용해라
  • Long도 멀티쓰레드 환경에서 동시접근이 안되기 때문에 Atomic Long 을 사용해라
  • css 파일 복붙해도 안먹힐땐 out 디렉토리를 삭제하고 서버를 다시띄워보자 (지워도 서버띄우면 다시 생성됨)
  • api 요청과 응답은 절대로 엔티티를 그대로 받거나 보내면 안된다. 별도의 클래스를 통해서 DTO를 만들어야 한다.