분류 전체보기 138

윈도우 함수

OVER(): 윈도우 함수의 범위를 지정해주는 키워드ORDER BY: 순위를 매기거나 백분율을 계산할 때 어떤 값을 기준으로 할지 지정PARTITION BY: 그룹별로 나눠서 따로 계산하겠다는 의미PERCENT_RANK() - 백분율 순위PERCENT_RANK = (순위 - 1) / (전체 행 수 - 1)그룹 내 상대 순위(백분율 순위)를 0 ~ 1로 표현동일 값(동점자)에게도 서로 다른 백분율 순위를 부여함. DENSE_RANK()중복 순위 O (순서 건너뛰지 않음)CUME_DIST()누적 분포(작거나 같은 값의 비율)현재 값 이하의 값이 전체에서 얼마나 차지하는지를 백분율로 표현RANK()중복 순위O (순서 건너뜀) RATIO_TO_REPORT()RATIO_TO_REPORT(x) = x / SUM(x..

카테고리 없음 2025.05.29

내가 보려고 만든 sqld 정리

NVL(값1, 값2) - 값1이 NULL 이면 값2, 아니면 값1 (null or value) COALESCE(값1, 값2) - 앞에 있는 값부터 NULL이 아닌 값이 있으면 그거 반환NULLIF(값1, 값2) - 값1==값2 이면 NULL, 아니면 값1DECODE(expr, search, result) - expr이 search와 같으면 result, 아니면 NULLCASE THEN - 순서대로 조건 검사 후 처음으로 만족하는 조건의 결과값 반환CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ELSE 기본값END2.WHEN THEN ELSE END 에서 ELSE를 안쓴다면?ELSE 조건을 따로 만들어놓지 않는다면 조건에 만족하지않는 모든 튜플들은 NULL이 된다..

카테고리 없음 2025.05.12

H2 DB 서버 실행 시 자동 insert

H2 DB의 장점은 테이블이 휘발성이기 때문에 서버를 다시 실행 시킬 때마다 깨끗한 DB에서 시작할 수 있다는 점이다.하지만 테스트를 해야하는 입장에서 초기값을 매번 수동으로 넣는 것은 너무 비효율적이다.그렇기에 서버를 실행 시킬 때마다 자동으로 값을 넣도록 만들었다.resources 밑에 "import.sql" 파일을 만들어준다. import.sql INSERT INTO reading_record (title, author, date, sentence, comment) VALUES ('자바의 정석', '남궁성', '2025-04-18', '자바는 객체지향 언어다.', '기본기가 탄탄한 책이다.');INSERT INTO reading_record (title, author, date, sentence, ..

Spring Boot project 2025.04.28

API-KEY, Bean 중복, Preflight (OPTIONS) 요청

클라이언트는 요청 시에 헤더에 API 키를 포함하고, 서버는 그 키가 유효한지 확인해서 접근을 허용하거나 거부하는 간단한 인증 방식임. application.propertiesapp.api-key=my-secret-keymy-secret-key부분에 쓸 api key 입력하면 됨밑의 방식은 에러가 났음. ApiKeyFilter.javapackage me.dodo.readingnotes.config;import jakarta.servlet.FilterChain;import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;impo..

Spring Boot project 2025.04.19

CORS 설정

CORS란?브라우저에서 보안적인 이유로 cross-origin HTTP 요청들을 제한함! 그래서 서버의 동의가 필요함.→ 서버에게 허락을 구하고 승인/거절하는 과정을 HTTP-header룰 이용해서 할 수 있음.→ 이것을 Cross-Origin Resource Sharing라고 함.cross-origin은1. 프로토콜(http or https)2. 도메인3. 포트번호중 하나라도 다른 경우임.cors설정↓WebConfig.Javapackage me.dodo.readingnotes.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org..

Spring Boot project 2025.04.18

제목, 작가, 날짜로 조회

요구사항 정리사용자는 책 제목, 작가, 날짜를 기준으로 검색하고 싶어함1개만 검색하거나, 여러 개를 조합해서도 검색 가능 ReadingRecordRepository.javaList findByTitleContainingAndAuthorContainingAndDate( String title, String author, LocalDate date);JPA Query 메서드를 사용해서 findBy - JPA에서 무언가를 "찾겠다"는 뜻TitleContaining - title 필드에 이 문자열이 포함된 데이터를 찾음. LIKE %keyword%와 같음. AndAuthorContaining - author에도 이 문자열이 포함돼야 함. AndDate - 날짜는 정확히 일치해야 함. = yyyy-mm-..

Spring Boot project 2025.04.17

React - useMemo(), useCallback()

useMemo()복잡한 계산 결과를 기억(memoization) 해서, 불필요한 계산을 피하고 성능을 향상시키는 Hook Memoization (메모이제이션)- 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술 -> 성능 최적화 - 메모이제이션 된 결과값이 Memoized value계산량이 많은 작업(compute함수)의 경우 컴포넌트가 랜더링될 때마다 수행하면 UI 지연 발생-> useMemo() 훅이 필요렌더링이 일어나는 동안 실행되서는 안되는 작업은 useMemo()에 사용하면 안됨 - useEffect()에서 실행돼야 할 이펙트 작업임. 1. 의존성 배열을 넣지 않으면? const..

React 2025.04.16

React - useEffect()

const [count, setCount] = useState(0);function handleClick() { setCount(count + 1); setCount(count + 1);}두 번 더했으니까 count는 2가 되겠지?" 하고 생각할 수 있지만 실제로는 count가 1만 됨.count는 현재 렌더링 시점의 값(0) 이고, setCount(count + 1)은 두 번 다 setCount(1)이 되기 때문.-> setCount(1)처럼 상태를 바꾸면, 바로 즉시 count 값이 1로 바뀌는 게 아님 set 함수는 비동기적으로 작동하며 현재 렌더링된 시점의 값이 반영됨 해결 방법함수형 업데이트를 쓰기const [count, setCount] = useState(0);function handl..

React 2025.04.15

H2 DB 설정

Java로 만든 경량형 관계형 데이터베이스(RDBMS)메모리 또는 파일 기반으로 동작할 수 있음.설치 없이 바로 사용 가능함.개발/테스트 단계에서 굉장히 많이 쓰이는 DB임.H2의 장점이 뭐지?가벼움 - 설치 X, JAR로 바로 사용 가능 (내장형)빠름 -  메모리에서 동작하므로 속도 빠름개발에 최적 - 실행할 때마다 DB가 초기화되기 때문에 테스트하고 바로 버릴 수 있음. (휘발성) 웹 콘솔 제공함 - /h2-console로 웹에서 SQL 직접 확인 가능자동 테이블 생성 가능 - JPA 설정만 해두면 @Entity만으로 테이블 생성됨JPA 테스트에 적합함 - Repository 테스트, Service 테스트를 할 때 가짜 DB 대신 실제 JPA 작동 방식 그대로 확인 가능.단점도 있긴 함.휘발성 메모리..

Spring Boot project 2025.04.14

DTO 클래스 생성 Request, Response

DTO = Data Transfer Object 데이터를 전송하기 위한 객체 요청이나 응답에 사용할 데이터만 따로 담아두는 전용 박스아니 처음에 DTO가 전혀 이해가 안 가는 겁니다.이거 왜 쓰는데?! 뭐가 다른데?! 으악코드 먼저 보겠습니다.ReadingRecordRequest.javapackage me.dodo.readingnotes.dto;import java.time.LocalDate;public class ReadingRecordRequest { private String title; private String author; private LocalDate date; private String content; // 기본 생성자 // 없으면 JPA와 동일하게 Jac..

Spring Boot project 2025.04.13