목록분류 전체보기 (94)
우주코딩
sql 삽입 공격 데이터가 들어갈 자리에 sql 코드를 집어넣어서 원래 sql문장을 왜곡시키는 것을 sql 삽입 공격이라고 한다. 값이 놓일 자리 ? in-parameter라고 부른다. sql 삽입 공격이 불가능하다. PreparedStatement는 미리 SQL 문장을 준비하여 값을 삽입하는 기법이다. SQL 문장을 준비할 때, 값이 들어 갈 자리에 ? 로 표시한다. ? 를 "in-parameter"라 부른다. SQL을 서버에 전달하기 전에 in-parameter 자리에 값을 넣는다. => PreparedStatement.setXxx(in-parameter 인덱스, 값); setXxx : 컬럼의 타입에 따라 setInt(), setString(), setDate() 등을 사용할 수 있다. in-para..
DBMS 개요 데이터 베이스는 데이터를 보관하는 것 = 파일? 데이터를 보관한 파일 + 실시간 접근 가능 / 동시 공유 / 데이터의 독립성 / 일관성 / 무결성 / 보안성 명령어 -> 데이터 처리 요청 DBMS -> 데이터 입출력 -> 파일 이 명령어 작성 문법이 SQL이다. 모든 DBMS에서 인식할 수 있는 표준 문법이다. SQL명령을 보내고 결과를 받으려면 DBMS에서 정한 규칙에 따라 통신을 해야한다! 문제는 DBMS 제조사 측에서 통신 규칙을 공개하지 않는다. 대신 통신을 대행하는 클라이언트를 제공한다. 그것이 DBMS 클라이언트다. 명령어를 SQL언어로 작성하면 클라이언트가 서버로 연결하여 작업을 요청한다. 문법A -> 명령어 작성 -> DBMS A / DBMS B / DBMS C DBMS마다 ..
조인 조인 서로 관련된 테이블의 데이터를 연결하여 추출하는 방법 cross join : 두 테이블의 데이터를 1:1로 모두 연결한다. NATURAL 조인 : 같은 이름을 가진 컬럼 값을 기준으로 레코드를 연결한다. natural join 의 문제점 1) 두 테이블의 조인 기준이 되는 컬럼 이름이 다를 때 연결되지 못한다. 2) 상관 없는 컬럼과 이름이 같을 때 잘못 연결된다. 3) 같은 이름의 컬럼이 여러 개 있을 경우 잘못 연결된다. 모든 컬럼의 값이 일치할 경우에만 연결되기 때문이다. 만약에 두 테이블에 같은 이름을 가진 컬럼이 여러 개 있다면, join ~ using (기준컬럼) 을 사용하여 두 테이블의 데이터를 연결할 때 기준이 될 컬럼을 지정한다. 두 테이블에 같은 이름의 컬럼이 없을 경우 연결..
select MariaDB Client -> 데이터 처리 요청 -> MariaDB Server -> 입출력 -> 파일 mysql.exe 는 마리아DB 클라이언트 파일 모든 컬럼 값 조회하기. 컬럼 순서는 테이블을 생성할 때 선언한 순서이다. select * from 테이블; 특정 컬럼의 값만 조회할 때 => "프로젝션(projection)"이라 부른다. select 컬럼명,컬럼명 from 테이블; 가상의 컬럼 값을 조회하기 select no, concat(name,'(',class,')') from test1; 서버에서 데이터 처리만 해야한다는 생각을 하는 사람은 DB에서 concat 사용하는 것을 반대한다. 방식은 상관없지만 데이터 처리에서 합치지 않는 것이 좋다. 컬럼에 ..
SQL 언어 사용법 배우기 DBMS 에서 파일로 데이터 입출력을 할 때 데이터를 파일에 저장하고 파일에 저장된 데이터를 조회/변경/삭제 데이터베이스의 기능을 제공 DBMS 클라이언트는 데이터 작업을 요청하고 DBMS 통신 규칙에 따라 DBMS와 통신하고 DBMS는 요청 처리 결과를 클라이언트에게 보낸다. 사용자는 데이터 작업 요청할 때 SQL 언어로 명령어를 작성한다. SQL - DDL DBMS 클라이언트는 데이터 작업을 요청하고 DBMS 통신 규칙에 따라 DBMS와 통신하고 DBMS는 요청 처리 결과를 클라이언트에게 보낸다. 데이터를 저장하고 다룰 DB 객체를 정의한다. 테이블 drop table 테이블명 (테이블 삭제) alter table 테이블명 변경사항 (테이블 변경) describe 테이블명 ..
애플리케이션 아키텍쳐의 변경 내역 App - 배열(데이터저장) App - Collection(데이터저장) App - Collection(데이터저장) - File(보관/로딩) ClientApp ServerApp - Collection(데이터저장) - File(보관/로딩) 데이터 처리 요청 처리 결과 응답 ServerApp - Collection - File 과정을 DBMS로 대체하기 클라이언트 앱이 데이터 처리 요청을 DBMS에 요청하면 DBMS는 처리 결과를 응답한다. 개발자도 데이터 보관과 조회에 신경 쓸 필요가 없다. DBMS Database Management System 데이터 보관과 조회를 서비스하는 프로그램 Database 실시간 접근 가능 : 데이터 처리 요청에 즉시 응답 동시 공..
Observer 패턴 observer = 관찰자(listener) = 감시자 상태를 관찰한다. 특정 상태에 대해 보고를 한다. 옵저버는 상태를 듣는 객체이다. Observer 디자인패턴의 클래스 다이어그램 특정 상태에 놓이면 규칙에 따라 옵저버의 메서드를 호출한다. Obserber ApplicationContextListener addApplicationContextListener() contextInitialized() removeApplicationContextListener() contextDestroyed() 인터페이스는 옵저버(subscriber 수신자 = listener) 이고 앱은 subject(publisher 발행자) 라고 한다.
바이트 스트림으로 텍스트 출력하기 데이터를 내보내는 곳 데이터를 가져오는 곳 파일 FileOutputStream 배열 ByteArrayOutputStream 프로세스 PipedOutputStream 입출력 담당하는 클래스들을 Sink Stream 클래스라고 부른다. String 객체의 데이터를 출력하려면 문자열을 담은 byte[] 배열을 리턴 받아야 한다. 명확하게 UTF-8 을 지정해주어야한다. byte[] bytes = str.getBytes("UTF-8"); for (byte b : bytes) { System.out.printf("%x ", b); } getBytes(문자집합) 바이트 스트림 텍스트 데이터 읽기 File(UTF-8) 텍스트파일 FileInputStream -> 바이트배열 -> ne..