Spring - PSA (일관성있는 서비스 추상화)

hisungmi·2024년 12월 19일

Java-Spring

목록 보기
5/8
post-thumbnail

PSA (Portable Service Abstraction)

💡PSA -> 일관성있는 서비스 추상화 : 애플리케이션에서 특정 서비스를 이용할 때,
  서비스의 기능에 접근하는 방식 자체를 일관된 방식으로 유지하며 기술 자체를 
  유연하게 사용할 수 있도록 하는 것

  즉, 환경과 세부 기술의 변화 없이 일관된 방식으로 기술에 접근할 수 있게 해주는 것
  

실생활 예시

게임기 예시스포츠 예시
하나의 범용 컨트롤러가 모든 콘솔에서 작동
➡️ 사용자는 새로운 콘솔을 살 때마다 새로운 컨트롤러를 배우지 않아도 됨
축구, 야구, 농구와 같은 스포츠는 모두 구기종목에 해당
게임하는 방식은 달라도 “공을 던지고 받는” 행위로 이뤄짐
➡️ 이러한 행위를 별도로 분리하면 무슨 종목을 수행하더라도 공을 던지고 받는 게임 자체에 집중할 수 있음

PSA 개념이 적용된 사례 장점

게임스포츠
• 새로운 컨트롤러를 매번 배우는 불편함 없이 바로 게임 플레이에 집중 가능
• 다양한 환경에서 일관된 게임 플레이 경험 제공
• 개인화된 컨트롤러 설정 및 느낌 모든 게임에 적용 가능
• 별도의 컨트롤러를 각 콘솔마다 구입할 필요가 없으므로 사용자는 장비에 들어가는 비용을 절약할 수 있음
• 기본적인 '공을 넘기고 받는' 기술을 배움으로써 여러 구기종목(축구, 농구, 배구 등)에서 활용 가능
• 새로운 또는 다른 규칙을 가진 스포츠에 빠르게 적응할 수 있고, 특정 규칙이나 전략에 더 집중할 수 있음
• 하나의 기술 세트로 여러 스포츠를 커버할 수 있기 때문에 다양한 스포츠에 대한 별도의 훈련이나 장비 구매 비용을 절약할 수 있음



트랜잭션 (Transaction)

💡 쪼갤 수 없는 업무 처리의 최소 단위

특징

  • 원자성 : 트랜잭션 실행은 모두 완료되거나, 실패 시 이전으로 돌아가야함
  • 일관성 : 트랜잭션의 작업 결과가 항상 일관성이 있어야함
  • 격리성 : 둘 이상의 트랜잭션이 동시에 실행되는 경우, 서로 독립적으로 실행돼야함
  • 지속성 : 트랜잭션이 성공적으로 완료되었을 경우, 결과가 영구적으로 반영됨

스프링 PSA

  • 스프링은 원,일,격,영을 지원하기 위해 인터페이스를 제공함

  • 트랜잭션을 관리하는 인터페이스로 Platform Transaction Manager가 있다.

  • 여러 트랜잭션 관리 기술 중에는 JDBC / JTA / Hibernate 등이 있다.

➡️ 각각 다른 트랜잭션 관리 기술을 사용하지만 해당 인터페이스를 통해 여러 트랜잭션 관리 기술을 추상화하고, 개발자에게 동일한 트랜잭션 관리 인터페이스를 제공

스프링은 PSA를 통해 개발자에게 트랜잭션 관리 기술(JDBC / JTA / Hibernate)에 구체적으로 종속되지 않고 동일한 방식(동일한 메서드)으로 트랜잭션을 다룰 수 있도록 돕는다.


Spring JPA

💡JPA(Java Persistence API)는 Java에서 관계형 데이터베이스를 객체-관계방식(ORM)으로 
  사용할 수 있도록 만든 인터페이스
  ex) ORACLE, SQL Server, MySQL
  
  • JPA를 사용하면 다양한 DB시스템에 동일한 객체 관계 매핑을 사용할 수 있다.

😗 JPA 특징

1. 객체-관계 매핑 (OPM)

  • 객체 지향 프로그래밍 언어에서 사용하는 객체와 관계형 데이터베이스의 테이블 사이의 매핑 제공
  • 개발자는 데이터베이스 테이블을 직접 다루는 대신 자바 객체로 작업할 수 있음

2. 데이터베이스 독립성

  • 개발자는 JPA를 사용함으로써 특정 데이터베이스에 종속되지 않고 같은 코드를 다양한 데이터베이스 시스템에서 사용할 수 있음

3. 추상화

  • 데이터베이스 접근 로직을 추상화한 기술
  • SQL쿼리를 직접 작성하지 않고도 객체 지향 방식으로 데이터를 쿼리할 수 있음

4. 트랜잭션 관리

  • 관리하고, 트랜잭션 컨텍스트 내에서의 엔티티의 일관성을 보장함

➡️ JPA를 사용함으로써 개발자는 객체 지향적이고 데이터베이스에 독립적인 방식으로 애플리케이션을 개발할 수 있다.


🗒️정리

  • 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것
  • 특정 서비스를 이용할 때, 서비스의 기능 접근 방식 자체를 일관되게 유지하며, 기술 자체를 유연하게 사용할 수 있도록하는 것

➡️ 기술과 서비스에 대한 추상화 기법으로 특정 기술 환경에 종속되지 않는 코드를 만들 수 있다.

profile
난 성미다.

0개의 댓글