spring 10

[Spring JPA] 연관관계 매핑 (4)

연관관계가 필요한 이유 예제 시나리오를 보며 설명을 진행한다. 예제 시나리오회원과 팀이 있다.회원은 하나의 팀에만 소속될 수 있다.회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링 예제 시나리오에 따라 객체를 테이블에 맞추어 모델링해보면 다음과 같이 나타낼 수 있다.  다음과 같은 모델링 결과를 통해 알 수 있는 점은 객체 간에는 연관관계가 없지만, 테이블 간에는 연관관계가 존재한다는 점이다. 테이블을 자세히 살펴보면, 멤버와 팀이 다대일 관계를 가지고 있고, 이 중, '다'의 관계인 Member가 Foreign Key를 가지고 있는 것을 알 수 있다.   참조 대신에 외래키를 그대로 사용 현재 객체를 테이블에 맞추어 모델링을 진행했으므로 참조 대신에 외래키를 그대로 사용하여 연관관계 매핑을 진..

Spring 2024.05.16

[스프링] 스프링 핵심 원리 기본편 정리: 9. 빈 스코프

빈 스코프 빈 스코프란? 빈 스코프란, 빈이 존재할 수 있는 범위를 뜻한다. 여태까지 우리는 스프링 빈이 컨테이너의 시작과 함께 생성되어서 컨테이너가 종료될 때까지 유지된다고 학습했는데, 이는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스프링은 싱글톤 스코프 이외에도 다양한 스코프를 지원하는데, 이는 다음과 같다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고, 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request: 웹 요청이 들어오고, 나갈 때까지 유지되는 스코프 session: 웹 세션이 생성되고, 종료될 때까지 유지되는 스코프 appli..

Spring 2023.09.13

[스프링] 스프링 핵심 원리 기본편 정리: 8. 빈 생명주기 콜백

빈 생명주기 콜백 빈 생명주기 콜백 시작 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 객체의 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정하자. 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 한다. 예제 코드 package hello.core.lifecycle; public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect();..

Spring 2023.09.08

[스프링] 스프링 핵심 원리 기본편 정리: 7. 의존관계 자동 주입

의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입에는 다음과 같은 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자 주입은 생성자를 통해 의존관계를 주입받는 방법을 말하는데, 여태까지 우리가 진행했던 방법을 말한다. 특징 생성자 호출시점에 딱 한 번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용한다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public Ord..

Spring 2023.09.04

[스프링] 스프링 핵심 원리 기본편 정리: 6. 컴포넌트 스캔

컴포넌트 스캔 컴포넌트 스캔과 의존관계 자동 주입 시작하기 현재까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 하지만, 등록해야 할 스프링 빈이 수백 개가 되면 일일이 등록하기 귀찮을 뿐만 아니라, 설정정보가 커지고, 누락하는 문제가 발생한다. 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔과 의존관계를 자동으로 주입하는 @Autowired라는 기능을 제공한다. 이에 대해 코드를 통해 살펴보도록 하자. AutoAppConfig.java package hello.core; import org.springframework.context.annotation.ComponentScan; import org.sp..

Spring 2023.09.01

[스프링] 스프링 핵심 원리 기본편 정리: 5. 싱글톤 컨테이너

싱글톤 컨테이너 웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생한 기술이다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론, 웹이 아닌 애플리케이션 개발도 얼마든지 가능하다. 웹 애플리케이션에서는 보통 수많은 고객이 동시에 요청을 한다. 그림은 클라이언트 A, B, C 세 명이 스프링 컨테이너인 DI 컨테이너에 있는 memberService를 동시에 요청하는 모습이다. 이 경우, 요청을 할 때마다 새로운 memberService 객체가 반환되게 된다. 지금은 클라이언트가 세 명밖에 없지만, 실제 웹 애플리케이션의 경우 수많은 고객이 동시에 요청을 하기 때문에 문제가 발생하게 된다. 실제 코드를 통해 해당 상황이 일어나는 경우에 대해 살펴보자. 스프링 없..

Spring 2023.08.30

[스프링] 스프링 핵심 원리 기본편 정리: 4. 스프링 컨테이너와 스프링 빈

스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정을 알아보기 전에 먼저 기본적인 개념을 알고 넘어가도록 하자. 스프링 컨테이너를 생성하는 코드는 다음과 같다. // 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext는 인터페이스이다. 스프링 컨테이너는 XML을 기반으로 만들 수도 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수도 있다. 이전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자..

Spring 2023.08.27

[스프링] 스프링 핵심 원리 기본편 정리: 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 새로운 할인 정책 개발 새로운 할인 정책의 확장 어떤 악덕 기획자가 등장하여 기존 할인 정책인 정액 할인 정책을 정률 할인 정책으로 변경하고 싶다고 이야기하여 정률 할인 정책에 대한 개발을 시작해야 된다. 악덕 기획자 : 서비스 오픈 직전에 할인 정책을 정액 할인 정책이 아닌 정률 할인 정책으로 변경하고 싶어요. 예를 들어, 기존 정책은 VIP가 얼마를 주문하든 간에 1000원을 할인해 주었지만, 정률 할인 정책은 10%로 지정해 주면 고객이 10000원을 주문 시 1000원을 할인해 주고, 20000원 주문 시에 2000원을 할인해 주는 거예요! 순진 개발자 : (유연한 설계가 가능하도록 객체 지향 원칙을 준수했기 때문에 개발에 문제는 없을 거야) 새..

Spring 2023.08.17

[스프링] 스프링 핵심 원리 기본편 정리: 2. 스프링 핵심 원리 이해1 - 예제 만들기

스프링 핵심 원리 이해 1 - 예제 만들기 프로젝트 생성 사전 준비물 프로젝트를 생성하기 전 다음과 같은 사전 준비물이 필요하다. Java 11 설치 IDE: IntelliJ 또는 Eclipse 설치 본 강의에서는 Java 11 버전을 기반으로 강의가 진행되기 때문에 다른 버전을 설치하여 사용할 경우, 각종 오류가 발생할 가능성이 높다. 따라서 꼭 오라클의 Java 11 버전을 설치하여 사용하길 바란다. Java 11 버전 설치 및 환경변수 설정과 관련된 내용은 해당 링크를 참조하면 된다. https://mimah.tistory.com/entry/Java-JDK-11-%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%99%98%EA%B2%BD-%EB%B3%80%..

Spring 2023.08.07

[스프링] 스프링 핵심 원리 기본편 정리: 1. 객체 지향 설계와 스프링

해당 강의는 인프런에서 '김영한' 님의 "스프링 핵심 원리 기본편" 강의를 보고 정리한 내용이다. 무료 강의인 "스프링 입문" 강의를 듣고 스프링에 대해 자세히 공부하고 싶다는 마음이 생겨 로드맵을 따라 강의를 듣고 공부 내용을 정리하고자 한다. [참고 링크] https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 ..

Spring 2023.08.04