Spring Framework2,3 (특징 정리)

유성훈·2023년 1월 31일
0

Spring Framework공부

목록 보기
2/7

📌Spring Framework 장점

-복잡함을 해결하기 위해 만들어진 프레임워크
-프로젝트 전체 구조를 설계할 때 유용한 프레임워크
-다른 프레임워크 포용(여럼 프레임워크 혼용해서 사용가능)
-개발 생산성과 개발도구의 지원



📌Spring Framework 특징

  • Pojo(Plain Old Java Object)기반의 구성

    		📍오래되고 간단한 자바 객체 방식을 기반으로 구성되었다는 의미(==쉽게 자바 사용이 가능 하다.)
    		📍Java 코드에서 일반적으로 객체를 구성하는 방식을 스프링 프레임워크 에서 그대로 사용할 수 있다는 의미
  • 의존성 주입(DI)을 통한 객체 간의 관계 구성

의존성이란(Dependency)?
		📍ex. 셰프 클래스,  레스토랑 클래스가 있다고 한다면 셰프는 레스토랑에서만 쓰이는 것이 아니다, 레스토랑에는 반드시 셰프가 필요 하다. 
        ▶️ 즉 두 객체간에 의존성(레스토랑이 셰프 한테 의존 한다. -> 레스토랑 클래스 안에는 셰프라는 객체가 존재한다. -> 의존성이 강하다 -> 유연한 개발이 힘들다 -> 의존성 주입 필요 
		📍ex. 칼, 요리라는 두 객체가 존재
        ▶️칼은 요리 없이 사용 가능하다. 요리외에 다른 용도로 사용하면 된다.
        ▶️반면 요리는 칼 없이 안된다, 칼이 있어야 요리가 가능 하다. 
        -> 요리가 칼 한테 의지 하고 의존한다. 
        -> 요리 안에 칼이 있다 
        -> 의존성 관계가 단단하다. 
        ->칼에는 여러 종류가 들어가야 하는데 이렇게 단단한 결합일 경우 한 종류의 칼만 정의 할 수 있다. 
        -> 주입이라는 기술을 사용하서 결합도를 느슨하게 해야한다.
		➡️의존성 이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미
		(A객체가 B객체 없이 동작이 불가능한 상황을 'A'가 'B에 의존저깅라고 표현 한다.')
주입이란(Injection)?
		📍말 그대로 외부에서 밀어 넣는 것을 의미
		-(내 필드안에서 new를 하는 것이 아니라 다른 필드 에서 new를 해서 주입 하는 것)
		-(ex. 어떤 객체가 필요한 객체를 외부에서 밀어 넣는 것을 의미한다.)
		-(ex. a, b, c라는 객체가 있으면 c가 a라는 객체가 필요하다고 하면 b가 a를 가지고 c에 가져다 주는 것이 주입이다.)
		📍주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고 어떤 객체에 의존하든 자신의 역할은 변하지 않게 된다.
        (b가 알아서 해주기 때문에 신경쓸 필요가 없다, 외부에서 주입을 받기 때문에 자신의 역할이 변하지 않는다.)
			🔎정리
			➡️의존 : a객체 에서 b객체를 직접 생성(결합성이 단단해 진다.)
			➡️의존성 주입 : a -> ❓ <-> b (a는 b가 필요하다는 신호만 보내고, b객체를 주입하는 것은 외부에서 이루어 진다.)
			➡️의존성 주입 방식을 사용하기 위해서는 ❓라는 존재가 필요하게 된다.
		📍스프링 프레임워크 에서는 ApplicationContenxt가 ❓라는 역할을 하며, 필요한 객체들을 생성하고, 필요한 객체들을 주입해주는 역할을 한다. 
        -(사용자가 어노테이션을 사용하면 ApplicationContext가 필요한 것을 주입해준다.)
			➡️따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는 wiring작업의 형태로 개발하게 된다.
			(ApplicationContext(Spring)이 괸리하는 객체들을 빈(Bean)이라고 한다. 빈과 빈 사이의 관계를 처리하는 방식으로는 XML방식, 어노테이션 설정, JAVA 설정 방식(비교적 복잡하다.)을 이용할 수 있다.) 
  • AOP(Aspect-Oriented-Programming)지원

    		📍관점지향 언어(프로그래밍)
      		-ex. 결제라는 메소드를 만들때 log출력(오류보기), transaction(DBMS, DB조회), 예외처리 이러한 3가지는 없어서는 안되는 기능 들이다. 
              ▶️ 결제라는 로직을 봤을때는 결제와 관련된 기능을 보는 것이 개발할때 더 좋겠다는 생각
              (메인 로직에 집중하는 것이 관점) 
              ➡️즉 다른 것을 신경쓸 필요 없게 하나의 관점만 신경 쓰도록 개발하는 것이 AOP이다.
    		📍메인로직(종단 관심사)과 메인로직은 아니지만 필요한 로직(횡단 관심사)을 외부에 분리 한다.
    		📍좋은 개발환경에서는 개발자가 비지니스 로직에만 집중할 수 있게 한다.
    		📍Spring Framework는 반복적인 코드를 제거해줌으로써 핵심 비지니스 로직에만 집중할 수 있는 방법을 제공한다.
    		📍보안이나 로그, 트랜잭션, 예외처리와 같은 비지니스 로직은 아니지만 반드시 필요한 부분을 횡단관심사(cross-concern)이라고 한다.
    		📍스프링 프레임워크는 이러한 횡단관심사를 분리해서 제작하는 것이 가능하고 횐단 관심사를 모듈로 분리하는 프로그래밍을 AOP라고 한다.
    		📍장점
    			1. 핵심 비지니스 로직에만 집중하여 코드 개발
    			2. 각 프로젝트마다 다른 관심사 적용 시 코드 수정 최소화
    			3. 원하는 관심사의 유지보수가 수월한 코드 구성 가능
  • 트랜잭션(작업의 단위)의 지원

    		📍ex. 포인트 적립이라는 서비스를 개발하기 위해 DB에 최소 2번의 접근의 필요
      		(1. 판매시 insert 2. 수정 update --> 트랜젝션 두개)
    		📍트랜젝션을 지원한다는 의미는 insert는 성공했는데 update를 실패한 경우 직접 롤백을 해야하는데 spring에서는 자동으로 롤백이 된다.
      		(여러개의 트랜젝션 중 하나만 실패 해도 롤백이 된다.)
    		📍DB작업 시 트랜잭션관리를 매번 상황에 맞게 코드로 작성하지 않고, 어노테이션이나 XML로 트랜잭션 관리를 설정 가능하		다.
  • 단위 테스트

    		📍단위 테스트를 할 수 있는 서버가 따로 있다.
    		📍전체 Application을 실행하지 않아도 기능별 단위 테스트가 용이하기 때문에 버그를 줄이고 개발 시간을 단출할 수 있다.
  • 편리한 MVC 구조

    		📍WAS의 종속적이지 않은 개발 환경(WAS에 종속적이다는 것은 실행 시켜서 톰캣이 실행되서 결과가 나올때꺼까지 기다리는 것)
    		📍스프링은 was가 없어도 테스트가 가능하다.
profile
프로그래밍 공부

0개의 댓글