본문 바로가기
  • Where there is a will there is a way.

개발/spring20

JPA 연관관계 연관관계 연관관계 중에선 다대일 단방향 관계를 가장 먼저 이해해야 한다. 우리가 흔히 디비에서 데이터를 연관시키려면 외래키를 사용한다. 외래키를 사용하여 정보를 제공하게 되면 자연스럽게 양방향으로 연관관계가 맺어진다. 하지만 객체의 경우엔 주소를 참조로 단방향으로 연관관계가 맺어진다. 만약에 양방향으로 걸고싶으면 서로 참조를 해야한다. 즉, 객체의 경우엔 참조를 통하여 양방향 관계가 아니라 서로 다른방향 관계 2개다. 테이블은 왜래 키로 양방향 연관관계를 맺는다. ( 조인 사용 ) 연관관계 사용 저장 JPA 에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. JPA 는 참조한 엔티티의 식별자를 외래 키로 사용해서 적절한 등록 쿼리를 생성한다. ( 여기서 연관관계 주인에 대한 개념이 나오는.. 2020. 3. 16.
JPA delete 방법과 심화 delete All transactional 문제 우선 jpa delete 에 대해서 알아보자 delete mapping /{cartId} 로 단일건도 되지만 아무리 생각해봐도 for 문을 돌리면서 클라이언트가 돌리든 서버가 돌리든 .. 비효율일 것 같다는 생각이 들었다. 그래서 찾아본 결과 다음과 같이 list param 으로 사용해도 될것같다는 판단이 들었다. list param 은 콤마로 구분해도 되고, 클라이언트에서 form 으로 전달해도 된다고 한다. @DeleteMapping("/{memberId}/cart") public ResponseEntity deleteCart(@PathVariable(name = "memberId") long memberId, @RequestParam(value = "cartIds") List cartIds) { c.. 2020. 2. 15.
스프링 DI DI 런타임 시점의 의존관계를 결정하고 만들려면 제 3의 존재가 필요하다. 흔히 스프링을 사용하지 않으면 Factory 가 그 역할을 담당한다. Factory 는 두 오브젝트 사이의 런타임 의존관계를 설정해주는 의존관계 주입 작업을 주도하는 존재이며, 동시에 IoC 방식으로 오브젝트의 생성과 초기화, 제공 등의 작업을 수행하는 컨테이너다. 따라서 의존관계 주입을 담당하는 컨테이너라고 볼 수 있고, 줄여서 DI 컨테이너라고 불러도 된다. 의존관계 검색과 주입 스프링이 제공하는 IoC 방법에는 의존관계 주입만 있는 것이 아니다. 코드에서는 구체적인 클래스에 의존하지 않고 런타임 시에 의존관계를 결정한다는 점에서 의존관계 주입과 비슷하지만, 의존관계를 맺는 방법이 외부로부터의 주입이 아니라 스스로 검색을 이용.. 2020. 2. 9.
싱글톤 패턴의 한계와 스프링 싱글톤 우리가 알고있는 싱글톤 패턴은 다음과 같다. package com.company; public class SingleTonInstance { private static SingleTonInstance INSTANCE; // 스프링은 기본적으로 synchronized public synchronized static SingleTonInstance getINSTANCE() { if(INSTANCE == null){ INSTANCE = new SingleTonInstance(); } return INSTANCE; } } 1. private 생성자를 갖고 있기 때문에 상속할 수 없다. 객체지향의 장점인 상속과 이를 이용한 다형성을 적용할 수 없다. 기술적인 서비스만 제공하면 상관없겠지만, 애플리케이션의 로직을 .. 2020. 2. 9.
스프링 application context 빈 ( Bean ) 스프링에서 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈 이라고 부른다. 빈팩토리 ( Bean Factory ) 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 부른다. 애플리케이션 컨텍스트 ( Application Context ) 빈 팩토리보다는 이를 좀 더 확장한 개념이다. 애플리케이션 컨텍스트는 IoC 방식을 따라 만들어진 일종의 빈 팩토리라고 생각하면 된다. 빈 팩토리라고 말할 때는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것이고, 애플리케이션 컨텍스트라고 말할 때는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이라는 의미가 좀 더 부각된다고 보면 된다. 애플리케이.. 2020. 2. 8.
스프링 부트 스케쥴러 메모 @Component @AllArgsConstructor public class LanguageComponent implements CommandLineRunner { public static List languages; private LanguageRepository languageRepository; @Override public void run(String... args) throws Exception { languages = languageRepository.findAll(); } public List getLanguages() { return languages; } /** * 매일 10시에 language 정보 받아오게끔 수정 */ @Scheduled(cron = "0 0 10 * * *") pu.. 2019. 6. 10.