롯데시네마 클론 코딩 프로젝트에서 사용자의 티켓 정보를 가져오는 기능 개발 중테이블 간 연관된 정보들이 많아 총 8개의 테이블을 건드려야 하는 상황이 발생했습니다“과연 쿼리문을 8개 사용하는 것이 적합한가?”라는 의문을 가지게 되었습니다🫤 기능 개발 후, 리팩토링을 통해 성능을 향상시켜보았습니다🧙 Refactor1.fetch join을 통해 연관관계 엔티티 함께 조회하기 Refactor2.각 티켓에 대한 티켓 정보는 비동기적으로 가져오기(각 티켓은 서로에게 영향을 미치지 않는 독립적인 데이터이므로) Fetch Join X, 비동기 X - 75349ms(기존 구현)우선 기존에 구현된 코드는 아래와 같습니다!각각의 테이블들에 대해 데이터를 따로 가져오고 있는 것을 확인할 수 ..
프로젝트 하다가 만났던 LazyInitializationExceptionJPA 공부 후, 발생 원인과 해결법을 한번 정리해보고자 합니다😃 발생 원인서비스 단에 @Transactional을 붙여둔 상태에서 메서드가 종료되면 Hibernate의 Session도 함께 종료되어 영속성 컨텍스트에서 사라집니다.엔티티 객체의 속성 중, FetchType이 LAZY로 설정된 필드가 있었다면, 해당 트랜잭션 내에서, 프록시 객체로 채워진 상태일 것입니다. 이때, get을 통해 데이터를 가져오게 되면 쿼리를 통해 해당 객체를 실제 데이터로 채우게 됩니다.하지만 서비스 단에서 컨트롤러 단으로 코드 흐름이 넘어간 경우, 트랜잭션이 종료되어 영속성 컨텍스트에서 사라진 상태이므로 프록시 객체를 실제 객체로 채우지 못해 Laz..
프로그래머스 데브코스 과정에 참여하며 도서 지원을 받아 스터디에 참여할 수 있는 좋은 기회가 생겨 같은 팀원들과 스터디를 진행하게 되었습니다. 백엔드 개발자가 되기 위해 필요한 지식 중 하나인 HTTP 지식을 습득을 목표로 스터디를 진행하였습니다! 네트워크 전공 수업을 수강하긴 했지만 시험에 급급해서 개념들만 달달 외웠던터라 사실상 머리에 남은게 별로 없었습니다.. 그래도 이제 백엔드 개발 공부를 하고 있는데 다시 네트워크를 공부해보면 좀 다르지 않을까! 기대하며 스터디에 참여하였습니다!! 어떤 책을 선정했고, 어떠한 방식으로 스터디를 진행하였는지 회고를 공유해보고자 합니다🎶 책 선정📖 HTTP 완벽 가이드 네트워크 책하면 "컴퓨터 네트워크 하향식 접근"이 떠올랐는데 범위가 광범위하고 마냥 쉽게 읽히는 ..
스프링 프로젝트를 하며, db에 접근하게 되는 경우@Transactional을 자주 사용하고 있습니다🤔 트랜잭션은 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위로완전히 성공하거나 완전히 실패하는 일련의 논리적 작업단위입니다. 트랜잭션은 크게 아래 3가지 목적으로 사용해왔습니다.1. ACID 보장을 위해, 특정 실행 단위에서 오류 발생시 전체 실행 내용을 롤백해주는 기능 2. Dirty Checking 변경 감지 시, 수정 사항 바로 반영 3. ReadOnly 속성 프로젝트하며 마주쳤었던 LazyInitializationException 또한 Transactional 어노테이션에 대해정확히 알지 못하고 사용하여 마주했던 문제라 어노테이션을 한번 뜯어보았습니다🧩 공식문서에서 설명하는 @Tra..
간단한 Voucher 관리 프로그램을 만들던 도중,@Value로 주입받은 값을 생성자에서 사용하려니, NPE가 발생하여한참의 삽질 끝에 정확하게 언제 주입이 되는지 알아보게 되었습니다🚀 상황바우처 정보를 파일을 통해 관리하기 위해, yaml 파일에 파일 위치를 명시한 후 레포지토리 클래스에서 파일에 접근하여 바우처 정보를 읽고 쓰고자 아래와 같이 코드를 작성하였습니다. 문제의 코드🤔@Repository@Profile("default")public class FileVoucherRepository implements VoucherRepository { private Map vouchers; private final File voucherInfoCsv; @Value("${spring.fi..
스프링/스프링부트를 사용하면서왜 프레임워크를 쓰는거지?장점 말고 단점도 있을까?의문이 들어 정리하게 되었습니다🤔 📖 먼저 프레임워크에 대해 알아보기 전, 라이브러리란 무엇일까?라이브러리란 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합을 의미합니다."도서관"이라는 의미처럼, 필요할 때마다 꺼내볼 수 있는 책들이 모여있는 곳이라고 이해할 수 있습니다! 🚀 그렇다면 프레임워크란?한글로 번역하면 "뼈대", "기반 구조"를 뜻하며,프로그램의 기초를 구축할 수 있는 코드의 집합이라고 생각할 수 있습니다.👉쉽게 비유하면,개발자가 되기 위해 혼자 계획을 세워서, 개발 공부를 해나가는 것보다,전문 교육 기관(데브코스)의 도움을 받아 커리큘럼을 기반으로 개발 공부를 진행하면 더 ..