본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 스프링 프레임워크(POJO, PSA, IoC/DI, AOP) 개념

by 환풍 2023. 8. 22.
728x90

 

Spring Framework

POJO란?

Plain Old Java Object의 약자로 다른 클래스나 인터페이스를 상속받아 메서드가 추가된 클래스가 아닌
일반적으로 우리가 알고 있는 getter, setter와 같이 기본적인 기능만 가진 자바 객체이다

ex) CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.bit.dto;
 
public class MemberDTO {
 
    private int memNo;
    private String memId;
    private String memPwd;
    private String memName;
    
    public int getMemNo() {
        return memNo;
    }
    public void setMemNo(int memNo) {
        this.memNo = memNo;
    }
    public String getMemId() {
        return memId;
    }
    public void setMemId(String memId) {
        this.memId = memId;
    }
    public String getMemPwd() {
        return memPwd;
    }
    public void setMemPwd(String memPwd) {
        this.memPwd = memPwd;
    }
    public String getMemName() {
        return memName;
    }
    public void setMemName(String memName) {
        this.memName = memName;
    }
}
 
cs
  • 테스트하기 용이하며, 객체지향 설계를 자유롭게 적용가능
  • 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체
  • 일반적인 자바 객체를 지칭하기 위한 별칭

 

PSA란?

Portable Service Abstraction의 약자로
다양한 서비스 제공 업체의 기술과 구현을 추상화하고 표준화된 방식으로 사용할 수 있는 인터페이스를 제공한다.

ex) CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
 
public class MainApp {
    public static void main(String[] args) {
        // 데이터베이스 연결 설정
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
        dataSource.setUsername("username");
        dataSource.setPassword("password");
        
        // JdbcTemplate 생성
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
        // 쿼리 실행 및 결과 출력
        String query = "SELECT * FROM users";
        jdbcTemplate.query(query, resultSet -> {
            while (resultSet.next()) {
                System.out.println("User ID: " + resultSet.getLong("id"));
                System.out.println("Username: " + resultSet.getString("username"));
                System.out.println("Email: " + resultSet.getString("email"));
                System.out.println("----------");
            }
        });
    }
}
cs
  • 환경과 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 설계 원칙
  • 트랜잭션 추상화, OXM 추상화, 데이터 엑세스의 Exception 변환기능 등 기술적인 복잡함은 추상화를 통해 Low Level의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리
  • 데이터베이스에 관계없이 동일하게 적용할 수 있는 트랜잭션 처리방식 

 

IoC / DI란?

DI는 Dependency Injection의 약자로
유연하게 확장 가능한 객체를 만들어 두고 객체 간의 의존관계는 외부에서 다이나믹하게 설정한다
  • 객체지향 언어에서 Object간의 연결 관계를 런타임에 결정
  • 객체 간의 관계가 느슨하게 연결
  • IoC의 구현 방법 중 하나가 DI

 

 

[Spring] 의존성 주입(DI)과 제어의 역전(IOC)

의존성 주입(DI) 이란? 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시켜주는 방식. 걍 결합도를 느슨하게 만드는 것이다. How?? 객체를 직접 만들어서 사용하는게 아니라 주입받아서

bright-landscape.tistory.com

(이전에 한번 DI와 IOC에 대해 포스팅한 적이 있다. 이를 참고해서 다시 보자.)

 

 

AOP란?

Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고도 불린다.
프로그램의 특정 부분을 분리하여 모듈화하고, 해당 모듈을 여러 곳에서 재사용할 수 있도록 돕는 기법이다.
  • 관심사의 분리를 통해 소프트웨어의 모듈성을 향상
  • 공통 모듈을 여러 코드에 쉽게 적용가능
  • 횡단 관심사 (cross - cutting - concerns ) - 한 애플리케이션의 여러 부분에 걸쳐있는 기능

간단한 예로, 트랜잭션 관리는 비즈니스 로직에 종속되지 않아야하고 여러 곳에서 재사용될 수 있어야 한다.

 

 


스프링 프레임 워크 모듈들      
Spring Core 스프링 프레임워크의 핵심 기능을 제공하며, Core 컨테이너의 주요 컴포넌트는 Bean Factory이다.
Spring Context 국제화된 메시지, Application 생명주기 이벤트, 유효성 검증 등을 지원하며 Bean Factory 개념을 확장.
Spring AOP 설정 관리 기능을 통해 AOP 기능을 스프링 프레임워크와 직접 통합 시킨다.
Spring DAO 다른 데이터베이스 벤더들의 예외 핸들링과 오류 메시지를 관리하는 중요한 예외계층을 제공한다.
Spring ORM 스프링 프레임워크는 여러  ORM 프레임 워크에 플러그인되어,
Object Realtion 툴(JDO, Hibernate, iBatis)을 제공한다.
Spring Web Web Context module은 Application Context module 상위에 구현되어,
Web 기반 Application에 context를 제공한다.
Spring Web MVC Spring Framework는 자체적으로 MVC 프레임워크를 제공하고 있으며, 스프링만 사용해도 MVC 기반 웹 어플리케이션을 어렵지 않게 개발 가능
       

 

프레임 워크의 개념뿐만이 아니라, 이를 제대로 알기 위해서는 논문을 분량을 써야할 정도로 양이 방대하다.

지금은 개념들만 알아보고, 이후 차근차근 각각에 대해 깊게 파보려고한다..

반응형

댓글