스프링
MVC 컨트롤러로 요청받아 모델을 통해 서비스 호출하여 처리하고 뷰로 응답한다?
MVC는 스프링의 라이브러리 중 하나 = Spring MVC
Spring core 를 같이 쓴다
스프링이 뭐냐? Spring core 를 물어보는 것!
스프링은 객체를 관리할 수 있는 컨테이너를 제공
컨테이너?
공통으로 사용할 수 있는 객체를 만들어 a,b,c 각 클래스에서 같이 쓰고 반납하고 쓰고 반납하고
오픈소스?
누구나 쉽게 접근하여 볼 수 있도록 오픈하는 나의 코드
자바의 대표적인 오픈소스가 스프링이다.
정리
스프링이란? 스프링코어의 특징을 말한다.
자바의 오픈소스 어플리케이션 프레임워크의 중 하나로
스프링의 기본철학은 특정 기술에 종속되지 않고 객체를 관리할 수 있는 프레임워크를 제공하는 것.
그래서 컨테이너로 자바의 객체를 관리하면서 의존성 주입과 제어의 역전을 통해 결합도를 낮추게 됩니다.
의존성 주입? DI (Dependency Injection)
컨테이너가 의존관계를 자동으로 연결
A클래스 B클래스가 있는데 B에서 A를 가져다 쓴다면? B클래스에 A객체를 만들어서 사용한다 이것은 비효율적.
스프링은 컨테이너에 A 객체를 넣어 B가 가져다 쓴다.
그러기위해선 A를 컨테이너에 등록하는 과정과 B는 컨테이너에서 A를 가져다쓰는 과정이 필요
이것을 우리가 안하고 의존관계를 설정한다면 스프링에서 자동으로 연결해준다.
정리
의존성 주입이란?
객체간의 의존관계를 미리 설정해두면 스프링 컨테이너가 자동으로 연결해줍니다.
그러면 의존하는 객체를 직접 생성하거나 검색하여 가져 올 필요없어 결합도가 낮아지는 장점이 있습니다.
제어의 역전 IOC? (Inversion of Control)
제어권이 사용자에게 있지않고 프레임워크에 있음
프레임워크의 특징이기도함
= 컨테이너에서 전체의 흐름은 원래 정해져있고 우리는 중간에 어떻게 할지 코드를 짜는 역할
제어권?
개발자가 짠 코드의 전체 흐름
프레임워크 VS 라이브러리
라이브러리?
Math.random() 처럼 외부에서 가져와 사용하는 것
정리
IOC , 제어의 역전이란?
제어의 역전을 의미하고
제어권이 사용자에게 있지않고 프레임워크에 있어서 필요에 따라 사용자의 코드를 호출하게 됩니다.
스프링에서는 인스턴스의 생성에서 소멸까지 개발자가 아닌 컨테이너에서 대신 관리하게 됩니다.
ORM? (Object Relational Mapping)
관계형 데이터베이스(RDBMS)를 OOP언어로 변환해주는 기술
고객에 이름,전번,성별 을 저장하는 테이블이 있다면
옛날엔 쿼리를 통해 데이터를 가져와 파싱(데이터를 사용하기 쉽게 처리)하여 여러 과정을 거쳤으나
요즘은 ORM을 통해 고객이란 클래스를 만들어 이름,전번,성별 필드를 넣어 객체와 테이블을 매핑시키는 법
내가 짜고싶은 코드를 비지니스 코드라 하는데 비지니스 코드에 집중할 수 있다
정리
Object Relational Mapping 약자로
관계형 데이터베이스(RDBMS)를 OOP언어로 변환해주는 기술입니다.
비지니스 코드가 DB테이블에 바로 접근하게 도와줍니다.
JPA?
ORM 을 활용하고 싶은데 자바에서 JPA를 만들어 ORM을 씀
JPA는 인터페이스라서 구현되는게 없다 = 함수가 짜져있는게 아니라 실행이 불가
각 회사들이 비어있는 함수를 채워넣어 사용할 수 있도록 함
대표적으로 하이버네이트가 있다 JPA 인터페이스를 구현한..
정리
JPA는 ORM을 위해서 자바에서 제공하는 API 입니다. 자바 객체와 DB 테이블을 매핑하는데
구현체로는 하이버네이트가 있습니다.
ORM,JPA,하이버네이트 장단점?
장점
비즈니스 로직에 집중, 객체 중심의 개발합니다
메소드 호출만으로 생산성 향상, 코드가 쉬워 유지보수 비용감소
그리고 특정 DB에 의존하지 않음(MYSQL, ORACLE 이든 상관없이 마음대로 변경가능)
단점
직접 짠 쿼리가 아니기때문에 성능저하 , 복잡한 쿼리는 해결 어려움
그치만 실무에서는 하이버네이트를 쓴다 장점이 많기에
'공부' 카테고리의 다른 글
스프링부트 기본 개념들 (1) | 2022.08.16 |
---|---|
JAVA | 자바, JVM, 객체지향 프로그래밍 (0) | 2022.08.02 |
스프링 | JPA(Java Persistence API ) (0) | 2022.07.27 |
스프링 | 스프링 빈 등록방법 2가지 (0) | 2022.07.27 |
스프링 | 정적컨텐츠, MVC와 템플릿 엔진, API (0) | 2022.07.26 |