목록[백엔드] (121)
개발자로 후회없는 삶 살기
🚨 서론 (문제상황)@Beanpublic RedisTemplate redisTemplate( RedisConnectionFactory redisConnectionFactory, ObjectMapper objectMapper) { Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(AccessTokenSaveResponseDto.class); jsonRedisSerializer.setObjectMapper(objectMapper); // 여기 ✅Redis의 Serializer는 내부적으로 ObjectMapper를 사용하여, 객체 ↔ JSON 직렬화, 역직렬..
🚨 서론 (문제 상황)Redis는 단순 데이터 저장뿐만 아니라, 캐싱, 메세지 콜백 등 다양한 기능으로 활용도가 매우 높다. 그 중 정밀한 이벤트 핸들러를 제공하는 Redis Stream을 사용하고자 했고, 일반 (키-벨류, 해시맵) 형태가 아닌 특수한 자료구조라서, 사용하기 전에 자세히 알아보고자 한다. 본론- 자바의 직렬화 & 역직렬화직렬화 : 자바의 Object를 다른 컴퓨터의 자바 시스템에서 사용할 수 있도록 저장하는 것을 의미한다. Object를 연속된(Serial) 바이트 스트림 형태로 포맷 변환하는 기술이다.역직렬화 : 바이트 스트림을 원래대로 자바 시스템의 Object로 변환하여 로드하는 기술이다. JVM 클래스 로더 시스템을 보면 클래스 정보가 메서드 영역에 저장되고 Object가 힙,..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 스프링 데이터 JPA 적용스프링은 Repositoy를 인터페이스로 구현체를 CGLIB으로 등록해서 편리한 기능을 제공한다. Jpa 레포지토리에는 find 관련 메서드들이 이미 구현되어 있어서, 가져다 사용하면 된다. jpa 레포지토리는 RDB 관련 메서드만 제공한다. Page Sort는 data 하위 인터페이스로 레디스 몽고를 다 지원한다. 몽고와 레디스도 페이지와 정렬을 지원하므로 추상화한 것이다. 스프링 데이터는 데이터 공통 기술이고 스프링 데이터 JPA는 RDB 기술이다. 몽고, 레디스를 쓰면 스프링 데이터를 다 사용할 수 있다. - 쿼리 메서드 기능이처럼 findAll 같은 공통 기능을 제공하는데, ..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- JPQL 소개JPA는 다양한 방법으로 SQL을 사용할 수 있다. 🚨 나이가 18 이상인 회원을 검색하고 싶다면 em.find로 할 수 있나?따라서 JPQL이 나왔고 엔터티 객체 중심으로 쿼리를 짤 수 있다. m은 엔터티 자체를 의미하며, m 객제 자체를 조회하라는 의미이다. → 규칙1) 엔터티 필드는 대소문자 구분함2) jpql 키워드는 대소문자 구분 없음3) 별칭(m) 필수 → Type, QueryType은 반환 타입이 명확할 때(Member) Query는 명확하지 않을 때(이름과 나이) createQuery에 타입 정보를 줄 수 있으면 Type을 쓰고, 문자만 쓰면 String도 class를 할 수 있..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 프록시프록시가 뭔지 알아보고 활용해보자, 예를들어서 멤버에 팀이 있는데 멤버를 조회할 때 팀도 DB에서 무조건 조회해야 할까? 고민하는 상황이다. 멤버와 팀을 같이 출력하는 경우라면, 회원과 연관된 팀을 불러와서 출력하고, 이런 비즈니스 로직에서는 멤버를 가져오고 팀도 한 번에 한 방 쿼리로 가져오면 좋을 것이다. 근데, 팀은 출력하지 않고 회원만 출력하려고 하면? DB에서 연관됐다고 해서 사용하지 않는 팀도 가져오면 손해이다. 언제는 멤버와 팀을 같이 사용하고 언제는 멤버만 사용하고 하면, 낭비를 고려해야 한다. JPA는 이걸 프록시로 해결한다. ⇒ 프록시 기초em.find : DB에서 진짜 객체를 가져온..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 연관관계 매핑 시 고려사항1. 다중성db는 다측에 1측의 fk를 두며, 객체는 이를 따라 다측에 JoinColumn을 한다. 대부분 다대일을 많이 쓰고, 일대일도 가끔 사용하고 다대다는 절대로 안한다. 2. 단, 양 방향DB는 방향의 개념이 없고, fk 하나로 양쪽에 접근할 수 있지만, 객체는 참조를 두어 직접 접근해야하고 단방향 2개가 양방향이다. ⇒ 다대일1. 단방향주인에 참조를 두고, DB는 다측에 외래키, 객체는 JoinColumn을 한다. 가장 많이 사용하는 방법이다. 2. 양방향1측에 List를 두어 양방향을 만들 수 있다. 설계할 떄는 양방향을 전혀 고려하지 않아도 되고 어플 개발 단계에서 jp..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 엔터티 매핑 소개객체와 테이블을 매핑하고 필드와 컬럼, 기본키, 연관관계를 매핑한다. - 객체와 테이블 매핑 @EntityEntity가 붙은 클래스는 JPA가 관리하는 엔터티로, 붙지 않으면 jpa와 전혀 관계 없는 클래스이다. → 주의점1) 기본 생성자2) final, enum, 인터페이스, 이너 클래스 불가3) 필드에 final 불가jpa는 리플랙션을 하기 때문에, 기본 생성자가 필수이다. name은 실제 테이블에서 매칭되는 테이블을 골라서 매핑할 수 있다. - 스키마 자동 생성jpa는 엔터티 분석 기능으로 어플 로딩 시점에 테이블 자동 생성 기능을 제공한다. 장점 ✅보통 개발을 할 때 설계를 다 마치고..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 영속성 컨텍스트JPA에서 가장 중요한 2가지는 엔터티와 테이블 매핑과 영속성 컨텍스트이다. 웹에서 고객 요청이 오면, 매니저 1, 2를 생성하고 매니저가 내부적으로 커낵션을 써서 db를 쓴다. → 영속성 컨텍스트란?엔터티를 영구 저장하는 환경이다. JPA는 저장한다고 DB에 바로 넣는게 아니라, 컨텍스트에 저장한다. 매니저가 내부에 컨텍스트 공간을 가지고 있다. - 엔터티 생명주기1) 비영속컨텍스트와 관련이 없는 상태이다. 2) 영속컨텍스트에 객체를 관리하는 상태이다. set까지는 비영속이고 persist를 하면 영속화된다. persist는 뭐 하는 거야? ✅JPA는 DB에 저장하는 게 아니라 우선 컨텍스트..