스프링 개념

Spring Boot

개발 환경설정최소화함

Web Service

  • 컴퓨터들간에 상호작용하기위한 소프트웨어
  • 웹서비스orRESTful 서비스
  • 관공서 / 웹서비스
  • 네이버,구글등 / Rest ful 서비스 /HTTP 메서드 +HTTP URI

리소스는 URI 로 식별 어느위치에 어느자료 < URL 을통해 접근 해당자원이있는 위치

POST(create) , GET(read) , PUT(update) , DELETE(delete)

모놀리스 아키텍처 (전체영향 루즈) > SOA 아키텍처 (SOAP) > mociroServies (Rest)

mociroServies 단점 MSA 마이크로서비스아키텍쳐

  • End-to-end 테스트 필요성이 증가
  • ci/cd가 중요해짐
  • 분산환경이니 디버깅과 추적이어려움
  • 다수의 클라이언트 요청 > API GATE (Zuul) 존재 (다수가 호출)

DI 생성 (jUnit,Spring-test)

bean.xml (클래스 빈등록시키기)

DI 의존관계주입 컨테이너 (ApplicationContext)

jUnit의 특징 (pom.xml추가maven)

단정(assert) 메서드로 테스트 케이스의 수행결과를 판별 예 ) assertEquals(예상값,실제값)

4부터는 지원 > 앳 어노테이션

@Test: 테스트수행 메서드, 테스트가 서로영향안주고 각각 독립적 객체생성

@Ignore: 테스트를 실행하지않게함

@Before : @Test 메소드가 실행전에 반드시실행되어짐 ,

@After : @Test 메소드 실행후 > 실행되어짐

@BeforeClass,AfterClass > 딱 한번만 실행되어짐

Spring-Test

@RunWith(SpringJUnit4ClassRunner.class)

@RunWith는 jUnit프레임워크의 테스트 실행방법을 확장할떄사용

SpringJUnit4ClassRunner.class 클래스지정하면 테스트중에 ApplicationContext를 만들고 관리하는 작업을 진행해줌

싱글톤의 ApplicationContext를 보장함

@ContextConfiguration

스프링 빈 설정파일의 위치를 지정할때 사용

@Autowired(스프링 DI에서 사용)

해당변수에 자동으로 빈을 매핑 ,GenericXmlApplicationContext를 굳이 사용안해도됨

<프로퍼티>Bean 의존관계 설정방법d

XML빈설정메타정보는 자주변경되지않는다 그러나.
자주변경될수있는것은.
<프로퍼티>예 (DataSourceBean,DB정보) 로 구성.
Setter Injection : <property> 태그
Setter 메서드를 통해 의존관계가있는 Bean을 주입하려면 <property> 태그 사용가능
ref 속성은 사용하면 Bean이름을이용해 주입할 Bean 을찾음. value 속성은 단순값 또는 Bean이 아닌 객체를 주입할떄사용.
컬렉션 타입의 값 주입(인젝션).
Spring은 List Set Map Properites 와 같은 컬렉션타입을 XML 로 작성해서 프로퍼티에 주입하는 방법제공.
JDBC JPA.


Bean등록 어노테이션

@ Componenet 일반적 스테레오 타입 <bean> 태그와 동일한역할

@ Repository 퍼시스턴스 (파일,데이터베이스) 클래스

@ Service 비즈니스로직 클래스

@ Controller 요청과 응답 처리 클래스

Bean 의존관계 주입

@ Autowired (Type 으로연결)

정밀한 의존관계 주입(DI)이 필요한경우에 유용

프로퍼티 , setter 메서드 , 생성자 , 일반메서드에 적용가능

의존하는 객체를 주입할때 주로 Type을 이용하게된다

<property>,<constructor-arg>태그와 동일한 역할을 한다

@ Resource (Name으로 연결)

프로퍼티 ,setter메서드에 적용가능

@ Value

단순한 값을 주입할때 사용된다

@ Value(”Spirng”) 은 <property .. value=:”Spring”/> 과 동일한 역할을한다

@ Qualifier

@ Autowired와 같이 사용되어짐

@ Autowired 가 타입으로 찾는데 어떤 타입의 Bean인지 같이 사용해야함

Component Scan을 지원하는 태그

<context:component-scan> 태그

@ Component를 통해 자동으로 Bean을 등록하고

@ Autowired로 의존관계를 주입받는 어노테이션을

클래스에서 선언하여 사용했을경우에는 해당클래스가 위치한

특정 패키지를 Scan 하기 위한 설정을 XML에 해주어야한다

<context:component-scan base-package=”myspring.di.annot”/>

<context:includ-filter> 태그와 <context:exclude-filter> 태그를

같이 사용하면 스캔대상에 포함시키거나 포함시키지않을때 구체적으로 명시가능

사용자 관리 프로젝트 ( 아키텍쳐)

효율적 유지관리 계층화로 구현

프리젠테이션 계층 view

서비스계층 serivice

데이터액세스 계층 repository

  • 도메인모델 클래스 로구성

인터페이스를 이용하여 통신하는것이일반적

프리젠테션 계층 (컨트롤러)(JSP,Html 이 요청>컨트롤러)

  • 웹 클라이언트(브라우저) 요청및 응답을처리
  • 상위계층(서비스,데이터액세스) 발생하는 Exception 에대한 처리
  • 최중 UI에서 표현해야할 도메인모델을사용
  • 최종 UI에서 입력한 데이터에대한 유효성검증 (Validation) 기능 제공
  • 비즈니스 로직과 최종UI를 분리하기위한 컨롤러기능 제공

서비스 계층

  • 비즈니스 로직처리 ,비즈시으와 관련된 도메인모델의 적합성검증
  • 트랜잭션 처리 (데이터베이스와연동했을떄)
  • 프리젠테이션 계층 과 데이터액세스 계층 사이를 연결하는 역할

    두 계층이 직접적으로 통신하지 않게하여 애플리케이션의 유연성을증가

    느슨결합

  • 다른 계층들과 (데이터베이스와) 통신하기위한 인터페이스 제공

데이터액세스 계층 (spring JDBC)

  • 영구저장소 (DB)의 데이터를 조작하는 데이터액세스로직을 객체화
  • DB의 데이터를 post get put delete
  • ORM(Object Relational Mapping) 프레임워크 (MyBatis,Hibernate)를 주로 사용하는 계층
  • Dao 인터페이스와 @Repository 사용

도메인 모델 클래스

  • 데이터베이스 Entity 와 비슷한개념으로 가진 VO 혹은 DTO 객체에해당
  • 3개 계층에 전체에 사용
  • private 선언된 멤버변수 , 그변수에대한 getter와 setter 메서드를 가진 클래스를말함

JSP (Html) > 컨트롤러 (@Autowired(service) >

서비스(유저인터페이스).서비스클래스(imple클래스)(@Autowired(DTO) >

Dao(인터페이스),Dao클래스(imple구현) SpringJDBC(DataSource), MyBatis(SqlSession)


데이터 액세스 공통개념

DAO(Data Access Object) 패턴

  • DAO패턴을 적용하여 비즈니스 로직과 , 데이터액세스 로직을 분리하는것이원칙
  • 서비스 계층에 영향주지않고 데이터액세스 기술을 변경할수있다

DataSource

  • DB커넥션(커넥션풀링) 디비 기법
  • 공유 가능하게 스프링 빈으로 등록해주어 사용할수있도록함

SimpleDriverDataSource

  • getConnection() 호출시 DB커넥션을 새로만들고 pool 을 관리안함 단순테스트용

SingleConnectionDriverDataSource

순차적 진행되는 통합테스트에서는 사용가능

위에 심플보다는 빠르다

멀티쓰레드에서는 적합하지않음

Apche Commons DBCP

  • 가장 유명한 오픈소스DB 커넥션 풀 라이브러리

기존의 JDBC

  • 엔티티 클래스와 어노테이션을 이용하는 ORM기술(MyBatis,hibernate)도 내부적으로는 DB와의연동을위해 JDBC 를 사용한다
  • 로우 레벨 기술로 인식되는이유가 (중복된코드반복사용,Checked Exception으로 처리)
  • Connection 과 같은 공유리소스를 제대로릴리즈안하면 시스템 자원이 바닥나는 버그를발생
  • ORM (프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구)

Spring JDBC

  • 기존의 JDBC 단점 극복
  • JDC사용 하여 매개밴셔루 넘어온값 VO객체
  • 어떤객체에 넘겨받을지 지정만해주면됨
  • 먼저 DB커넥션을 가져오는 데이터소스를 빈으로등록해야함

Connection 열기와닫기

  • 필요한 시점에서 알아서 열기닫기해줌
  • 진행중 에 예외가 발생하더라도 알아서닫아줌 (리소스반납)

Statement 준비와닫기

  • SQL 정보 객체를 알아서 필요한 준비작업해줌
  • 사용이끝나고 반납도 릴리즈도 알아서해줌

Statemen 실행

  • Statement(SQL) 실행도 알아서 SpringJDBC가해줌

ResultSet Loop처리

  • ResultSet 에 담긴 쿼리 실행 결과가 한건이상시 루프를만들어 알아서반복

Exception 처리와 반환

  • JDBC 작업중 발생하는 모든예외는 SpringJDBC변환기가 처리
  • 체크예외인(try-catch) SQLException을 > 런타임예외(not try-catch) DataAccessException 타입으로변환

Transaction처리

  • SpringJDBC 사용하면 transaction(Commit,Rollback)과 관련된 모든 작업은 신경안써도됨

JdbcTemplate(SpringJDBC)

  • 실행 : Insert,Update 같이 DB에 변경이일어나는 쿼리를 수행
  • 조회 : Select 를 이용해 데이터를 조회
  • 배치 : 여러개의 쿼리를 한번에 수행

멀티스레드 환경에서도 안전하게 공유해서 쓸수있기때문에

DAO 클래스의 인스턴스변수에 저장해두고사용할수있다

update()메서드

  • INSERT,UPDATE,DELETE
  • int update (Sting sql , [SQL 파라미터])

오토와이어드> 셋데이터(파라미터)

queary()

  • 여러개의 열 여러개의 행

quearyForObject()

  • 여러개의 열 한개의 행

AOP의 개요와 용어

  • Aspect( 로깅 - 보안 - 트렌젝션) 부가기능
  • 핵심에서 관심사(기능)을 분리하여 >Aspect(모듈) 로 OOP를 도와주준다

타겟 (비즈니스로직)

  • 핵심기능을담고있는모듈 , 타겟은 부가기능을 부여할대상

어드바이스 (부가가능)

  • 어드바이스는 타겟에 제공할 부가기능을 담고있는 모듈

조인 포인트

  • 어드바이스가 적용될수있는 위치 , 즉 타겟 객체가 구현한 인터페이스의 모든메서드

포인트 컷 (선별)

  • 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식
  • 포인트컷의 표현식은 execution 으로 시작, 메서드의 Signature를 비교하는 방법을 주로 이용

애스펙트 (Aspect) = 어드바이저(Advisor ,스프링AOP에서만 불림)

  • 어드바이스+포인트컷 = Aspect(AOP기본모듈)
  • 싱글톤 형태의 객체로 존재

위빙 (삽입 비즈니스로직에)

  • 포인트컷에서 결정된 타겟의 조인포인트에 부가기능을 추가할수있도록해주는 핵심적인 처리과정

Spring은 프록시(Proxy) 기반AOP를지원

  • 타겟객체에 대한 프록시(호출을가로챔) 를만들어제공
  • 타겟을 감싸는 프록시는 실행시간(런타임)에 생성
  • 프록시는 어드바이스(부가기능)을 타겟 객체에 적용하면서 생성되는 객체
  • 부가기능을 먼저 실행하거나 (전처리) , 타겟을실행후 부가기능실행 ( 후처리)

Spring AOP는 메서드 조인포인트만 지원

  • Spring 은 동적 프록시 기반으로 AOP 를구현하므로 메서드는 조인 포인트만 지원함 즉,

    타겟의메서드가 호출되는 런타임 시점에만 부가기능을 적용할수있음

  • 반면 AspectJ같은 고급 AOP 프레임워크를 사용하면

    객체의 생성 , 필드값의 조회와 ,초기화 static메서드 호출및 초기화등 다양한작업에 부가기능적용가능

Spring AOP의 구현방식

XML 기반의 POJO클래스를 이용한 AOP 구현

  • 부가기능을 제공하는 Advice 클래스를 작성
  • XML 설정파일에 <aop:config>를 이용해서 애스펙트를 설정한다(어드바이스,포인트컷을설정)

@Aspect 를 이용한 AOP 구현

  • Aspect클래스를 작성 (어드바이스를 메서드와 ,포인트컷을포함)
  • XML 설정 파일에 <aop:aspectj-autoproxy/>를 설정

Spring MVC

  • 모델 - 뷰 - 컨트롤러 MVC 패턴
  • Model : 애플리케이션의정보 ( 데이터,비즈니스로직)
  • View : 사용자에게 제공할 화면 ( 프레젠테이션 로직) JSP
  • Controller : Model과 View 사이의 상호작용을 관리

클라이언트 (요청) > 컨트롤러(호출) > 모델(결과) >컨트롤러(화면생성요청) >뷰(결과화면) > 컨트롤러 (응답) >클라이언트 (사용자)

모델 : 데이터저장소 (데이터베이스) 트랙잰션(추가,변경,삭제) , DAO클래스 ,Serivce 클래스

뷰 : 사용자에게 출력한 화면을만드는일 ,HTML CSS Java Script 를 사용하여 UI 를만듬 (Html , JSP)

컨트롤러 : Sevlet 과 JSP 사용

JSP가 컨트롤러역할을하면 복잡해짐 > 최근에는 Serlvet을 사용

클라 (API요청) > 서버(서블릿컨테이너,톰캣서버) 호출 > URL확인 요청을 처리할 서블릿찾는다 > 실행

모델 자바객체를호출 >

모델객체는 EJB(엔터프라이즈 자바빈스) 이거나 POJO로 된 Service,DAO object) 일수도있음

Spring MVC의 특징

  • 트랜잭션 , DI , AOP 같은 기능뿐아니라 서블릿 기반의 웹개발을 위한 MVC 프레임워크제공
  • 모델2 아키텍처와 Fron Controller(>Controller) 패턴을 프레임워크차원에서제공

Spring MVC 와 Front Controller 패턴

  • 대부분 MVC 프레임워크는 Front Controller 패턴을 적용해서구현
  • Spring MVC 도 DipatcherServlet(Front Controller 패턴) 이라는 클래스를 계층 앞단에놓고

서버로 들어오는 모든요청을받아서 처리하도록 구성

  • 예외가 발생했을때 일관된 방식으로 처리하는것도 Front Controller의 역할

DipatcherServlet 클래스 (Front Controller 패턴적용)

  • Web.xml 에 설정
  • 클라이언트의 모든요청을 전달받음

DipatcherServlet > Controller(개발자작성)

클라이언트(요청) > DipatcherServlet > DipatcherServlet(HandlerMapping (컨트롤러선별)>)Controller(클라>요청처리결과,뷰페이지정보를담아)>ModelAndView객체를반환 >DipatcherServlet>뷰리졸브(뷰선별) >뷰 > DipatcherServlet > 클라

Restful Controller 핵심 어노테이션

  • 클라이언트에서 전송한 XML, JSON 데이터를 컨트롤러에서 자바객체로 받거나 변환한다
  • RequestBody : HTTP (XML , JSON) 바디 > Java객체로 전달
  • ResponseBody : Java객체를 >HTTP(XML , JSON) 바디에 전송

Ajax(asynchoronous javascript and Xml)란?

  • 웹 사용자에게 수준높은 인터페이스를 제공 에 도움을주는 접근법)
  • 비동기적
  • 입력과 동시, 페이지일부만 로드

jQuery 를 이용하여 Ajax를 통신하는경우

  • 자바스크립트로 Ajax코드를 작성하면 코딩량많아지고, 각 브라우저에 맞게 구현해줘야함
  • jQuery를 이용하면 코딩량적고 크로스 브라우징 이 쉬워짐
  • 100줄정도의 소스 코드를 단몇줄만으로 간단하게 가능

Categories:

Updated:

Leave a comment