2주차 강의 정리 [인프런 워밍업 클럽 0기 BE]

2주차 강의 정리 [인프런 워밍업 클럽 0기 BE]

2주차의 주 내용은 Jpa를 사용해서 데이터베이스에 접근하는 개발방법이었다.

이전에는 일일이 쿼리를 만들고 쿼리를 실행해서 받아온 결과를 응답객체에맵핑해서 사용했다.

Jpa를 사용하면서 데이터베이스에 접근하는 객체가 명확하게 구분되고 간단한 조회나 저장 업데이트는

트랜잭션과 영속성컨텍스트를 통해서 자동으로 되도록 처리할수있었다.

 

1.ORM(Object Relation Mapping)

객체 와 DB의 테이블을 매핑 시켜서 RDB테이블을 객체지향적으로 사용하게 해주는 기술이다.

자바 진영에는 대표적으로 JPA와 MyBatis가 있는데 MyBatis는 java의 클래스코드와 작성한 SQL코드를 매핑시켜주어야하는 불편함이있었다. 반면에 JPA는 객체가 db에 연결되어서 SQL을 작성하지않고 표준 인터페이스를 기반으로 처리해준다는 차이가있다.

 

feat. 이전 si에서 3달정도 일해본적이있었는데 지금 돌아와서 생각해보면 거기서는 Mybatis를 썼던것같다. 에러코드에서 본듯한 기억이.. 그때는 프론트엔드과정을 마치고 입사해서 자바에대한 기초도없고 스프링도모르고 사용해서 뭐가뭔지 몰랐는데. 지금보니 그게 이거였다는 생각이.. 비즈니스 로직이다보니 쿼리가 길면 몇십줄에서 거의 백줄까지 가는경우도 있었다.

안정성 때문이라그랬나? Jpa를 썻다면 쿼리는 짧게쓰고 객체에서 처리할수도있지않을까 싶은 쿼리문들이 몇개 생각이난다..

 

2.트랜잭션

트랜잭은 db에서 한 로직이 실행되어야하는 단위를 의미한다.

예를들어 은행에서 한쪽에서는 돈이빠지고 한쪽 에서는 돈이 들어가는걸 각각의 트랜잭션으로 돌린다면

한쪽에서 돈이 빠졌는데 다른쪽에서는 에러가 발생해서 돈이 들어가지않을수도 있다.

이런 경우는 비즈니스로직상 대형 사고이기때문에 이런 한번에 일어나야하는 일련의 작업들을 트랜잭션으로 묶는다.

두개를 트랜잭션으로 묶게되면 한쪽에서 돈이빠지고 중간에 에러가발생해서 뒤의작업이 실행되지않더라도 DB가 롤백되면서 작업을 취소시켜버린다. 만약 트랜잭션안의 쿼리가 모두 실행되었다면 커밋을 하게되고 그렇게되면 db에 반영이 되게되는것이다.

 

3.영속성컨텍스트

JPA를 사용하고 service로직에 @Transactional 어노테이션을 달아주게되면 영속성컨텍스트가 적용된다.

영속성 컨텍스트가 적용되면 해당 로직내에서 entity객체가 수정되면 따로 업데이트를 해주지않아도 영속성 컨텍스트가 변화를 저장해두었다가 로직이끝날때 변화를 모두 업데이트해주는 작업을 자동으로 해준다.

 

Jpa를 사용하면서 굉장히 편해졌지만 아직 익숙하지않아서 사용하는게 어색하고 찾아보면서하느라 시간이 조금 걸리는것같다. 익숙해진다면 많은 시간을 단축시킬수있을것같다. 2주차 후반부터는 미니프로젝트 실습을 하고있는데 이전처럼

DB의 테이블에 어떤테이블에 어떤필드가 들어가야할지 다 나와있지는 않아서 테이블을 구성하는것도 필요한 기능을보고 고민하면서 하게되는것같다. erd도 작성해보고 이후에는 명세서나 필요한 레퍼런스도 노션에 간단하게나마 작성해볼 생각이다.

 

댓글을 작성해보세요.