[Spring] 빈 스코프
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 빈 스코프란?스코프는 빈이 존재할 수 있는 범위를 의미한다.싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.웹 관련 스코프request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다.session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다.application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다컴포넌트 스캔 자동 등록@Scope(..
[Spring] 빈 생명주기 콜백
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 빈 생명 주기 콜백스프링 어플리케이션 시작 시점에 필요한 연결을 미리 해두고 어플리케이션 종료 시점에 연결을 모두 종료하는 객체 초기화 작업과 종료 작업이 필요하다.package hello.core.lifecycle;public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } pub..
[Spring] 의존관계 자동 주입2
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.다양한 의존 관계 주입 방법에 대해서는 “이전 게시물”을 확인해주세요.이전 게시물 - 의존관계 자동주입 1✏️ 자동 주입 대상을 옵션으로 처리주입할 스프링 빈이 없어도 동작해야 할 때가 있다.그런데 @Autowired 만 사용하면 required 옵션의 기본값이 true 로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다. 이를 해결하기 위해서는 아래와 같이 3가지 방법을 가지고 옵션처리하여 해결할 수 있다.아래 예시에서 Member 는 스프링 빈이 아니다.@Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서..
[Spring] 컴포넌트 스캔 & 의존관계 자동 주입
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 자동으로 스프링 빈을 등록해 → 컴포넌트 스캔(@ComponentScan, @Component)컴포넌트 스캔이란 ?지금까지의 과정에서 자바 코드의 @Bean 이나 XML의  를 통해서 직접 스프링 빈을 등록상당히 귀찮고 누락할 수 있는 가능성이 높다는 문제점을 지닌다.이를 해결하기 위해 컴포넌트 스캔이라는 기능을 통해서 스프링 빈을 자동으로 등록할 수 있다.컴포넌트 스캔 사용하기컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 클래스에 붙여준다.기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다!Aut..
[Spring] 싱글톤 컨테이너
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 싱글톤 패턴을 사용하는 이유스프링 없는 순수한 DI 컨테이너를 가진 어플리케이션을 사용자에게 배포 했다고 생각해보자.그 어플리케이션이 대박이 나서 동시 접속자수가 만명이 넘는다.그러면 만명 사용자가 동시다발적으로 서버에 요청을 보내게 된다.이 어플리케이션에서의AppConfig 는 아래와 같다package hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberReposit..
[Spring] 스프링 컨테이너와 스프링 빈
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 스프링 컨테이너AppConfigpackage hello.core;import hello.core.discount.DiscountPolicy;import hello.core.discount.RateDiscountPolicy;import hello.core.member.MemberRepository;import hello.core.member.MemberService;import hello.core.member.MemberServiceImpl;import hello.core.member.MemoryMemberRepository;import hello..
[Spring] 스프링의 핵심 원리 이해2 - 객체 지향 원리 적용
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다.✏️ 비즈니스 설계 Remind  ✏️ DIP, OCP 위반 상황 설명 지난 시간에는 정액 할인 정책만 구현하여 의존해두었는데 요구 사항이 정률 할인 정책으로 변경되었다.변경에 따라 RateDiscountPolicy를 구현하고 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl코드를 고쳐야 한다.public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); priva..
[Spring] 객체 지향 설계와 스프링
·
Programming/Spring
이 글은 인프런에서 김영한 님의 "스프링 핵심원리 - 기본편"을 수강 후 공부한 내용을 정리한 게시글입니다. 부족한 부분이 있다면 언제든 지적 부탁드립니다. ✏️ 스프링일반적으로 스프링은 좁은 의미의 Spring Framework를 일컫는다. 그러나 넓은 의미에서의 스프링은 Spring 생태계를 의미한다. 스프링 생태계는 다음과 같이 다양한 프로젝트들을 포함하고 있다.스프링 프로젝트 종류프로젝트설명Spring DataData 연동을 위한 API를 제공, RDBMS와 NoSQL과 연동을 적은양의 코드로 처리 가능Spring Cloud마이크로 서비스 기반의 아키텍처에서 사용되는 모든 검증된 패턴을 구현Spring Security인증과 허가에 대한 기반 프레임워크를 제공하여 보안을 간단한 설정과 코드로 구현 ..
[Spring] 스프링 프레임워크(Spring Framework)의 구조
·
Programming/Spring
✏️ 스프링 프레임워크Java 기반 어플리케이션 개발을 지원하는 오픈소스 어플리케이션 프레임워크Core ContainerData Access/IntegrationWebAOP, Aspects, Instrumentation, Messaging, Test 1. Core Container서블릿의 생명 주기를 관리하는 서블릿 컨테이너와 비슷하게 bean의 생성과 관리를 해주는 컨테이너 역할을 한다. 설명모듈/아티팩트Spring CoreCore 모듈은 DI와 IoC 패턴을 적용할 수 있는 기본적인 클래스들을 포함하며 항상 직간접적으로 Spring Core에 대한 종속성을 가지게 된다.spring-coreSpring BeansBean 모듈은 모든 bean 객체의 생명주기를 관리한다..빈 팩토리(BeanFactory)..
[Spring 입문하기] Section 07. AOP
·
Programming/Spring
✏️ 핵심 관심사항(core concer)과 공통 관심사항(cross-cutting concer) 핵심관심사항 예) 은행서비스, 계좌서비스 , 소비자 소비스 등등 공통관심사항(부가기능) 예)보안, 트랜잭션, 로그인 인증 ✏️ AOP (Aspect Oriented Programming - 관점 지향 프로그래밍) 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것 기존 oop는 함수로 뺄 수 없는 공통적으로 처리하는 부가 기능 로직이 중복되는 한계가 있어 이를 해결하기 위해 AOP가 등장하게 되었다. 이런 로직을 어스펙트(Aspect)라는 모듈 형태로 만들어서 설계하고 개발하는 방법이다. 즉 핵심적인 기능에서 부가적인 기능을 분리하는 것..
[Spring 입문하기] Section 06. 스프링 DB 접근 기술
·
Programming/Spring
✏️ H2 데이터베이스 자바 기반의 오픈소스 관계형 데이트베이스 관리 시스템 스프링 부트가 지원하는 인메모리 관계형 데이터베이스 인메모리 특징 : 검색이 빠름, 휘발성(전원이 꺼지면 데이터 삭제) 브라우저 기반의 콘솔 프로그램 적은 용량으로 설치 가능 Embedded mode(내장모드) & Server mode(서버모드) 지원 Embedded mode(내장모드) : Application 서버 실행 종료시 데이터 모두 휘발 Server mode(서버모드) : Application 서버 종료시에도 지속적으로 해당 데이터를 사용 로컬환경이나 테스트 환경에서 많이 사용됨. ✏️ 순수 JDBC JDBC(Java Database Connectivity) 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API J..
[Spring 입문하기] Section 04. 스프링 빈과 의존관계
·
Programming/Spring
✏️ 스프링 빈(Bean) 빈(Bean)이란 스프링 컨테이너에 의해 재사용 가능한 소프트웨어 컴포넌트이다. 즉 스프링 컨테이너에 의하여 생성되고 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다. Spring Framework에서는 ApplicationContext.getBean() 등의 메서드로 직접 자바 객체를 가져올 수 있다. IntelliJ 에서는 Bean 인 경우 아래 사진처럼 왼쪽에 아이콘으로 표시된다. 스프링에서 스프링 빈을 인지하는 2가지 방법 스프링은 약속되어 있는 어노테이션이 붙어있는 클래스를 자동으로 인지한다. @Component어노테이션이 붙어있다면, 스프링이 자동으로 인지할 수 있게 된다. → 컴포넌트 스캔을 이용한 방식 Bean Configuration File..
[Spring 입문하기] Section 03. 회원 관리 예제 - 백엔드 개발
·
Programming/Spring
✏️ 일반적인 웹 어플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 정리하고 관리 도메인 : 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이테 베이스에 저장하고 관리 ✏️ 테스트 케이스 작성 회원 레포지토리 메모리 구현체 테스트 package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.a..
[Spring 입문하기] Section 02. 스프링 웹 개발 기초
·
Programming/Spring
목차 1. 정적 컨텐츠 2. MVC와 템플릿 엔진 3. API ➡️ 정적 컨텐츠 정적 컨텐츠 : html 을 그대로 화면에 보여주는 것 mvc와 템플릿 엔진 : html을 변형하여 보여주는것 API : html이 아닌 데이터를 던져 주는 것 ➡️ MVC와 템플릿 엔진 HelloController.java @Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } } url이 hello-mvc로 요청되면 he..
[Spring 입문하기] Section 01. 프로젝트 환경설정
·
Programming/Spring
➡️ 프로젝트 생성 0. 사전 준비 : Java 11 설치, Java 17 설치, IntelliJ 설치 Spring Boot 2.3.x 를 사용할 경우는 Java 11을 Spring Boot 3.0.x 를 사용할 경우에는 Java 17을 설치해야 한다. 글에서는 11로 설치했다가 다시 17로 재설치 하였다... ㅠ 더보기 1. Java 버전 확인하기 cmd 창에 java -version 명령어를 입력하면 자바 버전을 확인 할 수 있다. 현재 자바 8을 사용하고 있음을 확인 했다. Java 11을 설치해보도록 하자. 2. Java 11 설치하기 www.oracle.com/java/technologies/javase-jdk11-downloads.html 위 링크에서 jdk-11.0.9 를 설치 하면 된다. ..
[Spring 입문하기] Section 00. 강의소개
·
Programming/Spring
💭 간단한 웹 어플리케이션을 개발하며 스프링을 익혀보자 🔎앞으로의 과정 스프링 프로젝트 생성 스프링 부트로 웹 서버 실행 회원 도메인 개발 웹 MVC 개발 DB연동 - JDBC, JPA, 스프링데이터, JPA 테스트 케이스 작성