스프링 프로젝트 생성스프링 부트로 웹 서버 실행회원 도메인 개발웹 MVC 개발DB 연동 - JDBC, JPA, 스프링 데이터 JPA테스트 케이스 작성

프로젝트 생성 사전 준비물 Java 17 이상 설치
정적 컨텐츠 서버에서 파일을 웹에 그대로 전달. MVC와 템플릿 엔진 서버에서 변형 후 HTML로 내어주는 방식 API JSON 구조로 클라이언트에게 전달하는 방식 1. 정적 컨텐츠 resources/static 폴더에 html 파일 작성. 강의 중 resou

단축키Alt + Enter : 가장 기본적이고 많이 사용하는 단축키. 일단 귀찮을 것 같은 코드에 쓰면 도움이 됨.Ctrl + Alt + V : 선택한 코드들을 Method 형식으로 바꿔줌.Shift + F6 : 이름 전체 변경.Ctrl + Shift + Enter :
DI(의존성 주입):빈으로 등록된 객체들은 스프링 컨테이너에 의해 관리되며, 필요한 의존성은 자동으로 주입된다. 코드의 유지 보수성이 향상되고 유연성이 증가한다.AOP(Aspect-Oriented Programming) 지원: 스프링은 AOP를 지원하여 관심사(Conc
홈 컨트롤러 추가@GetMapping("/") 같은 경우, 기본 localhost:8080으로 들어갔을 경우 home.html 파일을 참고해 보여줌을 의미한다.home.html에는 회원 등록과 회원 목록이 있다.회원 등록 폼 컨트롤러members/new 는 회원 등록

이번 강의에선 개발이나 테스트 용도로 가볍고 편리한 H2를 사용한다.https://www.h2database.com/약 20년 전 사용하던 기술이다.먼저 build.gradle 파일에 jdbc, h2 관련 라이브러리를 추가한다.application.proper

모든 메소드의 호출 시간을 측정할 때회원 가입 시간, 회원 조회 시간을 측정할 때공통 관심 사항 VS 핵심 관심 사항 분리할 때AOP 적용 전AOP 적용 후 AOP 적용 전 AOP 적용 후

자바 언어 기반의 프레임워크자바 언어의 가장 큰 특징 - 객체 지향 언어스프링은 객체 지향 언어가 가진 특징을 살려내는 프레임워크스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크추상화캡슐화상속다형성프로그램을 유연하고 변경이 용이하게 만든다.컴

회원회원을 가입하고 조회할 수 있다.회원은 일반과 VIP 두 가지 등급이 있다.회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)주문과 할인 정책회원은 상품을 주문할 수 있다.회원 등급에 따라 할인 정책을 적용할 수 있다.할인 정책은

원래 기존의 할인 방식에서 주문한 금액의 %를 할인해주는 정률 할인 정책을 추가하여 바꾸도록 한다.새로 RateDiscountPolicy class를 추가한다.새로운 할인 정책인 RateDiscountPolicy를 적용하려고 했더니 전에 만들어놓았던 OrderServi

ApplicationContext 를 스프링 컨테이너이자 인터페이스이다.자바 설정 클래스를 기반으로 스프링 컨테이너( ApplicationContext )를 만들어보자.new AnnotationConfigApplicationContext(AppConfig.class);

요즘 대부분의 스프링 애플리케이션은 웹 애플리케이션이다.웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다.위 경우, DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다.고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸

스프링은 컴포넌트 스캔이라는 자동으로 스프링 빈을 등록해주는 기능을 제공한다.의존 관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다.새로 AutoAppConfig 파일을 만들어준다.이제 각각 MemoryMemberRepository / RateDisco

생성자 주입수정자 주입 (setter 주입)필드 주입일반 메서드 주입말 그대로 생성자를 통해 의존 관계 주입 받는 방법.지금까지 해오던 방법이 생성자 주입특징생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.불변, 필수 의존 관계에 사용된다.스프링 빈에 해당해서, 생
조회 대상 빈이 2개 이상일 때 해결 방법@Autowired 필드 명 매칭@Qualifier @Qualifier끼리 매칭 빈 이름 매칭@Primary 사용를 기존 코드로 예시를 들자면 DiscountPolicy 인터페이스는 rateDiscountPolicy와 fixDi

빈 생명주기 콜백 시작 >데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 예제 코드 예제 테스트 코드 >c

말 그대로 스코프는 빈이 존재할 수 있는 범위를 뜻한다.스프링은 다양한 스코프를 지원한다.싱글톤: 가장 넓은 범위의 스코프프로토타입: 프로토타입 빈 생성과 의존관계 주입까지만 관여하는 스코프웹 관련 스코프request: 웹 요청이 들어오고 나갈 때까지 유지되는 스코프s

웹 스코프의 특징웹 스코프는 웹 환경에서만 동작한다.웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다.웹 스코프 종류request: HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP

\[스프링 부트 스타터]Project: Gradle - Groovy ProjectLanguage : JavaSpring Boot : 3.2.2DependenciesSpring webThymeleafSpring Data JPAH2 DatabaseLombokspring-b

요구사항 분석

구현 기능회원 등록회원 목록 조회순서회원 엔티티 코드 다시 보기회원 리포지토리 개발회원 서비스 개발회원 기능 테스트@Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환@PersistenceContext : 엔티티 메니저( Entit
구현 기능상품 등록상품 목록 조회상품 수정순서상품 엔티티 개발(비즈니스 로직 추가)상품 리포지토리 개발상품 서비스 개발상품 기능 테스트addStock() 메서드는 파라미터로 넘어온 수만큼 재고를 늘린다. 이 메서드는 재고가 증가하거나 상품 주문을 취소해서 재고를 다시

구현 기능상품 주문주문 내역 조회주문 취소순서주문 엔티티, 주문상품 엔티티 개발주문 리포지토리 개발주문 서비스 개발주문 검색 기능 개발주문 기능 테스트기능 설명생성 메서드(createOrder()): 주문 엔티티를 생성할 때 사용한다. 주문 회원, 배송정보, 주문상품의

스프링 부트 타임리프 기본 설정스프링 부트 타임리프 viewName 매핑resources:templates/ +{ViewName}+ .htmlresources:templates/home.html반환한 문자(home)과 스프링부트 설정 prefix , suffix 정보를

준영속 엔티티?영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다.임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수있다.)준영속 엔티티를 수정하는 2가지 방법변경 감지 기능 사용병합( merge ) 사용영속성 컨텍스트에서 엔티티를 다시 조회

Java Persistence API (JPA)자바 진영의 ORM 기술 표준Object Relational Mapping (ORM: 객체 관계 매핑)객체는 객체대로 설계관계형 데이터베이스는 관계형 데이터베이스대로 설계ORM 프레임워크가 중간에서 매핑대중적인 언어에는 대

• 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) • 영속성 컨텍스트동작방식을 그림으로 표현하면 이렇게 된다.JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(e

객체와 테이블 매핑: @Entity, @Table필드와 컬럼 매핑: @Column기본 키 매핑: @Id연관관계 매핑: @ManyToOne,@JoinColumn @Entity@Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할

예제로 이해하기회원 / 팀 클래스회원은 하나의 팀에만 소속될 수 있다.회원과 팀은 다대일(ManyToOne)관계이다.객체를 테이블에 맞춰서 모델링한다. (연관관계 X)MemberTeamMain에 각각 Member와 Team을 저장한다.이를 식별자로 조회해보면연관관계가

다대일: @ManyToOne일대다: @OneToMany일대일: @OneToOne다대다: @ManyToMany테이블외래 키 하나로 양쪽 조인 가능사실 방향이라는 개념이 없음객체참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조하면 단방향양쪽이 서로 참조하면 양방향테이블은

관계형 데이터베이스는 상속 관계X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑각각 테이블로 변환 -> 조인 전략통합 테이블로 변환 -> 단일 테이블 전략서브타입 테이블로 변환 ->

em.find() vs em.getReference()em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시)쉽게 설명해서 DB 쿼리가 안나가는데, 객체가 조회가 되는 것.엔티티 객체 조회

엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능값 타입int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로
JPQL JPA CriteriaQueryDSL 네이티브 SQLJDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용EntityManager.find() (그동안 자주 사용해온 것들)객체 그래프 탐색(a.getB().getC())JPA를

JPQL은 객체지향 쿼리 언어다.따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하지 않는다.JPQL은 결국 SQL로 변환된다.select문 :: = select절from절(whe

.(점)을 찍어 객체 그래프를 탐색하는 것select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드where t.name = '팀A' 상태 필드(s

쉽지 않다 그죠

쉽지 않다 그죠