Spring(26)
-
상품 도메인 개발
상품 엔티티 개발(비즈니스 로직 추가) https://github.com/dpdms529/JpaShop/commit/6f9c29210cf3432c8472dfe75f83faf919a09865 데이터를 가지고 있는 쪽에 비즈니스 로직이 있는 것이 응집력이 좋음 상품 리포지토리 개발 https://github.com/dpdms529/JpaShop/commit/cefacc252b6dd22a69fde1d5a7444881121d0b9c 상품 서비스 개발 https://github.com/dpdms529/JpaShop/commit/d7db9f67f9fc3769276b1ccd2602f212c0cfb979 서비스가 리포지토리를 단순히 위임만 하는 클래스라면 리포지토리를 바로 사용하는 것도 고려 가능 실전! 스프링 부트와..
2023.09.29 -
회원 도메인 개발
회원 리포지토리 개발 https://github.com/dpdms529/JpaShop/commit/a11d031ecef924939234372e2c0d8130df9ce36a @Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환 @PersistenceContext : EntityManager 주입 @PersistenceUnit : EntityManagerFactory 주입 회원 서비스 개발 https://github.com/dpdms529/JpaShop/commit/b45e2278dd1b8e58949642f944707751205ae1aa @Service : 스프링 빈으로 등록 @Transactional : 트랜잭션, 영속성 컨텍스트 readOnly=true : 데이터의 ..
2023.09.29 -
애플리케이션 구현 준비
애플리케이션 아키텍처 계층형 구조 사용 controller, web : 웹 계층 service : 비즈니스 로직, 트랜잭션 처리 repository : JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain : 엔티티가 모여 있는 계층, 모든 계층에서 사용 패키지 구조 jpabook.jpashop domain exception repository service web 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의 실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., 스프 www.inflearn.com
2023.09.29 -
도메인 분석 설계
요구사항 분석 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 데이터베이스가 order by 때문에 order를 예약어로 잡고 있기 때문에 관례상 Orders를 많이 사용함 연관관계 매핑 분석 회원과 주문 : 일대다, 다대일의 양방향 관계 주문상품과 주문 : 다대일 양방향 관계 주문상품과 상품 : 다대일 단방향 관계 주문과 배송 : 일대일 양방향 관계 카테고리와 상품 : @ManyToMany로 매핑하면 되지만 실무에서는 이렇게 쓰..
2023.09.29 -
프로젝트 환경설정
프로젝트 생성 라이브러리 살펴보기 gradle 의존관계 보기 ./gradlew dependencies --configuration compileClasspath IntelliJ에서 gradle 의존관계 보기 View 환경 설정 스프링 부트 thymeleaf viewName 매핑 resources/templates/ + {ViewName} + .html 정적 html viewName 매핑 resources/static/ + {ViewName} + .html 서버 재시작 없이 View 파일 변경 spring-boot-devtools 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-devtools' view 파일 변경 후 Recompile 하고 웹..
2023.09.29 -
빈 스코프
빈 스코프란? 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지되는 이유는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문 스프링이 지원하는 스코프 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 컴포넌트 스캔 자동 등록 @Scope("prototype") @Compone..
2023.09.26 -
빈 생명주기 콜백
빈 생명주기 콜백 시작 코드 데이터베이스 커넥션 풀이나, 네티워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요 스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료됨 따라서 초기화 작업은 의존관계 주입이 모두 완료된 후에 호출해야 함 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 빈이 생성되고, 빈의 의존관계 주입이 완..
2023.09.26 -
의존관계 자동 주입
다양한 의존관계 주입 방법 생성자 주입 생성자를 통해 의존 관계를 주입받는 방법 생성자 호출 시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 생성자가 1개만 있으면 @Autowired를 생략해도 자동 주입됨 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 선택, 변경 가능성이 있는 의존관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법 @Autowired의 기본 동작은 주입할 대상이 없으면 오류 발생 주입할 대상이 없어도 동작하게 하려면 @Autowired(required = false) 필드 주입 필드에 바로 주입하는 방법 코드가 간결하지만 외부에서 변경이 불가능해서 테스트하기 힘들다는 단점 존재 DI 프레임워..
2023.09.26 -
컴포넌트 스캔
컴포넌트 스캔과 의존관계 자동 주입 코드 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능 제공 의존관계를 자동으로 주입하는 @Autowired 기능 제공 동작 과정 @ComponentScan @Component가 붙은 모든 클래스를 스프링 빈으로 등록 스프링 빈 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자 사용 ex) MemberServiceImpl 클래스 -> memberServiceImpl 빈 이름 직접 지정 : @Component("beanName") @Autowired 의존관계 자동 주입 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입 기본 조회 전략은 타입이 같은 빈을 찾아서 주입 생성자에 파라미터가 많..
2023.09.26 -
싱글톤 컨테이너
웹 애플리케이션과 싱글톤 순수한 DI 컨테이너 코드 웹 애플리케이션은 보통 여러 고객이 동시에 요청 스프링 없는 순수한 DI 컨테이너는 요청을 할 때마다 객체를 새로 생성 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸됨 -> 메모리 낭비가 심함 싱글톤 패턴을 사용하여 해결 객체를 하나만 생성해서 공유 싱글톤 패턴 싱글톤 패턴 코드 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 static 영역에 객체 인스턴스를 미리 하나 생성해서 올려둔다. getInstance()메서드를 통해서만 조회 가능 private생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 함 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감 의존관계상..
2023.09.26 -
스프링 컨테이너와 스프링 빈
스프링 컨테이너 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext는 인터페이스로 구현체에 따라 XML 또는 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만들 수 있다. 스프링 컨테이너 생성 과정 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class) 구성 정보 지정 (AppConfig.class) 스프링 빈 등록 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈 등록 빈 이름 메서드 이름을 사용 직접 부여하는 방법 : @Bean(name="b..
2023.09.26 -
객체 지향 원리 적용
정률 할인 기능 추가 코드 문제점 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 고쳐야 함 Before : private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); After : private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); OCP 위반 OrderServiceImpl 클래스는 인터페이스인 DiscountPolicy 뿐만 아니라 구체 클래스인 FixDiscountPolicy와 RateDiscountPolicy에도 의존 DIP 위반 구현체 없이는 코드를 실행할 수 없음 구현 객체를 대신 생성하고 주입해 주는 클래스 필요 관심사의 분..
2023.09.26