목록Java (116)
오늘은 몰랐으면 내일은 알면 된다
동기처리는 서버에서 응답이 올때까지 기다리며, 응답을 받은 경우 브라우저는 내용을 모두 지우고 응답받은 내용으로 새롭게 랜더링하게 된다. 반면 비동기처리인 AJAX는 JS 객체차원에서 요청-응답하는 것이기 때문에 브라우저에게 랜더링을 맡기지 않는다. 대신 DOM tree를 조작하는 방식으로 작동하기 때문에 페이지를 모두 지우고 새롭게 만들 필요가 없다. [AJAX 개요] : 동적인 웹페이지를 만들기 위한 개발 기법의 하나이다. Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹페이지의 일부분에만 표시할 수 있다. 다음의 기술들을 사용한다. HTML/CSS DOM JSON/XML XMLHttpRequest JavaScript [AJAX 동작방식] https://www.w3schools...
order_id는 주문한 고객의 id이다. order_info 와 함께 주문자의 정보를 JOIN으로 가지고 오려면, OrderInfo 클래스가 Customer 테이블의 정보를 받아올 수 있어야 한다. 따라서 Customer 테이블의 정보를 담을 수 있는 Customer 객체를 가지고 있어야 한다. 그렇지 않으면 SELECT를 두번 사용하여 order info, customer의 정보를 각각 가지고 와야할 것이다. has a 관계는 언제 가져야 하는가? 예를들어 아래와 같이, 주문 상세 정보는 주문 기본정보를 확인할 때 함께 확인이 될 것이다. 그리고 하나의 주문 기본정보는 여러개의 주문 상세 정보를 가지고 있을 것이다.(일대다 관계) 이러한 테이블 관계를 그대로 클래스 관계로 옮기면 된다. order_i..
기본적으로 페이징은 ROWNUM을 가지고 한다. 예를들어 현재 PRODUCT테이블에 아래와 같이 데이터가 있다고 하자. SELECT * FROM(SELECT ROWNUM RN, A.* FROM (SELECT * FROM PRODUCT ORDER BY PROD_NO) A) B WHERE RN BETWEEN 1 AND 4; 위와 같이 ROWNUM의 범위 제어를 통해 원하는 행을 출력할 수 있다. 이제 Java에서의 repository 메소드를 만들어보자. mysql과는 다르게 오라클에서는 rownum이 1부터 시작하기 때문에 repository 메소드는 다음과 같이 짤 수 있다. @Override public List selectAll(int currentPage, int cntPerPage) throws ..
[JDBC (Java Database Connectivity, java.sql 패키지) 개요] : JDBC는 DBMS의 종류와 상관없이 동일하게 사용할 수 있는 클래스와 인터페이스로 구성되어 있다. JDBC 인터페이스를 통해 실제로 DB와 작업하는 것은 해당 인터페이스를 구현한 JDBC Driver이며, DBMS마다 별도로 다운받아 사용해야 한다. 구분 설명 DriverManager JDBC Driver를 관리하며 DB와 연결해서 Connection 구현 객체를 생성 Connection Statement, PreparedStatement, CallableStatement 구현 객체 생성, 트랜잭션(Transaction) 처리 및 DB 연결을 끊을 때 사용 Statement DDL, DML을 실행할 때 사..
[사용자 생성 / 삭제] CREATE USER 사용자 이름(필수) IDENTIFIED BY 비밀번호(필수); DROP USER 사용자 이름 [CASCADE]; 그러나 단순히 생성만 하면 session 권한이 없기 때문에 접속을 할 수 없다. [권한 관리] 따라서 GRANT 명령어로 session 생성 권한을 주어야 한다. GRANT CREATE SESSION TO test; - 권한 부여 GRANT [시스템 권한] TO [사용자 이름/롤(Role)이름/PUBLIC] [WITH ADMIN OPTION]; - 권한 취소 REVOKE [시스템 권한] FROM [사용자 이름/롤(Role)이름/PUBLIC]; [덤프 생성/사용] exp hr/hr file=hr.dmp imp test/test file=hr.dmp..
[인덱스 Index] : 데이터 검색 성능의 향상을 위해 테이블 열에 사용하는 객체를 의미한다. 그러나 무조건 성능을 향상시키는 것은 아니다. 언제 만들어야 하는지에 대해서는 아래를 참고하자. [뷰 View] : 하나 이상의 테이블을 조회하는 SELECT 문을 저장한 객체를 의미하며, 가상 테이블(virtual table)로 부르기도 한다. SELECT문을 저장하기 때문에 물리적 데이터를 따로 저장하지는 않는다. SELECT문의 FROM절에 사용하면 특정 테이블을 조회하는 것과 같은 효과를 얻을 수 있다. 사용자는 실제 사용되는 컬럼, 실제 사용되는 테이블이 무엇인지 알 수 없다. 따라서 보안상의 이유로 테이블, 컬럼 등의 정보를 노출시키고 싶지 않은 경우 사용한다. CREATE VIEW VW_CUSTO..
[트랜잭션 Transaction] 단순히 insert 를 실행하고 commit을 하지 않게 되면, 진행상태가 임시로 저장이 된다(스냅샷). 해당 데이터가 실제로 DB에 반영되기 위해서는 트랜잭션 제어가 필요하다. 트랜잭션이란 더 이상 분할할 수 없는 최소 수행(작업) 단위를 의미하며, 하나의 작업 또는 밀접하게 연관된 작업을 수행하기 위해 한 개 이상의 DML로 이루어진다. 트랜잭션은 하나의 트랜잭션 내에 있는 여러 명령어를 한 번에 수행하여 작업을 완료하거나, 모든 작업을 취소하여 아예 모두 수행하지 않은 상태로 만든다.(ALL OR NOTHING) 이러한 트랜잭션을 제어하기 위해 사용하는 명령어를 TCL(Transcation Control Language)라고 한다. 트랜잭션 시작 자동완료 설명 DM..
[INSERT] INSERT INTO 테이블 이름 [(열1, 열2, ..., 열N)] VALUES (열1데이터, 열2데이터, ..., 열N데이터); INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES(50, 'DATABASE', 'SEOUL'); 숫자는 숫자를 바로 명시하고, 문자열 데이터는 작은 따옴표('')를 사용한다. INSERT절을 작성할 때, 지정한 열 개수와 각 열에 입력할 데이터 개수가 일치하지 않거나, 자료형이 맞지 않는 경우, 열 길이를 초과하는 데이터를 지정하는 경우 오류가 발생한다. 열1, 열2, ...열N은 생략할 수 있지만, 생략하게 되면 테이블을 만들 때 설정한 열 순서대로 모두 나열되어 있다고 가정하고 데이터를 작성해야 한다. 그러나 열을 직접 명시하..
참고) 중복되는 자료가 들어가는 것을 방지해야한다. 위와 같이 테이블을 세분화하는 것을 정규화라고 한다. [제약 조건] : 무결성 제약조건 설정하기 -> 결점 없는 데이터만 저장되도록 조건을 설정한다. 종류 설명 NOT NULL 지정한 열에 NULL을 허용하지 않는다. NULL을 제외한 데이터의 중복은 허용된다. UNIQUE 지정한 열이 유일한 값을 가져야 한다.(중복X) NULL은 값 중복에서 제외된다. PRIMARY KEY 지정한 열이 유일한 값이면서 NULL을 허용하지 않는다. 테이블당 하나만 지정 가능하다. FOREIGN KEY 다른 테이블의 열을 참조하여 존재하는 값만 입력할 수 있다. CHECK 설정한 조건식을 만족하는 데이터만 입력 가능하다. [NOT NULL / PRIMARY KEY] - ..
[CREATE] CREATE TABLE 소유 스키마.테이블 이름( 열1이름 열1자료형, 열2이름 열2자료형, ... 열N이름 열N자료형 ); - 테이블 이름 생성 규칙 테이블 이름은 문자로 시작해야 한다.(숫자로 시작불가) 테이블 이름은 30byte 이하여야 한다.(영어 30자, 한글 15자) 같은 스키마에서 테이블 이름은 중복될 수 없다. 테이블 이름은 영문(한글 가능), 숫자, 특수문자 $, #, _ 를 사용할 수 있다. SQL 예약어는 테이블 이름으로 사용할 수 없다. 테이블 이름은 명사로 만든다. - 열 이름 생성 규칙 문자로 시작해야한다. 30byte 이하여야 한다. 한 테이블의 열 이름은 중복될 수 없다. 영문(한글 가능), 숫자, 특수문자 $, #, _ 를 사용할 수 있다. SQL 예약어는 ..