본문 바로가기
Computer/CS_Knowledge

[CS] Spring

by HJ0216 2023. 7. 6.

Spring

POJO(Plain Old Java Object)

  • 외부의 종속성이 없는 단순한 자바 객체 프로그래밍 지향하는 프레임워크
  • 다른 클래스나 인터페이스를 상속하지 않고 getter, setter와 같이 기본적인 기능만 가진 자바 객체
1
2
3
4
5
6
7
8
9
10
public class example {
    private int age;
    private String name;
 
    public int getAge(){return age;}
    public String getName(){return name;}
 
    public void setAge(){this.age = age;}
    public void setAge(){this.name = name;}
}
 
 

 

IoC(Inversion of Control, 제어의 역전)

  • 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신하는 것
  • IoC container: Spring에서 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너
  • 종류
    • DL(Dependency Lookup): 저장소에 저장되어 있는 Bean(스프링 컨테이너가 관리하는 객체)에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lockup하는 것
    • DI(Dependency Injection): 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아 사용하는 것
      • :star:Constructor Injection(생성자 주입)
        • 장점
          • 순환 참조 방지: 다른 주입 방식과 달리 스프링 애플리케이션 로딩시점에서 예외가 발생하여 실제 코드가 호출되기 전 오류를 확인할 수 있음
          • 불변성(Immutability): final로 참조형 변수는 반드시 선언과 함께 초기화가 되어야 하므로 누군가 해당 객체값을 임의로 변경할 수 없음
      • Setter Injection(수정자 주입)
        • 단점: 주입이 필요한 객체가 주입이 되지 않아도 객체를 생성할 수 있어 NullPointerException이 발생할 위험이 있음
      • Field Injection(필드 주입)
        • 단점: 주입이 필요한 객체가 주입이 되지 않아도 객체를 생성할 수 있어 NullPointerException이 발생할 위험이 있음

AOP(Aspect Oriented Programming, 관심 지향 프로그래밍)

  • 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것
  • OOP: Business Logic의 모듈화, AOP: 기능의 모듈화

PSA(Portable Service Abstraction, 일관된 서비스 추상화)

  • 작업 환경이나 기술이 변하더라도 일관된 방식의 접근 방식을 제공하여 의존성을 크게 고려하지 않아도 되는 구조
  • 예시 psa - @Transactional: JDBC에 특화된 DatasourceTransactionManager, JPA에 특화되어 Entity Manager를 사용하는 JPATransactionManager를 각각 구현하는 것이 아니라, 최상위 추상화 인터페이스인 PlatformTransactionManager를 만들고 각각의 TransactionManager가 구현하도록 만들어서 DI로 주입받아 사용하도록 만들어짐

Spring MVC

  • View: 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간
  • Controller: 사용자의 요청을 처리하고 Model과 View를 중개하는 역할
  • Model: 데이터 관리 및 비즈니스 로직을 처리하는 부분

Spring Boot와 Spring의 차이점

  1. Spring Boot: Spring-boot-starter를 통해 dependency를 보다 쉽게 설정할 수 있으며, 버전 관리도 자동으로 됨
  2. Jetty 및 Tomcat 등과 같은 임베디드 서버를 제공

용어

  1. Entity: 실제 DataBase의 테이블과 1 : 1로 매핑되는 클래스
    • DB의 테이블내에 존재하는 컬럼만을 속성(필드)으로 가져야 함
    • 상속을 받거나 구현체여서는 안됨
    • Entity 클래스는 다른 클래스에 영향을 미칠 수 있으므로 View와 통신하며 자주 변경될 수 있는 DTO 클래스로 따로 분리해야 함
  2. DTO(Data Transfer Object): 각 계층(Layer)간 데이터 교환을 위한 객체(Java Beans)
    • 로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메소드만을 갖음
    • 예: View <-(DTO) -> Controller <- (DTO) -> Service
  3. VO(Value Object): 변하지 않는 데이터 객체, 오직 read만 가능하며 getter만 사용
    • 예: 고정된 값은 VO로 저장 후 Getter 호출
    1
    2
    3
    4
    5
    6
    7
    8
    DTO a = new DTO(1);
    DTO b = new DTO(1);
    // a != b
     
    VO a = new VO(1);
    VO b = new VO(1);
    // a==b
     
     

 

 

 

참고 자료

 

신입 개발자 기술면접 질문 정리 - 자바

💡 Java의 특징을 설명해주세요. Java는 객체지향 프로그래밍 언어입니다. 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언

dev-coco.tistory.com

 

Data Structure - HashMap

Implement HashMap with array and linked list.

jojozhuang.github.io

 

[Java 25] 자바 - 컬렉션 프레임워크 (1)

컬렉션 프레임워크에 대해 알아보겠습니다.

hyuntaekhong.github.io

 

스프링과 스프링부트(Spring Boot)ㅣ정의, 특징, 사용 이유, 생성 방법

스프링은 Java 백엔드 개발에 있어 떼어놓을 수 없는 프레임워크입니다. Java 백엔드의 핵심 기술이 되는 스프링 프레임워크와 스프링 부트가 무엇인지, 나아가 스프링 부트를 활용하여 프로젝트

www.codestates.com

 

Spring의 기본 특징-POJO

올해 1월달부터 스프링 프레임워크를 이용해 쇼핑몰 웹사이트를 구현해보는 프로젝트를 진행 중에 있다. 오늘은 스프링 프레임워크의 특징에 대해 간단히 정리해보고자 한다.아직까지 완벽하

velog.io

 

스프링 - 생성자 주입을 사용해야 하는 이유, 필드인젝션이 좋지 않은 이유

개요 Dependency Injection (의존관계 주입) 이란 Setter Based Injection (수정자를 통한 주입) Constructor based Injection (생성자를 통한 주입) 스프링에서 사용할 수 있는 DI 방법 세가지 생성자 주입을 이용한 순

yaboong.github.io

 

[Spring Boot] Spring PSA

이번 포스팅에선 IoC & DI, Spring AOP 와 함께 Spring 의 3대 특징인 Spring PSA 에 대해서 살펴보려고 한다. Spring PSA 란? Spring PSA 는 Portable Service Abstraction 의 약자로 휴대용 서비스 추상화라는 의미를 가진

ch4njun.tistory.com

 

@Transactional의 동작방식(AOP,PSA)

@Transactional 어노테이션을 AOP와 PSA의 관점에서 공부해보았다. AOP(Aspect Oriented Programming) @Transactional 어노테이션을 사용하면 별도의 트랜잭션 관련 코드없이 트랜잭션 서비스를 이용할 수 있다. 트

cantcoding.tistory.com

 

'Computer > CS_Knowledge' 카테고리의 다른 글

[CS] Design Pattern  (0) 2023.08.04
[CS] Database  (0) 2023.07.28
[CS] Network  (0) 2023.07.12
[CS] Operating System  (0) 2023.07.12
[CS] Java  (0) 2023.07.06