🔍 Soft Delete 데이터베이스에서 row 를 실제로 삭제하지는 않아야 하는 상황에서 사용한다. 실질적으로 DB 에는 남겨두고, 프론트에서 접근하지 못하도록 숨기는 방식으로 pseudo-delete 를 구현하는 것을 soft delete 의 정의라고 할 수 있다. 현재 프로젝트에서는 포스트가 삭제되었는데 댓글과 좋아요가 삭제된 포스트 아이디에 대한 댓글과 좋아요로 남아 있으면 논리적으로 오류이므로 soft delete 방식을 사용한다. 댓글 엔티티와 좋아요 엔티티 모두에 deleted\_at 컬럼을 추가해서 삭제될 때 현재 시간이 기록되도록 쿼리를 튜닝해준다. 좋아요를 눌렀고, 댓글을 달았다는 기록은 남긴 채 대상 포스트가 사라졌다는 사실을 알고는 있도록 할 때 soft delete 를 사용한다고 ..
⏰ date vs datetime vs timestamp 프로젝트 중 스키마 안에 업로드 날짜나 만료 날짜와 같이 날짜와 시간을 나타내는 컬럼을 포함하는 테이블들이 많았다. MySQL 은 날짜와 시간을 나타내는 데이터 타입으로 date 와 datetime 을 사용하지만, 실제 많은 ERD 에서는 timestamp 를 대신 활용하고 있는 것을 본 적이 있었다. 차이를 알지 못해서, 구글링을 통해 현재 프로젝트에는 무엇을 적용하는 것이 올바른지 고민해보았다. 찾은 내용을 표로 정리해보았다. 분류 값 저장 형태 특징 표현 범위 date YYYY-MM-DD 날짜만 표현 가능, 시간 X 1000-01-01 ~ 9999-12-31 datetime YYYY-MM-DD hh:mm:ss 날짜와 시간 표현 가능 1000-..
JOIN 의 역할 JPQL 에서 JOIN은 SQL 에서의 JOIN 과 차이가 없다. JOIN 은 항상 FROM 절 뒤에 붙는다. FROM 이 자바의 향상된 반복문에서 콜론 (:) 같은 역할이라고 생각하면 된다. 이 때 JOIN 은 반복하는 구간을 특정하는 역할을 한다. 예를 들어, 다음 두 개는 같은 역할을 하는 쿼리문들이다. SELECT c1, c2 FROM Country c1 INNER JOIN c1.neighbors c2 SELECT c1, c2 FROM Country c1, Country c2 WHERE c2 MEMBER OF c1.neighbors 즉, INNER JOIN 은 두 항목을 조회하되, 하나는 연관관계에서 주인인 테이블의 항목이고, 다른 하나는 주인에 의해 매핑된 테이블의 항목으로 제..
Session 은 데이터베이스와 물리적인 연결을 하기 위해 사용된다. Session 객체는 가벼우며, 데이터베이스와 상호작용이 필요할 때마다 시작되도록 디자인되어 있다. 영속성을 가진 객체들은 세션 객체를 통해서 저장되고 조회된다. 세션 객체들은 너무 오래동안 열려 있으면 안된다. 그 이유는 보통 얘네는 스레드 안전 이 아니기 때문이다. 즉, 한 번 열리면 한 군데에서만 사용할 수 있다. 빠르게 쓰고 놓아주어야 다른 애들도 쓸 수 있다. 스레드 안전이란 ? https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_%EC%95%88%EC%A0%84 세션의 주요 기능은 매핑된 엔티티 클래스들의 객체들에 대한 동작들을 제공하고, 생성하고, 읽고, 삭제하는 기능이다..
이 글 중 Hibernate 에 관한 글은 창작 글이 아니라, 맨 아래에 출처를 밝힌 사이트의 글 일부를 번역한 것입니다. create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) ); 위 테이블은 아래 테이블과 one to many 연관관계가 있다. certificate 테이블에 idx 컬럼이 있는 것을 볼 수 있는데, certificate 자체가 list collection 테이블이기 때문이다. create table CERTIFICATE ( id INT ..
이 글은 순수 창작이 아니라, 맨 아래에 출처를 밝힌 사이트의 글 일부를 번역한 글입니다. LazyInitializationException 은 무엇이고 어떻게 해결하는가 잦은 문제인 만큼, 다양한 조언들을 찾을 수 있는 문제이기도 하다. 하지만 맹목적으로 조언들을 들어서는 안된다. 조언대로 문제를 해결하는 과정에서 또 다른 문제가 발생하는 경우가 있기 때문이다. 그 다른 문제란 1) 성능의 이슈일수도 있고, 2) 매번 다른 결과를 도출하는 해결방법을 찾게 되는 것일 수도 있다. 다음 문단들에서, 이 예외가 무엇인지, 무시해야 하는 조언에는 어떤 것이 있는지, 그리고 조언을 듣는 것 외에 문제를 해결하기 위한 방법에는 무엇이 있는지 설명하겠다. Hibernate 는 언제 LazyInitialization..
- Total
- Today
- Yesterday
- 가상 서버
- Firebase
- 깃랩
- LazyInitializationException
- JPA
- @RequestBody
- 역직렬화
- 알고리즘
- json web token
- 지연 로딩
- JOIN FETCH
- FCM
- docker
- 인증/인가
- 도커
- DeSerialization
- N+1
- gitlab
- spring
- Java Data Types
- Spring Boot
- JPQL
- DTO
- 실시간데이터
- ci/cd
- Jackson
- 기지국 설치
- 코테
- 프로그래머스
- google cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |