(이 글을 적는 가장 큰 목적은 여러 상황(JPA, JPQL, Nativa Query, @Transactional 의 조합) 에서 쿼리가 어떻게 날아가는지 보는 것이기에, 영속성 컨텍스트에 대한 자세한 설명은 하지 않을 예정입니다.) JPA를 배우면 영속성 컨텍스트에 대해 배우게 된다.영속성 컨텍스트에 대해 간단히 설명하면 , "애플리케이션과 DB 사이에 영속화된 엔티티를 관리하는 논리적 공간" 으로 정의할 수 있다.영속화란 엔티티를 영속성 컨텍스트가 관리할 수 있게 만드는 것이다. 영속성 컨텍스트에 대해 간단히 알아보자.영속성 컨텍스트에 대한 간단한 공부영속성 컨텍스트는 DB로의 접근을 최소화고, 동일한 엔티티의 동등성을 보장하기 위해 다음 4가지 기능을 제공한다. 1. 1차 캐시개발자가 DB에 특정 ..
전체 글
컴퓨터 공부하는 블로그입니다. 공부하는거 다 적어요~!JPA의 쿼리가 어떻게 날아가는지 여러 방면으로 공부하다 save() 동작에 대한 의문이 생겼다.그래서 깊게 알아보려 한다.( 전체 코드 👉🏻 https://github.com/HoyeongJeon/blog-code/tree/main/howsavework )고민의 시작 public void testNoneAnnotation() { System.out.println("// JPA만 사용하기(@Transactional 이 없는 경우)"); Member member = memberRepository.findById(1L).get(); member.setAge(35); memberRepository.save(member); S..
무한스크롤의 경우, 어떻게 Redis 키를 설정하면 좋을지에 대한 고민(생각의 흐름을 적고, 정리해보는거라 두서없을 가능성 200%입니다.) 문제사항게시판 글목록 캐시하기 단, 100개씩 보여주는 무한 스크롤내가 생각한 캐시 고려사항데이터 정합성메모리 효율성TTL 관리 여러 사항을 고려해 보기 키 당 데이터를 50개씩 저장하면?가장 최신 글의 ID가 1100이라 해보자.처음 게시판에 들어오면 다음과 같이 데이터 캐시 1100 - 1051,1050 - 1001 유저 쭉쭉 내리다 1001에 닿으면서버로 요청을 보내서1000 - 951 캐시하고,950 - 901 캐시함. → 이건 좀 비효율적이다.왜 ?한 번에 보여줘야 할 데이터가 100개인데, 해당 데이터를 보여주기 위해 계속 2번 나눠서 저장해야 한다.즉..
N+1 문제란?N+1문제란 연관 관계가 설정된 엔티티를 조회할 때 ,엔티티를 조회하는 쿼리 1번에 해당 엔티티에 연관된 N번의 쿼리가 추가로 실행되는 것을 말한다.예를 들어, 멤버 한명이 10개의 글을 썼다고 가정할 때, 멤버를 조회하면 이 멤버와 연관된 10개의 글을 가져오기 위해 추가로 10개의 쿼리가 실행되는 것이다. (1+N이라 하는 것이 더 이해하기 쉬울듯!)왜 발생할까?멤버와 게시글을 예시로 코드를 보며 이해해보자. 멤버와 게시글의 관계는 1 : N 이다. @Entity@Datapublic class Member { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "mem..
2024년은 참 많은 일이 있었다.개인적으로도, 커리어적으로도 다사다난했다.사람의 기억이라는 게 그 순간엔 영원할 것 같지만 며칠만 지나도 흐려지더라.삶의 언제가 가장 좋았고 기억에 남는 년도였냐고 물어본다면 2022년이라 답하는데, 2024년도 그에 못지않게 많은 변화와 일이 있었던 해이고, 올해(이미 지났지만 ㅎ)를 잊지 않기 위해 회고를 진행해보려 한다. 부트캠프보안학과에 있으며 보안을 공부했었다.단순한 이유는 아니었지만, 보안을 그만하고 개발을 해야겠단 생각을 갖게 되었다. 교환학생, 인턴 등의 이유로 한 학기를 휴학했어야 했는데 그 기간 동안 부트캠프에 들어가게 되었다.아무래도 허송세월 보내고 싶지 않았고 부트캠프를 하면 스스로를 좀 더 채찍질하며 개발 공부를 할 수 있을 거라 생각했다.그렇게 ..