■ 스프링 프레임워크(Spring) 정의
: 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크, 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공
- Open Source : 소프트웨어 or 하드웨어의 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어, 오픈 소스 라이선스에 준하는 모든 통칭
- 프레임 워크 : 개발할 때 설계 기본이 되는 뼈대나 구조 / 환경
□ 스프링 프레임워크 특징
- 제어 역행(IoC : Inversion of Control)
- 애플리케이션의 느슨한 결합을 도모 ( 느슨한 결함 >> 결합도 낮춤 >> 시스템의 유연성 증가, 프레임워크 안정성 향상)
- 컨트롤러의 제어권이 사용자가 아닌 프레임워크가 가짐, 필요시에 사용자가 스프링에서 코드를 호출
- 의존성 주입 (DI : Dependency Injection)
- 각 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줌
- 관점지향 프로그래밍 (AOP : Aspect-Oriented Programming)
- 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리
□ 스프링 프레임워크 기능
- Spring MVC
- Spring AOP
- Spring ORM
- ORM (object-Relation Mapping)
- DB 테이블을 자바 객체로 매핑
- 객체간의 관계를 바탕으로 SQL을 자동으로 생성
- ORM (object-Relation Mapping)
- Spring JDBC
- Spring Test
■ 스프링 부트(Spring Boot)
: 스프링 프레임워크를 사용하는 프로젝트를 간편하게 설정할 수 있는 스프링 프레임웍의 서브 프로젝트
□ 특징
- 자동설정(AutoConfiguration) 을 이용하여 애플리케이션 개발에 필요한 모든 내부 디펜던시를 관리
- 개발간에 필요, 사용할 jar들의 호환 및 의존성 등을 자동으로 해결
■ DB 관리
: 기존 현업에서 사용하는 RDB를 사용하는 상황에서 SQL 사용은 피할 수 없게 됩니다. 하지만 대량의 데이터를 관리하기 위해 같은 작업을 반복적으로 행해야 하기 때문에 매우 비효율적이었습니다. 이를 해결하기 위해 데이터 베이스 모델링에 집중하게 되고 JPA가 등장합니다.
JPA는 개발자가 SQL 작성이 아닌 자바에서 추구하는 객체지향적 프로그래밍에 집중할 수 있게 되고, JPA가 RDB에 맞게 SQL을 대신 생성해서 실행시켜줌으로써 생상성을 향상과 유지보수가 용이하게 됩니다.
□ JPA 와 Mapper 차이
| JPA (ORM) | 기존 Mapper (RDB) |
| 객체를 매핑 | 쿼리를 매핑 |
| SQL 명시 X | SQL 명시 O |
> RDB가 웹 서비스의 중심이 되면서, 애플리케이션 코드보다 SQL 작성에 많은 비중을 두고 있는데, 이를 개선하기 위해 등장한 것이 JPA
■ JPA(Java Persistance API)
: 자바 ORM 기술에 대한 표준 명세, Java 에서 제공하는 API로 DB를 매핑
■ Spring Data JPA
: JPA를 사용하기 위해서는 구현체가 필요한데 대표적으로 Hibernate, Eclipse 등이 있습니다. 하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 직접 다루지 않고, 구현체들을 좀 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA 기술을 다룹니다.
JPA <- Hibernate <- Spring Data JPA
* 사용 이유
- 구현체 교체의 용이성
- 저장소 교체의 용이성
- API (Application Programming Interface)
: 응용프로그래밍에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
'Spring > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
| AWS EC2 서버 환경 구현 (0) | 2021.09.14 |
|---|---|
| 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현... (2)연동하기 (0) | 2021.09.09 |
| 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현... (1)설정 (0) | 2021.09.08 |
| 테스트 코드 작성 (1) | 2021.08.25 |
| Intellij를 활용한 스프링 부트 개발 세팅 (0) | 2021.08.25 |