분류 전체보기 (47) 썸네일형 리스트형 Gradle 도메인 객체 1. Project 객체 ◍ Project객체: 프로젝트의 환경구성, 의존관계 , 태스크 등의 내용을 제어 및 참조 ◍ build.gradle과 대응 ◍ Project 객체의 생명주기 ○ 빌드 수행을 위한 Settings객체 생성 ○ settings.gradle 스크립트 파일이 있을 경우 Settings 객체 비교 ○ 구성된 Settings 객체를 이용하여 Project객체의 계층 구조 생성 ○ 멀티 프로젝트일 경우 부모 프로젝트로 부터 Project 객체 생성 후 자식 프로젝트의 Project생성 ◍ Project 객체 구조 ○ TaskContainer ◼ taskcontainer.print 매서드 이용해서 클래스 컴파일, war파일 압축, 단위 테스트 등 실행 ◼ getbyname등 이용해 프로젝트 .. Gradle 태스크 1. 기본 예제 예제1> task hello Gradle 기본 그레이들 스크리트 파일과 기본 객체 초기화 스크립트 -> Gradle객체 처음 시작 되는 스크립트 (init.gradle) 사용자 정보, 초기 설정 값, 실행 환경 등 설정 스크립트 -> Settings객체 파일 구조(싱글, 멀티등) 빌드에 대한 설정 정보(settings.gradle) 빌드 스크립트 -> Project 객체 그레이들 기본 객체들을 이용해 초기화와 설정 스크립트의 내용 이용 가능 그레이들 구성요소들 그레이들 속성파일: (gradle.properties, Project폴더 하위에 있음)/ 빌드 환경 속성등 내용 환경변수: 시스템에 등록한 Gradle설치 정보 명령어 옵션: 빌드 수행시 명령어와 옵션 정보를 인수로 전달. (gradle -Pname=gradle hello) buildSrc.. 컴포넌트 스캔 1. @ComponentScan @Bean붙일 필요 없이 @Component적힌 자동 스프링 빈 등록 (하나의 AppConfig로 관리 안해도 됨.) @ComponentScan시 @Configuration 붙은 설정들도 자동 등록 됨 basePackages를 이용해 시작 위치를 지정할 수 있다. 이때 이 패키지를 포함해서 하위 패키지를 모두 탐색 basePackage = { "hello.core", "hello.service"} 이렇게 여러 시작 위치 지정할 수도 있다. 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. 권장방법1: 설정 정보클래스의 위치를 프로젝트 최상단에 두기 권장방법2: 스프링 부트면 @SpringBootApplication를 프로젝트.. 싱글톤 (웹과 관련하여) 1. 스프링과 비교 웹 어플리케이션은 보통 여러 고객이 동시에 요청 스프링없는 순수한 DI 컨테이너는 AppConfig 요청을 할떄마다 객체 생성. 객체 인스턴스를 생성하는 비용이 1000 이라면 가져오는 비용은 1정도로 차이가 큼. 2. 싱글톤 패턴의 문제점 싱글톤 패턴 구현 코드 많이 들어감. 의존 관계상 클라이언트가 구체 클래스에 의존(DIP 위반) 클라이언트가 구체 클래스에 의존해서 OCP위반 가능성 높음. 테스트 하기 어려움. 내부 속성을 변경ㅎ거나 초기화 하기 어렵다. private생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성 떨어진다. 안티패턴으로 불리기도 한다. 3. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤으로 관리한다. 스프링.. 의존성 자바코드 기반 1. 기본적인 방식의 의존 MemberService service = new MemberServiceImpl(); 문제점: OCP & DIP 문제 특히 DIP에서는 인터페이스와 구현 클래스 함께 의존 2. AppConfig를 통해 의존성 분리 public class AppConfig{ public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } } //Impl 생성자 public MemeryServiceImpl(MembmerRepository m.. JPA Basics - JPQL Advanced 1. 경로 표현식 ◍ 경로표현식: .(점)을 찍어 객체 그래프를 탐색하는 것 select m.username -> 상태 필드 from Member m join m.team t. -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' ◍ 용어 정리 ○ 상태필드(state field): 단순히 값을 저장하기 위한 필드(ex> m.username) ○ 연관필드(association field): 연관 관계를 위한 필드 ◼ 단일값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex> m.team) ◼ 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션(ex> m.orders) ◍ 특징 ○ 상대 필드 .. JPA Basic - JPQL Basic 0. 기본 ◍ JPQL: 엔티티 객체를 대상으로 쿼리 ◍ JPA는 SQL을 추상화한 JPQL 이라는 객체 지향 쿼리 언어 제공. ◍ 검색 조건이 있는 쿼리가 필요할 때 사용. ◍ 동적쿼리: Criteria 보다 쿼리DSL ◍ QueryDSL ○ 문자가 아닌 자바코드로 JPQL 작성 가능 ○ JPQL빌더 역할 ○ 컴파일 시점에 문법 오류를 찾을 수 있음 ○ 동적 쿼리 작성 편리함 ○ 단순하고 쉬움 ○ 실무사용 권장! ◍ 네이티브 SQL ○ JPA가 제공하는 SQL을 직접 사용하는 기능 ○ JPQL로 해결할 수 없는 특정 데이터베이스에 의존적인 기능 EX> 오라클 CONNECT BY, 특정 DB만 사용하는 SQL 힌트 ◍ JDBC 직접 사용, SpringJdbcTemplate 등 ○ JPA를 사용하면서 JD.. JPA Basic - 값 타입 1. 기본 값 타입 ◍ JPA의 데이터 타입 분류 ○ 엔티티 타입 ◼ @Entity로 정의하는 객체 ◼ 데이터가 변해도 식별자로 지속해서 추적 가능 ○ 값 타입 ◼ int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 ◼ 식별자가 없고 값만 있으므로 변경시 추적 불가 ◍ 값타입 분류 ○ 기본 값 타입: 자바 기본 타입(int, double)/ 래퍼 클래스(Integer, Long)/ String ○ 임베디드 타입: 복합 값타입 ○ 컬렉션 값타입 ◍ 기본값 타입 ○ 생명 주기를 엔터티에 의존 ○ 값 타입은 공유하면 안됨. ○ 자바의 기본 차입은 절대 공유 불가. ◼ int,double같은 기본 타입은 절대 공유 못함 ◼ 기본 타입은 항상 값을 복사함. ◼ Integer.. JPA Basic - 프록시, CASCADE, 고아객체 1. 프록시 ◍ 기초 ○ em.find = 데이터 베이스 통해서 실제 엔티티 객체 조회 ○ em.getReference(): 데이터 베이스 조회를 미루는 가짜 엔티티 조회(프록시) ○ 특징 ◼ 실제 클래스를 상속 받아서 만들어짐. ◼ 실제 클래스와 겉 모양이 같다. ◼ 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨(이론상) ◼ 프록시 객체는 실제 객체의 참조(target)를 보관 ◼ 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 ○ 프록시 객체의 초기화 Member member = em.getReference(Member.class, "id1"); member.getName() //1. getName() //2. 영속성 컨텍스트에 초기화 요청 //3. DB조.. 이전 1 2 3 4 5 다음