https://start.spring.io/스프링부트 기반으로 스프링 프로젝트를 만들어주는 웹사이트.Maven, Gradle은필요한 라이브러리를 가져오고, 빌드하는 라이프 사이클까지 관리해주는 툴이다.요새는 대부분 Gradle을 사용한다고 한다.Spring B
정적 컨텐츠 : 서버에서 따로 개입하지 않고 파일을 그대로 웹브라우저에 내려주는 방식MVC와 템플릿 엔진 : 가장 많이 사용하는 방식. JSP, PHP(대표적인 템플릿 엔진)와 같이 서버에서 프로그래밍 해 html을 동적으로 바꿔 내려주는 방식API : JSON 데이터
일반적인 웹 애플리케이션의 계층 구조 컨트롤러 : 웹 MVC의 controller 역할. 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체, 예 ) 회원, 게시글, 댓글,
h2 데이터베이스 설치 h2 데이터베이스는 교육용으로 좋음, 용량이 작고 가벼움 설치 방법 ) http://h2database.com/html/main.html에서 다운로드 후 원하는 폴더 내에 압축 해제 h2 폴더 내의 bin 폴더로 이동 후 cmd에서 h2.bat
만약 모든 메소드의 호출시간을 측정하고 싶다면?🤔모든 메서드의 시작과 끝에 시간을 호출해 각각 그 값이 차이를 계산... 🔒 problem시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞이면 <mark style='background-color: 시간을 측정하
스프링 탄생 배경 2000년대 초반 - java 진영의 대표 표준기술, 스프링 및 JPA를 합친 기능들 가진EJB(Enterprise Java Beans)를 사용했음. But EJB는 시간이 오래 걸리고 복잡했음.. -> Spring, Hibernate 등장 -> Hi
dependency 아무것도 추가하지 않으면 SpringBoot가 Spring core 쪽 라이브러리만 가지고 간단하게 구성해준다.인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계해야 한다.회원 클래스 다이어그램 (정적인 개념)회원 객체 다이어그램 (동적인
새로운 할인 정책 개발 > 애자일 소프트웨어 개발 - 계획을 따르기보다는 변화에 대응하기를 추구 RateDiscountPolicy 추가 할인 정책을 고정 가격 할인에서 비율 할인으로 바꾸기 위해 RateDiscountPolicy class를 생성하였다. 그리고
1\. 스프링 컨테이너 생성ApplicationContext 를 스프링 컨테이너라 한다.ApplicationContext 는 인터페이스이다. (따라서 다형성 적용 O)ApplicationContext를 구현한 것 중 하나가 AnnotationConfigApplicati
스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다.대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다.웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다.순수 DI 컨테이너는 고객이 세
지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다.예제에서는 몇개가 안되었지만, 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하
주입할 스프링 빈이 없어도 동작해야 할 때가 있다.그런데 @Autowired 만 사용하면 required 옵션의 기본값이 true 로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다.자동 주입 대상을 옵션으로 처리하는 방법은 다음과 같다.@Autowired(req
빈 생명주기 콜백 시작 스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다. 객체 생성 -> 의존관계 주입 (생성자 주입은 예외) 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화
싱글톤 빈과 프로토타입 빈을 함께 사용할 때, 어떻게 하면 사용할 때 마다 항상 새로운 프로토타입 빈을 생성할 수 있을까?가장 간단한 방법은 싱글톤 빈이 프로토타입을 사용할 때마다 스프링 컨테이너에 새로 요청하는 것이다.실행해보면 ac.getBean() 을 통해서 항상
스프링부트는 복잡하고 어려운 스프링 기술을 간결하고 쉽게 사용할 수 있도록 도와주는 기술이다. JPA는 강력한 Java ORM 표준 기술이다. 이 두 기술을 합치면 높은 개발 생산성을 유지하면서 빠르게 웹 애플리케이션을 개발할 수 있다. Dependencies 추가Sp
회원, 주문, 상품의 관계: 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계다. 하지만 이런 다대다 관계는 관계형 데이터베이스는 물론이고 엔티티에서도 거의 사용하지 않는다. 따라서 그림처럼 주문상
앞서 진행한 도메인 설계는 데이터와 관련된 설계였다. 여기서는 무엇을 어디까지 구현할지 설명한다. 회원 기능: 회원 등록, 조회상품 기능: 상품 등록, 수정, 조회주문 기능: 상품 주문, 주문 내역 조회, 주문 취소계층형 구조 사용controller, web: 웹 계층
도메인 주도 설계) 엔티티 자체가 해결할 수 있는 것들은 주로 엔티티 안에 비즈니스 로직을 넣는 것이 좋다. -> 객체지향적인 설계stockQuantity라는 재고 수량 변수가 Item 엔티티 안에 있고, 데이터를 가지고 있는 곳에 비즈니스 로직이 있는 것이 가장 응집
홈 화면과 레이아웃 스프링부트 타임리프 기본 설정 스프링 부트 타임리프 viewName 매핑 resources:templates/ +{ViewName}+ .html resources:templates/home.html 반환한 문자( home )과 스프링
애플리케이션을 개발할 때에는 객체 지향 언어로 (Java, Scala, Kotlin 등) 개발한다. 그런데 데이터베이스로는 보통 관계형 DB를 많이 사용한다. 즉 우리가 사는 이 시대는 만들어진 객체를 관계형 DB에 보관하고 관리하는 시대이다. 그런데 객체를 관계형 D
<span style='font-size:14px; color: h2 데이터베이스 버전은 다운로드 받은 버전과 같은 버전으로 설정해줘야 한다. (안 그러면 오류 날 수도 있음)hibernate 라이브러리 의존성은 다음과 같다.• JPA 설정 파일• /META-IN
영속성 컨텍스트 고객의 요청이 올 때마다 엔티티 매니저 팩토리를 통해 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 데이터베이스 커넥션을 사용해서 DB를 사용하게 된다. 영속성 컨텍스트 ? JPA를 이해하는 데 가장 중요한 용어 "엔티티를 영구 저장하는
엔티티 매핑 소개• 객체와 테이블 매핑: @Entity, @Table• 필드와 컬럼 매핑: @Column• 기본 키 매핑: @Id• 연관관계 매핑: @ManyToOne,@JoinColumn@Entity@Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA
<span style='font-size:14px; color: - 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래키를 매핑용어 이해📝 방향: 단방향, 양방향📝 다중성: 다대일, 일대다, 일대일, 다대다 이해📝 연관관계의 주인: 객체 양
연관관계 매핑시 고려사항 3가지가 있다.다중성 - JPA가 네 가지 애노테이션을 제공해준다.다대일: @ManyToOne일대다: @OneToMany일대일: @OneToOne다대다: @ManyToMany단방향, 양방향테이블) 외래키 하나로 양쪽 조인이 가능하기 때문에 사실
관계형 데이터베이스는 상속 관계가 존재하지 않는다.슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다.• 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 • 각각
프록시 기술이 왜 필요한가를 위해 다음과 같은 상황을 생각해볼 수 있다.프록시 기초em.find() vs em.getReference()em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference(): 데이터베이스 조회를 미루는 가짜(프록
목차1️⃣ 소개2️⃣ 기본 문법과 쿼리 API3️⃣ 프로젝션(SELECT)4️⃣ 페이징5️⃣ 조인6️⃣ 서브 쿼리7️⃣ JPQL 타입 표현과 기타식8️⃣ 조건식(CASE 등등)9️⃣ JPQL 함수JPA는 다양한 검색 조건을 통해 데이터에 접근해야 하기 때문에 (다양한
• .(점)을 찍어 객체 그래프를 탐색하는 것경로 표현식 용어 정리• 상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex: m.username)• 연관 필드(association field): 연관관계를 위한 필드• 단일 값 연관 필드: @Many
@RestController 는 @Controller와 @ResponseBody를 합친 것으로ㅡ 스프링이 제공해준다. @RequestBody 는 JSON으로 온 데이터를 엔티티로 바꿔준다.만약 Member 엔티티의 필드 name의 필드명을 username2로 수정한다면
조회용 샘플 데이터 입력주문 + 배송정보 + 회원을 조회하는 API를 만들자지연로딩 때문에 발생하는 성능 문제를 단계적으로 해결해보자⭐️⭐️⭐️⭐️ 실무에서 JPA를 사용하려면 100% 이해해야 하는 매우 중요한 내용이다.엔티티를 직접 노출하는 것은 좋지 않다. ord
주문내역에서 추가로 주문한 상품 정보를 추가로 조회하자. Order 기준으로 컬렉션인 OrderItem 와 Item 이 필요하다.앞의 예제에서는 toOne(OneToOne, ManyToOne) 관계만 있었다. 이번에는 컬렉션인 일대다 관계(OneToMany) 를 조회하
🔎 JPA에서 페이징을 어떻게 할 것인가?페이징과 정렬 조건 \- 검색 조건: 나이가 10살정렬 조건: 이름으로 내림차순페이징 조건: 첫번째 페이지, 페이지당 보여줄 데이터는 3건JPA 페이징 리포지토리 코드JPA 페이징 테스트 코드페이징과 정렬 파라미터org.sp
스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음 다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면?JPA 직접 사용( EntityMan
스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체org.springframework.data.jpa.repository.support.SimpleJpaRepository@Repository 적용: JPA 예외를 스프링이 추상화한 예외로 변환 @Transactio