본문 바로가기
카테고리 없음

TIL-36

by 오우지 2021. 11. 8.

1. 개념정리

2. 소감

 

1. 개념정리

1. @MappedSuperclass

정리한 적이 있는데 여러 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다. 주로 등록일, 수정일같은 정보를 모을때 쓰인다. 직접 생성할 일이 없으므로 추상 클래스로 생성하는것을 권장한다.

또한 해당 클래스는 조회나 검색이 불가능하다.

@Entity 클래스는 엔티티나 MappedSuperclass로 지정한 클래스만 사용 가능하다는 것을 명심해야 한다.

 

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

2. 직렬화란?

직렬화는 객체를 바이트 스트림으로 바꾸는 것이다. 다시 말해 데이터를 연속적 serial 데이터로 변환하는 것이다. 직렬화의 목적은 객체를 상태 그대로 저장하고 다시 생성하기 위함으로 JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술이다. 역직렬화는 그 반대로 바이트 스트림을 객체로 변환하는 기술이다.

그럼 직렬화를 언제 사용할까?

데이터를 영속화할 때 필요한데 시스템이 종료되더라고 없어지지 않고 영속화된 데이터이기 때문에 네트워크 전송도 가능하다.

 

아래 JsonSerialize를 검색하다보니 Marshalling이라는 단어를 많이 사용하는데 직렬화는 바이트 스트림으로의 변환을 의미한다면 마샬링은 변환하는 일련의 과정을 나타내므로 더 큰 개념을 의미한다.

 

사용처로는 크게

 

1. 서블릿 세션 - 서블릿을 사용할 때 파일로 저장하고나 세션 클러스터링, DB저장옵션 등을 사용하면 세션이 자동으로 직렬화되어 저장돼 전달된다.

 

2. 캐시 - 자바 시스템에서 DB에서 조회 후 객체가 실시간 형태로 요구하는 데이터가 아니라면 캐시같은 저장소에 저장한 후 다시 불러올 때 사용한다.

 

등이 있다.

 

 

https://techblog.woowahan.com/2550/

https://medium.com/@lunay0ung/basics-%EC%A7%81%EB%A0%AC%ED%99%94-serialization-%EB%9E%80-feat-java-2f3eb11e9a8

 

@JsonSerialize

예시의 Timestamped 클래스에서 쓰였는데 이유는 아직 잘 모르겠다. 자바 객체를 json형식으로 바꿔주기 위해서 주로 serialize를 재정의해서 쓰이는 것 같은데 예시 코드에는 오버라이딩 하는 부분이 없다. 질문해야겠다.

는 그냥 내가 바보였다. 자바 객체를 json형식으로 출력해줄 일이 있을 때 직렬화해주는 어노테이션이 맞았고 특별한 상황이 있으면 재정의 하는게 맞다. 나는 JsonSerialize를 안넣어주면 undefined가 뜨고 넣어주면 null이 떠서 뭐가 문제지? 하고 있었는데 그저.. 메인 클래스에 @EnableAuditing을 안적어줘서 생긴 일이었다.

 

jdbc connection pool

시간 소요가 매우 큰 RDS와의 연결을 위해서 만들어진 커넥션 객체를 모아둔 풀이다. 설정을 통해 맥스 context값, 최소값, 동시 커넥션 갯수 등을 지정할 수 있다.

 

http://tomcat.apache.org/tomcat-10.1-doc/jdbc-pool.html

https://codevang.tistory.com/206

 

hibernate

자바 환경의 객체-관계 매핑 솔루션으로 객체를 DB테이블의 형태로 매핑시켜주는 기술이다.

 

 

2.

무난무난한 날이었다. http 발표준비 해야되는데 시간 앞의 일정들이 밀려서 힘들다. 갈수록 쫓겨서 하게 되겠지만 잘 해봐야겠다.