[ 2022.10.31 TIL-Spring PSA ]

Coosla·2022년 10월 31일
0

TIL

목록 보기
9/29
post-thumbnail

Spring PSA

✏️ SA(Service Abstraction)란?

  • 추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것

✏️ PSA(Portable Service Abstraction)란?

  • 예를 들어 JDBC, ORM, JPA 등을 이용해 DB에 접근할 수 있는데, 이 때 어떠한 DB 접근방식을 사용하더라도 트랜잭션 기능을 추가할 수 있다
  • 하나의 추상화로 여러 서비스를 묶어둔 것을 PSA라고 함
  • POJO 원칙에 따라 잘 만들어진 인터페이스

✏️ Spring에서 제공하는 PSA

  • Spring Web MVC
    • 기존 서블릿 코드 형태
      public class 클래스명 {
      	@Override
      	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      								throws ServletException, IOException {
      		super.doGet(req, resp);
      	}
      
      	@Override
      	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      								throws ServletException, IOException {
      		super.doGet(req, resp);
      	}
      }
    • Spring Web MVC
      • 클래스에 @Controller를 사용하면 요청을 매핑할 수 있는 컨트롤러 역할을 수행하는 클래스가됨
      • @GetMapping, @PostMapping을 이용해 요청을 매핑
        @Controller
        public class 클래스명 {
        	@GetMappint("경로")
        	public String 메소드명(파라미터){
        		...
        	}
        }
  • Spring Transaction
    • 어노테이션을 사용하지 않았을 때
      • 명시적으로 setAutoCommit(), commit(), rollback() 메소드를 호출
        try(Connection conn = DriverManger.getConnection(dbUrl, username, password)){
        	Statement stmt = conn.createStatement();
        	
        	// 트랜잭션 블락 시작
        	conn.setAutoCommit(false);
        	
        	String SQL = "SQL문"
        	
        	stmt.execyteUpdate(SQL);
        
        	// 트랙잭션 블락 끝, 커밋
        	conn.commit()
        	
        	conn.setAutoCommit(true)
        } catch(SQLEcepion e){
        	예외처리 메시지 출력
        	// 트랜잭션 취소
        	conn.rollback();
        }
    • 어노테이션 사용했을 때
      • DatasourceTransactionmanager(JDBC), JpaTransactionManager(JPA), HibernateTransactionManager(Hibernate)를 유연하게 바꿔서 사용
      • 기존 코드를 변경하지 않고 트랜잭션을 처리하는 구현체를 사용 기술에 따라 바꿔 사용
        @Transactional(속성 = 속성값)
        public 반환타입 메소드명(매개변수) throws 예외{
        	...
        }
  • Spring Cache
    • JCacheManager, ConcurrentMapCacheManager, EhCacheCacheManager 등 여러가지 구현체가 있음
    • 개발자는 @Cacheable 어노테이션을 붙여 구현체를 크게 신경쓰지 않고 필요에 따라 바꿔 사용가능
  • 위 3개와 같이 Spring에서 다양한 PSA를 지원

참고

PSA

profile
프로그래밍 언어 공부 정리

0개의 댓글