Spring

이론적인 공부

jineric 2023. 4. 13. 17:46

Spring 과 SPring Boot

Spring
자바 어플리케이션을 빌드할 수 있는 오픈소스 경량 프레임워크
스프링 프레임워크의 프레임워크
다양한 프레임워크(Struts(?),JSP, Hibernate(?)) 지원 제공
 다양한 라이브러리를 Dependencies에 추가하여 사용해야함 , 번거로움

-Struts란? (JSP와 관계된?)
아파치 스트럿츠: 자바 웹 어플리케이션을 개발하기 위한 오픈 소스 프레임워크

Struts는 일종의 중앙 통제 시스템
-작성된 Java 프로그램들이 서로 간의 관계를 struts.xml에 지정해 놓으면 연결된 Java 프로그램들이 Struts의 개입이 필요한 경우 자동으로 연결되어서 동작하는 것
(Java 어플리케이션과 JSP와 같은 자원 간의 관계를 정한다)

struts.xml

<action name="login" class="com.struts.LoginAction">
<result name="input">/view/login.jsp</result>
<result name="login">/view/login.jsp</result>
<result name="success" type="redirect">dashboard</result>
</action>
.xml에 위 코드를 작성하면
사용자가 http://www.myweb.com/myproject/login 으로 접속을 시도하면 Struts에 의해 액션클래스인 LoginAction의 excute 메소드의 리턴값은 String형태로 되어있고
실행결과가 문제 없으면 Success를 돌려준다.
success를 받게 되는경우 Struts는 dashboard로 지정된 액션클래스나 JSP를 실행

-JSP란?








-Hibernate란?
자바언어를 위한 ORM 프레임워크 //ORM?
-----------------------------------------------------


<영속성>이란?
1.데이터를 생성한 프로그램이 종료되어도 남아있는 데이터의특성
2.영속성을 갖지 않는 데이터는 메모리에서만 존재하기 때문에 프로그램을 종료하면 데이터를 모두 잃어버린다.
3.Object Persistence(영구적인 객체)
메모리 상 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스등을 활용하여 영구적으로 저장


                      create,update,delete
 web Application ------------------> Database
                                  Read
                           <----------------


데이터를 데이터베이스에 저장하는 3가지 방법(각각 무엇인지?)
JDBC(java에서 사용)
Spring JDBC(jdbcTemplate)
Persistence Framework(Hibernate, Mybatis)

4.Persistence Layer
-프로그램 아키텍쳐에서 데이터에 영속성을 부여해주는 계층
-JDBC를 이용하여 직접 구현할 수 있지만, Persistence framework를 이용한 개발이 많이 이루어짐

5.Persistence Framework
- JDBC 프로그래밍의 복잡함,번거로움 없이 간단한 작업만으로
데이터베이스와 연동되는 시스템을 빠르게 개발할수 있고, 안정적인 구동을 보장

Persistence Framework
SQL Mapper, ORM으로 나뉜다
Ex) JPA, Hibernate, Mybatis 등등
----------------------------------------------------
----------------------------------------------------
ORM(Object Rerational Mapping)
-영속성
-ORM
-Association(연관성)
one-to-one
one-to-Many - RDBMS (방향성X)
Student record
구성: Join Table, Join Column
- JavaObject(방향성O)


----------------------------------------------------
SQL Mapper, ORM ??


ORM(Object Rerational Mapping)
객체- 관계 -매핑

-객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는것
1. 객체 지향 프로그래밍은 클래스 사용하고,
관계형 데이터베이스는 테이블을 사용한다.

2. 객체 모델과 관계형 모델 간에 불일치가 존재한다.

3. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.

- 데이터베이스 데이터 <---매핑---> Object 필드
1. 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.

-Persistant API라고도 할 수 있다.
ex) JPA, Hibernate등

ORM
장점
-. 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할수 있도록 도와준다.
2.ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작할 수 있어 개발자가 객체 모델로 프로그래밍하는 데 집중할 수 있도록 도와준다.
3.선언문, 할당 종료 같은 부수적인 코드가 없거나 급격히 줄어든다.
4.SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적 접근으로 생산성이 증가


-. 재사용 및 유지보수의 편리성이 증가한다.
1.ORM은 독립적으로 작성되어 있고, 해당 객체들을 재활용 할 수 있다.
2. 재활용할수 있기 때문에 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태로 디자인 패턴을 견고하게 다지는데 유리하다.
3.매핑정보가 명확하여, ERD 보는 것에 대한 의존도를 낮출 수 있다.

-. DBMS에 대한 종속성이 줄어든다.
1. 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해주기 때문에 RDBMS의 데이터 구조와 JAVA 객체지향 모델 사이의 간격을 좁힐 수 있다.
2.대부분 ORM솔루션은 DB에 종속적이지 않다.
3. 구현방법과 자료형 타입까지 종속적이지 않다.
4.프로그래머는 Object에 집중함으로 극단적으로 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스트와 시간이 소요된다.
5.자바에서 가공할 경우 equals, hashcode의 오버라이드 같은 자바의 기능을  이용할 수 있고, 간결하고 빠른 가공이 가능하다.
ORM
단점
-ORM으로만 서비스 구현하기 어렵다
1. 사용은 편리하지만 설계는 신중히 해야한다 why?
2. 프로젝트의 복잡성이 커질 경우 난이도가 올라간다.
3. 잘못 구현된 경우에도 속도 저하 및 심각할 경우 일관성이 무너지는 문제점 발생
4. 일부 자주사용되는 대형 쿼리는 속도를 위해 SP를 쓰는등 별도의 튜닝이 필요한 경우가 있다.
----------------------------------------------------




----------------------------------------------------
Hibernate


JPA의 구현체
1. JPA 인터페이스를 구현하며 내부적으로 JDBC API를 사용
2. JPA는 관계형 데이터 베이스 와 객체의 패러다임 불일치 문제를 해결
3. 영속성 컨텍스트(엔티티를 영구 지정하는 환경)제공이 큰 특징

//JPA 인터페이스란? JPA Repository?
//내부적으로 JDBC API 사용 JDBC API란?
// 관계형 데이터베이스란? 객체의 패러다임 불일치 문제란?


JPA란?
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
라이브러리가 아닌 인터페이스이므로 특정 기능X

JDBC
자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 테이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준 (DB작업을 위한 표준)
DBMS회사들이 JDBC 인터페이스를 구현하여 제공 (JDBC드라이버)
(JDBC드라이버)
DBMS 회사들이 자신들의 데이터베이스 시스템에 접근 할 수 있도록 JDBC 인터페이스에 명시된 메소드들을 구현한 것
JDBC API를 사용할 경우, 하나의 자바 응용 프로그램만으로 JDBC드라이버를 제공하는 어떤 종류의 관계형 DBMS에 접근이 가능하고, 사용자들은 특정회사의 데이터베이스의 정확한 사용방법을 몰라도 JDBC API만 알면 데이터베이스 조작이 가능하게 됨


하이버네이트(Hibernate) --->DAO사용
장점
-SQL을 직접 사용하지 않고, 메소드 호출만으로 쿼리(?)가 수행(SQL반복작업을 하지 않음으로 생산성이 높아진다!)

-유지보수 용이
테이블 컬럼이 변경되었을때, 테이블과 관련된 DAO의 파라미터,결과,SQL등을 대신 수행

-특정벤더에 종속적이지 않음
JPA는 추상화된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속적이지 않다.
-설정 파일에서 JPA에게 어떤 DB를 사용하고 있는지 알려주기만 하면 DB변경 가능

단점
-성능
 메서드 호출만으로 쿼리를 수행.... 직접 SQL작성하는 것보다 성능상 좋지x

-세밀함
메서드 호출만으로 DB 데이터를 조작하기에 한계가 있음 이를 보완하기 위해
JPQL 지원(?)

공부할것이 많다.

-tip
객체를 불러올 때, 연관된 객체 또한 함께 불러오기 때문에 SQL에 의존하지 않고 개발 가능하다.
SQL 중심이 아닌 객체 중심의 개발 가능


-Spring Data JPA
 JPA를 사용하기 편하게 만들어 놓은 모듈
JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로 이루어져있다.
Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면 Spring이 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해준다.


JPA는 Hibernate를 추상화한 인터페이스로 다른 구현체에 비해 JPA와 호환이 잘된다.
Spring Starter의 Data JPA의존성에 Hibernate 구현체가 기본적으로 탑재되어있다.

-------------------------------------------------------------------------
-Spring boot
기존 스프링 프레임 워크 위에 구축
독립 실행형 프로덕션등급 스프링 기반 어플리케이션을 쉽게 만들 수 있다.
스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화(어떻게 자동화?)하여 편하게 스프링을 활용할 수 있도록 돕는다


-차이점
Spring은 경량 어플리케이션 프레임워크
다양한 프레임워크(Struts,JSP, Hibernate)에 대한 지원을 제공, 어플리케이션을 빌드하는데 사용

Spring boot는 스프링 Rest API 개발에 주로 사용되는 프레임워크


-Spring 주요 차이점 기능
종속성 주입

-Spring boot
자동 구성 Spring boot Framework 개발자의 도움으로 개발 시간, 개발 노력을 줄이고 생산성을 높인다.

SPring Boot 가 간편한 이유

-Spring Boot는 SPring에서 추가해야할 기능들, 프로그램들이 내장되어있고
톰켓이 자동적으로 필요한것들을 마련해준다?