스프링 기초

bitna's study note·2022년 6월 28일

스프링

목록 보기
1/54

6월 28일 내용정리

아...강의 넘 맘에 안든다...수업을 듣는데, 부족해서 추가 이론 공부를 해야 한다니...노답노답...바뀐쌤 넘 맘에 안듬...

1.스프링이 탄생하게된 배경
과거 EJB라는 기술이 널리 퍼졌음. 개발 종합 선물세트 같은 EJB 여서 개발하기 편리하였으나, EJB에 의존적으로 개발을 해야되서 매우 코드가 지저분하고 자바의 핵심인 객체지향과 전혀다른 방법으로 개발됨
그래서 자바의 핵심 기술인 객체지향대로 개발하자가 스프링이 탄생하게된 원리

2.스프링의 핵심
스프링의 자바 언어 기반 프레임워크 이다.
자바언어의 핵심인 객체지향언어 라는것!!!
스프링은 객체지향언어가 가지는 강력한 특징을 살려내는 프레임 워크임
한마디로, 스프링은 좋은 객체 지향 애플리케이션을 개발 할수 있게 도와주는 프레임 워크!!!!

3.프레임 워크란?
뼈대나 근간을 이루는 코드들의 모음 이라는 뜻으로
미리짜여진 프로그램 기본 흐름이나 구조에 개발자들은 자신의코드를 추가하는 방식으로 개발한다.
즉 개발에 필요한 구조를 이미 코드로 만들어 놓아서 필요에따라 부분만 조립하는 형태로 개발이 가능하다.

4.스프링의 주요특징
(1)POJO기반의 구성
(2)의존성 주입(DI)을 통한 객체 간의 관계 구성
(3)AOP(Aspect-Oriented-Programming)의 지원
(4)트랜잭션의 지원
(5)편리한 MVC구조
(6)WAS에 종속적이지 않은 개발 환경

5.POJO기반의 구성
-객체 간의 관계를 구성할때 별도의 API등을 사용하지 않는 POJO(Plain Oid Java Object)의 구성 만으로 가능-> 즉 오리지널 자바코드로만 구성함
-일반적으로 자바코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용
-코드 개발시 개발자가 특정한 라이브러리나 컨테이너기술에 종속적이지 않다.

6.의존성 주입(Dependency injection)
-코드의 내부에서 객체간의 연결을 이루지 않고, 외부에서 설정을 통해서 객체간의 연결하는 패턴
-컴파일시가 아닌 실행시에 의존 관계가 완성되는 방식
-스프링의 경우 의존성 주입을 쉽게 적용할 수 있는 프레임워크임
-과거 자바에서 객체를 사용할때는 new 라는 생성자를 통해 직접 객체를 생성하여 사용하였지만, 스프링에서는 필요시 A객체는 B객체가 필요하다는 신호만 보내면 B객체를 스프링에서 주입해서 사용가능 하다.

7.AOP(Aspect-Oriented-Programming)의 지원
-시스템 전반에 필요한 기능들을 모듈화 시키고, 비즈니스 로직을 가지는 객체와 재결합하는 방식
*횡단 관심사:보안이나 로그인같은 여기저기서 필요한 공통적인 기능
-AOP는 횡단 관심사를 분리하고, 이를 결합하는 기능이 필요한데, 스프링은 이러한 기능을 프레임워크에서 지원한다.
마치 블럭을 조립하듯이 필요한 블럭을 끼워서 사용하면됨
-개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발하면됨
-유지보수가 수월한 코드를 구성
-Spring AOP는 proxy객체를 생성

8.트랜잭션의 지원
*트랜잭션:쪼갤 수 없는 업무 처리의 최소 단위
-트랜잭션 처리는 상황에 따라 복잡하게 구성될 수도,
아닐수도 있는데, 그때마다 코드를 이용해서 처리하는 작업은 개발자에게는 상당히 피곤한 일
-스프링은 이런 트랜잭션 관리를 어노테이션이나 xml로 설정할 수 있기 때문에 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계

9.의존성 주입 예시

레스토랑 객체를 만들때 쉐프 객체가 필요하다면, 쉐프 객체를 빈으로 등록해주고 스프링이 관리하게 하여 필요시 스프링 컨텍스트에서 레스토랑 객체에 쉐프 객체를 주입해준다. 누가? 스프링 컨텍스트 가!!!

@Data //자바 클래스에서 다른 객체를 생성할때 new생성자를 통해서 객체를 생성해줬는데, 이걸 @Data가 해줌 
이거는 getter, settter, 생성자, toString...등을 만들어 주는 역할을 함.
lombok이라는 패키지가 @Data를 지원해줌
public class Chef{}

@Component
@Data 
public class Restaurant{
private final Chef chef;
}


@Component
@Data 
public class SampleTests{
private Restaurant restaurant //레스토랑 객체를 생성 할때 쉐프객체를 멤버변수로 넣어줬으므로 쉐프객체도 같이 주입이 되어야한다.
이때 레스토랑과 쉐프객체가 빈에 등록이 되어야 하는데,
이것은 컴포넌트스캔을 할때 빈에 등록이 된다...
}

*빈은 스프링이 관리하는 객체이다!!!

10.jdbc연동
서블릿을 쓸때 dataConnectionPool이라는 개념이 있었는데, 이러한 개념을 착안하여 미리 hikariCP 라는 dataConnectionPool을 사용함.
이걸 poom.xml에 설정해주면 빌더인 메이븐이 쭈욱 빌딩을 해줄때 사용할 수 있도록 준비시켜 준다.

11.mybatis
lomboki에서 getter, setter를 만들듯이
sql문을 컨트롤 할수 있게해줌
session방식으로 써야함
session=conn.getConnection 을 이용하여 연결

12.주목해볼만한 xml
xml은 건설을 할때 쓰는 시방서(재료에 대한 성질과 특성이나, 상품 등에 대한 사용법을 설명한 사용설명서) 같은 느낌 이다.

(1)web.xml
처음 실행이 될때 참조하는 xml(시방서)

(2)servlet-context.xml
web.xml에서 참조하는 xml(시방서)

(3)root-context.xml

*src/test/java
는 내부적으로 실행여부만 확인할때 쓰일때 test code 를 이용한다.

profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글