전체 글 464

백준 9935번 문자열 폭발 (C++)

문제 링크 : https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 문제 요약 1. 첫 번째 문자열(길이 1이상, 1,000,000이하)과 폭발 문자열(1이상 36이하)이 주어진다. 2. 문자열에 폭발 문자열이 포함되어있을 경우, 해당 폭발 문자열은 폭파되어 사라진다. 3. 폭파 된 뒤 새로 생긴 문자열에서도 폭발 문자열이 생길 수 있다. 4. 폭발 문자열이 문자열에 없을때까지 계속 폭파된다. 핵심 포인트 이 문제는 스택의 개념으로 접..

JPA 더티 체킹(Dirty Checking)

Dirty Checking이란? Transaction안에서 엔티티의 변경이 일어나면 변경된 내용을 자동으로 DB에 반영하는 JPA 특성이다. 좀더 디테일한 설명은 다음과 같다. JPA는 엔티티 매니저가 엔티티를 저장 / 조회 / 수정 / 삭제한다. 그런데 엔티티 매니저가 제공하는 메소드들을 보면 저장 (persist) / 조회(find) / 삭제 (delete)로 수정에 해당되는 메소드가 없다. 대신에 수정에 해당되는 더티 체킹 (Dirty Checking)을 지원한다. 더티 체킹은 Transaction 안에서 엔티티의 변경이 일어나면 변경으 자동으로 DB에 반영하는 JPA 특성이다. DB에 변경 데이터를 저장하는 시점은 (1) Transaction Commit 시점 (2) EntityManager Fl..

JPA N+1 이슈

JPA의 N+1 이슈란?  아래 코드를 보면 총 3번의 Select가 이루어지고있다.DB에 저장된 리뷰가 총 2개이고, 추가로 최초 조회의 1번이 더해져 3번이 이루어졌다.Hibernate: select review0_.id as id1_6_, review0_.created_at as created_2_6_, review0_.updated_at as updated_3_6_, review0_.book_id as book_id7_6_, review0_.content as content4_6_, review0_.score as score5_6_, review0_.title as title6_6_, rev..

Embedded 타입

Embedded 타입이란? 새로운 값의 타입을 직접 정의하는 것이다. 가게에서 파는 물건을 생각해보자. 공급가 + 부가세를 합쳐서 나온 전체가격이 판매가격이 된다. 복잡한 판매품의 경우 공급가, 부가세 외에 바른 부차적인 요소들을 합쳐야 전체 판매가격이 나오는 경우도 있다. 입베디드타입을 써서 이러한 복합 값들의 타입을 직접 유저가 정의하여 필드들을 묶어서 하나로 활용할 수 있다. 왜 쓰는걸까? 만약 쇼핑몰 유저의 집주소 정보를 하나하나 변수로 선언해서 저장한다고 가정하자. 유저와 관련된 클래스는 간략하게 user / userHistory / userEvent가 있는데, 우리는 아래와 같은 변수들을 모든 클래스에 복붙해줘야 할것이다. private String city; private String dis..

SpringBoot의 @Converter

Converter란? 영어로 직역하면 전환기가 된다. 변수의 타입을 변환하여 저장 / 출력할때 사용된다. 예를들어 java에서는 'boolean'으로 값을 저장하고 Database에서는 String타입의 'Y', 또는 'N'으로 저장하고 싶을때 @Converter 어노테이션을 사용하면된다. 예시코드 책의 상품코드는 Integer로 저장하되 (ex : 100, 200, 300), 그에따른 책의 판매상태는 String으로 저장한다. (ex : 100 = "판매종료") 1. converter 객체 생성 package com.fastcampus.jpa.bookmanager.domain.converter; import com.fastcampus.jpa.bookmanager.repository.dto.BookSta..

Native Query

Native Query란? Native Query를 의역하면 '순수 쿼리'가 된다. 말그대로 흔히 사용한 쿼리문을 순수하게 가져온 것이다. [사용방법] @Query(value = "select * from book", nativeQuery = true) List findAllCustom(); 사용법은 위 코드처럼 쿼리문을 value로 입력한 뒤, nativeQuery를 true로 선언하면 된다. 보다시피 쿼리문은 JPQL이 아닌 일반 쿼리문을 쌩으로 작성한 것과 동일하다. [JPQL 예시] @Query(value = "select new com.fastcampus.jpa.bookmanager.repository.dto.BookNameAndCategory(b.name, b.category) from Boo..

Soft delete와 Hard delete

둘의 차이는? 방식 설명 Soft Delete (논리삭제) 'UPDDATE table SET delete = 1 WHERE id = 2' 형태로 ROW가 삭제되지 않고 flag를 통한 제어 방식. 삭제여부를 알 수 있는 컬럼에 데이터가 삭제되었다는 값을 넣어서 표현한다. Hard delete (물리삭졔) 'DELETE FROM table WHERE id = 2' 형태로 ROW가 실제로 삭제되는 방식 현업에서는 Hard delete보다 Soft delete를 보다 자주 사용한다. 예시 id 회원 id 회원 이름 삭제 여부 1 1 김가나 0 2 1 김가나 1 3 1 김가나 0 Soft delete의 경우, UPDATE 명령어를 이용하여 삭제 여부의 컬럼 값을 true로 바꿔준다. 결론적으로 실제 서비스에서 ..

Cascade와 고아제거속성

Cascade란? 영속성의 전이를 제공해준다. (*영속 : 영원히 계속함) 먼저 Cascade에는 크게 6가지의 종류가 있다. ALL : 모두 적용 PERSIST : 영속 (저장) MERGE : 병합 REMOVE : 삭제 REFRESH : Refresh DETACH : DETACH 각 옵션에 따라 행동이 이루어지는데, 예를들어 PERSIST로 설정할 경우, 자식 엔티티까지 영속화해서 저장한다. 또다른 예로 REMOVE로 설정할 경우, 부모 엔티티만 삭제해도 자식 엔티티까지 함께 삭제된다. REFRESH의 경우 연결된 하위 엔티티까지 인스턴스의 값을 새로 고침하며, DETACH는 연결된 하위 엔티티까지 영속성을 제거한다. 예시 [BookRepositoryTest.java] @Transactional @Te..

DB와 Transaction

Transaction이란? 데이터베이스에서 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다. transaction은 일반적으로 사람의 정의하는 것에 따라 그 내용이 달라진다. 예시를 하나 살펴보자. 웹쇼핑몰에서는 사용자가 사용자가 결제하는 행위와 물건이 구입되는 행위가 동시에 이루어져야한다. 소비자의 결제가 진행되는 payment table에 insert가 이루어지고, 물건이 구입되는 order table에도 insert가 이루어져야한다. 만약 여기서 order table에 insert가 정상적으로 이루어지지 않으면 소비자의 돈만 빠져나가고 물건은 정상적으로 구매되지 않은다. 여기서는 payment table과 order table에 동시적으로 이루어지는 insert가 하나의 transaction이..

프로그래머스 위클리 챌린지 7주차 입실 퇴실 (C++)

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/86048 코딩테스트 연습 - 7주차 사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 오늘 회의실에는 programmers.co.kr 문제 요약 1. 1번부터 n번까지의 사람들이 있습니다. 2. 1번부터 n번까지의 입실 / 퇴실 시간이 주어집니다. 3. 두 번 이상 입실하는 사람은 없으며, 입실과 퇴실이 동시에 이루어지는 경우도 없습니다. 4. 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 5. 1번부터 n번까지 각 사람이 반드시 만나게되는 사람의 수가 몇명인지 배열에 담아 출..