Spring

· Spring
문제스프링부트에서 트랜잭션을 관리할 때, 대부분의 개발자들이 선언형 트랜잭션이라 불리는 @Transactional 어노테이션을 사용한다. 그 이유는 확실하다. @Transactional은 AOP로 트랜잭션을 관리해주기 때문에, 개발자가 트랜잭션을 관리하는 코드를 작성하지 않아도 된다.그런데 만약 선언형 트랜잭션과 명령형 트랜잭션을 같이 사용하게 되면 어떻게 될까? 무엇이 롤백되고, 무엇이 커밋될까? 아니면 트랜잭션의 경계가 꼬여버릴까? 한 번 알아보자.준비 코드Member.classMember는 JPA 엔티티이며, 이름과 나이를 멤버로 가진다.MemberService.class메서드에 @Transactional을 붙인 채로 PlatformTransactionManager를 주입받아 사용한다.Test Co..
· Spring
웹 서버와 WAS 웹 서버는 클라이언트의 요청에 따라 정적인 리소스를 제공해준다. 정적 리소스라 함은, HTML, CSS, JS 또는 나머지 Asset 파일들을 말한다. 그런데 우리가 사용하는 웹 페이지를 가보면, 버튼을 클릭하여 로그인 하고 검색을 하고 물건을 사는 등 웹과 상호작용을 한다. 이런 일은 웹 서버가 할 수 없는 일이다. 물론 HTML, CSS, JS만으로도 웹을 움직일 순 있지만 내가 말하는 것은 좀 더 비즈니스 적인 것이다. 내 아이디와 비밀번호로 로그인을 한다거나 상품을 구매하는 등 말이다. 우리가 회원가입을 하고 사고 싶은 걸 사기 위해서는 뭔가 DB에 접근해야할 필요가 있다. 이 부분을 WAS(Web Application Server)가 해준다. WAS는 정적 리소스를 제공하는 일..
· Spring
연관관계의 방향 연관관계는 방향이 있다. 연관 상대 객체를 참조하고 있는 쪽에서 상대 객체 쪽으로 방향이 흘러간다. 단방향 매핑 단방향 매핑은 연관관계 사이의 참조가 하나만 존재하는 매핑을 말한다. 그림을 보면 Member와 Team은 다대일 연관관계를 가지고 있다. Member는 Team을 참조하고 있지만, Team은 Member를 참조하고 있지 않는다. 이 경우를 단방향 매핑이라고 한다. @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "team_id") private Team team; } @Entity public class Team {..
· Spring
연관관계 JPA 뿐만 아니라 관계형 데이터베이스에는 기본적으로 테이블간 연관관계가 존재한다. 아래는 멤버와 팀의 연관관계를 나타낸 ERD(Entity Relationship Diagram) 이다. ERD에 대한 자세한 얘기는 생략하겠다. 간단하게 얘기하자면 이는 IE 표기법으로 작성된 ERD인데, 사진을 보면 테이블 끼리 까마귀 발처럼 생긴 것이 선으로 연결되어있다. 따라서 해당 표기법은 Crow-feet 표기법 이라고도 한다. IE 표기법에서는 일대다(1:N), 다대다(N:M), 다대일(N:1) 등에서 '다' 쪽에 까마귀 발이 붙는다. 반대로 '일' 쪽에는 선과 교차하는 짧은 선을 통해 1이라는 것을 나타낸다. 이를 토대로 위의 사진을 해석하자면 member와 team은 N:1(다대일) 관계이다. 풀어..
· Spring
영속성 컨텍스트란? 영속성 컨텍스트(Persistence Context)는 엔티티를 영구 저장(영속)하는 환경을 의미한다. 이는 실제로 존재하는 것이 아닌 논리적인 환경이다. 개발자는 영속성 컨텍스트에 엔티티 매니저(EntityManager)를 통해 접근하고, 사용한다. 사실 영속성 컨텍스트 := 엔티티매니저 이다. 스프링에서 엔티티 매니저를 주입 받을 때의 코드를 보면 다음과 같다. @PersistenceContext private EntityManager em; 엔티티매니저를 영속성컨텍스트라는 애노테이션으로 받아온다. 즉 논리적인 환경을 물리적으로 사용할 수 있도록 도와주는 것이 엔티티매니저이다. 상태 영속성 컨텍스트는 영속(managed), 준영속(detached), 비영속(new/transient..
· Spring
명령적, 선언적 트랜잭션 선수지식으로 간단히 설명하자면 스프링 프레임워크는 선언적 트랜잭션과 명령적 트랜잭션으로 나뉘어 트랜잭션 관리를 제공한다. 선언적 트랜잭션은 @Transactional과 같이 트랜잭션을 사용하겠다 라고 선언하는 것이고, 명령적 트랜잭션은 직접 TransactionManager 등을 통해 코드로 트랜잭션을 구현하는 것이다. 물리적, 논리적 트랜잭션 이번에는 물리 트랜잭션과 논리 트랜잭션에 대해 설명하겠다. 뭐 이렇게 트랜잭션 종류가 많나 하지만 각각이 상이한 것은 아니고 OOP와 AOP같이 갱생하는? 관계이다. 물리 트랜잭션(Physical Transaction) 실제 데이터베이스 커넥션에 사용되는 트랜잭션이다. 즉, 물리 트랜잭션을 커밋하면 실제 DB에 커밋되고 롤백하면 실제 DB..
nimoh
'Spring' 카테고리의 글 목록