[Section2] Spring Framework 1
🧑🏻💻 TIL(Today I Learned)
✔️ Spring Framework 특징
✔️ Frameworks vs Libraries
- 프로그래밍 상에서의 Framework는 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공하는 것
- Framework는 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해줌
- 애플리케이션의 흐름의 주도권이 개발자가 아닌 Framework에 있음
자동차로 비유를 하자면
Framework는 자동차의 뼈대, 즉 Frame 의미
Library는 자동차에서 다양한 기능을 제공하는 부품을 의미
➡️ 자동차의 뼈대는 쉽게 교체할 수 없지만 부품은 쉽게 교체가 가능함
즉, 한번 정해진 Framework를 교체하는 일은 어렵지만, Library는 쉽게 교체가 가능하며 선택적으로 사용할 수 있다는 의미!
- Library는 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드
→ 애플리케이션을 개발할 때 필요한 기능을 미리 구현해 놓은 집합체- 애플리케이션 흐름의 주도권이 개발자에게 있음
→ 개발자가 만들어놓은 코드 내에서 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용하는 것
- 애플리케이션 흐름의 주도권이 개발자에게 있음
💡 Spring Framework
➡️ 웹 애플리케이션을 개발하기 위한 여러 Framework들 중 하나
🔎 특징

1. POJO(Plain Old Java Object)
➡️ "POJO" Java로 생성하는 순수한 객체
➡️ Spring Framework에서는 POJO 프로그래밍을 지향하기 위해 IoC/DI, AOP, PSA라는 기술 제공
➡️ POJO 프로그래밍이란 순수 Java 객체가 다른 기술이나 환경에 종속되지 않도록 하기 위한 프로그래밍 기법
: 하지만 단순히 순수 자바 객체만을 사용해서 프로그래밍 코드를 작성하는 것을 POJO 프로그래밍이라고 볼 수 없음
- Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 함
- 특정 환경에 종속적이지 않아야 함
➡️ 위 두 가지의 기본적인 규칙을 지켜야 POJO 프로그래밍으로 작성한 코드로 부를 수 있음
👉🏻 POJO 프로그래밍이 필요한 이유?
- 특정 환경이나 기술에 종속적이지 않으면 재사용 가능, 확장 가능한 유연한 코드 작성 가능
- 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해짐
- 코드가 깔끔해지기 때문에 디버깅하기도 상대적으로 쉬움
- 특정 기술이나 환경에 종속적이지 않기 때문에 테스트 단순해짐
- 객체지향적인 설계를 제한 없이 적용할 수 있음⭐️⭐️
⭐️⭐️⭐️ 학습하면서 중요한 것은 애플리케이션 프로그래밍 코드를 작성할 때 내가 작성한 코드가 객체지향스러운가에 대한 고민을 하는 습관을 가지는 것!!! ⭐️⭐️⭐️
2. IoC(Inversion of Control)
➡️ 애플리케이션 흐름의 주도권이 사용자에게 있지 않고 Framework이나 서블릿 컨테이너 등 외부에 있는 것, 흐름의 주도권이 뒤바뀐 것
3. DI(Dependency Injection) : 의존성 주입
➡️ IoC 개념을 조금 더 구체화시킨 것으로 객체 간의 관계를 느슨하게 만들어줌
➡️ 클래스 내부에서 다른 클래스의 객체를 생성하게 두면 두 클래스 간의 의존 관계가 성립하게 됨, new를 사용해 참조할 클래스의 객체를 직접 생성하지 않고 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달받고 있다면 의존성 주입이 이루어지고 있는 것!
- 강하게 결합(Tight Coupling) : new 키워드를 사용하여 객체를 생성할 때
- 느슨하게 결합(Loose Coupling) : 어떤 클래스가 인터페이스 같이 일반화된 구성 요소에 의존하고 있을 때
- 객체들 간의 느슨한 결합은 요구 사항의 변경에 유연하게 대처할 수 있도록 해 줌
- 의존성 주입을 통해 클래스들 간의 강한 결합을 느슨한 결합으로 만들 수 있음
➡️ Spring에서는 애플리케이션 코드에서 이루어지는 의존성 주입을 Spring에서 대신해 줌
4. AOP(Aspect Oriented Programming) : 관심 지향 프로그래밍
➡️ 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심과 관련
- 공통 관심 사항(Cross-cutting concern) : 전반적에 걸쳐 공통적으로 사용하는 기능에 대한 관심사
- 핵심 관심 사항(Core concern) : 비즈니스 로직, 즉 애플리케이션의 핵심 로직에 대한 관심사
(<-> 부가적인 관심 사항 )
➡️ 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
애플리케이션 전반에 걸쳐서 사용되는 공통 기능에는 로깅, 보안, 트랜잭션, 모니터링, 트레이싱 등의 기능이 있음
👉🏻 핵심 로직에서 공통 기능을 분리하는 이유?
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 구현
- 코드의 재사용
5. PSA(Portable Service Abstraction) : 일관된 서비스 추상화
➡️ 클라이언트가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것
➡️ 서비스 추상화 : 추상화의 개념을 애플리케이션에서 사용하는 서비스에 적용하는 기법
➡️ 애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것
➡️ 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함
➡️ PSA가 적용된 분야 : 트랜잭션 서비스, 메일 서비스, Spring Data 서비스 등
드디어 대망의 Spring!! 확실히 마냥 글을 읽는 것보다 코드를 쳐보고 이해를 하는 게 빠르다.
'SEB_BE_45 > 공부 정리' 카테고리의 다른 글
[Section2] Spring Framework 핵심 - AOP (0) | 2023.06.05 |
---|---|
[Section2] Spring Framework 2 (0) | 2023.05.31 |
[Section2] 데이터베이스 - 설계 (0) | 2023.05.26 |
[Section2] 데이터베이스 - SQL (0) | 2023.05.24 |
[Section2] 네트워크 - HTTP / 20230523 (0) | 2023.05.24 |