💻 백엔드개발/Spring 10

MVC 패턴

🪄 디자인 패턴: 유지보수와 로직을 분리하고 코드를 재사용하는 등 개발에 있어 더 쉽고 편리하게 사용할 수 있게 만든 특정한 방법들을 디자인 패턴이라고 한다.종류로는 스트래티지 패턴, 옵저버 패턴, MVC 패턴 등이 있다. 💡 MVC 패턴: 웹 개발 시 사용되는 소프트웨어 디자인 패턴 중 하나로 체계적인 틀 안에서 동적 웹을 개발할 수 있도록 도와준다.  Model  : 애플리케이션의 데이터와 비즈니스 로직을 포함한다. 데이터베이스와 상호작용, 데이터 처리 및 검증과 같은 작업을 처리한다.view나 controller에 대해 어떠한 정보도 알지 않아야 한다.Service : 비즈니스 로직을 수행한다. controller로부터 넘어온 요청을 처리하고 다시 controller로 가공한 데이터를 넘긴다.d..

[Spring] Section9_빈 스코프

인프런스프링 핵심 - 기본편김영한Section9_빈 스코프​빈 스코프스코프 : 빈이 존재할 수 있는 범위스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지될 수 있는 이유(싱글톤)다양한 스코프 존재 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고, 더는 관리하지 않는 매우 짧은 스코프 (종료 메서드 호출 X)웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프application : 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프​🪄 싱글톤 스코..

[Spring] Section8_빈 생명주기 콜백

인프런스프링 핵심 - 기본편김영한Section8_빈 생명주기 콜백​데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행 → 객체의 초기화와 종료 작업 필요.NetworkClient는 애플리케이션 시작 시점에 Connect() 호출로 연결 맺기, 종료 시점에 disConnect() 호출로 연결 끊기​스프링 빈의 라이프 사이클객체 생성 → 의존 관계 주입 (생성자 주입은 예외, 객체를 만들 때 이미 스프링 빈에 들어와야 함.)객체 생성 후 의존 관계 주입이 다 끝나야 데이터 사용 준비 끝 → 초기화 작업완료 시점을 알 수 있는 방법은 “콜백 메서드”스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 ..

[Spring] Section7_의존관계 주입

인프런스프링 핵심 - 기본편김영한Section7_의존관계 주입​의존 관계 주입 방법생성자 주입setter 주입필드 주입일반 메서드 주입​🪄 생성자 주입 권장 ! (의존 관계 불변해야 함.)​생성자 주입: 생성자를 통해서 의존 관계를 주입 받는 방법.생성자 호출 시점에 딱 한 번만 호출되는 것 보장불변, 필수 의존 관계에 사용생성자가 딱 1개이면 @Autowired 생략해도 자동 주입됨. (스프링 빈만 해당)​setter 주입: 수정자 메서드를 통해서 의존 관계를 주입 받는 방법.선택, 변경 가능성이 있는 의존 관계에 사용@Autowired 의 기본 동작은 주입할 대상이 없으면 오류 발생. 주입 대상이 없어도 동작하게 하려면 @Autowired(required=false) 로 지정. → default는 ..

[Spring] Section6_컴포넌트 스캔

인프런스프링 핵심 - 기본편김영한Section6_컴포넌트 스캔​컴포넌트 스캔@ComponentScan : @Component 가 붙은 모든 클래스를 스프링 빈으로 등록함.@Component 어노테이션이 붙은 클래스를 스캔 해서 스프링 빈으로 자동 등록.Component @Autowired : 의존 관계 자동 주입AnnotationConfigApplicationContext(컨테이너⇒Bean으로 지정된 객체들을 가지고 있는 Context) 사용은 동일 → 설정 정보는 AutoAppConfig.class스프링 빈의 이름은 클래스명을 사용 → 맨 앞 글자는 소문자🪄 Configuration → 구성 / Context → 문맥, 맥락​의존 관계 자동 주입@Autowired 지정 시 스프링 컨테이너가 자동으로 ..

[Spring] Section5_싱글톤 컨테이너

인프런스프링 핵심 - 기본편김영한Section5_싱글톤 컨테이너웹페이지는 동시에 클라이언트가 접속 → 스프링 없는 순수한 DI 컨테이너(AppConfig)는 요청할 때마다 객체를 새로 생성함.solution) 객체가 1개만 생성되고 공유되도록 설계해야 함. → “싱글톤 패턴”​싱글톤 패턴: 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하게 막아야 함.static 사용 → 싱글톤 패턴 이 객체 인스턴스가 필요하면 getInstance() 메서드를 통해서만 조회할 수 있음. → 이 메서드를 호출하면 항상 같은 인스턴스 반환.딱 1개의 객체 인스턴스만 존재해야 하므로, 생성자를 private으로 막아서 외부에서 ne..

[Spring] Section4_스프링 컨테이너와 스프링 빈

인프런스프링 핵심 - 기본편김영한 Section4_스프링 컨테이너와 스프링 빈​ApplicationContext스프링 컨테이너, 인터페이스임.AnnotationConfigApplicationContext 가 구현체보통 어노테이션 기반으로 생성 (Xml 기반도 가능)BeanFactory, ApplicationContext 로 구분빈 이름은 항상 다른 이름으로 부여 → 중복X단계 ⇒ 빈생성 후 의존관계 주입​스프링 빈 조회기본 ac.getBean(빈 이름, 타입)ac.getBean(타입)동일한 타입이 둘 이상일 경우 ac.getBeansOfType() → 해당 타입의 모든 빈 조회 가능상속 관계 부모 타입으로 조회하면 자식 타입도 함께 조회됨.모든 객체의 최고 부모는 Object​BeanFactory: 스프..

[Spring] Section3_스프링 핵심 원리2

인프런스프링 핵심 원리 - 기본편김영한Section3_스프링 핵심 원리2​관심사 분리A interface의 구현체인 A’ 이 B interface의 구현체를 직접 선택 (B’ or B’’) → DIP 위반그러므로 구현체를 선택해주는 역할이 따로 필요함 → “관심사의 분리”​AppConfig: Application의 전체 동작 방식을 구성(config) 하기 위해 구현 객체를 생성하고, 연결생성자 주입 ⇒ AppConfig가 Application의 실제 동작에 필요한 구현 객체를 생성함.구현체가 다른 구현체를 의존하지 않음. interface만 의존 → DIP 성립객체의 생성과 연결은 AppConfig가 담당함.AppConfig 리팩터링 ⇒ 역할과 구현의 관계가 잘 드러나야 함. 중복 제거.​좋은 객체 지..

[Spring] Section2_스프링 핵심 원리 이해1

인프런스프링 핵심 원리 - 기본편김영한Section2_스프링 핵심 원리 이해1​Build ToolGradle → JVM에서 실행되는 스크립트 언어, 자바와 호환됨.Maven, Ant 등도 존재함.빌드 자동화 도구 : Project에 필요한 의존성들의 관리와 패키징 작업을 도와준다.​다이어그램도메인 클래스 다이어그램(Static)객체 다이어그램(Dynamic)Enum : 관련 있는 상수들의 집합 (열거형)HashMap은 동시성 이슈가 발생할 수 있으므로 실무에서는 ConcurrentHashMap(Multi-Thread)을 사용함.​Junit: 자바 환경에서 가장 많이 사용하는 테스팅 기반 프레임워크@Test : 테스트 메소드임을 나타냄.Lifecycle Method : @BeforeAll, @BeforeE..

[Spring] Section1_객체 지향 설계와 스프링

인프런스프링 핵심 - 기본편김영한Section1_객체 지향 설계와 스프링​스프링이란?Spring Boot → 스프링의 모든 Project를 편리하게 사용하도록 지원해주는 프레임워크.스프링의 핵심 Concept 자바 언어 기반의 프레임워크객체 지향 언어의 강력한 특징을 살려내는 프레임워크 → 좋은 객체 지향 Application 개발을 도와줌객체 지향 프로그래밍 특징 추상화, 캡슐화, 상속, 다형성유연하고 수정, 관리에 용이​다형성(Polymorphism)역할(interface)/구현(구현체) 구분 내부적 내용 변경 가능, Client가 내부 내용을 몰라도 됨. → Client에 영향X. 확장 가능 설계단순, 유연, 변경에 편리객체 설계 시 역할(interface)과 구현 명확히 분리객체의 협력 → 혼자 ..