개발을 하면 Service 단에 일단 @Transactional 을 붙이고 시작하는 경향이 있다. 이번에는 이 @Transactional에 대해서 알아보자. ▶ 트랜잭션이란?@Transactional 어노테이션에 대해 알아보기 전에 트랜잭션이 무엇일까?트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위 이다. 여기서 데이터베이스의 상태를 변화시킨다는 것= SQL을 이용하여 DB에 접근하는 것을 의미한다.(SELECT, INSERT, DELETE, UPDATE) 작업 단위에는 이러한 SQL 명령문들이 여러개 존재할 수 있다. 예를 들어서 일기 웹서비스를 예로 들어보자.1. 일기를 쓰고 작성하기 버튼을 누른다.2. 일기 작성이 처리되고 자동으로 일기 목록으로 돌아온다.3. 일기 목록에서 직..
BackEnd/Spring Boot🍃
아마 개발할 때 DTO 클래스에 toEntity메서드와 from 메서드를 추가한 적이 있을 것이다.그리고 from 메서드에는 static을 붙였을 것이다.오늘은 DTO에 toEntity와 from을 붙이는 이유와 from은 왜 static인지를 알아볼것이다. ▶ 우선 이유 먼저 🔥DTO에서 toEntity나 from 같은 메서드를 추가하는 이유는데이터를 엔티티와 DTO간에 변환할 수 있게 하기 위해서이다.클라이언트로부터 받은 데이터를 엔티티로 변환해서 데이터베이스에 저장하거나,데이터베이스에서 조회한 엔티티를 클라이언트로 보내기 전에 DTO로 변환하는 작업이 필요하기 때문이다. DTO는 데이터를 주고받기 위한 '상자' 라고 할 수 있다.이 상자 안에 있는 데이터를 밖으로 꺼낼때는 toEntity 메서드를..
ERD를 짜다가 보면 Identifying Relationship(식별관계)와 Non-Identifying Relationship(비식별관계)을 봤을것이다.오늘은 이 둘이 무엇이고, 무슨 차이가 있는지 알아보자. ▶ Identifying Relationship(식별관계)Identifying Relationship은 부모테이블의 PK를 자식테이블의 PK로 사용하는것이다.간단하게 예시로 보자면부모테이블(학생정보) 없이 자식 테이블(성적 정보)이 존재할 수 없는 관계이다. 이렇게 두개의 PK가 존재해도 된다.subject_id는 자식 테이블의 PK이고student_id는 부모 테이블의 PK이면서 자식테이블의 PK이자 FK이다. ▶ Non-Identifying Relationship(비식별관계)Non-..
개발을 하다보면 Entity에서 필드를 만들 때 원시타입인 long 대신 래퍼클래스인 Long을 사용하는 걸 많이 봤을 것이다.왜 long를 안쓰고 Long를 쓸까?이 둘의 차이점은 무엇일까? 궁금해졌다. 바로 알아보자. ▶원시타입(Primitive type)과 래퍼클래스(Wrapper Class)란?일단 원시타입은 뭐고 래퍼클래스는 뭘까? 이 사진을 보면 이해가 될 것이다.기본자료형이 원시타입이고, 래퍼클래스는 원시타입을 객체화 한 것이다. 원시타입(기본자료형)은 언제나 값이 존재한다.필드에서 초기화하면 디폴트 값으로 0에 준하는 값이 들어가며, 메소드나 클래스 내에서는 초기화 및 선언을 같이 해줘야 실행이 된다. (초기화만하면 에러 발생) 래퍼클래스는 값이 존재하지 않는 "NULL" 상태일 수 있다..
Spring Data JPA에서 Entity에 기본 생성자가 필요한 이유가 무엇일까?@NoArgsConstructor(accsee = AccseeLevel.PROTECTED)를 왜 붙이는거지? 궁금해졌다.궁금하면 공부해야지~ ▶Reflection이란?그 전에 알아야하는것이 있다. Reflection은 Java에서 제공하는 API이다. Reflection은 구체적인 클래스 타입을 알지 못해도!클래스의 메서드나, 타입, 변수들에 접근할 수 있도록 해주는 API이다. 아니? 이게 어떻게 가능하죠? 클래스나 메소드가 프라이빗하면요??그걸 알아보기 전에! Reflection이 무슨 의미인지 아는가?반사라는 의미이다. 즉 클래스 자체를 조작하는것이 아니라, 반사된 클래스를 조작해서 클래스에 영향을 주는것이다...
Entity객체를 생성할 때 lombok의 @Builder를 많이 적용한다. @Builder를 사용할경우, 일반적으로 기본 생성자에 대한 접근 제어를 위해@NoArgsConstructor(access = AccessLevel.PROTECTED)를 사용한다. 이유: 무분별하게 생성되는 객체들을 한번 더 체크하면서 의도하지 않은 Entity 객체를 만드는 행위 방지! 근데 @Builder와 @NoArgsConstructor을 동시에 사용하면 컴파일 에러가 난다. ▶왜 컴파일 에러가 발생함??@Builder를 통해 필요한 파라미터만 받아서 객체 생성 가능, 전체 파라미터를 받아서 객체 생성 가능-> 전체 생성자가 없으면 당연히 에러가 발생함. ▷@NoArgsConstructor없이 @Builder만 사..