일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 비관적락
- 힙
- 다대일
- 스토어드 프로시저
- 백트래킹
- BOJ
- 연결리스트
- 낙관적락
- 연관관계
- 즉시로딩
- 동적sql
- eager
- 다대다
- 지연로딩
- 데코레이터
- shared lock
- CHECK OPTION
- JPQL
- 일대다
- querydsl
- fetch
- dfs
- exclusive lock
- 이진탐색
- PS
- 스프링 폼
- SQL프로그래밍
- execute
- FetchType
- 유니크제약조건
- Today
- Total
목록Spring (90)
흰 스타렉스에서 내가 내리지
강의1. 컴포넌트 스캔과 의존관계 자동주입 시작하기 - 기존의 스프링에서 빈을 등록할 땐 @Bean이나 XML을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. - 스프링은 설정정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. - 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } - 기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없..
강의1. 웹 애플리케이션과 싱글톤 싱글톤 패턴 : 객체가 JVM안에 딱 하나만 있는 패턴. 싱글톤 패턴이 적용되지 않았을 때 memberService1 객체 하나만 생성된 것이 아니라, 그 안에서 memberRepository 객체도 생성하기 때문에, 총 4개의 객체가 생성된 것이다. 우리가 만든 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때마다 객체를 새로 생성한다. 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸된다. -> 메모리 낭비가 심하다. 해결방안 : 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. -> 싱글톤 패턴 강의2. 싱글톤 패턴 싱글톤 패턴 : - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴. - 객체 ..
강의1. 홈 화면과 레이아웃 package jpabook.jpashop.Controller; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home(){ log.info("home controller"); return "home"; } } @Slf4j 어노테이션을 쓰고, log.info("~~"); ..
모듈화 예를들어 어떤 컨트롤러가 여러개의 리포지터리를 사용하여 데이터를 조회한후 가공하여 리턴한다고 가정해 보자. 이러한 기능을 서비스로 만들어 두면 컨트롤러에서는 해당 서비스를 호출하여 사용하면 된다. 하지만 서비스로 만들지 않고 컨트롤러에서 구현하려 한다면 해당 기능을 필요로 하는 모든 컨트롤러가 동일한 기능을 중복으로 구현해야 한다. 이러한 이유로 서비스는 모듈화를 위해서 필요하다. 보안 컨트롤러는 리포지터리 없이 서비스를 통해서만 데이터베이스에 접근하도록 구현하는 것이 보안상 안전하다. 이렇게 하면 어떤 해커가 해킹을 통해 컨트롤러를 제어할 수 있게 되더라도 리포지터리에 직접 접근할 수는 없게 된다. 엔티티 객체와 DTO 객체의 변환 Question, Answer 클래스는 엔티티(Entity) 클..
BeanFactory와 ApplicationContext BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까? 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다. ApplicatonContext가 제공하는 부가기능 메시지소스를 활용한 국제화 기능 - 예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면..
컨테이너에 등록된 모든 빈 조회 import ... public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean(){ String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames){ Object bean = ac.getBean(beanDefinitionName); System.out.printl..
강의1. 주문, 주문상품 엔티티 개발 @Entity @Table(name = "orders") @Getter @Setter public class Order { ... ... ... //==생성 메서드==// public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) { Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER..
강의1. 상품 엔티티 개발 (비즈니스 로직 추가) 객체지향적으로 생각해봤을 때, 데이터를 가지고 있는 쪽에 비즈니스 메서드를 작성하는게 좋다. (서비스 측이 아닌) 그래야 응집력이 있다. setter를 통해 바깥에서 계산해서 넣는 것이 아니라, stockQuantity를 내부에서 처리하는 비즈니스 메서드를 만들어라. 45번 줄에 보면 커스텀으로 exception을 만들었다. 강의2. 상품 리포지토리 개발 16번줄: item은 JPA에 저장할 때 까지 id 값이 없다. id 값이 없다는건 새로 생성한 객체라는 뜻이므로 em.persist()를 통해 신규 등록한다. 18번줄 : else 이면 이미 db에 등록된 것이므로 update 비슷하게 한거라 생각하면 된다. 강의3. 상품 서비스 개발 상품 서비스는 상..
SRP (Single Responsibility Principle) : 단일 책임 원칙 OCP (Open/Closed Principle) : 개방-폐쇄 원칙 LSP (Liskov Substitution Principle) : 리스코프 치환 원칙 ISP (Interface Segregation Principle) : 인터페이스 분리 원칙 DIP (Dependency Inversion Principle) : 의존관계 역전 원칙 1. SRP - Single Responsibility Principle 한 클래스는 하나의 책임만 가져야 한다. 중요한 기준은 변경이다. 변경이 있을 때 파급효과가 적으면 단일책임원칙을 잘 따른 것 예) UI변경, 객체의 생성과 사용을 분리 2. OCP - Open/Closed Pr..
애플리케이션 아키텍처 계층형 구조 사용 - controller, web: 웹 계층 - service: 비즈니스 로직, 트랜잭션 처리 - repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용 - domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용 강의 1. 회원 레포지토리 개발 기술 설명 @Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환 @PersistenceContext : 엔티티 메니저( EntityManager ) 주입 @PersistenceUnit : 엔티티 메니터 팩토리( EntityManagerFactory ) 주입 기능 설명 save() findOne() findAll() findByName() 강의 2. 회원 서비스 개발 기..