728x90
반응형

분류 전체보기 476

SQLD 노랭이 28번 문제

데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점 Dirty Read, Non-repeatable Read, Phantom Read, Lost Update Dirty Read 하나의 트랜잭션이 아직 커밋되지 않은 다른 트랜잭션의 변경사항을 읽는 경우, 잘못된 데이터를 읽을 수 있다. 이로 인해 커밋되지 않은 변경 사항이 롤백되면 읽은 데이터는 실제로 존재하지 않는 데이터가 된다. Non-repeatable Read 동일한 트랜잭션 내에서 동일한 쿼리를 반복해서 실행할 때, 다른 트랜잭션이 해당 데이터를 변경하거나 삭제하는 경우, 처음과 다른 결과를 얻게 된다. 이로인해 데이터의 일관성이 깨질 수 있다. Phantom Read 동일한 쿼리를 반복해서 실행할 때, 다른 트랜잭션이 해당 ..

SQL개발자 (SQLD) 2023.05.31

SQLD 노랭이 41,42번 반정규화 개념정리

테이블의 반정규화 테이블 병합, 분할, 추가 기법이 있다. 병합 : 1:1, 1:M, 서브/슈퍼타입 3가지 유형의 테이블 병합 분할 : 수직, 수평 2가지 유형의 테이블 분할 추가 : 중복테이블, 통계테이블, 이력테이블, 부분테이블 3가지 유형의 테이블 추가 기법분류 반정규화 기법 내용 테이블 병합 1:1 관계 테이블 병합 1:1 관계를 통합하여 성능 향상 1:M 관계 테이블 병합 1:M 관계를 통합하여 성능 향상 슈퍼/서브타입 테이블 병합 슈퍼/서비스 관계를 통합하여 성능 향상 테이블 분할 수직분할 컬럼단위의 테이블에서 디스크I/O를 분산처리하기 위해 테이블을 1:1로 분리하여 성능향상 (트랜잭션의 처리되는 유형을 파악하는것이 선행되어야 한다.) 수평분할 로우 단위로 집중 발생되는 트랜잭션을 분석하여 ..

SQL개발자 (SQLD) 2023.05.31

SQLD 노랭이 1차정규화 37,38번 문제

문제 37) 모델코드 모델명 제품류코드 물품가 출하가 A유형분류코드1 B유형분류코드2 C유형분류코드3 D유형분류코드4 E유형분류코드5 바코드 가로 세로 높이 모델구분 위 테이블은 컬럼단위에서 중복된 테이블이다. 컬럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 제 1차 정규화의 대상이 된다. 이와 같은 반복적인 속성 나열 형태에서는 각 속성에 대해 'or'연산자로 연결된 조건들이 사용되는데, 이 때 어느 하나라도 인덱스가 정의되어 있지 않으면 'or'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번에 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있게 된다. 또한 모든 반복 속성에 인덱스를 생성하게 되면 검색 속도는 좋아지겠지만 반대급부적으로 너무 많은 인덱스로 인해 ..

SQL개발자 (SQLD) 2023.05.31

SQL자격 검정 노랭이 123p 118번 문제 풀이

SELECT ID, START_VAL, NVL(END_VAL, 99) AS END_VAL, LAG(END_VAL) OVER(PARTITION BY ID ORDER BY START_VAL, NVL(END_VAL, 99)) AS FLAG1, LEAD(START_VAL) OVER(PARTITION BY ID ORDER BY START_VAL, NVL(END_VAL, 99)) AS FLAG2 FROM TBL; NVL(END_VAL, 99) END_VAL 컬럼이 NULL인 행에 대해서 99를 출력한다. LAG(END_VAL) PARTITION BY ID에 의해 ID별로 각 레코드행의 END_VAL컬럼의 이전행을 출력한다. ORDER BY절을 통해 START_VAL을 기준으로 오름차순 정렬하고 동일한 값이 있을경우..

SQL개발자 (SQLD) 2023.05.27

SQL개발자 가이드(pdf) 361p~362p 'GROUPING SETS 3개의 인수' 정오표

[DDL 스크립트문] drop table emp; drop table dept; CREATE TABLE EMP( empno int PRIMARY KEY, ename varchar(50), job varchar(50), mgr int, sal int, deptno int ); CREATE TABLE DEPT( deptno int PRIMARY KEY, dname varchar(50) ); INSERT INTO EMP VALUES(01, 'SMITH', 'CLERK',7698 ,950 ,30); INSERT INTO EMP VALUES(02, 'SMITH', 'CLERK',7782 ,1300 ,10); INSERT INTO EMP VALUES(03, 'SMITH', 'CLERK',7788 ,1100 ,20)..

SQL개발자 (SQLD) 2023.05.27

JPA EntityManager - Entity 기본 구현 및 SELECT, INSERT, UPDATE, DELETE

Entity JPA가 관리할수 있도록 하는 자바 객체이다. Member Entity Class생성 @Entity //JPA 첫로딩시 Entity로 관리할수 있도록 인식 //@Table(name = "USER") // DB에 Member라는 이름이 아닌 User라는 이름의 테이블을 설정한다면 해당 어노테이션으로 지정한다. 생략시 엔티티 클래스명으로 테이블이 관리됨. public class Member { @Id private Long id; // @Column(name = "username") //DB 컬럼이 username이라면 해당 어노테이션을 통해서 Entity가 관리된다. (생략시 필드명으로 컬럼명이 관리됨) private String name; public Long getId() { return ..

자바(JAVA) 추상클래스 (Abstract Class)

추상클래스란 객체를 직접 생성할 수 있는 클래스를 실체 클래스 라고 하는 반면 추상 클래스는 실체 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상클래스 라고 할 수 있다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성을 가질 수 있다. 추상 클래스의 용도는 다음 두 가지가 있다. 1. 실체 클래스들의 공통된 필드 및 메소드 이름 통일 목적 실체 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다. 예를 들어 소유자의 이름을 저장하는 필드를 Telephone에서는 owner라고 하고, SmartPhone에서는..

JAVA/BASIC 2023.04.12

자바(JAVA) == 비교연산자와 Object클래스의 equals() 메소드

비교연산자 비교연산자는 일반 데이터 혹은 변수에 저장된 데이터의 값이 같은지, 다른지 조사한다. 참조 타입 변수들 간의 비교 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용한다. 참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소값을 비교하는 것이 된다. 동일한 주소 값을 갖고 있다는 것은 동일한 객체를 참조한다는 의미이다. 따라서 동일한 객체를 참조하고 있을 경우 동등비교(==)연산의 결과는 true이고 부정비교(!=) 연산 결과는 false가 된다 public class Example { public static void main(String... args) { Car car1 = new Car("블루",12); // 힙영역에 car1 저장 Car car2 = new..

JAVA/BASIC 2023.04.12

자바(JAVA) 인터페이스 디폴트메소드와 정적메소드

인터페이스 인터페이스란 객체의 사용 방법을 정의한 타입이다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다. 특히 자바 8에서는 함수적 인터페이스의 구현 객체를 생성하기 때문에 인터페이스의 중요성이 더욱 커졌다. 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 된다. 개발 코드가 직접 객체의 메소드를 호출하면 간단한데, 왜 중간에 인터페이스를 두는지 의문점이 생긴다. 그 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다. 인터페이스는..

JAVA/BASIC 2023.04.12

자바(Java) 가변인자 - Main메소드 매개변수 String[] args를 가변인자로 받아보기

인프런의 김영한님의 Spring 강의를 듣던 도중 자바스크립트의 전개식(Spread)와 비슷하게 생긴 문법을 확인하였는데, 이것이 자바다 책이나 명품 JAVA Programming에는 수록되지 않아 한참을 구글링 한 끝에 해당 문법에 대해서 찾게되었다. 자바 1.5부터 지원하고 있는 가변인자(Varargs) 라는 문법인데 이는 하나의 함수에서 매개변수를 동적으로 받을수 있는 방법이다. 매개변수의 갯수가 3개 혹은 5개 심지어 아무것도 넘기지않고 호출할 경우에도 적용이되어 사용이 가능하다. 메소드 오버로딩에서는 String 타입의 매개변수를 1개를 넘기거나 2개를 넘길때처럼 매개변수의 갯수에 따라 동일한 이름의 메소드를 여러개 정의해두고 이를 호출하는 방식으로 사용을 하지만, 이것은 제한적이다. 동일한 타..

JAVA/BASIC 2023.04.12

자바(JAVA) 중첩클래스 - 로컬클래스와 익명객체의 로컬변수의 사용제한

로컬클래스란 메소드 내부에서 선언되는 중첩 클래스를 말한다. 메소드가 호출되어 실행되고 있을 때만 객체로 생성되어 사용할 수 있다. 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없기 때문에 접근제한자(private, public) 및 static을 붙일 수 없다. 따라서 로컬클래스 내부에는 인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언할 수 없다. void method() { class D { D() {} //생성자 int field1; //인스턴스 필드 static int field2; //정적 필드 void method1() {} //인스턴스 메소드 static void method2() {} //정적 메소드 } D d = new D(); d.field1 = 3; d.met..

JAVA/BASIC 2023.04.11

이것이 자바다 Reflection - newInstance() 및 ArgumentsConstrouctor 객체 생성법

Reflection 동적 객체 생성 Class 객체를 이용하면 new 연산자를 사용하지 않아도 동적으로 객체를 생성할 수 있다. 이 방법은 코드 작성 시에 클래스 이름을 결정할 수 없고, 런타임 시에 클래스 이름이 결정되는 경우에 매우 유용하게 사용한다. 아래 코드처럼 Class.forName() 메소드로 Class객체를 얻은 뒤 newInstance() 메소드를 호출하면 Object 타입의 객체를 얻을 수 있다. public class Example { public static void main(String[] args) throws Exception { Class clazz = Class.forName("example.basic.Car"); Object objCar = clazz.newInstance..

JAVA/BASIC 2023.04.11

자바(JAVA) Exception 예외처리에서 Try Catch 구문의 Finally의 필요성

Try Catch 예외처리 구문을 공부하던 도중 Finally에 대해서 알게 되었다. Finally란 Try ~ Catch 구문의 예외 처리 도중, 예외 발생 여부와 상관 없이 항상 실행할 내용이 있을 경우에만 작성하는 블록이다. 공부를 하면서 문득 이런 생각이 들었다. 항상 실행시키고자 하는 코드는 try catch 구문 블럭이 끝난 이후 블럭 바깥 라인에 작성해도 오류가 발생하든 발생하지 않든 실행이 되는데 굳이 finally가 필요한 상황이 있긴 할까? 라는 의문이다. 우선 Finally 구문을 사용하는 경우에 대해서 예를 들어보자. 보통의 경우 리소스 관리나 프로그램을 안전하게 구성하기 위해 finally라는 기능을 흔히 사용한다. DB Connection 반환 혹은 Socket통신, Close ..

JAVA/BASIC 2023.04.10