자바스크립트

 

screen 객체

 

screen객체로 화면의 너비와 높이 알아내기

avaiHeight은 작업표시줄 제외한 높이

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>location Object</title>
    <style>
        #container {
            width:400px;
            margin:10px auto;
        }
        .display {
            margin-top:10px;
            padding:10px;
            border:1px solid #222;
            box-shadow: 1px 0 1px #ccc;        
        }
        p {
            font-size:1em;
        }
    </style>
</head>
<body>  
    <div id="container">
        <h2>screen 객체 </h2>
        <div class="display">
               
        </div>
        <script>
            // 스타일 클래스 적용
            document.querySelector('.display').innerHTML = widthHeight();
       
            function widthHeight() {
                var content = "";
                content += "<p><b>screen.availWidth : </b>" + screen.availWidth + "</p>";
                content += "<p><b>screen.availHeight : </b>" + screen.availHeight + "</p>";
                content += "<p><b>screen.Width : </b>" + screen.width + "</p>";
                content += "<p><b>screen.Height : </b>" + screen.height + "</p>";
       
                return content;
            }
        </script>
</div>      
</body>
</html>

 

팝업 창을 화면 가운데에 표시하기

 

팝업창

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>공지사항</title>  
  <style>
    #content {
      border : 2px double skyblue;
      border-radius:10px;
      padding:10px;
    }
    ul {
      margin-left:15px;
      list-style-type:none;
    }
    ul li {margin : 10px 5px;}
    button{
      position:absolute;
      bottom:20px;
      right:20px;
    }
  </style>    
</head>
<body>
  <div id="content">
  <h1>공지사항</h1>
    <ul>
      <li>항목 1</li>
      <li>항목 2</li>
      <li>항목 3</li>
      <li>항목 4</li>
      <li>항목 5</li>
    </ul>    
    <button onclick="javascript:window.close();">닫기</button>
  </div>
</body>
</html>

 

팝업창 위치 지정 및 연결 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Window 객체</title>
</head>
<body>
    <p>문서를 열면 팝업 창이 표시됩니다</p>
    <script>
      function openCenter(doc, win, w, h){
        let left = (screen.availWidth-w) / 2; // 팝업 창의 왼쪽 좌표
        let top = (screen.availHeight-h) / 2; // 팝업 창의 위쪽 좌표
        let opt = //"left=" + left + ",top="+top+",width="+w+",height="+h;
                  `left=${left}
                  ,top=${top}
                  ,width=${w}, height=${h}`;
        window.open(doc,win,opt);
     
      }      
      openCenter("notice.html", "pop", 500, 400)
   
    </script>
</body>
</html>

 

 

 

현재 시간 출력 ( 오후 시:분:초 )

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>현재 시각은?</title>
  <style>
    p {
      margin-top:20px;
      font-size:1.2em;
      text-align: center;
    }
    .display {
      font-size:1.5em;
      font-weight:bold;
      color:blue;      
    }
  </style>
</head>
<body>
  <p>현재 시각 <span id="current" class="display"></span></p>
  <script>
    setInterval(displayNow, 1000);

    function displayNow(){
      // console.log(displayNow);
                      // .toLocaleTimeString() 오전 시 분 초 표시
      let currentTime = new Date().toLocaleTimeString();

      document.querySelector('.display').innerHTML = currentTime;
    }
   
  </script>
</body>
</html>

 

 

 

현재 시간 팝업창 만들고 가운데 위치 ( 버튼 클릭 시 팝업 ) 

 

 

 

 

 

 

오라클

 

오라클 타입확인 쿼리문

둘 다 동일 desc 많이 사용

DESCRIB board
desc emp

 

 

JSTL(JSP Standard Tag Library)은 JavaServer Pages(JSP)에서 자주 사용되는 기능을 제공하는 

태그 라이브러리입니다. JSTL은 JSP에서 코드의 가독성을 높이고, 반복문, 조건문, 변수 처리 등을 

간편하게 수행할 수 있도록 도와준다.

 

taglibs-standard-impl-1.2.5.jar
0.20MB
taglibs-standard-spec-1.2.5.jar
0.04MB

 

 

 

JSTL jar 파일과 JSTL 구현체(implementation)를 설치

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- Core 태그 라이브러리 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- JSTL의 반복문 기능을 사용하여 ${list} 변수에 저장된 컬렉션을 반복하면서 해당 영역을 처리  -->
<!-- items 속성은 반복할 컬렉션을 지정  -->
<c:forEach var="dao" items= "${list}">
${dao.writer}<!-- ${dao.writer}는 반복되는 요소의 writer 속성 값을 출력  -->
</c:forEach>
 
</body>
</html>

Core 태그 라이브러리

JSTL의 핵심 기능으로, 변수 처리, 반복문, 조건문 등을 수행하는 태그들을 포함합니다. 

예를 들어, <c:forEach>, <c:if>, <c:set> 등이 있습니다.

 

Formatting 태그 라이브러리

날짜, 숫자, 메시지 등의 형식을 지정하고 처리하는 태그들을 포함합니다.

예를 들어, <fmt:formatDate>, <fmt:formatNumber>, <fmt:message> 등이 있습니다.

 

JSTL은 JSP 페이지에서 <%@ taglib %> 태그를 사용하여 선언하고,

이후에 제공하는 태그들을 사용할 수 있습니다

 

실습

JSTL ( jsp 파일 ) 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- Core 태그 라이브러리 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<style>
table { text-align:center; }
th { background-color: gray;}
.content {width: 200px;}

</style>

<title>Insert title here</title>
</head>
<body>


<table border="1">
<!-- ${dao.writer}는 반복되는 요소의 writer 속성 값을 출력  -->
<tr>
<th>이름</th>
<th>글제목</th>
<th class="content">글내용</th>
</tr>

<c:forEach var="dao" items= "${list}">
<!-- JSTL의 반복문 기능을 사용하여 ${list} 변수에 저장된 컬렉션을 반복하면서 해당 영역을 처리  -->
<!-- items 속성은 반복할 컬렉션을 지정  -->

<tr>
<td>${dao.writer}</td>
<td>${dao.title}</td>
<td>${dao.content}</td>
</tr>

</c:forEach>
</table>

 
</body>
</html>

 

servlet

package oracle0703;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import board.oracle.BoardDao;
import board.oracle.BoardDto;

/**
 * Servlet implementation class ListServ
 */
@WebServlet("/listServ")
public class ListServ extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListServ() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		BoardDao dao = new BoardDao();
		ArrayList<BoardDto> list = dao.selectList();

		request.setAttribute("list", list);
		RequestDispatcher dispatcher
		 = request.getRequestDispatcher("boardView.jsp");
		dispatcher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 

 

JSTL_2 (forEach, if, choose) 및 옵션들

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- Core 태그 라이브러리 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setAttribute("name", "홍길동");
request.setAttribute("money", 5000);
request.setAttribute("dataList", new String[] {"a", "b", "c"});
%>
<%-- JSP 주석 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- html 주석은 console에서 보임 -->
<c:if test="${name == '홍길동'}">
이름이 홍길동입니다<br/>
</c:if>

<%-- choose = switch문이랑 비슷  --%>
<c:choose>
<c:when test="${money >= 10000}">
돈 많아요.<br/>
</c:when>
<c:when test="${money > 0}">
돈이 조금 있어요.<br/>
</c:when>
<c:otherwise>
돈이 하나도 없어요.
</c:otherwise>
</c:choose>

<c:forEach var ="count" begin="0" end="10" step="2"> <%-- 0~10 반복 / step : 2배수 --%>
${count} 
</c:forEach>

<c:forEach var="data" items="${dataList}"><%--배열 호출--%>>
${data}
</c:forEach>

</body>
</html>

자바스크립트

 

Math 객체

100 나올 때까지 출력하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 100 나올 때까지 출력
        while(true){
            let v = Math.floor(Math.random() * 100 + 1);
            if( v === 100){
                break;
            }else{
                document.write(`${v}, `);
            }
        }
    </script>

</body>
</html>

 

 

이벤트 당첨자 뽑기 프로그램

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8">
    <title>당첨자 발표</title>
    <style>
      h1 {
        border:1px solid black;
        padding:10px;
        text-align:center;
        background:#eee;
      }
    </style>
  </head>
  <body>    
    <h1>당첨자 발표</h1>

    <script>
      function getrandom(seed){
        return Math.floor((Math.random() * seed) + 1);
      }

      let seed = prompt("전체 응모자 수: ","");
      let count = prompt("당첨자 수?", "1");// 당첨자 수 지정
     

      document.write("전체 응모자 수: " + seed + "명");
      document.write("<br>");
      document.write("당첨자: ");
      for(let i=0; i < count; i++){
        let picked = getrandom(seed);
        document.write(picked + "번 ,");
      }
     

    </script>

  </body>
</html>

 

 

 

브라우저와 관련된 객체 ( window )

 

팝업창

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>공지사항</title>  
  <style>
    #content {
      border : 2px double skyblue;
      border-radius:10px;
      padding:10px;
    }
    ul {
      margin-left:15px;
      list-style-type:none;
    }
    ul li {margin : 10px 5px;}
    button{
      position:absolute;
      bottom:20px;
      right:20px;
    }
  </style>    
</head>
<body>
  <div id="content">
  <h1>공지사항</h1>
    <ul>
      <li>항목 1</li>
      <li>항목 2</li>
      <li>항목 3</li>
      <li>항목 4</li>
      <li>항목 5</li>
    </ul>    
    <button onclick="javascript:window.close();">닫기</button>
  </div>
</body>
</html>

 

팝업창 연결

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body onload="openpopup()">
    <p>문서를 열면 팝업 창이 표시됩니다.</p>
    <script>
        function openpopup(){// 팝업창 연결
            let newWin =  window.open("notice.html", "test", "width= 400, height=400" );
        if(newWin == null){
            alert("팝업이 차단되어 있습니다. 팝업 차단을 해제해 주세요.")
        }
        newWin.moveBy(100, 100);// 팝업창 위치 지정
        }

       
    </script>
</body>
</html>

 

 

팝업 창에서 클릭한 내용을 메인창에 나타내기

 

1. main.html ( 팝업창 열기 ) 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>팝업 창 열기</title>
</head>
<body>
  <p>문서를 열면 팝업 창이 표시됩니다.</p>
  <script>
    let popWin = window.open("doit-event.html", "popup", "width=750, height=600");
    popWin.opener = self;
  </script>
</body>
</html>

 

2. doit-event.html ( 팝업창 ) 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>이벤트 공지</title>
  <style>
    #container
    {
      width:600px;
      margin:10px auto;
      padding:10px;
      text-align:center;
    }        
  </style>
</head>
<body>
  <div id="container">
    <h1>이벤트 공지</h1>
    <img src="/0711/popup_click/doit.jpg">
    <p><a href="doit-main.html" onclick="loadURL(this.href); return false">자세히 보기</a></p>  
  </div>

  <script>
    function loadURL(url){
      alert(url);
      window.opener.location = url;
      window.close();
    }
  </script>
</body>
</html>

 

3. doit-main.html ( 팝업창에 자세히 보기 클릭 시 해당 url로 이동 ) 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Do it!</title>
  <style>
    #container{
      width:750px;
      margin:0 auto;
      text-align:center;
    }
  </style>
</head>
<body>
  <div id="container">
  </div>
</body>
</html>

 

 

 

 

 

location 객체

사이트 위치 고정하기 ( naver 버튼 클릭시 naver사이트로 이동 ) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="display">
        <button onclick="location.replace('http://www.naver.com')">네이버</button>
        <script>
            document.write("<p><b>location.href :</b>" + location.href + "</p>");
            document.write("<p><b>location.host :</b>" + location.host + "</p>");
            document.write("<p><b>location.protocol :</b>" + location.protocol + "</p>");
           
        </script>
    </div>
</body>
</html>

 

 

 

 

2초 뒤에 출력  ( 30  먼저 출력 후 13은 2초뒤에 출력 ) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let aaa = function (x,y){
            console.log(x+y);
        }
        // 화살표 함수
        let bbb = (x,y) => console.log(x+y);

        // add(3,10);
        // 40, 10 add에 값 넣어주기
        // 2초 뒤에 출력
        setTimeout(aaa, 2000, 3, 10);
        clearTimeout(bbb);

        bbb(10,20);
    </script>
</body>
</html>

 

 

1초 마다 현재 시간 출력 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1초 마다 시간 표시
        setInterval(() => {
           console.log(new Date());
        }, 1000);
       

    </script>
</body>
</html>

 

 

2초마다 0~10 랜덤 값 출력

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

       
        //2 초마다 0~10 랜덤 값 출력
        setInterval(() => {
           console.log(Math.floor(Math.random()*10));
        }, 2000);
    </script>
</body>
</html>

 

 

 

 

 

 

 

오라클

 

오라클 퀴즈 풀기

 

Q1 급여(SAL)가 2000 초과인 사원들의 부서 정보, 사원 정보를 출력 ( 테이블 2개 ) 

select e.deptno, d.dname, e.empno, e.ename, e.sal
from emp e join dept d on(e.deptno = d.deptno)
where e.sal > 2000
    order by e.deptno

 

Q2 각 부서별 평균 급여, 최대 급여, 최소 급여, 사원수 출력 ( 테이블 2개 ) 

SQL-99 이전 방식

select e.deptno, d.deptno, trunc(avg(sal)), max(sal), min(sal), count(*)
from emp e, dept d
where e.deptno = d.deptno
group by e.deptno, d.deptno
SQL - 99 방식

select e.deptno, d.dname, trunc(avg(sal)), max(sal), min(sal), count(*)
from emp e join dept d on (e.deptno = d.deptno)
group by e.deptno, d.dname

 

 

Q3 모든 부서 정보, 사원 정보를 부서 번호, 사원 이름순으로 정렬해서 출력  ( 테이블 2개 ) 

SQL-99 이전 방식

select d.deptno, d.dname, e.empno, e.ename, e.job, e.sal
from emp e, dept d
where e.deptno(+) = d.deptno
order by d.deptno

 

SQL-99 방식

select d.deptno, d.dname, e.empno, e.ename, e.job, e.sal
from emp e right join dept d on(e.deptno = d.deptno)
order by d.deptno

 

 

Q3 모든 부서 정보, 사원 정보, 급여 등급 정보, 각 사원의 직속 상관의 정보를 부서번호 사원번호 순서로 정렬 

( 테이블 4개 ) 

 

SQL-99 이전 방식

select d.deptno, d.dname, e1.empno, e1.ename, e1.mgr, e1.sal, e2.deptno,
        s.losal, s.hisal, s.grade, e2.empno, e2.ename
        from emp e1, emp e2, dept d, salgrade s
        where e1.deptno(+) = d.deptno
         and e1.sal between s.losal(+) and s.hisal(+)
         and e1.mgr = e2.empno(+)
        order by e1.deptno
SQL-99 방식

select d.deptno, d.dname, e1.empno, e1.ename, e1.mgr, e1.sal, e2.deptno,
        s.losal, s.hisal, s.grade, e2.empno, e2.ename
        from emp e1 right join  dept d on (e1.deptno = d.deptno)
        left join salgrade s on (e1.sal between s.losal and s.hisal)
        left join emp e2 on (e1.mgr = e2.empno) 
        order by e1.deptno

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-14 41일차  (0) 2023.07.14
2023-07-13 40일차  (0) 2023.07.13
2023-07-10 37일차  (0) 2023.07.10
2023-07-07 36일차  (0) 2023.07.07
2023-07-06 35일차  (0) 2023.07.06

자바스크립트

 

버튼 클릭해서 글자색 바꾸기

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>자바스크립트 이벤트</title>
	<link rel="stylesheet" href="css/function.css">
</head>
<body>
	<button id="change">글자색 바꾸기</button>	
	<p>Reprehenderit tempor do quis sunt eu et exercitation deserunt. Laboris adipisicing est sint aliquip nulla pariatur velit irure elit qui id. Dolore aliquip dolore eu ut irure sint Lorem reprehenderit velit. Duis veniam irure cillum anim excepteur culpa pariatur sunt esse. Eu nulla commodo velit ex id dolore incididunt mollit incididunt nisi labore culpa qui ea. Commodo veniam veniam in ipsum ad minim occaecat qui pariatur adipisicing laborum quis.</p>
	
	<script>
    // 방법 1 : 웹 요소를 변수로 지정 & 미리 만든 함수 사용
    // var changeBttn = document.querySelector("#change");
    // changeBttn.onclick = changeColor;
    
		// function changeColor() {
    //   document.querySelector("p").style.color = "#f00";
    // }
   
    // 방법 2 : 웹 요소를 따로 변수로 만들지 않고 사용
    // document.querySelector("#change").onclick = changeColor;

		// function changeColor() {
    //   document.querySelector("p").style.color = "#f00";
    // }
    
    // 방법 3 : 직접 함수를 선언
    document.querySelector("#change").onclick = function() {
      document.querySelector("p").style.color = "#f00";
    };

		

	</script>
</body>
</html>

 

 

 

버튼을 클릭해서 상세 설명 표시하거나 닫기 ( DOM 이벤트 처리기 연결 ) 

HTML + JavaScript

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>자바스크립트 이벤트</title>
	<link rel="stylesheet" href="css/event.css">
</head>
<body>
	<div id="item">
		<img src="images/flower.jpg" alt="">
		<button class="over" id="open" >상세 설명 보기</button>
		<div id="desc" class="detail">
			<h4>등심붓꽃</h4>
			<p>북아메리카 원산으로 각지에서 관상초로 흔히 심고 있는 귀화식물이다. 길가나 잔디밭에서 흔히 볼 수 있다. 아주 작은 씨앗을 무수히 많이 가지고 있는데 바람을 이용해 씨앗들을 날려보내거나, 뿌리줄기를 통해 동일한 개체들을 많이 만들어 냄으로써 번식한다. </p>
			<button id="close">상세 설명 닫기</button>
		</div>
	</div>	

	<script>
    document.querySelector('#open').onclick = function(){
      document.querySelector('#desc').style.display = "block";	// 상세 설명 부분을 화면에 표시
      document.querySelector('#open').style.display = "none";   // '상세 설명 보기' 단추를 화면에서 감춤
    }

    document.querySelector('#close').onclick = function(){
      document.querySelector('#desc').style.display = "none";	   // 상세 설명 부분을 화면에서 감춤
      document.querySelector('#open').style.display = "block";	 // '상세 설명 보기' 단추를 화면에 표시

	  
    }
  </script>
</body>
</html>

 

CSS

		#item {
			position:relative;
			width:500px;
			height:auto;
			padding:15px 20px;
			margin:auto;
		}
		button {
			background-color:rgba(255,255,255,0.7);;
			padding:5px;
			border:1px solid #ccc;
			font-size:0.8em;			
		}
		.over {
			position:absolute;
			left:30px;
			bottom:30px;
		}
		.detail {
			width:400px;
			text-align:left;			
			line-height:1.8;
			display:none;
		}

 

 

 

 

마무리 문제

 

Quiz - 1 ( 사용자한태 입력받아서 두 수의 값이 같으면 곱하기, 두 수의 값이 다르면 더하기 )

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let x = parseInt(prompt("x값"));
        let y = parseInt(prompt("x값"));

        function subMulti(x, y){
            if(x === y){
               return x * y  
                
            }else{
                return x + y
            }
        }   console.log(subMulti(x,y));

    </script>
</body>
</html>

 

 

 

 

Quiz - 2 ( 사용자한태 입력받아서 두 수의 값을 비교 후 알럿 띄우기 )

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let num1 = parseInt(prompt("비교할 첫 번째 숫자"));
        let num2 = parseInt(prompt("비교할 두 번째 숫자"));

        function subMulti(num1, num2){
            if(num1 === num2){
               alert("두 수가 같습니다."); 
                
            }else if(num1 > num2){
                alert(`${num1}가 ${num2}보다 큽니다.`);
            }else if(num1 < num2){
                alert(`${num2}가 ${num1}보다 큽니다.`);
            }
        }subMulti(num1, num2);

    </script>
</body>
</html>

 

 

 

 

객체 알아보기

문서 객체 모델(DOM) 

웹 문서 자체도 객체이고 그 안에 삽입되어 있는 이미지와 링크, 텍스트 필드등도 모두 객체이다.

일반적으로 웹 문서에 삽입하는 요소는 document, image, link 객체 등이 있다.

 

브라우저 관련 객체

웹 브라우저에서 사용하는 정보도 객체로 나타낼 수 있다.

사용하는 브라우저 정보를 담고 있는 navigator 객체를 비롯해 history, location, screen 객체 등이 있다.

 

내장 객체

웹 프로그래밍을 할 때 자주 사용하는 요소는 자바스크립트 안에 미리 객체로 정의되어 있는데, 이를 내장 객체라고 함

예를 들어 날짜, 시간과 관련된 프로그램을 개발하려면 Date 객체를 가져와 쉽게 사용 가능하다.

 

 

 

Date 객체의 인스턴스 만들기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let now = new Date(); // Date 인스턴스 만들고 변수에 저장하기
        document.write("현재 시각은" + now)

    </script>
</body>
</html>

 

 

로컬 형식으로 현재 시각 표시하기 ( toLocaleString() )

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let now = new Date(); // Date 인스턴스 만들고 변수에 저장하기
        document.write("현재 시각은" + now.toLocaleDateString());

    </script>
</body>
</html>

 

 

 

 

자바 스크립트의 내장 객체 ( Array 객체 )

 

Array 객체로 배열 만들기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 초기값이 없는 경우
    let numbers = new Array();
    let numbers2 = new Array(4);

    // 초기값이 있는 경우
    let numbers3 = ["one", "two", "three"];// 배열 선언
    let numbers4 = Array("one", "two", "three"); // Array 객체를 사용한 배열 선언
    


    </script>

</body>
</html>

 

 

배열을 만들고 요소 표시하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>배열의 각 요소</h2>
    <script>
    
    let numbers3 = ["one", "two", "three"];// 배열 선언
    
    for(i = 0; i < numbers3.length; i++){
        document.write(`<p>${numbers3[i]}</p>`);
    }



    </script>

</body>
</html>

배열 2개를 합쳐서 새로운 배열 만들기 ( concat() 메서드 ) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>
    let nums = [1, 2, 3];
    let chars = ["A", "B", "C"];

    let numsChars = nums.concat(chars);
    let charsNums = chars.concat(nums);
    document.write(`nums에 chars 합치면: ${numsChars} <br> chars에 nums 합치면: ${charsNums}`);
    



    </script>

</body>
</html>

.

 

 

새로운 요소를 추가하는 push(). unshift() 메서드 

배열 맨 끝에 요소를 추가하려면 push() 메서드 사용

배열 맨 앞에 요소를 추가하려면 unshift() 메서드 사용

 

배열에 새로운 요소 추가하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let nums = [1,2,3];

        let ret1 = nums.push(4, 5);
        document.write(`length: ${ret1} | 배열: ${nums}`);
        document.write("<br>");

        let ret2 = nums.unshift(0);
        document.write(`length: ${ret2} | 배열: ${nums}`);

    </script>
</body>
</html>

 

 

 

배열에서 요소를 꺼내는 pop(), shift()

두 메서드는 꺼낸 요솟값을 반환하며 기존 배열은 꺼낸 요소가 빠진 상태로 변경된다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let chars = ["A", "B", "C", "D"];

        let popped1 = chars.pop(); // 마지막 요소 꺼냄
        document.write(`꺼낸 요소: ${popped1} | 배열: ${chars}`);
        document.write("<br>");

        let popped2 = chars.shift(); // 1번째 요소 꺼냄
        document.write(`꺼낸 요소: ${popped2} | 배열: ${chars}`);

    </script>
</body>
</html>

splice()메서드의 인수가 1개인 경우 요소 삭제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let numbers = [1,2,3,4,5];
        let newNumbers = numbers.splice(2);//인덱스 2인 요소부터 마지막 까지 삭제
        document.write(`반환된 배열: ${newNumbers} <br> `);
        document.write(`변경된 배열: ${numbers} `);


    </script>
</body>
</html>

 

 

 

splice()메서드의 인수가 2개인 경우 요소 삭제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let study = ["html", "css", "web", "jquery"];
        let newStudy = study.splice(2,1);// 인덱스값이 2인 요소(web)부터 요소를 1개 삭제
        document.write(`반환된 배열: ${newStudy} <br> `);
        document.write(`변경된 배열: ${study} `);


    </script>
</body>
</html>

 

날짜 계산하는 프로그램 만들기

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>독서 챌린지</title>
  <style>
    #container{
      margin:50px auto;
      width:300px;
      height:300px;
      border-radius:50%;
      border:2px double #222;
      background-color:#d8f0fc;
      text-align: center;
    }
    h1 {
      margin-top:80px;
    }
    .accent {
      font-size:1.8em;
      font-weight:bold;
      color:red;
    }
  </style>
</head>
<body>
  <div id="container">
    <h1>책 읽기</h1>
    <p><span class="accent" id="result"></span>일 연속으로 <br> 책 읽기를 달성했군요.</p>
    <p>축하합니다!</p>
  </div>  

  <script>
    let now = new Date("2022-07-10");// 오늘 날짜를 객체로 지정
    let firstDay = new Date("2022-07-01");// 시작 날짜를 객체로 지정 

    let toNow = now.getTime();// 오늘까지 지난 시간 (밀리초)
    let toFirst = firstDay.getTime();// 첫날까지 지난 시간 (밀리초)
    let passedTime = toNow - toFirst;// 첫날부터 오늘까지 지난 시간 (밀리초)

    passedTime = Math.round(passedTime/(1000*60*60*20));// 밀리초를 일수로 계산하고 반올림

    document.querySelector('#result').innerText = passedTime;

  </script>

</body>
</html>

 

 

 

 

 

오라클

 

비등가 조인 

비등가 조인은 등가 조인 방식 외의 방식을 의미한다. 전에 배웠던 등가 조인은 모두 EMP 테이블과 DEPT테이블을

사용했지만, 이번에는 급여 등급 데이터를 가지고 있는 SALGRADE테이블과 EMP테이블을 조인해보겠다.

 

급여 범위를 지정하는 조건식으로 조인하기

select *
    from emp e, salgrade s
    where e.sal between s.losal and s.hisal;

 

 

 

외부 조인

두 테이블간 조인 수행에서 조인 기준 열의 어느 한쪽이 NULL이어도 강제로 출력하는 방식을 외부 조인이라고 한다.

 

왼쪽 외부 조인 사용하기 ( 상급자가 존재하지 않는 사장님 출력 ) 

select e.empno, e.ename, e.mgr, c.empno, c.ename
from emp e, copy_emp c
where e.mgr = c.empno(+)
order by e.empno;

 

오른쪽 외부 조인 사용하기 ( 부하직원이 없는 사원들 출력 ) 

select e.empno, e.ename, e.mgr, c.empno, c.ename
from emp e, copy_emp c
where e.mgr(+) = c.empno
order by e.empno;

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-13 40일차  (0) 2023.07.13
2023-07-11 38일차  (1) 2023.07.11
2023-07-07 36일차  (0) 2023.07.07
2023-07-06 35일차  (0) 2023.07.06
2023-07-05 34일차  (0) 2023.07.05

소프트웨어 설계

 

클래스 설계원칙에 대한 바른 설명은?

개방-폐쇄의 원칙 : 클래스는 확장에 대해 열려 있어야 하며 변경에 대해 닫혀 있어야 한다.

 

 

 

컴퓨터의 프로세서가 처리하기 전에 미리 처리하여 프로세서가 처리하는 시간을 줄여 주는

FEP

 

소프트웨어 상위설계에 속하지 않는 것은?

모듈 설계

 

소스코드 품질분석 도구 중 정적분석 도구가 아닌 것은?

valance

 

내. 외부 송.수신 연계 기술은 ?

소켓 기술

 

순차 ( 시퀀스 ) 다이어그램

시간 

 

요구사항 개발 프로세스

도분명확

도출 => 분석 => 명세 => 확인

 

객체지향 기법 상위 클래스의 메소드와 속성을 하위 클래스가 물려 받는 것은 ?

상속( Inheritance )

 

인터페이스 요구 사항 검토 방법

동료검토 : 이해관계자들에게 내가 설명을 하면서 결함을 발견

워크스루 : 미리 자료 배포 자료 검토 후 짧은 회의 

인스펙션 : 작성자 이외 전문 검토 그룹끼리 문제점 파악

   계획 => 사전 교육 => 준비 => 회의 => 수정 => 후속

UI 설계 원칙

직관성 : 누구나 쉽게 이해 사용

유효성 : 사용자의 목적 정확하게 달성

학습성 : 누구나 쉽게 배울수 있어야 함

유연성 : 사용자의 요구사항을 최대한 수용, 오류를 최소화

 

UML 다이어 그램

구조 다이어그램 : 클래스, 객체, 컴포넌트, 컴포지트, 배포, 패키지 다이어그램

행위 다이어그램 : 유스케이스, 시퀀스, 커뮤니티, 상태, 활동, 타이밍, 인터렉션 오버뷰 다이어그램 

기본 구성요소 : Things, Relationship, Diagram

 

유스케이스의 구성 요소 간의 관계

연관, 포함, 확장, 일반화

 

객체지향 설계 원칙 중, 서브타입(자식 클래스)은 어디에서나 자신의 기반타입(부모 클래스)로 교체

LSP(Liskov 치환의 법칙)

 

 

객체지향 설계원칙 ( 솔리드 ) 

단일 책임 원칙 ( SRP ), 개발 폐쇄 원칙( OCP ), 리스코프 치환의 원칙 ( LSP ), 인터페이스 분리의 원칙 ( ISP ),

의존성 역전의 원칙 ( DIP )

 

 

럼바우 방법

객체 모델링 : 객체 다이어그램

동적 모델링 : 상태 다이어그램

기능 모델링 : 자료 흐름도 (DFD) 이용

 

 

디자인 패턴 ( 좋은 샘플 코드를 개발자가 활용 )

생성패턴 ( 객체를 생성시킬 때 필요한 것들 ) 

 팩토리메소드 ( 객체를 생성하는 일을 서브 클래스가 담당 ),  싱글톤,  Abstract팩토리, Builder,  프로토 타입

 

구조패턴 ( 객체를 합치거나 이쁘게 만들 때 ) 

어댑터, bridge, Composite, Decorator, Facade, Fly, Proxy

 

행위패턴 ( 객체가 행위를 할때 ) 

State, Interpreter, Command, Visitor, 옵저버

 

 

자료흐름도(DFD)의 구성 요소

Process, data flow, data store, terminator

 

UML에서 시퀀스 다이어그램의 구성 항목에 해당하지 않는 것은?

확장

 

Virtual-Constructor 패턴이라고도 함

팩토리 메소드 패턴

 

 

미들웨어 솔루션의 유형에 포함되지 않는 것은?

Web Server

 

 

미들웨어의 종류

RPC, MOM, ORB, DB접속 미들웨어, TP모니터, WAS, ESB

 

MOM

요청사항을 모아 놨다가 나중에 한번에 처리 하는 것

 

CASE(컴퓨터, 도와주다, 소프트웨어, 엔지니어링)

 

캡슐화

서로 관련성이 많은 데이터들과 연산들을 묶는다

속성과 관련된 연산을 클래스 안에 묶어서 하나로 취급

 

클래스

하나 이상의 유사한 객체들을 묶는다.

 

 

소프트웨어를 보다 쉽게 이해, 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작 없이 내부구조 변경

Refactoring

 

 

Comfile

고급언어를 저급언어 프로그램으로 변환하는 기능 

 

인터페이스 구현 시 사용하는 기술 속성-값쌍

JSON

 


 

 

 

 

소프트웨어 개발

 

트리 운행법 ( 왼쪽 => 오른쪽 ) 

 

전위 ( Pre ) : 부모를 먼저 방문

중위 ( In ) : 부모를 중간에 방문

 

후위 ( Post ) : 자식을 먼저 방문 

 

 

 

스택 ( 인터럽트 처리, 서브루틴 호출 작업 등에 응용 )

큐 ( QUEUE )

 

선형구조, 비선형 구조

선형 구조 : 리스트, 스택, 큐, 데크 

비선형 구조 : 트리, 그래프

 

 

이진 검색

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ( 14찾을 경우 비교되는 횟수 ) 

 

1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 = ( 1은 0,  15은  14 ) 0 + 14 = 14

2. 14를 2로 나누기 7 ( 7부분은 8 ) 

3. 8을 14랑 비교 14가 더 크기 때문에 1~8은 다 버려짐 

4. 9 10 11 12 13 14 15 ( 9는 0, 15는 6 ) 

5. 6을 2로 나누기 3 ( 3부분은 12 ) 

6. 12하고  14랑 비교 14가 더크기 때문에 9~ 12 다 버려짐

위에 방법대로 한번 더하면 

3번째에 찾는 거 

 

 

정렬된 N개의 데이터를 처리

선택 정렬 0(n^2)

삽입 정렬 0(n^2)

버블 정렬 0(n^2)

 

합병정렬 0(Nlog2N)

 

소프트웨어 품질목표 중 쉽게 배우고 사용할 수 있는 정도

Usability( 유용성 )

 

 

인터페이스 데이터 포맷이 아닌거는?

AJTML

 

 

해싱 함수(Hashing Function)의 종류가 아닌 것은?

개방주소법(open addressing)

 

단위 테스트 도구로 사용될 수 없는 것은?

IgpUnit

 

 

NS Chart에 대한 설명으로 가장 거리가 먼 것은?

화살표나 GOTO를 사용한다.

화살표 사용 안함

 

 

 

 

인터페이스 보안 기능 적용

네트워크 영역 : 송/수신간 스니핑 등 데이터 탈취 및 변조 위협 방지

네트워크 트래픽에 대한 암호화 방식 : IPSec, SSL, S-HTTP

 

 

형상관리 ( 소프트웨어 개발 과정에서 발생하는 모든 변경을 관리하는 활동 )

프로젝트동안 모든 산출물들 모든 소스코드들을 버전 관리하는 것

리비전 = 버전 번호

식별 => 통제 => 감사 => 기록 ( 식통감기 ) 

변경되는 것들을 버전 관리 

형상관리도구 : CVS, SVN, GIT

 

 

형상 관리 도구의 주요 기능

체크인, 체크아웃, 커밋

 

 

패키징 ( 제품 또는 서비스를 포장하는 과정 사용자가 사용할 수 있게 묶어두는 것  )

암호화 / 보안을 고려, 이기종 연동 고려, 적합한 알고리즘 적용, 지속적인 배포 

 

 

선택 정렬 ( 오름차순 낮은거 부터 )

37, 14, 17, 40, 35 

14, 37, 17, 40, 35 ( 1회전 )

14, 17, 37, 40, 35 ( 2회전 )

14, 17, 35, 40, 37 ( 3회전 )

 

제어흐름 그래프가 다음과 같을 때 MCabe의 cyclomatic 수는 얼마인가 ? 

뚫리지 않으면이 면수   

면수 +1

 

트리의 차수(degree)

트리에서 자식을 가장 많이 낳은 수 ( 자식 수 )

 

 

속성(Attribute, 애트리뷰트)

속성의 수 Degree 

 

 

튜플 ( 각 행  ) 

튜플의 수 Cardinality 

 

 

테스트 단계

단위 나눈 걸 통합하고 통합한걸 시스템에 올리고 고객한태 컨펌 

 

단위 테스트 : 정적테스트, 동적테스트

통합 테스트 : 상향식테스트( 하위부터 테스트 구현 안되있으면 드라이버 사용)

                      하향식테스트( 상위부터 테스트 구현 안되있으면 stup ),

                      빅뱅테스트 ( 한꺼번에 다 테스트 하는 것 )

                      백본테스트 ( 상향식 + 하향식 ) 비용이 많이 듬 

시스템 테스트 : 기능 테스트 ( 사용자 요구사항 맞게 만들어 졌는지 확인 ) 

                          비기능 테스트 ( 성능, 보안 보는 것)

인수 테스트 : 알파 테스트 ( 개발자 사용자 같이 테스트 )

                      베타 테스트 ( 개발자 빠지고 고객끼리 테스트 )

 

 

클린코드 작성원칙

가독성, 단순성, 의존성, 중복성, 추상화

 

 

소프트웨어 3R

역공학 : 순공학 반대 ( 계획 => 분석 => 설계 => 구현 => 테스트 => 유지보수 ) 

재공학 : 리모델링 ( 인테리어, 보수 ) Migration

재사용 : 기존 코드 재사용 

 

이것은 3R 아님

재개발 : 맨땅에 해딩 

 

 

블랙박스 테스트 기법

내가 원하는 기능이 예측한 대로 정상 동작하는지를 확인 ( 사용자 관점의 테스트 방법 )

원인결과 그래프 기법, 의사결정 테이블 테스팅, 상태 전이 태스팅

 

 

패키지 소프트웨어의 일반 적인 제품 품질 요구사항 및 테스트를 위한 국제 표준은 ?

ISO/IEC 12119

 

 

물리데이터 저장소의 파티션 설계에서 파티션 유형

파티션 : 테이블 또는 인덱스 등을 나누어 둔 단위

 

범위분할, 해쉬분할(다형성 비슷), 조합분할(앞에 두개 합친거), 목록분할

 

 

알고리즘 설계 기법으로 거리가 먼 것은?

Static Block

 

 

테스트 케이스

테스트의 목표 및 테스트 방법을 결정하고 테스트 케이스를 만들어야됨 그리고 테스트 시나리오

 

 

동시에 소스를 수정하는 것을 방지 ( 형상 관리 ) 

RCS

 

버블 정렬

9, 6, 7, 3, 5

 

pass 1 결과

6, 7, 3 , 5, 9

 

9를 끝까지 한번 씩 비교 

 

 

데이터 베이스

 

 

 

ALTER : 속성(열) 타입 변경

BTWWEN : 어디서 부터 어디까지 무조건 AND만 들어감 90이하 90이상

GRANT : 사용자 권한 부여 TO

REVOKE : 권한을 뺏는다. 취소 FROM

UNION : 전부 가져와서 중복 제거 후 출력 

UNION ALL : 전부 가져와서 전부 출력 ( 중복 제거 x )

INTERSECT : 교집합 ( 같은 값만 출력 ) 

 

병렬 데이터베이스 환경 중 수평 분할에서 활요되는 분할 기법이 아닌 것은

예측 분할

 

 

릴레이션 특징

똑같은 튜플 포함안됨

튜플사이 순서 없음

속성간 순서 중요 x

속성 값은 원자값

속성 명칭은 유일

구성값은 동일값 가능

 

 

개체 무결성 제약조건

관계 데이터베이스 시스템에서 DBMS는 투플을 삽입하거나 수정할 떄마다 개체 무결성 제약조건을 지키는지 확인한다. 즉 기본키 값이 유일한지 NULL값이 아닌지를 검사

 

 

참조 무결성 제약조건

참조 무결성 제약조건은 부모 릴레이션과 자식 릴레이션 관계에서 수행된다.

위 코드에서 학생 릴레이션이 학과 릴레이션의 학과코드를 참조한다고 했을 때 학생 릴레이션은 자식 릴레이션이

되고 반대로 학과 릴레이션은 부모 릴레이션이 된다. 

 

 

도메인 무결성

도메인은 데이터베이스에서 사용되는 속성(컬럼)의 데이터 타입과 허용 범위를 정의하는 것을 의미

데이터베이스 내의 데이터가 정확하고 일관성 있는 상태를 유지하는 것을 의미

데이터베이스 내의 모든 데이터는 지정된 규칙에 따라 올바른 값만을 가지고 있어야 하며,

다른 데이터와의 관계도 일관되어야 합니다.

 

 

기본 select 속성~~~ * 
	 from 테이블

조건 where 조건
	AND / OR

그룹 GROUP BY 속성
	 HAVING SUM(...) >= 2000
     
정렬 ORDER BY 속성 ASC : 오름차순 정렬
			      DESC : 내림차순 정렬

 

뷰의 단점

삽입, 삭제, 갱신 연산에 제약이 따름

 

트랜잭션 

데이터베이스에서 수행되는 작업의 단위로, 일련의 연산들을 논리적으로 묶어서 하나의 작업으로 처리하는 개념

 

원자성 (Atomicity) : 모두 반영되거나 모두 반영되지 않아야 한다. 

 

일관성 (Consistency) : 데이터는 일관성되게 유지되야 한다. 

 

격리성, 독립성 (Isolation) : 트랜잭션이 실행되는 동안 다른 트랜잭션이 영향을 미치면 안된다

 

지속성, 영속성 (Durability) : 데이터는 영구적으로 보존되어야 한다.

 

트랜잭션 설계단계

개념설계 : 트랜잭션 모델링

논리설계 : 트랜잭션 인터페이스 설계

물리설계 : 트랜잭션 세부설계

 

데이터베이스 설계

개념 설계 : ERD ( 머리속에 있는걸 끄집어냄 )

논리 설계 : 스키마 ( 정제 ) 정규화, 트랜젝션 인터페이스

물리 설계 : 성능향상, 용량 고려 / 실제 하드웨어에 집어 넣는거 / 인덱스, 파티션, 클러스터링 / 다 안되면 반정규화 

 

 

Commit과 Rollback 명령어에 의해 보장 받는 트랜잭션의 특성은 ?

원자성

 

관계대수의 연산자

순수  관계 연산자 : Select(아톰), Division(%), Project(파이), Join(나비)

일반 집합 연산자 : 합집합(U), 교집합(n), 차지합(-), 카티션 프로덕트(x)

 

 

 

 

스키마 ( DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조)

스키마는 : DD에 저장

 

외부 스키마 : 웹툰의 외부스키마, 메일의 외부 스키마

  사용자 또는 프로그램의 입장에서의 논리적 구조로 여러개가 존재 

 

내부 스키마 : 물리적 구조 및 내부 레코드의 물리적 순서 등을 표현

저장장치와 데이터베이스 설계자 및 개발자 관점

 

개념 스키마 : 접근권한, 보안 및 무결성등에 관한 정의를 포함

사용자와 데이터베이스 관리자 관점 

 

로킹 ( 자물쇠로 잠그다 ) 

데이터베이스를 자물쇠로 잠그면 여러 사람들이 사용하지 못하니 병행성은 낮아지고 오버헤드도 낮아진다. 

속성을 자물쇠로 잠그면 여러 사람들이 사용할 수 있으니 병행성도 높아지고 오버헤드도 높아진다.

데이터베이스는 잠갔다가 풀었다가하면 성능면으로 오버헤드 증가

 

로킹 단위가 작아지는 건 여러사람들이 로킹을 하기 때문에 오버헤드는 증가한다.

로킹 단위가 커지는 건 데이터 베이스를 묶는거기 때문에 오베헤드 감소한다.

 

로킹단위↑ : 로크 수↓, 병행성↓, 오버헤드↓, 공유도↓, 제어기법 간단하여 관리 수월
로킹단위↓ : 로크 수↑, 병행성↑, 오버헤드↑, 공유도↑, 제어기법 까다로워 관리 복잡

 

키(key)

슈퍼키 : 유일성 o, 최소성 x

후보키, 기본키, 대체키 : 유일성 o, 최소성o

 

후보키중에서 한개가 기본키가 되는거고 남은 후보키가 대체키가 된다.

 

 

정규화

도부이결다조 ( 두부이거다줘 )

 

1NF : 도메인이 원자 값 

          대한민국 | 서울, 부산 => 대한민국 | 서울, 대한민국 | 부산

2NF : 부분 함수 종속을 제거

3NF : 이행적 함수 종속을 제거

BCNF : 결정자이면서 후보키가 아닌 것 

4NF : 다치 종속 제거 

5NF : 조인 종속 제거해되고 이용해도 된다.

 

 

Division 연산

 

 

분산 데이터베이스의 투명성( 내가 몰라도 되 )에 해당하지 않는 것은 ? 

Media Access Transparency

 

 

 

BETWEEN은 OR이 없고 AND만 있다. 

 

로그(log)를 필요로 하는 회복 기법

즉각 갱신 기법

 

E-R 모델에서 다중값 속성의 표기 법 

 

프로그래밍 언어활용

 

스레드가 커널에서 지원되는 스레드에 비해 가지는 장점으로 옭은 것은?

커널 모드로의 전환없이 스레드 교환이 가능하므로 오버헤드가 줄어듬

 

 

C언어 비교

값이 있으면 1, 값이 없으면 0

예 ) a = 5, b = 7

a && b = 둘 다 값이 있기때문에 1 

 

비트 연산자 

a | b;a = 4 = 00000100
b = 7 = 00000111
or 연산자는 둘 중 하나만 1이어도 1로 나타내므로, 00000111 = 7

 

and 연산자일 경우 and 00000100 = 4

 

 

파이썬

else if 대신에 elif가 있다. 

 

튜플타입은 변경할 수 없다.

 

RIP 라우팅 프로토콜

RIP 라우팅 프로토콜은 내부 라우팅 프로토콜 ( 거리벡터 )

OSPF 라우팅 프로토콜은 내부 라우팅 프로토콜 ( Link-State 벡터 ) 

 

외부라우팅 프로토콜은 EGP => BGP 밖에 없다

 

IPv4, IPv6 비교

IPv4 : 32 bit, 비 순차적 할당, 헤더 크기 고정, 멀티, 유니, 브로드 캐스트

IPv6 : 128bit 순차 할당, 헤더 크기 가변, 멀티, 유니, 애니 캐스트

 

OSI 7계층 중 네트워크 계층에 대한 설명으로 틀린 것은?

한 노드로부터 다른 노드로 프레임을 전송하는 책임을 진다.( 데이터 링크 계층 설명 ) 

 

정보 시스템 내에서 어떤 주체가 특정 개체에 접근하려 할 때 양쪽의 보안 레이블(Security Label)에 기초

Mandatory Access Control

 

스트림 암호화 방식의 설명으로 옳지 않은 것은?

해쉬 함수를 이용한 해쉬 암호화 방식을 사용한다. ( 단방향 암호화임 해쉬 함수는 ) 

 

 

C언어 비트 논리연산자가 아닌 것

? ( 삼항연산자임)

 

C언어에서 문자열 처리 함수의 서식과 그 기능의 연결 

strcmp(s1, s2) = s1과 s2를 비교

strcat(s1, s2) = s1과 s2를 연결

strrev(s) = s를 거꾸로 변환

 

C언어 연산자 우선 순위 높은 것에서 낮은 것

( ),   /,  <<,   <, ==, ||

 

 

물데네전세표응응

 

Transport ( 전송계층 )

양 종단간 신뢰성 있는 정보 전달네트워크 계층 

TCP(연결 지향형) : 기본 헤더 크기는 20byte

UDP( 비연결 지향형 ) 

 

IP, ICMP(데이터를 보냈는데 데이터 못 갔다고 전달 ) / 오류 정보를 전송하는 목적

ARP(IP->MAC), RARP(MAC->IP)

 

Data Link : 스위치 브릿지 / 인접한 노드한태 신뢰성 있는 정보 전달

Physical ( 물리계층 ) : 허브, 리피터

 

 

모듈 사이의 결합도(Coupling)  낮을 수록 좋음

모듈의 독립성을 높일라면 응집도는 높고 결합도는 낮아야 좋다

자스제외공내

자료 (data )

공통 ( common )

제어 ( control )

 

 

응집도 ( 높을 수록 좋음 ) 

절차적 응집도 : 순차적으로 수행 ( 순차적 응집도 아님 ) 

 

우리 놀던 시 절에 통통한 순대 기가 막혔어

 

 

Temporal Cohension(시간적 응집도)

서로 다른 기능을 같은 시간대에 함께 실행하는 경우의 응집도

 

 

 

은행가 알고리즘  

Avoidance ( 교착상태 회피기법 ) 

 

 

빌드 도구

Ant, Maven, Gradle

 

 

UNIX의 쉘 

사용자 => 쉘 => 커널 => 운영체제 ( 기억장치, 입출력  )

 

 

교착 상태 (오도가도 못하는 상태 ) 발생의 필요 충분 조건

상호 배제, 점유와 대기, 환형 대기, 비선점

 

프로세스 상태의 종류

Ready, Running, Wait, Excute, Exit

 

HRN 스케줄링 방식 ( 경로 우대 사상 )

우선 순위 계산하여 그 수치가 가장 높은 거 부터 낮은 순으로 우선순위 부여

(대기시간 + 실행시간) / 실행 시간 = 높은게 우선 순위

 

 

비선점 스케줄링

우선순위, 기한부, FIFO, SJF, HRN

 

선점 스케줄링

라운드 로빈 (RR), 최소잔여 시간 ( SRT ), 멀티레벨 큐 (MLQ), 다단계 (MFQ)

 

 

스크립트 언어 ( 프로그램안에서 돌아가는 언어 )  인터프리터

아닌거 : cobol ( 컴파일 언어 ) 

 

 

 

 

 

 

정보시스템 구축관리

 

서비스 지향 아키텍처 기반 애플리케이션을 구성하는 층이 아닌 것은?

제어 클래스층

 

Secure OS의 보안 기능으로 거리가 먼 것은?

고가용성 지원

 

 

시스템의 사용자가 로그인하여 명령을 내리는 과정에 대한 시스템의 동작 중 다음 설명에 해당하는 것은?

 

Authentication

 

 

하향식, 상향식, 수학적 기법 ( 비용 산정 )

하향식 : 전문가, 델파이( 여려명 전문가 )

상향식 : LOC ( 원시코드 Line 수 ) , 개발 단계별 노력 ( 인원수 ) 

수학적 : COCOMO, PutNam, FP

 

 

LOC기법 총 라인수 50000라인, 프로그래머 월평균 생상성 200라인, 개발 참여 프로그래머 10인

200 * 10 = 2000 //  50000%2000 = 25개월

 

메모리상에서 프로그램의 복귀 주소와 변수사이에 특정 값을 저장 ( 오버플로우 상태 )

스택가드

 

 

IP또는 ICMP의 특성을 악용하여 특정 사이트 집중적 공격

Smurfing

 

CMM( 1단계 ~ 5단계 ) 

초기단계 => 반복 단계 => 정의 단계 => 관리 단계 => 최적화 단계 

 

 

크래커가 침입하여 백도어를 만들어 놓거나,

tripwire

 

 

COCOMO model 

5만 라인 이하 : Organic 조직형

30만 라인 이하 : semi-detached 반분리형

30만 라인 이상 : embeded 내장형

 

 

UWB기술 또는 블루투스 기술을 사용하여 통신망을 형성하는 무선

PICONET

 

 

분산 컴퓨팅 플랫폼, 빅데이터를 효율적으로 저장하고 처리

하둡

 

블록 암호화 방식

 

양방향 암호화암호화 시키고 복호화 시키고 그것을 볼 수 있는거대칭킹 알고리즘 (암호화키 복호화 키 두개가 똑같은거) 스트림암호화, 블록암호화 DES(64bit), AES(128bit),SEED

비대칭키 알고리즘 ( 공개키) : 내개인 키로만 열 수 있다.  RSA, ECC

 

단방향 암호화암호화시키면 복화를 못시킴 // Hash 이용, Solt

MD4, MD5, Sha

 

대칭 암호 알고리즘과 비대칭 암호 알고리즘에 대한 설명으로 틀린 것은 ?

대칭 암호 알고리즘은 비밀키 전달을 위한 키 교환이 필요하지 않아 암호화 및 복호화의 속도가 빠르다.

대칭 암호화 알고리즘은 키 교환이 필요하기 때문에 키를 교환하는 중 키가 탈취될 수 있다는 문제가 있다.
공개 암호화 방식에 비해 속도가 빠르다

 

최대 홉수 15로 제한 라우팅 프로토콜

RIP( 라우팅 프로토콜 )

동적 라우팅 : 라우터끼리 알아서 최고의 경로를 찾음 - 내부(I) 라우팅 프로토콜 : RIP, OSPF 

 

 

테일러링/ 제단( 소프트웨어를 이쁘게 만들자 ) 개발 방법론의 내부 기준

내부 기준 : 회사에 바꿀 수 있는 것

외부 기준 : 회사에서 못 바꾸는 것

프로젝트 상황 특성에 맞게 정의된 소프트웨어 개발 방법론 절차, 사용기법 등을 수정 및 보완하는 작업

 

시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있는 보안요소 

정보보안 3요소

기밀성:  나만 볼 수 있어야되

무결성: 나만 수정 가능 

가용성: 내가 언제든지 사용할 수 있어야 한다.

 

 

웹에서 제공하는 정보 및 서비스를 이용하여 새로운 소프트웨어나 서비스, db 만드는 기술은?

Mashup

 

 

스턱스넷

대단히 정교한 웜, 제로데이

핵무기와 원심분리기등 물리적인 피해를 입히는 목적

 

공유 디스크를 중심으로 클러스터링으로 엮어 다수의 시스템을 동시에 연결할 수있다.

고가용성 솔루션

 

 

더미 허브처럼 작동하게 하는 공격

Switch Jamming

 

 

DAS, NAS, SAN

DAS : 직접 연결

NAS : 네트워크 연결

SAN : 고속 채널

 

블루투스 공격

블루 버그 :  장비사이의 취약한 연결 관리를 악용한 공격

블루 스나프 : OPP를 사용하여 정보를 열람

블루 프린팅 : 블루투스 공격 장치의 검색활동을 의미

블루 재킹 : 스팸처럼 명함을 익명으로 퍼트리는 것

 

 

 DOS 공격 ( 가용성 ) 

탈취 목적이 아닌 사용자들이 사용못하게 하는 공격

 

Honeypot 허니팟

쉽게 공격자에게 노출되어야 하며 쉽게 공격이 가능한것처럼 취약해 보여야 한다.

 

 

Docker ( 서버 만들어주는 것 ) 

컨테이너 응용프로그램의 배포를 자동화하는 오픈소스 엔진

 

 

간트 차트 ( 엑셀 ) 일이 언제 끝나는지 전부 적어 놓는다.

수평 막대의 길이는 각 작업에 필요한 시간, 날짜는 나타낸다.

 

 

FAT와 비교했을 때의 NTFS의 특징이 아닌 것은 ?

보안에 취약 

 

리눅스 시스템에서 사용자의 성공한 로그인/로그아웃 정보 기록

wtmp

 

 

 

 

+ Recent posts