전체 글

본 포스팅은 김영한님의 강의를 듣고 재구성하였습니다. 스프링 컨테이너의 생성 ApplicationContext -> 스프링 컨테이너 ApplicationContext -> Interface 스프링 컨테이너는 애노테이션기반의 자바클래스 뿐만 아니라 XML을 기반으로 만들 수 있다. 방금 예제에서 Appconfing 를 사용했던 방식이 전자에 해당. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); new Annotaion~ 은 ApplicationContext의 구현체이다. TMI) 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory , ApplicationContext 로 ..
도메인 협력관계 - 기획자도 같이 보는 회원클래스 다이어그램 -> 인터페이스, 구현체 정적 회원객체 다이어그램 -> 실제 동적시간에 확정된 객체들 동적임 실행해봐야 알 수 있음. 회원도메인 설계의 문제점 이 코드의 설계상 문제점은?? 다른 저장소로 변경할 때 OCP 원칙 준수하고있는지? DIP를 잘 지키고 있는지? 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음. 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4. 주문 결과 반환: 주문 서비스는 할인 결과를 포함한..
Spring 의 탄생 배경 EJB 답답해서 만듦 표준 인터페이스 -> JPA JPA를 구현한 구현체들이 존재 Spring + JPA 둘다 중요 스프링 생태계 스프링 -> 여러가지 기술들의 모음 스프링 프레임워크 - 핵심 스프링부트 - 여러 기술을 사용할 수 있게 도와줌 스프링 데이터 - CRUD 편하게 도와줌 스프링 세션 - 세션기능을편안 시큐리티 - 보안 문서 - api 문서 스프링 배치 - 배치처리 특화 스프링 프레임워크 핵심기술 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹기술 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 트랜잭션, JDBC, ORM지원, XML지원 기술 통합 테스트 스프링 기반 테스트 지원 언어 코틀린, 그루비 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원 T..
AOP(Aspect Oriented Programming)가 필요한 상황 - 모든 메서드의 호출시간을 측정하고 싶다면?? 문제 시간을 측정하는 기능은 핵심 관심 사항이 아님. 시간을 측정하는 로직은 공통 관심 사항 시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움 시간을 측정하는 로직을 별도의 로직으로 만들기 어려움. 또 변경할 땐 또 모든로직 찾아가면서 변경해야함. -> 이런 문제를 해결하기 위한게 AOP 공통관심사항과 핵심관심사항을 분리 적용할 곳에 지정 해줌. @Aspect @Component public class TimeTraceAop { @Around("execution(* hello.hellospring..*(..))") public Object execute(Proceeding..
JPA는 기존 반복코드도 줄여주고, 기본적인 sql문도 jpa가 직접 만들어서 실행해준다. JPA사용시 sql과 데이터중심 설계에서 객체 중심의 설계로 패러다임 전환할 수 있다. JPA사용시 개발 생산성을 크게 높일 수 있다. JPA -> 자바진형의 표준인터페이스 구현해서 씀. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' build.gradle에 라이브러리 추가.(기본적으로 jdbc도 포함) spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=none properties에서 설정 추가 1. jpa가 날리는 sql을 볼 수있음. 2. 객체를 보고 테이블도 만듦. but table..
순수 JDBC -> DB시간에 해봤던 과제 같다.... JDBC template: spring이 중복을 제거해 JDBC의 (편리하게 가능) JPA라는 기술이 쿼리를 다 날려주는. 스프링 데이터 JPA (jpa를 편리하게 쓸수있게 감싼 기술) h2 database 사용 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) ); 자바에서는 Long 이지만 DB에서느 bigint 타입. generated by default as identity -> 값세팅하지 않고 인서트하면 db가 자동으로 ID값을 채워줌. impl..
LTSGOD
TS's log