스프링 프로젝트를 하며, 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..
스프링/스프링부트를 사용하면서왜 프레임워크를 쓰는거지?장점 말고 단점도 있을까?의문이 들어 정리하게 되었습니다🤔 📖 먼저 프레임워크에 대해 알아보기 전, 라이브러리란 무엇일까?라이브러리란 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합을 의미합니다."도서관"이라는 의미처럼, 필요할 때마다 꺼내볼 수 있는 책들이 모여있는 곳이라고 이해할 수 있습니다! 🚀 그렇다면 프레임워크란?한글로 번역하면 "뼈대", "기반 구조"를 뜻하며,프로그램의 기초를 구축할 수 있는 코드의 집합이라고 생각할 수 있습니다.👉쉽게 비유하면,개발자가 되기 위해 혼자 계획을 세워서, 개발 공부를 해나가는 것보다,전문 교육 기관(데브코스)의 도움을 받아 커리큘럼을 기반으로 개발 공부를 진행하면 더 ..
스프링부트 프로젝트 생성하는 방법이라면.. https://start.spring.io/ 👈이 사이트로만 해왔는데 방법은 되게 다양했습니다😲 Maven 프로젝트 생성 Gradle 프로젝트 생성 Spring CLI Spring Intializr Maven 프로젝트 생성🌳 Maven 프로젝트의 경우, pom 파일로 정의가 이루어집니다! 웹 문서가 html로 작성을 하면 브라우저가 html 파일을 읽어 DOM을 만드는 것처럼 pom.xml을 작성하면 Maven이 Project Object Model 이라는 객체를 만드는 것입니다. 그리고 해당 POM에 의해서 프로젝트에 필요한 것을 다운받아 프로젝트 구성이 됩니다. xml로 프로젝트에 대한 스트립트을 정의하면 Maven이 알아서 빌드해줍니다👍 Maven 프로젝트..
Explain SQLSELECT/UPDATE/INSERT/DELETE 등의 쿼리가 어떻게 수행되는지 내부를 보여주는 SQL 명령 MySQL이 해당 쿼리를 어떻게 실행할지 Execution Plan을 보여주므로 이를 바탕으로 느리게 동작하는 쿼리의 최적화가 가능해집니다! Explain SQL 사용 방식Explain 뒤에 분석하고 싶은 쿼리 문을 작성EXPLAININSERT INTO comment (id, content, parent_comment_id, user_id, article_id)VALUES (1, '오늘 저녁은 김치찌개', NULL, 9, 6); Index테이블에서 특정 찾기 작업을 빠르게 수행하기 위해서 MySQL이 별도로 만드는 데이터 구조 검색을 위해 자주 사용되는 컬럼이 있다면, 인덱..
Join에 관해 학습하던 도중,조인의 다양한 종류 중 Self Join을 마주하게 되었습니다👀같은 테이블끼리 조인한다는 점에서 어떤 상황에서 유용하게 사용되는지 찾아보았습니다. 부모 자식 관계가 존재하는 경우한 테이블 내에서 부모 자식과 같이, 상하 관계가 명시되어 있는 경우 Self Join이 유용하게 사용될 수 있습니다예를 들면, 게시글에 대한 "댓글과 대댓글"의 관계를 떠올릴 수 있습니다. 게시글에 대한 댓글 내용을 저장하는 테이블 commentCREATE TABLE comment ( id INT PRIMARY KEY, -- 댓글 고유 ID content VARCHAR(255), -- 댓글 내용 parent_comment_id INT, -- 부모 댓글이 있는 경우, 부모 댓글 I..