템플릿 조각웹 페이지에서 상단, 하단, 좌측 카테고리 등 공통 영역이 많다.같은 코드를 매번 복사하면 비효율적이라서 타임리프는 템플릿 조각과 레이아웃 기능을 지원한다. @GetMapping("/fragment") public String template() { return "template/fragment/fragmentMain"; } th:fragment가 있는 태그는 다른 곳에서 포함되는 코드 조각으로 가져온다. 푸터 자리 입니다. 부분 포함하는 insert로 현재 태그(div) 내부에 추가한다.푸터 자리 입니다. replace를 사용하면 현재 태그(div)를 대체한다. 파라미터를 전달해서 동적으로 조각을 렌더링할 수 있다. 파라미터 자리 ..
🖥️ Back
타임리프는 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다. 스프링과 통합되면서 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다. 타임리프 공식 사이트 https://www.thymeleaf.org/공식 메뉴얼 - 기본 기능 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html공식 메뉴얼 - 스프링 통합 https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html표준 표현식 구문 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#standard-expression-syntax 타임리프 사용 선언 text, u..
CTE (Common Table Expression)MySQL에서 모든 쿼리가 임시 결과를 생성한다. 이 임시 결과에 이름 붙인 것이 CTE다. 1. cte_max_recursion_depth 설정대규모 데이터 생성하기에 앞서 최대 재귀 횟수를 지정하는 행의 갯수를 설정한다.SET SESSION cte_max_recursion_depth = 10000000; 2. 더미 데이터 삽입 쿼리 실행해당 스크립트를 실행하면 users 테이블에 1,000,000개의 데이터가 자동 생성된다.INSERT INTO users (name, age)#1부터 시작해서 n+1씩 증가, n JSCODE, MySQL 성능 최적화 입문/실전https://inf.run/DzjSq

INDEX인덱스란 데이터 베이스 테이블에서 검색 성능 속도를 높여주는 자료구조이다. 더 직관적으로 표현하면 데이터를 찾기 위해 특정 컬럼을 기준으로 미리 정렬해놓은 표이다.그래서 주로 WHERE, ORDER BY, JOIN, GROUP BY 등에 사용되는 컬럼에 설정한다. 만약 인덱스가 없다면 테이블 전체를 일일이 다 뒤져야한다.인덱스가 있다면 필요한 위치를 빠르게 찾아가기 때문에 조회 속도가 빨라진다. 1만개의 데이터가 있는 USERS 테이블이 있다.이중에서 age가 23인 사람을 찾을려고한다. 인덱스 없이 조회를 하면 1만개의 데이터를 일일이 다 확인하기때문에 오래걸린다. SELECT * FROM usersWHERE age = 23; #0.141초 나이순으로 정렬된 표(= 인덱스)가 있다면 23로..

1. 개발자가 DB에 SQL 요청을 보낸다.2. MySQL 엔진에서 옵티마이저가 SQL문을 분석한 뒤 빠르고 효율적으로 데이터를 가져올 수 있는 계획을 세운다.어떤 순서로 테이블에 접근할 지, 인덱스를 사용할 지, 어떤 인덱스를 사용할 지등옵티마이저가 세운 계획은 완벽하지 않기 때문에 잘못된 최적화를 할 수 있어 SQL 튜닝이 필요하다.3. 옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 가져온다.DB 성능 문제의 대부분 원인은 스토리지 엔진에서 데이터를 가져올 때 발생한다. 데이터를 찾기 어렵거나 오래 걸리거나 등그래서 SQL 튜닝의 핵심은 스토리지 엔진에서 데이터를 쉽게 찾을 수 있도록 그리고 적은 데이터를 가져올 수 있도록 수정해야한다.4. MySQL 엔진에서 정렬, 필터링 등의 마지막..
추상클래스란 공통적인 틀은 있지만, 직접 인스턴스를 생성할 수 없는 클래스이다.그래서 자식 클래스가 채워서 완성해야한다. 간단하게 생각하면 추상 클래스는 미완성 설계도이고, 추상 메서드는 설명만 있고 구현은 없다.public abstract class SchoolGroup { //protected는 자식 클래스에서 접근할 수 있도록 허용한다. //static final은 공통 상수로 모든 자식 클래스에 공유된다. protected static final String NOTICE = "초등학교, 중학교는 의무교육이다."; //final은 생성자에서 한 번만 초기화 가능하다. 그이후로 변경 안 됨! protected final int no; protected final Str..