-
[TIL] JPA 어노테이션TIL(Today I Learned) 2022. 12. 15. 21:27
*20221215의 회고
오늘도 어김없이 아침에는 알고리즘 문제 풀기로 하루를 시작하였다. 그런데 오늘에서야 깨달은 사실이 있다. 바로 내가 그동안 알고리즘 문제풀이에 대해 너무 많은 시간을 할애했다는 사실이다. 원래 스터디를 시작하게 된 취지는, 하루에 두문제씩 무조건 문제를 풀어야 하니까 확실히 공부가 되겠다 해서 시작한 스터디였다. 그러나 아침을 문제풀이로 시작하면, 그날 문제를 풀지 못할 경우 마음이 자꾸 찜찜해서 계속 문제를 붙잡고 있게 된다는 것이다. 그러다 보니 스프링 공부를 해야하는데 문제만 붙잡고 있다던가, 결국엔 풀지 못해서 낙심한 기분을 가지고 스프링 공부를 시작한다는 것이다. 그래서 결국 스터디장님께 양해를 구하고 여유가 생길때 다시 스터디에 참여하고 싶다고 의사를 전달했다. 내가 하고싶어서 뒤늦게 부탁해서 합류한 스터디였는데 이렇게 잠시 빠지게 되어서 죄송했다. 하지만 스프링 진도를 못 쫓아가는 내 모습도 너무 바보같았다. 아무튼 이제 당분간은 스프링 공부에 시간을 훨씬 투자할 계획이다!
오늘 공부한 내용을 정리하려 한다.
- Spring Annotation
- @Component
- 개발자가 직접 작성한 Class를 Bean으로 만드는 것
- "이 클래스를 정의했으니 빈으로 등록해줘" 라는 뜻
- 어노테이션을 붙일 시, Bean Configuration 파일에 Bean을 따로 등록하지 않아도 사용할 수 있다.
- Bean : Spring IoC 컨테이너가 관리하는 자바 객체
- @Component
- JPA Annotation
- @Entity : DB의 테이블과 일대일로 매칭되는 객체 단위이며, Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미
- @Column : DB의 테이블에 있는 컬럼과 동일하게 1:1로 매칭되기 때문에 Entity 클래스 안에 내부 변수로 정의됨
- @Id
- DB의 테이블은 기본적으로 유일한 값을 가짐 -> PK(Primary Key)
- 이 유일한 key 값을 기준으로 질의한 데이터를 추출해 결과 셋으로 반환해줌
- JPA에서도 Entity 클래스 상에 해당 PK를 명시적으로 표시해야 되는데, @Id 어노테이션 사용
- @GeneratedValue
- PK의 생성 전략을 정의하기 위해 사용하는 어노테이션
- PK는 보통 Long 값을 사용 (키 값이 빨리 생성되고 안전하게 관리됨)
- PK값을 알아서 +1씩 증가시켜서 정의해주는 어노테이션
- @MappedSuperclass
- 객체의 입장에서 공통 매핑 정보가 필요할 때 사용
- 공통 매핑 정보가 필요할 때, 부모클래스에 선언하고 속성만 상속 받아서 사용하고 싶을때 사용
- 부모 클래스에 @MappedSuperclass를 붙여서 공통 부분 선언, 자식 클래스에서 extends 해서 사용
- @EntityListener
- Entity가 삽입, 삭제, 수정, 조회 등의 작업을 할 때 전, 후에 어떠한 작업을 하기 위해 이벤트 처리를 하기 위한 어노테이션
- @Transactional
- 트랜잭션
- 모든 작업들이 성공적으로 완료되어야 작업 묶음의 결과를 적용하고, 어떤 작업에서 오류가 발생했을 때는 이전에 있던 모든 작업들이 성공적이었더라도 없었던 일처럼 완전히 되돌리는 것
- DB를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중 오류가 발생했을 때 모든 작업을 원상태로 되돌릴 수 있다.
- DB에서 상호작용의 단위 -> 더이상 쪼갤 수 없는 최소의 연산
- 거래는 다른 사람과 독립적으로 이루어지며, 과정 중에 다른 연산이 끼어들 수 없다. 오류가 생긴 경우 연산을 취소하고 원래대로 되돌린다. 성공할 경우 결과를 반영한다.
- @Transactional
- 클래스나 메서드에 붙여줄 경우, 해당 범위 내 메서드가 트랜잭션이 되도록 보장해줌
- 선언적 트랜잭션이라고도 하는데, 직접 객체를 만들 필요 없이 선언만으로도 관리를 용이하게 해줌
- 트랜잭션
우선은, 내가 지금 당장 코드를 봤을 때 얕게라도 알아야 할 정도의 지식만을 정리한 것이다. 이걸 참고해서 기본적인 흐름을 파악하고, 각각의 어노테이션의 자세한 동작은 차차 알아갈 예정이다. 오늘은 늦게까지 밀린 스프링 공부를 하고 자야겠다. 오늘의 회고 끝!!! 내일도 화이팅하자!!
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 웹 어플리케이션의 인증 (0) 2022.12.19 [TIL] 스프링 입문 강의 복습하기... (0) 2022.12.16 [TIL] Spring과 Lombok의 Annotation (0) 2022.12.14 [TIL] 안전지대 찾기 알고리즘 (0) 2022.12.13 [TIL] Entity, DTO, 영속성 컨텍스트 (0) 2022.12.12 - Spring Annotation