문제 JPQL 쿼리에서 DATEDIFF 함수를 사용하였는데 테스트 과정 중에 오류가 발생했다. expected "date-time field"; SQL statement: 서버에서는 Mysql을 이용하고 있고, 테스트는 H2 를 이용하고 있었다. H2의 DATEDIFF는 MySQL과 달리 date-time 필드를 필요했고, DBMS마다 메서드 파라미터 값이 달라야한다는 사실이 아찔했다. 그래서 모든 DB가 동일하게 사용할 수 있는 방법을 찾고자 했다. 해결방법 ALIAS 생성 H2 의 기존 DATEDIFF를 제거하고, ALIAS로 만들어 테스트에만 적용하고자 하였으나 기존의 DATEDIFF를 제거 또는 변경할 수 없어 실패 다른 메서드 찾기 DATEDIFF를 대체할만한 다른 메서드를 찾던도중 TIMEST..
20강 | 결합이 느리다면 정리 1. 상황에 따른 최적의 결합 알고리즘 알고리즘의 장단점 결합 대상 레코드 수의 관점에서 최적의 결합 알고리즘 정리 소규모 - 소규모 결합 대상 테이블이 작은 경우에는 어떤 알고리즘을 사용해도 성능 차이가 크지 않다. 소규모 - 대규모 소규모 테이블을 구동하는 Nested Loops를 사용합니다. 대규모 테이블의 결합키에 인덱스 있는 것이 중요, 내부 테이블의 결합 대상 레코드가 너무 많다면 구동 테이블과 내부 테이블을 변경 도는 hash를 사용해볼 것을 검토 대규모 - 대규모 hash를 사용, 결합 키로 정렬되어 있는 상태라면 Sort Merge를 사용 2. 실행 계획 제어 DBMS마다 실행 계획을 제어할 수 있다. 다만 MySQL은 결합 알고리즘 자체가 Nested L..
19강 | 결합 알고리즘과 성능 정리 옵티마이저가 선택 가능한 결합 알고리즘 (데이터의 크기 또는 결합 키의 분산으로 결정) Nested Loops Hash Sort Merge Nested Loops 알고리즘 각종 결합 알고리즘의 기본이 되는 알고리즘 중첩 반복을 사용하는 알고리즘 세부 처리 외부 테이블(TableA)에서 레코드를 하나씩 반복하며 스캔 외부 테이블 레코드 하나마다 내부테이블(TableB)의 레코드를 하나씩 스캔에서 결합조건에 맞으면 리턴 위의 과정을 외부 테이블 모든 레코드에 반복 특징 각 테이블의 결합 대상 레코드 수가 R(A) ,R(B) 일때 접근되는 레코드 수는 R(A) X R(B)가 된다. 실행시간은 레코드 수에 비례 한번의 단계에서 처리하는 레코드 수가 적으므로 Hash 또는 S..
문제 N명의 학생들의 성적이 학번순서대로 주어졌다. 학번 구간 [A, B]가 주어졌을 때 이 학생들 성적의 평균을 구하는 프로그램을 작성하라. 제약조건 1 ≤ N ≤ 106 인 정수 1 ≤ K ≤ 104 인 정수 1 ≤ Si ≤ 100 인 정수 1 ≤ Ai ≤ Bi ≤ N 입력형식 첫 번째 줄에 학생 수 N과 구간 수 K가 주어진다. 두 번째 줄에는 학생의 성적 Si (1 ≤ i ≤ N)가 주어진다. i + 2 (1 ≤ i ≤ K)번째 줄에는 i번째 구간 Ai, Bi가 주어진다. 출력형식 i번째 줄에 i번째 구간의 성적평균(소수셋째자리에서 반올림)을 출력한다. 차이가 0.01이하이면 정답으로 채점됨. 입력예제1 5 3 10 50 20 70 100 1 3 3 4 1 5 출력예제1 26.67 45.00 50..
이상한 나라의 객체 객체 정의 객체란 식별 가능한 개체 또는 사물이다. 객체는 구별 가능한 식별자,특징적인 행동,변경 가능한 상태를 가진다. 상태 특정시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체는 스스로의 행동의 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지한다. 행동 행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 부수효과를 초래한다. → 객체가 취하는 행동은 객체 자신의 상태를 변경시킨다. 상태와 행동사이의 관계 객체의 행동은 상태에 영향을 받는다. 객체의 행동은 상태를 변경시킨다. 행동이 상태를 결정한다 협력 객체의 행동은 객체..
역할,책임,협력 역할,책임,협력이 객체지향 애플리케이션의 윤곽을 결정한다. 역할의 특징 여러 객체가 동일한 역할을 수행할 수 있다. 역할은 대체 가능성을 의미한다. 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다. 하나의 객체가 동시에 여러 역할을 수행할 수 있다. 협력 객체는 다른 객체와의 협력을 통해 기능을 구현하게 된다. 협력속의 객체 특징 다른 객체에 협력적이어야 하며, 자율적이어야 한다. 객체는 데이터와 프로세스를 함께 지닌다. 객체지향에서 협력은 메시지를 전송하는 객체, 송신자와 메세지를 수신하는 객체, 수신자 사이의 관계로 구성된다. 메서드와 자율성 메서드(method) : 객체가 수신된 메세지를 처리하는 방법 외부의 요청이 무엇인지 표현하는 메시지와 요청을 처리하기 위한 구체적..
18강 | 기능적 관점으로 구분하는 결합의 종류 17강은 5장의 내용을 정리한 부분이라, 스킵했습니다. 정리 Employees 테이블 Department 테이블 테이블 생성 -- Employees 테이블 생성 CREATE TABLE Employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT, FOREIGN KEY (dept_id) REFERENCES Department(dept_id) ); -- Department 테이블 생성 CREATE TABLE Department ( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) ); -- Employees 테이블에 데이터 추가 INSERT INTO Employe..
2024.01.27 개발내용 FCM 메세지 전송 기준 개선 현재 상황 현재 운영 중인 서비스는 매일 6시마다 오늘 접속하지 않은 유저에게 FCM 메세지를 보낸다. 이러한 과정이 매우 비효율적일뿐만 아니라, 지속된 메세지로 불편함을 느끼는 유저들이 있어 이를 개선하고자 한다. 개선 최근 접속일을 기준으로 유저에게 다른 메세지를 전달할 예정이다. 최근 접속이 어제인 유저 최근 접속이 3일 전인 유저 최근 접속이 7일 지난 유저 최근 접속이 2주 지난 유저 최근 접속이 한달 지난 유저 로직 유저 테이블을 조회해, 최근 접속일이 [1일,3일,7일,7일,2주,한달] 지난 유저를 조회한 후 해당 유저에 대한 FCM 토큰을 가져온다. FCM 메세지의 title과 Body를Enum으로 관리해 접속하지 않은 기간에 따라..