양방향 연관관계에서는 둘중 하나를 @JsonIgnore 해줘야 한다. 그렇지 않으면 무한루프에 빠질 수 있다. 예시 @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "..
1. 컴포넌트 스캔 주요기능 스캔 위치 설정 필터 : 어떤 애노테이션을 스캔 할지 또는 하지 않을 지 설정 2. Conponent @Repository @Service @Controller @Configuration 3. 동작원리 @ComponentScan은 스캔할 패키지와 애노테이션 정보 실제 스캐닝은 ConfigurationClassPostProcessor 라는 BeanFactoryPostProcessor에 의해 처리된다.
| Autowire 필요한 의존 객체의 "타입"에 해당하는 빈을 찾아 주입한다. required : 기본값은 true (따라서 못 찾으면 애플리케이션 구동 실패) 1. 사용 위치 생성자 세터 필드 2. 같은 타입의 빈이 여러개 일때 @Primary 해당 타입의 빈 모두 주입 받기 @Qualifier(빈 이름으로 주입 받기)
@NoArgsConstructor(access = AccessLevel.PROTECTED) 인스턴스를 new로 해서 만드는걸 방지한다. 이렇게 되면 생성자 변경할 경우 유지보수가 어려워진다. 아래생성자는 @NoArgsConstructor(access = AccessLevel.PROTECTED) 붙이면 할 필요가 없다. protected OrderItem() { }
트랜잭션 처리방법 트랜잭션 처리방법 스프링에서는트랜잭션처리를 지원하는데 그중어노테이션 방식으로@Transactional을 선언하여 사용하는 방법이 일반적이며,선언적 트랜잭션이라 부른다. 클래스, 메서드위에@Transactional이 추가되면, 이 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는@Transactional이 포함된 메소드가 호출 될 경우,PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback 한다. [ [Spring] Transactional 정리 및 예제 [Spring] @Transactional 정리 및 예제 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 어노테이션 @Transa..
클래스명 변경 : Shift + F6 해당 클래스의 TestCase 만들기 : Shift + Ctril +T 부분 클래스 생성 : Ctrl + Alt + M Book book = new Book(); book.setName("시골 jpa"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); 를 아래와 같이 함수로 만들어준다. private Book createBook() { Book book = new Book(); book.setName("시골 jpa"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); return book; } 변수 자동생성 : Ctrl + ..
📝 [Spring] 스프링 PSA 1. PSA(Portable Service Abstraction) Spring은 Sprng Triangle이라고 부르는 세가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. Spring의 Petclinic 예제를 보면 서블릿 어플리케이션임에도 불구하고 서블릿이 전혀 존재하지 않는다. 단지 @Controller 애노테이션이 붙어있는 클래스에서 @GetMapping, @PostMapping과 같은 @RequestMapping 애노테이션을 사용해서 요청을 맵핑한다 실제로는 내부적으로 서블릿 기반으로 코드가 동작하지만 서블릿 기술은 추상화 계층에 의해 숨겨져 있는 것이다. 이렇게 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것..
📝 스프링 AOP 개념 및 적용 방법 | 1. AOP(Aspect Oriented Programming) Spring은 Spring Triangle 이라고 부르는 세가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. AOP는 Aspect Oriented Programming의 약자로 '측면/양상 지향적인 프로그래밍' 이라는 의미이다. class A { method a(){ AAA a가 하는 일 BBB } method b(){ AAA a가 하는 일 BBB } } class B { method c(){ AAA c가 하는 일 BBB } } 위와 같이 동일한 일을 하는 AAA ,BBB가 여러군대에서 사용되고 이렇게 흩어져 있으면 코드 변경이 필요한 경우 모든 부분을 일일히 수정을 해주어야 한다...
| 의존성 주입(DI, Dependency Injection)의 세가지 방법 Spring은 @Autowired애노테이션을 이용한 다양한 의존성 주입 방법을 제공한다. @Autowired 애노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, Setter 에 붙일 수 있다. 1. 생성자 주입 @Controller public class OwnerController { private final OwnerRepository owners; @Autowired //
| 빈(Bean) Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean) 이라고 부른다. new 연산자로 생성한 객체는 빈이 아니다. ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다. 즉 Spring에서의 빈은 ApplicationContext가 알고 있는 객체, ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다 | 빈(Bean)을 등록하는 방법? Component Scanning* 직접 XML이나 자바 설정 파일에 등록 (But, XML로 사용할 경우 빈을 일일이 다 등록 해줘야 하는 불편함이 있다. 그래서 등장한 것이 Component Scan 이다.) | Component Scan 을 통한 등록 방법 @ComponentSc..
엔티티는 가급적 Setter를 사용하지 말자 - 변경포인트가 많아서 유지보수가 어렵다 모든 연관관계는 지연로딩으로 설정 - 즉시로딩(EAGER)은 예측이 어렵다. 특히, JPQL은 실행할 때 N+1문제가 자주 발생한다 - ManyToOne 은 Default가 EAGER 이기 때문에 안정성을 위해서 LAZY 로 바꿔야 된다.
| Spring REST Docs Spring REST Docs는 REST API 에 대한 정보를 제공하는 Docs를 생성할 수 있는 Spring에서 제공하는 툴 이다. Spring MVC Test 코드 작성 시 추가적으로 Docs를 생성하는 코드를 첨가하여 생성할 수 있다. REST Docs 는 REST 아키텍처의 self-descriptive 규약을 지키기 위해 REST API의 리소스 및 API 명세 그리고 요청과 응답 데이터의 설명까지 포함된 문서를 만들 수 있게 해준다. 참고 URL : https://docs.spring.io/spring-restdocs/docs/2.0.4.RELEASE/reference/html5/ Spring REST Docs Document RESTful services ..