자바 이클립스 editor does not contain a main type 오류가 뜰 경우 오류의 원인이 되는 경우를 정리해보았습니다. 분명히 코드는 되는 코드인데 이 오류가 뜬다면 체크해봐야할 것.
1. 자바 클래스 파일이 src폴더 밖에 있다. 2. 혹은 클래스 파일을 감싸는 패키지가 아예 없다. (default 패키지도 없을 때) 3. build path를 빼먹었을 때 (ojdbc6.jar) : 이클립스라기보다 STS3.0 등 스프링에서 열었을 때 4. 프로젝트를 다른 데에서 불러왔을 경우 5. 메인 함수가 없거나 오타가 나 있다. --public static void main(String[] args)
1, 2의 경우 폴더를 만들어서 넣어두면 될 것이고 3번의 경우 마우스 우클릭으로 라이브러리에 추가해주면 된다.
로또복권은 45개 중에 6개의 숫자를 뽑아내서 응모해야합니다. 남궁성의 코드초보스터디 카페에서 참고, 자바로 실습해보았습니다.
로또 번호 추첨 자바 소스코드
package lotto;
public class lotto {
public static void main(String[] args) {
int[] ball = new int[45]; //45개의 정수형 값을 ball을 저장하기 위한 배열 생성
for(int i=0; i<ball.length; i++) //배열에 1~45를 저장
ball[i] = i+1; // 0~44 +1 --> 1~45
int temp = 0; // 두 값을 바꾸는데 사용할 임시변수
int j = 0; //임의의 값을 얻어 저장할 변수
// 배열에 저장된 값이 잘섞이도록 충분히 큰 반복횟수 1000 지정
// 배열의 첫번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다.
for(int i=0; i<1000; i++) {
j = (int)(Math.random()*45); //0~44에서 임의의 값
//ball[0]과 ball[j]의 값을 서로 바꾼다
temp = ball[0];
ball[0] = ball[j];
ball[j] = temp;
}
//배열 ball의 앞에서부터 5개
for (int i=0; i<=5; i++)
System.out.print(ball[i]+" ");
}
}
아래 명령어를 맥 터미널에서 실행시킵니다. 오라클 11g 이미지 중 하나인데 첫 번째 이미지가 안되는 분은 아래 다른 것을 사용해보세요.
docker pull wnameless/oracle-xe-11g
docker pull deepdiver/oracle-xe-11g
* 어떤 이미지를 사용했는지 확인하기
docker ps : 어떤 이미지를 사용했는지 확인 가능
설치된 컨테이너를 실행시켜줍니다.
docker run -d -p 8080:8080 -p 1521:1521 wnameless/oracle-xe-11g
-d : 백그라운드에서 컨테이너를 실행시키기 위한 옵션 -p : 호스트의 포트를 외부 노출시키는 옵션으로 localhost:1521을 오라클 도커 컨테이너의 포트 1521과 연결시킨다는 의미
뭔가 잘못했거나 설치중에 재부팅했거나 ...어쨌건 꼬여서 지워야할 때
docker rmi jaspeen/oracle-xe-11g
(제가 사용했던 이미지는 jaspeen이고 deepdiver나 wnameless를 이용하셨다면 그 자리에 그 이름)
터미널에서 SQL 실행
이 부분은 다른 블로그에도 잘 나와있는 부분입니다. 다시 도커에 로그인한 후 온라인에서 설치할 오라클버전의 이미지를 연결하여 설치를 진행, docker exec -it oracle11g sqlplus 로 sql을 실행시킨 후 기본 계정(system)의 user-name과 password를 지정하면 됩니다.
오라클 SQL Developer 설치 후 실행 (여기서도 오라클 계정 로그인이 필요합니다.)
1. 다음 중 사용자에게 부여한 객체 권한을 객체 소유자로부터 철회하기 위한 명령어는? (예: madang이라는 사용자가 book 테이블에 select 권한을 철회한다)
1) revoke 2) grant 3) drop role 4) delete authority
>> DB에 대한 관리자, 사용자 계정을 이해하고 데이터베이스 사용규칙에 따라 계정별 권한 설정 적용 가능 여부 확인
답 : 1
2. 아래 그림과 같은 뷰에 bookprice라는 속성을 추가시켜 뷰를 수정하기 위한 명령어는?
뷰 Vorders
ORDERID
CUSTID
NAME
BOOKID
BOOKNAME
SALEPRICE
ORDERDATE
1
1
박지성
1
축구의 역사
6000
14/07/01
6
1
박지성
2
축구아는 여자
12000
14/07/07
2
1
박지성
3
축구의 이해
21000
14/07/03
3
2
김연아
5
피겨 교본
8000
14/07/03
1) drop view 2) alter view 3) create view 4) create or replace view
>> 물리 데이터베이스 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부 검사가 가능한 지 확인한다.
답 : 2
3. 인덱스 ix_book 을 재생성하는 SQL문장을 작성하시오.
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS (Data Base Management System)에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.
alter index ix_book rebuild;
4. 아래의 SQL 구문은 도서를 주문하지 않은 고객의 이름을 보이기 위한 MS-SQL 구문이다. 오라클에 사용하기 위해서는 EXCEPT 키워드를 바꿔야 한다. 다음 중 무엇으로 바꿔야 하나?
SELECT name
FROM Customer
EXCEPT
SELECT name
FROM Customer
WHERE custid IN (SELECT custid
FROM Orders);
1) without 2) intersect 3) union 4) minus
>> 다양한 DBMS 의 응용 SQL을 이해하고, 각 시스템에 맞는 응용 SQL을 작성할 수 있는지 확인한다.
답 : 4
5. 아래 그림 3개의 릴레이션이 나타낸다. 여기에 속도가 겁나 빠르다고 알려진 UNIQUE INDEX를 걸어보려고 한다. 다음 중 UNIQUE INDEX를 걸기에 적합하지 않은 속성은?
1) O의 ORDERID 2) O의CUSTID 3) C의 CUSTID 4) B의 BOOKID 5) 모두 괜찮아 보인다.
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS(Data Base Management System)에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.
답 : 2
6. 아래 그림은 릴레이션의 관계를 나타낸다. Orders 릴레이션 있는 CUSTID 와 BOOKID는 BOOK 릴레이션과 Customer 릴레이션의 기본키(primary key)를 참조(reference)하여 무결성을 보장하기 위해 만들어졌다. 이와 같은 키(key)를 무엇이라고 하는가?
1) 슈퍼키 2) 외래키 3) 후보키 4) 대체키
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS(Data Base Management System)에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.
답 : 2
7. 아래 그림과 같이 3개의 테이블이 있다. 외부 조인을 사용하여 아래 질문의 답을 구하기 위한 SQL 문을 작성하시오.
도서를 구매하지 않은 고객을 포함하여 고객의 이름과 고객이 주문한 도서의 판매가격을 구하시오.
SQL 문 ->
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 처리하기 위한 DML을 작성할 수 있고 오브젝트를 활용하여 구하고자하는 레코드를 산출할 수 있는지 확인한다.
SELECT Customer.name, saleprice FROM Customer LEFT OUTER JOIN Orders ON Customer.custid = Orders.custid;
8. 위의 테이블에 집합Group 연산과 집계연산을 활용하여, 다음의 질문에 답을 구하기 위한 SQL문을 작성하여라.
판매가격(saleprice)이 8000원 이상인 도서를 2권이상 구매한 고객의 고객아이디와 도서수량을 구하여라.
SQL 문 ->
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 처리하기 위한 DML을 작성할 수 있고 오브젝트를 활용하여 구하고자하는 레코드를 산출할 수 있는 지 확인한다.
SELECT custid, COUNT(*) AS 도서수량 FROM Orders WHERE saleprice >= 8000 GROUP BY custid HAVING COUNT(*) >=2;
9. 다음 인덱스 사용을 중지하는 SQL 문장은? 1) ALTER INDEX IDX_EMP_ENAME MONITORING USAGE; 2) ALTER INDEX IDX_EMP_ENAME NOMONITORING USAGE; 3) ALTERINDEXIDX_EMP_ENAME VISIBLE; 4) ALTERINDEXIDX_EMP_ENAME INVISIBLE;
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. 답 : 4
10. 어떤 테이블이 있다. 속성 중에는 '사람이름'들이 있다. 가나다 순으로 정렬해서 보고 싶다. 그런데 sql 문장에서 정렬을 하기 위해서 쓰이는 order by 구문은 속도가 무지 느리다고 한다. 다행이도 '사람이름' 속성에 인덱스가 걸려있다고 한다. order by 구문을 쓰지않고 정렬하는 방법을 SQL 문장의 예시와 함께 간략히 설명을 기술하시오.
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다.답 :SELECT /*+ index (emp idx_emp_sal) */ ename FROM emp WHERE ename >'0';
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다. 답: 2
출처 ; 갓대희님 https://goddaehee.tistory.com/99
12. 아래의 그림을 간략하게 설명해보시오.
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다.답 : PL/SQL 블록의 구문이 입력되면, 처리 시 PL/SQL 엔진과 데이터베이스 엔진에서 각각 구분하여 처리한다.
13. 다음 중 SQL 구문 밖의 SQL 영역에서 사용하기 위한 변수를 선언한 것은 무엇인가?
1) VARIABLE v_temp NUMBER; 2) v_temp VARCHAR2(20); 3) TYPE r_type IS RECORD (...); v_temp r_type; 4) v_temp pl_emp%ROWTYPE;
>> [절차형 SQL 작성하기] 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다.답 :1
14. 다음 중 PL/SQL 연산자와 그 설명으로 올바른 것은?
1) || - 논리값을 OR 하는 연산이다. 둘 중에 하나라도 참이면 결과값이 참이다. 2) ^ - 제곱 연산을 나타낸다. pow()메소드와 역할이 같다. 3) := - 대입, 배정, 할당 연산으로 우변 항의 값을 좌변 항에 넣는 역할을 한다. 4) <> - 논리 연산자로서 비교값이 NULL과 같지 않을 때 결과값이 참이다.
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. PL/SQL 블록에서는 모든 SQL 연산자를 사용할 수 있으며, 연산자 우선순위는 다음과 같다. (아래 사진 참조)
답 : 3 (:=은 할당)
출처 : https://thebook.io/006696/part02/ch08/02/03/
15. 아래 PL/SQL 의 제어문에 대한 설명과 거리가 먼 것은?
DECLARE
no1 NUMBER :=0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(no1);
no1 := no1 + 1;
EXIT WHEN no1>5;
END LOOP;
END;
/
1) Java언어의 do~while문과 동일한 특징을 가진다. 2) 반복 횟수를 모를 경우 사용된다. 3) 조건에 따른 분기(branch) 문으로서, 비슷한 성질의 for문이 있다. 4) no1>5 구문은 종료 조건을 나타낸다.
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다.답: 3
16. 미리 정의되어 있는 오라클 예외들 중 예외명 : DUP_VAL_ON_INDEX 는 어떤 경우에 발생되는가?
1) 문자를 숫자로 변환 시 실패했을 때 2) select 문이 두 건이상의 행을 리턴했을 때 3) 잘못된 커서 조작이 실행될 때 4) 유일 인덱스에 중복 값을 입력했을 경우
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. 답: 4
17. 아래 그림에서 &id에 대한 설명으로 적합한 것은?
SET serveroutput ON; -- 결과값을 화면에 출력하기 위해서 사용합니다.
DECLARE
v_empid employees.employee_id%TYPE;
v_salary employees.salary%TYPE;
BEGIN
SELECT empoyee_id, salary INTO v_empid, v_salary
FROM employees
WHERE employee_id = &id;
DBMS_OUTPUT.PUT_LINE(v_empid ||' == '||v_salary);
END;
/
1) id 변수의 주소(address) 값을 의미한다. 2) 단지 사용자로부터 값을 입력받는 역할을 한다. 3) 비 PL/SQL 변수를 바인드한다. 4) 프로시저의 매개변수로서 중개역할을 한다.
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다.답: 2
18. 아래 그림과 같이 up_sal 이라는 프로시저를 작성하였다. 10라인에서 이 프로시저를 사용하기 위한 코드를 작성하고자 한다. 알맞은 것은?
CREATE OR REPLACE PROCEDURE up_sal
(vempid employees.employee_id%TYPE)
IS
BEGIN
UPDATE employees SET salary =5000
WHERE employee_id=vempid;
END;
/
SELECT employee_id, salary FROM employees
WHERE employee_id=206;
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다.답: 3
19. 다음과 같은 상황에서 필요한 기능은 무엇인가?
각종 센서 정보값(센서ID, 온도, 습도, 미세먼지, 현재시간)을 저장하는 <센서 정보> 테이블이 있다. 센서로부터 값이 수집될 때마다 이 테이블은 업데이트 쿼리를 실행한다. 값을 갱신한다는 뜻이다. 문제는 값이 갱신되어서 이력이 없다는 것이다. 그래서 <센서 정보 이력> 테이블을 만들어서, <센서 정보> 테이블에 업데이트 쿼리를 수행할 때마다, 자동으로 <센서 정보 이력> 테이블에 값을 입력시켜 누적 시키고자 한다.
1) trigger 2) sequence 3) package 4) function
>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.답: 1
20. PL/SQL 의 프로시저와 함수의 mode에 대한 설명으로 알맞지 않은 것은?
1) IN 모드 : 사용자 --> 프로시저, 함수로 전달 입력 2) OUT 모드: 프로시저, 함수 --> 호출환경(SQL 클라이어트)로 출력 3) IN OUT 모드: 사용자로부터 입력, 호출환경(SQL 클라이어트)로 출력 모두 가능 4) NOT IN OUT 모드 : 사용자 입력, 호출환경(SQL 클라이어트)로 출력 모두 불가, 프로시저, 함수 내부 출력 가능
>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다.답: 4
답 : INSERT, DELETE, UPDATE DML : data manipulation language ( 조작어 ) : select, insert, update, delete DDL : data definition language ( 정의어 ) : create, alter, drop, rename, truncate - 데이터구조와 관련 DCL : data control language ( 제어어 ) : grant, revoke - db접근사용권한 TCL : transaction control language : commit, rollback, savepoint - 논리적 작업의 단위를 묶어서 DML에 의해 조작된 결과를작업단위(트랜젝션) 별로 제어하는 명령어
다음 그림과 같이 사원 (emp) 테이블과 부서 (dept) 테이블, 데이터를 참고하여 제시된 문제에 답하시오.
학과 (dept)
deptno
dname
101
경영학과
102
컴퓨터공학과
103
영문학과
학생 (student)
studno
name
grade
deptno
profno
101
김기현
1
101
1001
102
김민영
2
101
1003
103
김정환
3
101
1001
104
김준태
4
101
1003
105
김지용
1
102
1002
106
김진
2
102
1002
107
김찬권
3
102
1002
108
김옥규
1
103
1004
109
박원영
2
103
1006
110
박의종
3
103
1004
교수 (professor)
profno
name
deptno
position
pay
1001
홍길동
101
정교수
450
1002
김연아
102
정교수
400
1003
박지성
101
부교수
350
1004
김태근
103
정교수
410
1005
서찬수
101
전임강사
250
1006
김수현
103
부교수
350
1007
정동진
102
전임강사
320
1008
임진영
103
전임강사
200
2. dept (학과) 테이블을 다음과 같이 생성하기 위한 쿼리를 작성하라. deptno 고정길이 문자 3으로 지정하고 기본 키로 지정, dname 가변길이 문자 20으로 지정하고 not null 제약조건을 설정한다.
select *
from student s, dept d
where s.deptno = d.deptno;
5. student (학생) 테이블의 deptno는 현재 dept (학과) 테이블의 deptno 를 참조하고 있다. student(학생) 테이블의 studno가 110인 사람의 deptno를 104로 수정을 해야한다면 수정을 할 수 없다. 그 이유는 무엇이며 꼭 수정해야한다면 어떻게 해야할 지 서술하시오. (쿼리 작성이 아닌 해결방법만 서술하시오)
조인을 이용하여 데이터를 조회하는 DML 작성 여부
>> 학생테이블에는 deptno 중 104가 없기 때문에 참조할 수 없다. 꼭 104로 수정하려면 학과테이블에 deptno 가 104인 데이터가 추가되어야 한다.
6. professor(교수) 테이블에서 그룹함수를 사용하여 deptno별로 pay의 총합을 출력하는 쿼리를 작성하시오 (출력되는 칼럼은 deptno와 pay만 있으면 됨)
행을 조회하는 DML명령문 작성 여부
select deptno, sum(pay)
from professor
group by deptno;
7. student 테이블에서 grade별로 학생수에 대한 소계값을 구해야 한다면 어떤 함수를 사용해야 하는가?
행을 조회하는 DML명령문 작성 여부
>> rollup 이나 cube -rollup : group by 절에 의해 그룹지어진 집합결과에 대해서 상세한 정보를 반환하는 기능을 수행 select절에서 선택된 데이터와 그 데이터의 총계를 구할 수 있다 - cube : 결합 가능한 모든 값에 대하여 다차원 집계를 생성. 내부적으로는 Grouping Columns의 순서를 바꿔어서 또 한 번의 Query를 추가 수행해야 한다. 뿐만 아니라 Grand Total은 양쪽의 Query 에서 모두 생성이 되므로 한 번의 Query에서는 제거 되어야만 하므로 ROLLUP에 비해 시스템의 연산 대상이 많다.
8. 그룹함수는 where 절에서 비교할 수 없다. 그렇다면 그룹함수는 어떻게 조건을 비교해야 하는가?
행을 조회하는 DML명령문 작성 여부 >> having 사용
9. 괄호 안에 들어갈 명령문을 완성하시오.
DML이 일어나면 트랜잭션의 완료와 취소를 위한 DCL명령문이 필요하다. 데이터의 변경사항을 데이터베이스에 영구히 기록시키는 것을 ( )이라고 하며, 원래 상태로 돌리는 것을 ( )이라고 한다.
10. 테이블 조회시에 하드디스크나 데이터버퍼캐시에 접근하기 이전에 제약조건이나, 해당테이블의 존재 유무 등을 파악하기 위해 참고하는 것을 데이터 딕셔너리라고 한다. dept(학생) 테이블의 데이터 딕셔너리를 조회하는 쿼리를 작성하시오. (단 select절의 칼럼은 편의상 * 으로 표시한다.)
데이터 사전을 조회하는 명령문을 작성할 수 있어야 한다.
select *
from user_tables
where table_name = 'dept';
11. student (학생) 테이블에서 grade별로 학생수에 대한 소계값을 구하기 위해서는 복수행함수를 사용하면 쉽게 구할 수 있다. 복수행 함수를 사용하지 않고 소계값을 구하기 위해서는 여러개의 select문을 합치는 UNION을 사용하면 된다. UNION과 UNION ALL에 대한 차이는 무엇인가?
집합연산자에 대한 이해가 있어야 한다.
>> select절을 합치는 키워드이며 UNION은 중복된 값을 배제하고 UNION ALL은 모든 결과를 합친다. (UNION과 UNION ALL은 두 개의 select절을 합친다는 면에서는 동일하나, UNION은 중복된 값을 배제하고 Order by를 해준다는 면에서 UNION ALL 과 차이가 있다. 두 개의 집합을 합치는 것이 목적이라면 UNION을 사용하는 것보다 UNION ALL을 사용하는 것이 바람직하다. 그 이유는 중복된 값을 배제한다던지 정렬을 해주는 추가 연산이 들어가지 않기 때문이다.)
12. 학생 전화번호의 지역번호가 '02'이면 '서울', '051'이면 '부산', '052'이면 '울산', '053'이면 '대구', 나머지는 '기타'로 출력하여라.
name
userid
tel
전인하
jun123
051) 781-2158
이동운
Dals
055) 426-1752
박미경
anse1414
055) 261-8947
김영균
mandu
051) 824-9637
박동진
Ping2
051) 742-6384
김진영
simply
055) 419-6328
지은경
Gomo00
055) 418-9627
오유석
yousuk
051) 724-9618
하나리
hanal
055) 296-3784
CASE WHEN THEN 또는 DECODE를 이용한 DML을 작성할 수 있어야 한다
select name, tel,
case(substr(tel,1,instr(tel,')')-1)) when '02' then '서울'
when '031' then '경기'
when '051' then '부산'
when '052' then '울산'
when '055' then '경남'
else '기타'
from student
where deptno=101;
--decode
select name, tel,
decode((substr(tel,1,instr(tel,')'-1)), '02', '서울',
'031','경기',
'051','부산'
'052','울산'
'055','경남','기타') "지역명"
from student
where deptno=101;
13. 사용자 아이디에서 문자열의 길이가 7 이상인 학생의 이름과 사용자 아이디를 출력하여라.
where절과 단일행 함수를 활용한 DML명령문을 작성할 수 있어야 한다.
select name, userid
from student
where length(userid)>=7;
커널 : 컴퓨터 운영체계의 가장 중요한 핵심으로써 운영체계의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공한다. 커널에는 종료된 입출력연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 스케줄러, 그리고 스케줄이 끝나면 실제로 각 프로세스들에게 컴퓨터의 사용권을 부여하는 수퍼바이저(supervisor) 등이 포함된다. 또한 메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 메모리관리자를 가지고 있다. 커널의 서비스는 운영체계의 다른 부분이나, 흔히 시스템 호출이라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다.
셸(shell) : 셸은 운영체계의 가장 바깥부분에 위치하고 있으면서, 사용자 명령어에 대한 처리를 담당. 커널과 대비.
인터페이스 : 사물과 사물 사이 또는 사물과 인간 사이의 경계에서, 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜
4. 리눅스 기본 필수 명령어 중, 해당 디렉터리에 있는 파일의 목록(list)을 나열하는 것은? 2
1) dir 2) ls 3) cd 4) pwd 5) cat
CLI (Command Line Interface)환경에서 운영체제의 기본명령어 확인하기.
5. 다음 중 GUI (Graphics User Interface)가 아닌 CLI (Command Line Interface)에 해당하는 것은? 1
1) Windows10의 cmd 2) Mac의 시에라 finder 3) Android의 위젯 4) 우분투 리눅스의 X윈도우 5) 애플워치의 컴플리케이션
애플워치의 컴플리케이션 : 시계 내에 시간(시, 분, 초)과 날짜(요일, 날짜) 외에 다양한 기능이 더해진 시계
7. 다음의 내용을 모두 포함하는 데이터베이스를 ER-다이어그램으로 설계하시오. IE표기법으로 나타내시오.
1) 가족과 직원이라는 개체가 있습니다. 2) 직원에는 직원번호, 이름, 직책이라는 속성들이 있으며 직원번호로 직원을 식별 가능합니다. 3) 직원은 부양할 가족이 있을 수 있습니다. 4) 가족은 이름과 관계의 정보를 가지고 이름이 식별자(부분키) 입니다.
해설>>
8. 아래는 java 환경에서 jdbc 드라이버를 이용하여 데이터베이스를 연동하는 예이다. 다음 설명 중 틀린 것은? 1
//booklist.java
import java.sql.Connection;
public class booklist{
Connection con;
public booklist(){
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
/* 11g express edition은 orcl 대신 XE를 입력한다. */
String userid="madang";
String pwd = "madang";
try { /* 드라이버를 찾는 과정 */
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 로드 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try { /* 데이터베이스를 연결하는 과정 */
System.out.println("데이터베이스 연결 준비 ...");
con = DriverManager.getConenction(url, userid, pwd);
System.out.println("데이터베이스 연결 성공");
} catch (SQLException e) {
e.printStackTrace();
}
}
1) DB연결 문자열의 localhost는 웹서버 ip를 의미한다. 2) Class.forName() 메소드는 jdbc.jar의 클래스를 임포트시킨다. 3) DB연결 문자열의 마지막 요소는, 예를 들어 orcl 혹은 xe는 db의 sid이다. 4) DB연결 메소드의 파라미터는 DB연결문자열, 오라클 사용자, 비밀번호 이렇게 총 3가지이다. 5) ClassNotFoundException은 jar파일 패키지 안에 클래스가 없을 시 발생하는 예외이다.
localhost는 컴퓨터 네트워크에서 사용하는 루프백 호스트명으로, 자신의 컴퓨터를 의미한다. IPv4에서의 IP 주소는 127.0.0.1이며, IPv6에서는::1로 변환된다. 로컬 컴퓨터를 원격 컴퓨터인 것처럼 통신할 수 있어 테스트 목적으로 주로 사용된다. / SID :기호 식별자 ① segment identifier 세그먼트 식별자 ② symbolic instruction debugger 기호 명령어 디버거.
계층(Tier) : 컴포넌트들의 물리적인 분리 / 층(Layer) : 컴포넌트들의 논리적인 분리 3-Tier에서 각 계층은 물리적으로도 독립적이며 각 계층의 변경이 다른 계층에 의존하지 않는다.
1. 프레젠테이션(클라이언트) 계층 : 응용 프로그램의 최상위로 서로 다른 층에 있는 데이터 등과 커뮤니케이션을 한다. - 사용자 인터페이스를 지원한다. (인터넷 브라우저의 정적인 데이터를 제공한다.) - 이 계층은 GUI, 또는 front-end도 불린다. - 비즈니스로직이나 데이터관리코드를 포함해서는 안된다. - 주로 웹서버를 뜻한다(물리적 : WEB서버)
ex) HTML, javascript, CSS, image
2. 애플리케이션 계층 : 비즈니스 로직 계층 또는 트랜잭션 계층이라고도 하는데, 비즈니스 로직은 워크스테이션으로부터의 클라이언트 요청에 대해 마치 서버처럼 행동한다. 차례로 어떤 데이터가 필요한지를 결정하고, 메인프레임 컴퓨터 상에 위치하고 있을 세 번째 계층의 프로그램에 대해서는 마치 클라이언트처럼 행동한다.
- 정보처리의 규칙을 가지고 있다.(동적인 데이터를 제공한다) - middleware 또는 back-end로 불린다. - 프레젠테이션코드나 데이터관리 코드를 포함해서는 안된다. -주로 어플리케이션 서버를 뜻한다(물리적 : WAS서버)
ex) Java EE, ASP.NET, PHP
3. 데이터 계층 : 데이터베이스와 그것에 액세스해서 읽거나 쓰는 것을 관리하는 프로그램을 포함한다. 애플리케이션의 조직은 이것보다 더욱 복잡해질 수 있지만, 3계층 관점은 대규모 프로그램에서 일부분에 관해 생각하기에 편리한 방법이다.
-데이터베이스를 주로 뜻한다. -DB 또는 File System를 접근 및 관리한다. -back-end라고도 불린다. -주로 DB서버를 뜻한다(물리적 : DB서버)
ex) MySQL DB, Oracle DB
3계층구조를 사용하면 각 계층별로 웹디자이너, 소프트웨어엔지니어, DB관리자가 역할분담을 하여 일을 효율적으로 할 수 있다. 회사 규모 및 사용자의 증가에 따라서 1,2,3계층 구조를 고려해야 한다.(물론 비용은 3계층으로 갈수록 많이 든다.)
1) listen - 서버가 클라이언트와의 연결을 대기하는 것 2) connection - 서버와 클라이언트가 연결되는 것 3) request - 클라이언트가 서버에게 요청하는 것 4) response - 서버가 클라이언트에게 응답하는 것 5) route - 여러 클라이언트의 요청을 서버에서 순서대로 처리하는 것
..
15. 신뢰성이 없는 단순한 구조로 전송이 제대로 이루어 졌는지 확인하지 않기 때문에 응답속도가 빠른 실시간 스트리밍 등에 사용하기 위한 통신 프로토콜로 동영상 스트리밍 분야나, VoIP, mVoIP에서 사용하며 온라인 게임의 서버-클라리언트 통신에 주로 사용되는 것은 무엇인가?
인터넷을 통해 통신을 수행하는 개체는 크게 종단 시스템과 라우터로 나눌 수 있다. 종단 시스템(end-system)은 최종 사용자(end-user)를 위한 애플리케이션을 수행하는 주체가 되며, 인터넷에 연결된 PC, 워크스테이션, PDA, 휴대폰 등이 여기에 속한다. 라우터(router)는 종단 시스템이 속한 네트워크와 다른 네트워크를 연결함으로써 서로 다른 네트워크에 속한 종단 시스템끼리 상호 데이터를 교환할 수 있도록 하는 장비다. 종단 시스템과 라우터간, 라우터와 라우터간, 그리고 종단 시스템과 종단 시스템간 통신을 수행하기 위해서는 정해진 절차와 방법을 따라야 하는데 이를 프로토콜(protocol)이라 부른다. 1~4는 모두 상호 약속한 프로토콜을 이용하여 통신을 수행한다.
인터넷에서 사용하는 핵심적인 프로토콜은 TCP와 IP로, 이를 포함한 각종 프로토콜을 총칭하여 TCP/IP 프로토콜이라 부른다. TCP/IP 프로토콜은 일반적으로 운영체제에서 그 구현을 제공하여, 일반 애플리케이션은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용하여 통신을 수행하게 된다.
애플리케이션간 통신을 수행하기 위해서는 다양한 요구 조건을 만족시켜야 한다. 이러한 요구 조건의 예로는 통신할 대상을 지정하는 상호 약속된 방법, 전송 오류 확인 기능, 오류 발생 시 재전송 기능, 데이터의 순서 관계 유지 등을 들 수 있다. 일반적으로 이와 같은 기능은 프로토콜 수준에서 제공한다. 일반적으로 프로토콜은 기능별로 나누어 계층적으로 구현하며, TCP/IP 프로토콜도 이와 같은 구조를 따른다.
2-1. 네트워크 액세스 계층
네트워크 액세스 계층(network access layer)은 물리적 네트워크를 통한 실제적인 데이터 전송을 담당한다. 구성 요소로는 물리적인 신호를 처리하여 데이터를 송수신하는 네트워크 하드웨어 그리고 운영체제가 제공하는 디바이스 드라이버가 있다. 네트워크 액세스 계층에서는 하드웨어적으로 정의된 물리 주소(physical address)를 사용하여 통신을 수행하는데, 이러한 물리 주소는 네트워크 방식에 따라 서로 다르며, 일반적으로 상호 호환되지 않는다.
2-2.인터넷 계층
인터넷 계층(Internet layer)은 네트워크 액세스 계층의 도움을 받아, 전송 계층이 내려 보낸 데이터를 종단 시스템까지 전달하는 역할을 한다. 네트워크 액세스 계층과 마찬가지로 여기서도 주소를 지정하는 방법이 필요하다. 여기서는 소프트웨어적으로 정의된 논리 주소를 사용하느데 이를 IP주소(Internet Protocol Address)라고 부른다. IP주소는 네트워크 액세스 계층에서 사용하는 물리 주소와는 무관하게 정의하며, 전세계적으로 유일성이 보장된다. 따라서 서로 다른 기술에 기반한 네트워크를 연결하여 인터-네트워크를 구성하는 데 핵심적인 역할을 한다. IP주소는 통신에 참여하는 종단 시스템을 유일하게 지정할 수 있는 방법을 제공하지만, 실제 데이터를 전송하려면 전송 경로를 알아야 한다. 따라서 전송 경로를 알아내기 위해 라우팅 작업이 필요하게 된다. 라우팅(routing)이란 목적지까지 데이터를 전달하기 위한 일련의 작업을 가리키는 용어로, 라우팅을 위한 정보를 획득하는 작업과 라우팅 정보를 기초로 실제 데이터를 전달(forward)하는 작업을 포함한다. 라우팅을 담당하는 전용 컴퓨터를 라우터(router)라 부르며, 라우터를 통해 다양한 종류의 네트워크가 연결되어 통신을 수행할 수 있다.
2-3. 전송 계층
전송 계층(transport layer)은 최종적인 통신 목적지를 지정하고, 오류 없이 데이터를 전송하는 역할을 한다. 인터넷 계층이 담당하는 역할은 IP주소와 라우팅을 이요하여 목적지 종단 시스템에 데이터가 도달할 수 있도록 하는 것이다. 그러나 통신의 최종 목적지는 컴퓨터가 아닌 해당 컴퓨터에서 실행되고 있는 프로그렘(프로세스)이다. 따라서 전송 계층에서는 해당 프로세스를 지정하는 일종의 주소를 사용하며, 이를 포트 번호(port number)라 부른다.
인터넷 계층의 IP가 제공하는 전송 서비스는 최선을 다하지만(best-effort), 신뢰성은 없다는(unreliable) 특징이 있다. 즉, 데이터에 문제가 생기면 목적지에 도달하지 못하는 상황이 발생할 수 있으며, 목적지에 도달하였더라도 실제 데이터의 내용이 손상됐을 가능성도 있게 된다. 전송 계층에서는 이러한 데이터 손실 또는 손상을 검출하여 잘못된 데이터가 목적지 프로세스에 전달되는 것을 방지한다.
TCP/IP 프로토콜에서 전송 계층에 해당하는 프로토콜로는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)이 있다.
2-4. 애플리케이션 계층
애플리케이션 계층(application layer)은 전송 계층을 기반으로 한 다수의 프로토콜(Telnet, FTP, HTTP, SMTP, ...)과 이 프로토콜을 이용하는 애플리케이션을 포괄한다.
3. 패킷 전송 원리
애플리케이션에서 보내는 데이터를 목적지까지 전송하기 위해서는 각각의 프로토콜에서 정의한 제어 정보(IP주소, 포트번호, 오류 체크 코드, ...)가 필요하다. 제어 정보는 위치에 따라, 앞쪽에 붙는 헤더(header)와 뒤쪽에 붙는 트레일러(trailer)로 나눌 수 있다. 이러한 제어 정보가 결합된 형태로 실제 데이터가 전송되는데 이를 패킷(packet)이라 부른다. 송신측에서 보낸 데이터는 TCP/IP/이더넷 계층을 지나면서 헤더 또를 트레일러 형태로 제어 정보가 덧붙여진 패킷이 생성된다. 이 패킷이 수신측에 도달하면 이더넷/IP/TCP 계층을 지나면서 차례대로 헤더 또는 트레일러가 제거되고 최종적으로 송신측이 보낸 데이터를 애플리케이션이 받게 된다.
패킷 전송 형태 (송신측, 수신측)
각 계층은 마치 동일한 위치의 상대편 계층과 통신을 하는 것으로 간주할 수 있다. 이로 인해 애플리케이션 프로그래머는 주고 받을 데이터에만 집중하여 구현하면 되고, 나머지 부분은 운영체제가 제공하는 프로토콜이 처리하는 것이다.
패킷 전송 형태 - 계층별
TCP/IP 계층간 통신
IP 주소, 포트 번호
TCP/IP 프로토콜을 이용하여 통신할 때는 IP주소와 포트 번호를 사용한다. IP주소는 32비트 값으로 일반적으로 8비트 단위로 구분하여 각각 10진수로 표기한다.(127.0.0.1)
폐쇄된 네트워크나 IP를 공유하는 경우가 아니라면 IP주소는 전세계적으로 유일한 값을 가진다. 라우터가 라우팅을 할 때는 IP헤더에 포함된 수신자 IP주소를 이용하며, 데이터를 받는 쪽에서 답장을 보내고자 할 때도 역시 IP헤더에 포함된 송신자 IP주소를 이용한다.
IP주소는 인터넷에 존재하는 호스트(종단 시스템, 라우터)를 유일하게 구별할 수 있지만 통신의 최종 주체인 프로세스를 식별하지는 못한다. 포트 번호는 각 프로세스를 구별하는 식별자다. 한 프로세스가 두 개 이상의 포트 번호를 사용하는 경우가 종종 있으며, 한 포트 번호를 두 개 이상의 프로세스가 사용하는 것도 가능하다. 따라서 포트 번호는 프로세스를 구별하는 식별자라기보다는 통신의 종착지를 나타내는 식별자로 보는 것이 바람직하다.
1) 비동기 전송 방식이다. 2) 데이터의 형식은 XML 뿐만아니라 JSON도 지원한다. 3) 요청함수 구현 시 응답받을 콜백 함수의 참조를 지정한다. 4) 클라이언트 - 서버 사이의 통신 외에 서버내부 간의 통신에도 사용한다. 5) javascript로만 구현된다.
* 비동기 통신 방식을 이해하고 요청과 응답을 처리할 수 있으며, 콜백의 개념을 알고 있는 지 확인한다.
AJAX : JavaScript의 라이브러리중 하나. Asynchronous Javascript And Xml(비동기식 자바스크립트와 xml)의 약자. 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법. Ajax를 한마디로 정의하자면 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술.
17. 인터넷 프로토콜로 사용되는 TCP/IP 의 계층화 모델 중 네트워크 계층에서 사용되는 프로토콜은?3
1) FTP 2) SMTP 3) IP 4) UDP 5) TCP
* 네트워크의 TCP/IP 계층화 모델을 이해하는지 확인
18. http 프로토콜은 OSI 7 계층 중 어느 계층인가?2
1) 데이터링크 계층 2) 응용 계층 3) 트랜스포트 계층 4) 세션 계층 5) 네트워크 계층
* OSI 7 계층의 이해 확인
19. 다음 중 IDE (통합개발환경)이 아닌 것은? 4
1) Visual Studio 2) Eclipse 3) Android Studio 4) SQL Developer 5) X-Code
20. git은 버전관리 패키지로써 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다. 리눅스 우분트 OS에서 CLI 명령어로 git 패키지를 설치하는 명령어를 서술하시오.
1) GRANT CREATE TABLE TO SCOTT 2) GRANT DROP ANY TABLE TO SCOTT 3) GRANT CREATE SESSION TO SCOTT 4) 위 사항 모두 옳다.
2. 데이터베이스 CONNECT 롤에 대한 설명으로 틀린 것은? 4
1) CREATE VIEW 권한을 가지고 있다. 2) CREATE SESSION 권한을 가지고 있다. 3) CREATE SEQUENCE 권한을 가지고 있다. 4) CREATE CLUSTER 권한을 가지고 있다.
오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE이 제공 커넥트 롤 : 접속 권한 리소스 롤 : 객체의 생성 변경 삭제 등 기본 시스템 권한 DBA : 데이터베이스 관리 SYSDBA : 데이터베이스 시작 종료 관리 권한 SYSOPER : SYSDBA + 데이터베이스 생성 권한
3. 다음 중 테이블 스페이스에 대한 설명으로 옳지 않은 것은? 4
1) 테이블 스페이스는 테이블이 저장되는 공간이다. 2) 테이블 스페이스를 나누는 이유는 관리와 퍼포먼스의 향상을 위해서이다. 3) 테이블 스페이스는 만들지 않으면 ORACLE 서버를 설치할 때 자동으로 생성해준다. 4) 테이블 스페이스는 적을수록 좋다.
테이블 스페이스 : 테이블 및 인덱스를 저장해놓은 오라클의 논리적인 공간. 오라클은 물리적인 공간에 저장시킨 후 메모리에 등재시킨다. 실제 물리적인 공간은 데이터파일(DBF)이다. 테이블 스페이스의 관리는 관리자만 가능하다.
[데이터베이스 오브젝트 생성하기]
4. 다음은 주문 테이블 생성 시 custid(고객번호) - NUMBER, NOT NULL 제약조건, 왜래키(NewCustomer.custid, 연쇄삭제) 부분을 설정하는 문장이다. ( ) 안을 채우시오.
FOREIGN KEY (custid) REFERENCES NewCustomer(custid) ON DELETE( )
CASCADE
제약 조건이 설정되면 그 규칙에 따라 데이터 무결성이 보장되는 반면 특정 업무 수행 과정에서는 제약 조건때문에 작업 진행이 안되고, 제약조건을 삭제하자니 데이터 무결성을 잃게 된다. 따라서 제약조건을 DISABLECONSTRAINT로 비활성화시켜 제약 조건을 삭제하지 않고도 제약조건 사용을 잠시 보류할 수 있도록 해 준다. 활성화시킬 때에는 ENABLE CONSTRAINT 로 해제한다.
부모 TABLE과 자식테이블 간의 참조 설정이 되어 있을 때는 부모 테이블의 제약 조건을 비활성화하면서 참조하고 있는 자식테이블의 제약조건까지 같이 비활성화시키는 CASCADE 옵션도 있다. 낱개로 한다면 순서는 자식테이블의 왜래키에 대한 제약조건 비활성화, 부모테이블의 기본키에 대한 제약조건 비활성화로 해제 진행되는데 CASCADE는 한번에 된다는 것.
5. NewBook 테이블에 VARCHAR2(13) 의 자료형을 가진 isbn 속성을 추가하는 DDL문을 작성하시오.
7. 다음은 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰를 만든 것이다. ( ) 에 알맞은 것은? 1
CREATE VIEW vw_Customer
( ) SELECT *
FROM Customer
WHERE address LIKE '%대한민국%';
1) AS 2) ON 3) IN 4) EXISTS
뷰는 실제테이블을 참고로 가상테이블을 제공, 테이블의 데이터를 제한하며 복수의 테이블에서 데이터를 검색하기 위한 객체이다. 뷰를 사용하는 목적은 데이터 접근 제한, 복잡한 쿼리 간소회, 데이터 독립성 확보, 동일데이터를 서로 다른 뷰에게 제공하는 목적이 있다.
[DBSM 설치하기]
8. 오라클을 설치할 때 옳지 않은 것은? 3
1) 오라클은 영어 폴더 밑에 설치한다. 2) 교육용 버전은 XE를 설치한다. 3) 윈도우 계정명은 한글로 되어 있어도 상관없다. 4) 오라클 포트는 8080이기 때문에 톰캣은 8080을 사용하면 안된다.
[데이터베이스 생성하기]
9. 다음 중 데이터베이스 시스템 권한 종류 설명이 서로 맞지 않는 것은? 2
1) CREATE USER - 데이터 베이스 유저 생성 권한 2) CREATE SEQUENCE - 관리자 계정 생성 3) SELECT ANY TABLE - 모든 유저의 테이블 생성 권한 4) CREATE SESSION - 데이터베이스 접속 권한
ORCLE에서는 오라클 내부 system(OS system과는 다른 개념의 oracle DB의 system을 말한다.)권한과 Object권한으로 나뉘어진다. ※시스템 권한 - 데이터베이스 접속, 사용자 생성 및 오브젝트 생성 등의 권한 ※오브젝트 권한 - 해당 오브젝트에 대한 전반적인 작업을 위한 권한
오브젝트 권한은 해당 오브젝트에 특정 SQL을 수행할 수 있게 해주는 권한으로 오브젝트의 소유자는 해당 오브젝트에 대한 모든 권한을 가지게 되며, 자신의 오브젝트에 대한 특정 권한을 다른 유저에게 부여할 수 있습니다. 아래는 테이블 및 뷰에 부여할 수 있는 오브젝트 권한입니다.
[데이터베이스 오브젝트 생성하기]
10. emp 테이블과 동일한 구조의 테이블을 emp3 이름으로 생성하되 테이블 구조만 가져오고 데이터는 가져오지 않도록 하는 쿼리를 완성하시오.
CREATE TABLE ____________ (1)
AS
SELECT * FROM emp
WHERE ______________ ; (2)
1: emp3 2: 1=2
[데이터베이스 생성하기]
11. Password PROFILE 생성하는 명령문이다. 로그인 시도 5회 실패 시 계정을 30일 동안 사용 못하게 하도록 문장 완성을 위해 아래 예에서 적당한 SQL 문을 2개 고르시오. 1 2
package com.lje.fileupload_ex.domain;
import java.util.List;
import lombok.Data;
@Data
public class BoardVO {
private int bno;
private String title;
private String content;
private String writer;
private List<SaveFile> fileList;
// 게시글과 해당하는 파일
}
테이블 만들기
create table file_board(
bno number primary key,
title varchar2(100) not null,
content VARCHAR2(1000) not null,
writer VARCHAR2(50) not null);
create SEQUENCE seq_file_board;
CREATE TABLE save_file(
fno number PRIMARY KEY,
file_name VARCHAR2(200) not null,
bno number REFERENCES file_board(bno));
CREATE SEQUENCE seq_save_file;
Save_file 제약조건 > 왜래키 > 삭제 시 설정 조정한다. 널 설정, 종속삭제 두 가지가 있는데 종속삭제는 bno를 지웠을 때 같이 지워진다.
SaveFile.java
package com.lje.fileupload_ex.domain;
import lombok.Data;
@Data
public class SaveFile {
private int fno;
private int bno;
private String filename;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lje.fileupload_ex.mapper.BoardMapper">
<insert id = "register">
insert into file_board (bno, title, content, writer)
values(seq_file_board.nextval, ${title}, #{content}, #{writer})
</insert>
<select id="get" resultType="com.lje.fileupload_ex.domain.BoardVO">
select * from file_board where bno=#{bno}
</select>
<select id="getList" resultType="com.lje.fileupload_ex.domain.BoardVO">
select * from file_board;
</select>
<update id = "update">
update file_board set title=#{title}, content=#{content}
where bno = #{bno}
</update>
<delete id = "delete">
delete from file_board where bno = #{bno}
</delete>
</mapper>
FileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lje.fileupload_ex.mapper.BoardMapper">
<select id="get" resultType="com.lje.fileupload_ex.domain.SaveFile">
select * from save_file where fno=#{fno}
</select>
<select id="getList" resultType="com.lje.fileupload_ex.domain.SaveFile">
select * from save_file where bno=#{bno}
</select>
<insert id="register">
insert into save_file(fno, filename, bno)
values(seq_save_file.nextval, #{filename}, #{bno})
</insert>
<delete id="delete">
delete from save_file where fno = #{fno}
</delete>
<delete id="deleteList">
delete from save_file where bno = #{bno}
</delete>
</mapper>
FileMapper.java (interface)
package com.lje.fileupload_ex.mapper;
import java.util.List;
import com.lje.fileupload_ex.domain.SaveFile;
public interface FileMapper {
public void register(SaveFile saveFile);
public void delete(int fno);
public SaveFile get(int fno);
public List<SaveFile> getList(int bno);
public void deleteList(int fno);
}
BoardMapper.java (interface)
package com.lje.fileupload_ex.mapper;
import java.util.List;
import com.lje.fileupload_ex.domain.BoardVO;
public interface BoardMapper {
public void register(BoardVO vo);
public void update(BoardVO vo);
public void delete(int bno);
public BoardVO get(int bno);
public List<BoardVO> getList();
}
Service
BoardService.java (interface)
package com.lje.fileupload_ex.service;
import java.util.List;
import com.lje.fileupload_ex.domain.BoardVO;
import com.lje.fileupload_ex.domain.SaveFile;
public interface BoardService {
public void register(BoardVO vo, List<SaveFile> fileList);
public void modify(BoardVO vo);
public void remove(int bno);
public BoardVO read(int bno);
public List<BoardVO> getList();
public void removeFile(int fno);
public void registerFile(List<SaveFile> fileList);
}
>> 애플리케이션 빌드와 배포를 위한 환경 구성 방안 계획 여부 답 :import 문은 다른 패키지에 있는 클래스를 사용할 때 코드의 서두에 선언하는 것으로 컴파일러에게 그 클래스의 경로명을 알려주는 구문입니다.
2. 자신의 컴퓨터에 설치된 java의 경로를 확인하여 JAVA_HOME에 JDK bin 경로를 설정하고 path에 추가하시오.
>> 애플리케이션 빌드와 배포를 위한 환경 구성 방안 계획 여부 답 : 시스템 설정 > 환경변수 > 새로만들기 > 변수명 : JAVA_HOME에 경로: c:\~jdk.1.8.0_201/bin 을 넣고 path > 편집 > %JAVA_HOME% 을 추가한다.
3. 어떤 패키지에 속한 클래스는 import 문 없이도 사용할 수 있는가?
>> 애플리케이션 소스코드 검증 결과 문제가 없는 경우 해당 소스코드를 빌드시스템으로 이관할 수 있는 지의 여부 답 : java.lang 패키지
[애플리케이션 소스 검증하기]
4. 다음 설명에 해당하는 버전도구는 무엇인가?
- 분산저장소 방식으로 로컬저장소와 원격저장소 구조를 가진다. - 원격저장소에서 로컬에 복사(clone)한 순간 개발자 자신만의 로컬저장소에서 생성된다. - 개발 완료한 파일 수정 이후 로컬저장소에 커밋한 이후 다시 원격저장소에 반영(push)하는 방식이다.
1) RCS 2) CVS 3) SVN 4) Git
>> 애플리케이션 버전 도구를 이해하고 활용할 수 있는지 확인한다. 답 : 4
[애플리케이션 배포 환경 구성하기]
5. 패키지에 대한 설명 중 잘못된 것은?
1) package 키워드를 이용하여 패키지를 선언한다. 2) 서로 관련된 클래스와 인터페이스들을 하나의 디렉터리에 묶어 놓은 것이다. 3) 패키지는 컴파일된 클래스 파일들을 저장하는 위치를 지정한다. 4) 자바 JDK는 클래스들을 모두 하나의 패키지에 담아 제공한다.
>> 애플리케이션 실행 환경에 대한 정보를 확인할 수 있는지 확인한다. 답 : 4 자바 JDK는 수많은 클래스들을 제공하는데, 서로 관련 있는 클래스들을 하나의 패키지로 구성하는 식으로 수많은 패키지에 분산 저장하여 제공한다.
[애플리케이션 빌드하기]
[6~8] 다음 물음에 답하라.
6. 다음 클래스를 test 패키지에 속하게 하고자 한다. 빈칸에 적합한 코드를 작성하라.
__________________________________________;
public class TV{
private int size;
public TV(int size) { this.size=size; }
}
>> 애플리케이션 소스코드 검증 결과 문제가 없는 경우 해당 소스코드를 빌드 시스템으로 이관할 수 있는 지 확인한다. 답 : package device;
7. 앞에서 작성한 TV클래스를 활용하는 Home 클래스를 작성한다. Home 클래스를 app 패키지에 저장하고자 할 때 빈칸에 적합한 코드를 작성하라.
__________________________________________;
__________________________________________;
public class Home {
public Home( ) { TV myTv = new TV(65); }
}
>>애플리케이션 소스코드 검증 결과 문제가 없는 경우 해당 소스코드를 빌드 시스템으로 이관할 수 있는 지 확인한다.
답 package app; import device.TV;
8. TV 클래스와 Home 클래스를 컴파일한 TV.class와 Home.class의 경로명은?
>> 애플리케이션 빌드 실행 결과를 확인하여 정상 완료됐는지를 체크할 수 있는 지 여부 확인
답 : TV 클래스를 컴파일한 TV.class파일의 경로명은 프로젝트명/bin/test/TV.class이고, Home 클래스를 컴파일한 Home.class 파일의 경로명은 프로젝트명/bin/app/Home.class 이다. bin 대신 build 사용 가능하다.
[애플리케이션 소스 검증하기]
9. 다음 코드의 실행 결과와 이유를 말하라.
String a = "가나다라";
System.out.println(a=="가나다라");
String b = new String(a);
System.out.println(a==b);
>> 소스코드 검증 도구를 활용하여 애플리케이션에서 사용한 라이브러리, 소스, 로직 등의 오류 여부를 검증할 수 있는 지 확인
[실행결과] true false
[이유] "가나다라" 문자열은 자바 가상 기계의 스트링 리터럴 테이블에 저장되고, String a의 레퍼런스 a는 리터럴 테이블을 가리키므로, "가나다라" 문자열의 레퍼런스와 레퍼런스 a의 값은 일치한다. 그러므로 a=="가나다라"의 비교 연산은 true다. 하지만 new String(a)에 의해 생성되는 객체는 힙에 생성되므로 String b는 힙 영역을 가리킨다. 그러므로 a==b 연산에서 a와 b의 레퍼런스 값은 서로 달라 연산 결과 false가 된다.
[10~11] 다음 코드에 대해 물음에 답하여라.
String a = "Hello";
String b = "Hello";
String c = "Java";
String d = new String("Hello");
String e = new String("Java");
String f = new String("Java");
10. a와 == 연산을 수행하였을 때 true가 되는 문자열을 b~f 중 모두 골라라. b
11. f와 equals( ) 연산을 수행하였을 때 true가 되는 문자열을 a~e 중 모두 골라라. c, e
>>소스코드 검증 도구를 활용하여 애플리케이션에서 사용한 라이브러리, 소스, 로직 등의 오류 여부를 검증할 수 있는 지 확인
equals() : 객체끼리 내용(값)을 비교할 수 있는 메소드 == : 객체의 참조값(주소)을 비교하는 연산자
[애플리케이션 배포하기]
12. Java Project를 자동실행 가능한 형태로 배포하는 방법을 적으시오.
>>이클립스에서 자동 실행 파일형태로 배포하는 방법을 알고 있는지 테스트 답 : 프로젝트에서 우클릭 > export > Runnable JAR File 선택 후 next 버튼 클릭 > 선택한 프로젝트 폴더에 000.jar 를 저장한다.
13. 이클립스에서 만들어진 웹프로젝트를 war로 export하여 톰캣 서버로 전송하여 배포하는 방법을 서술하시오.
>> 이클립스에서 생성된 웹프로젝트를 톰캣 서버에 애플리케이션으로 배포할 수 있는 지 확인
답 : 프로젝트 > export > war File 브라우저를 클릭한 후 ~/tomcat/webApp 선택, 선택된 프로젝트를 war로 배포한 후 tomact/bin/startup 실행 후 압축이 풀렸는지 확인한다.
14. 이클립스에 설정한 톰캣 서버에서 프로젝트 톰캣 서버에 등록된 것을 확인할 수 있는 파일을 적으시오.
>>이클립스에서 생성된 웹프로젝트를 톰캣 서버에 애플리케이션으로 배포한 항목을 확인할 수 있는 지 확인 답 : server.xml
[애플리케이션 소스 검증하기]
15. github에 저장소를 만든 후 eclipse에서 작성한 프로젝트를 upload하는 과정을 서술하시오.
>> 버전관리 도구인 깃 사용법과 깃헙 원격저장소를 생성할 수 있는지, 이클립스와 원격 저장소를 연동해 프로젝트를 공유할 수 있는 지 테스트.
답 1. github에 계정을 생성하고 원격저장소를 생성한다. 2. 이클립스에서 프로젝트를 생성한다. 3. 이클립스에서 githib 연결한다. window > perspective 탭에서 Open perspective > Other > git 선택 > clone a git repository 선택 후 github 저장소 URI와 계정 패스워드를 등록한다. 4. 프로젝트에서 우클릭 > Team > share project를 통해 project를 등록 > 프로젝트 변경 내용을 commit and push 를 선택하여 원격 저장소로 업로드한다.
boolean : 1bit 로 TRUE, FALSE 값을 가진다. char : 2byte 크기로 문자 1개를 저장하는 데이터 타입이다. byte : 1byte 크기로 정수를 저장하는 데이터 타입이다. short : 2byte 크기로 정수를 저장하는 데이터 타입이다. int : 4byte 크기로 정수를 저장하는 데이터 타입이다. long : 8byte 크기로 정수를 저장하는 데이터 타입이다. float : 4byte 크기로 실수를 저장하는 데이터 타입이다. double : 8byte크기로 실수를 저장하는 데이터 타입이다.
3. 유효한 자바 식별자가 아닌 것은? 1,2,4,5
1) class 2) #_of_workers 3) countOfLettersInString 4) 1stLevel 5) person#
* 자바 식별자 명명 규칙
- 첫 번째 글자는 문자이거나 '$', '_'이어야 함 - 두번째 이후의 글자는 숫자, 문자, '$', '_'이어야 함 - 자바의 예약어, 상수 값을 표현하는 단어 true, false, null는 식별자로 사용할 수 없음 - 길이 제한 없음 - 공백은 포함할 수 없음
4. 다음과 같은 문장이 순차적으로 실행되는 경우, 각각의 문장이 실행된 후의 변수의 값을 구하시오.
int x=10, y=2, z=2;
z = ++x /y; 1) x 11 y 2 z 5 x*= y+1; 2) x 33 y 2 z 5 z = ++x + y++; 3) x 34 y 3 z 36
5. 다음의 코드를 컴파일할 때, 오류가 나는 이유는?
public class Test{
public static void main(String[] args) {
int x;
System.out.println(x);
}
}
지역변수 x의 값을 초기화하지 않아서
6. 다음 클래스를 컴파일 한 후 실행결과는?
public class Test{
public static void main(String[] args) {
int[] a = { 1,2,3,4,5,6 };
int i = a.length - 1;
while (i>=0) {
System.out.print(a[i]);
i--;
}
}
}
654321
7. 자바에서 다음 클래스를 컴파일한 후 실행결과는? 3
public class Test{
public static void main(String[] args) {
Spring city = "서울";
Spring country = "";
switch(city) {
case "서울" :
case "부산" : country = "한국";
case "북경" : country = "중국";
case "동경" : country = "일본"; break;
default : country = "대상없음";
}
System.out.println(country);
}
}
1) 컴파일 에러 2) 한국 3) 일본 4) 대상없음
[언어특성 활용하기]
8. 객체를 초기화하는 용도로 사용되는 생성자(Constructor)의 특징으로 잘못된 것은?3
1) 생성자 이름은 클래스의 이름과 동일하다. 2) 클래스 정의 시 생성자를 만들지 않으면 객체가 생성될 때 컴파일러가 자동으로 만든다. 3) 반환 값(return type)을 갖는다. 4) 객체를 생성할 때 자동으로 호출된다.
생성자는 다음과 같은 new 표현식을 통하여 객체의 생성과 함께 실행된다. Example ex = new Example(); 클래스는 초기화를 위하여 생성자(constructor)라는 특별한 코드 블록을 가질 수 있다. 즉, 생성자는 클래스가 new 표현식에 의해 인스턴스화되어 객체를 생성할 때, 객체의 레퍼런스를 생성하기 전에 객체의 초기화를 위해 사용되는 코드의 블록이다.
생성자는 자바 클래스의 멤버가 아니며, 멤버가 아니므로 상속되지 않는다. 따라서, 오버라이딩의 대상이 될 수도 없다. 또한, 일반적인 메소드 호출방법으로 호출할 수 없다. 생성자는 접근 제한 수식어인 public, protected, private 만을 쓸 수 있으며, abstract, final, native, static, strictfp, synchronized 등의 수식어를 사용할 수 없다.
9. 접근 제어자는 클래스와 클래스의 멤버 접근에 대한 접근 정도를 지정할 때 사용한다. 클래스 멤버의 접근지정자 4가지를 나열하라.
public : 공개된 접근 지정자, 모든 클래스에서 접근 가능 protected : 같은 패키지와 상속받은 모든 클래스에서 접근 가능 private : 비공개로 현재 클래스에서만 접근 가능 default : 같은 패키지 내의 모든 클래스에서 접근 가능
10. 다음 코드 설명 중 올바른 것은? 2
public class Test {
public static void exam( ){
int i = 5;
int j = 7;
if(i>20) {
int k = i+j;
}
System.out.println(k);
}
public static void main(String[] args) {
exam();
}
}
1) 지역변수 k는 디폴트 초기화되고 if문 조건이 만족하지 않으므로 0이 출력된다. 2) System.out.println(k); 부분에서 컴파일 오류가 발생한다. 3) exam()을 호출하기 위해서는 객체 생성을 해야한다. 4) 정상적으로 수행되고 결과는 12가 출력된다.
11. 다음은 자바 예약어 (keyword)에 대한 설명이다. (ㄱ)과 (ㄴ)에 들어갈 적절한 예약어는?
클래스 접근 지정자(Modifier)로 (ㄱ) 이 명시되면, 다른 클래스들은 해당 클래스를 상속 받을 수 없다. 메소드의 Modifier로 (ㄱ) 이 지정되면 자식 클래스는 그 메소드를 오버라이딩 할 수 없다. (ㄴ) 메소드가 하나 이상 존재하는 클래스는 클래스 선언부에 (ㄴ) 제어자(Modifier)가 선언되어야 한다. (ㄴ) 메소드가 존재하는 클래스를 상속받는 자식 클래스에서는 해당 (ㄴ) 메소드를 구현하거나 해당 클래스의 선언부에 (ㄴ) 제어자(Modifier)가 명시되어야 한다.
(ㄱ) : final (ㄴ) : abstract
12. 다음 중 자바 인터페이스에 대한 설명 중 틀린 것은 ? 2
1) 인터페이스는 다중상속의 장점인 다양한 계층구조 형성을 지원한다. 2) 인터페이스는 추상 메서드와 구현부가 있는 메소드를 가질 수 있다. 3) 하나의 클래스는 여러 개의 인터페이스를 구현할 수 있다. 4) 인터페이스는 다른 인터페이스를 상속할 수 있다.
인터페이스는 추상클래스와 final 변수로만 이루어진 클래스이며 일반 클래스가 인터페이스를 구현해주어야 상속 가능. 클래스가 상속을 통해 구현하는데 한계가 있는 경우 자바에서 불가능한 다중상속을 흉내내기 위한 도구이다.
인터페이스 특징은 구현된 메소드는 올 수 없고 추상메소드만 정의할 수 있다. 일반 클래스는 여러 인터페이스를 다중 상속할 수 있다 인터페이스 간의 상속에서는 다중상속이 제공된다. 상속을 받은 일반 클래스는 인터페이스의 추상메서드를 모두 재정의해야한다.
13. 다음은 예외 처리를 위한 keyword를 설명한 것이다. 적절하지 않은 것은? 4 1) try : 예외발생 가능성 있는 소스코드 부분이 들어가는 키워드이다. 2) catch : 예외 처리 코드가 들어가는 키워드이다. 3) throws : 메소드가 호출된 곳으로 예외를 던질 때 사용하는 키워드이다. 4) finally : 예외가 발생하지 않으면 실행되지 않는다.
finally는 예외 발생 여부와 별개로 반드시 실행해야 하는 부분이다.
[라이브러리 활용하기]
14. 다음이 설명하는 특징을 가진 인터페이스는? 2
ㄱ. Key와 Value의 매핑으로 관리된다. ㄴ. Key는 중복될 수 없다. ㄷ. Collection 인터페이스를 상속하지는 않는다
1) Set 2) Map 3) List 4) Iterator
Collection : 목록성 데이터를 처리하는 자료구조를 통칭한다. 자료구조는 어떤 정보를 담는 것을 의미하며 하나의 데이터가 아닌 여러 데이터를 담을 때 사용한다. 배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이다. Collection 인터페이스는 java.util 패키지에 선언되어 있으며, 여러 개의 객체를 하나의 객체에 담아 처리할 때 공통적으로 사용되는 여러 메소드를 갖고 있다. add(), addAll(), clear(), contains(), equals(), hashCode() , isEmpty(), iterator(), remove(), toArray() 등이 있다.
15. 다음 코드의 실행 결과가 나타나도록 빈곳에 적당한 코드를 작성하시오. [상속과 오버로딩 이해하기]
class Person{
String name;
int age;
public Person(String name, int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println(name+" "+age);
}
}
class Student extends Person{
String major;
(ㄱ) //생성자 작성
(ㄴ) //show() 함수 오버라이딩
}
public class Test {
public static void main(String[] args){
Person p = new Student("Heycoding", 20, "피아노");
p.show();
}
}
(ㄱ), (ㄴ) 답
public Student(String name, int age, String major) {
super(name, age);
this.major=major;
}
public void show(){
super show();
System.out.println(major+" ");
}
[언어특성 활용하기] 16. java.lang 패키지에 속해 있으며 자바의 최상위 클래스는 무엇인가? >> object
[라이브러리 활용하기]
17. StringBuffer 클래스에 대한 설명 중 잘못된 것은? 2
1) java.lang 패키지에 포함되어 있다. 2) StringBuffer 객체에 저장된 문자열은 변경할 수 없다. 3) StringBuffer의 reverse() 메소드는 실행결과 문자열은 거꾸로 바뀐다. 4) 지정된 문자열로 초기화된 스트링 버퍼를 생성할 수 있다.
* 자바JDK가 제공하는 라이브러리 String 클래스와 StringBuffer 클래스의 특징 비교
스트링 : 변경 불가, 스트링(문자열)을 연결할 때 매시간 새 경우를 만들어서 느리며 많은 메모리 소비, 객체의 equal()메소드 치환하여 2개의 스트링 내용 비교 가능 스트링버퍼 : 객체 생성후 값 변경 가능, 빠르고 적은 메모리 소비, equals()메소드 치환안함. append와 insert를 통해 조작 가능. 객체의 길이는 스트링 길이에 따라 가변적.
[기본문법활용하기]
18. 다음은 StringTokenizer 라이브러리 클래스를 사용한 코드이다. (ㄱ)와 (ㄴ)에 맞는 코드를 작성하고 코드 실행 후 결과를 적으시오.
import java.util.StringTokenizer;
public class Example{
public static void main(String[] args){
int sum=0;
StringTokenizer st = new StringTokenizer("a=3, b=5, c=6", ",=");
while((ㄱ)) {
String token = (ㄴ);
System.out.println(token);
int n = 0;
try{
n = Integer.parseInt(token);
}catch(NumberFormatException e){
//정수가 아닌 경우 아무것도 하지 않고 그냥 넘어 간다.
}
sum += n ;
}
System.out.println("합은 "+sum);
}
}
(ㄱ) st.hasMoreToken( ); (ㄴ) st.nextToken( );
19. 자바의 상속 특징 중에서 틀린 것은? 3
1) 자바에서의 클래스의 다중 상속을 지원하지 않는다. 2) 자바에서의 상속이 횟수에 대한 제한이 없다. 3) 자바에서 모든 클래스의 최상위 슈퍼클래스는 java.lang.System이다. 4) 자바에서 상속을 표현하는 키워드가 extends 이다.