1. 선택자란?

: CSS에서 특정 요소들을 선택하여 스타일을 적용할 수 있게끔 하는 기능.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<style> /* CSS 영역(style) */
        div { /*여기서 선택자는 div가 되고 스코프 내 코드로 해당 속성들을 지정할 수 있다.*/
			background:#ffd800; /*background는 속성(property),  #ffd800는 해당 속성 값(property-value)가 된다.*/
		}
	</style>
</head>
<body>
	<div> <!-- html 영역에서 div 태그를 불러오면 CSS의 style에서 지정했던 선택자를 통해 적용이 된다. -->
		<h1>제목 입니다.</h1>
		<p>본문 입니다.
	</div>
</body>
</html>

 

 

2. CSS 문법은?

: CSS의 문법은 크게 선택자(Selector)와 선언부(Declaratives) 구성된다.

a { background-color: yellow; font-size: 16px; }
  1. 여기서 선택자(a) CSS를 적용하고자 하는 HTML 요소(element)를 가리킨다.
  2. 선언부(background-color: yellow; 혹은 font-size: 16px;) 하나 이상의 선언들을 세미콜론(;)으로 구분하여 포함할 수 있으며, 중괄호({ })를 사용하여 전체를 둘러싼다.
  3. 이러한 선언부는 CSS 속성명(property)과 속성값(value)을 가지며, 그 둘은 콜론(:)으로 연결된다.
  4. CSS 선언(Declaration) 언제나 마지막 세미콜론(;)으로 맺는다.

 

 

3. 시멘틱 태그에 대하여 설명하고,그 종류는?

3-1. 시멘틱 태그의 개요

: 시간이 흐름에 따라 웹 페이지의 구성 방식은 UX(User Experience)와 같은 다양한 경험으로 인해 발전되어 정형화 되어왔다. 그에 따라 시멘틱 웹(Sementic Web) 그 결과를 구현하는 시멘틱 태그(Sementic Tag)가 생기게 되었다.

 

3-2. 시멘틱 태그의 종류

HTML5에서의 시멘틱 태그의 종류는 다음과 같다.

  • header: 헤더
  • nav: 내비게이션
  • aside: 사이드에 위치하는 공간
  • section: 여러 중심 내용을 감싸는 공간
  • article: 글자가 많이 들어가는 부분
  • footer: 푸터

 

 

4. bootstrap 에 대하여 설명하시오.

: jQuery 기반 프론트엔드(Front-End) 라이브러리 HTML-CSS-JS를 통해 웹 페이지를 구현하고자 할 때 이에 대한 디자인들을 프리셋을 통해 지원해주는 역할을 한다. 디자인들이 정형화 되어있어 구현시 비교적 편리하다는 장점이 있지만 비슷한 페이지들이 양산 될 수 있는 단점 또한 있어 이에 파생된 여러 프레임워크들이 출시되고 있다.

 

 

5. overflow 에 대하여 설명하시오.

: 웹 페이지를 구현할 때 한 구역에 일정량 이상의 텍스트나 이미지 같은 컨텐츠들을 입력하면 일어나는 현상으로 여기서 오버플로우(Overflow) 이러한 일이 있을 때 어떻게 보여주는지 결정하는것을 일컫는다.

  • visible: 기본 값(default)으로, 컨텐츠의 내용을 구역 밖까지 보여준다.
  • hidden: 넘치는 부분을 숨겨서 보이지 않게 해준다.
  • scroll: 스크롤 바가 추가되어 오버플로우 된 내용들을 스크롤하여 볼 수 있게 해준다.
  • auto: 컨텐츠 양에 따라 유동적으로 스크롤 바가 생기게 해준다.

 

 

6. class 와 id 선택자의 차이와 어떨때 사용하는가?

6-1. 표기법

  • class: .(Dot)으로 선언한다.
    .Example { ... }
  • id: #(Hash)로 선언한다.
    #Example { ... }

 

6-2. 적용 우선순위

: CSS의 우선순위는 기본적으로 인라인 스타일 > 내부 스타일 > 외부 스타일 > 브라우저 기본값 순으로 결정된다. 또한 같은 레벨의 스타일인 경우 특정도(Specify)값을 계산해서 가장 많은 점수를 받은 것에 우선 순위를 부여하는데 계산식은 다음을 따른다.

  • 인라인 스타일: 1000
  • ID 선택자: 100
  • 클래스 선택자: 10
  • 태크 선택자: 1

따라서, ID 선택자가 클래스 선택자보다 특정도가 상대적으로 더 높으므로 Id > class의 우선순위가 되며, 이는 곧 큰 속성을 주로 id에 설정하는 셈이 된다.

단, !important를 통해 우선순위에 구애받지 않고 속성을 강제할 수 있는 특징을 가지므로 해당 키워드가 있는지 반드시 확인한다.

 

6-3. 중복 사용 여부

  • class: 중복 사용이 가능하다.
  • id: 유니크(Unique)의 특성을 가지기 때문에 유일성에 위배되므로 스크립트와 연계시 사용할 수 없다.

 

 

7. servlet의 생명주기에 대하여 설명하시오.

  1. 서블릿 객체생성: 프로그램이 실행될 때 JVM에 의해서 Method Area 내 메모리가 적재되면 최초로 한 번만 호출된다.
  2. init 호출: PostContruct 어노테이션에 따라 선처리가 된 후, 최초로 한 번만 호출된다.
  3. service(): 데이터의 흐름에 따라 doGet()이나 doPost()와 같은 메소드들에 의해서 서버에 요청(Request)을 할 때마다 한 번씩 호출된다.
  4. destroy(): 서블릿의 기능이 수행되고 난 후, 해당 메소드를 거쳐PreDestroy 어노테이션에 따라 후처리를 하면 사이클이 종료된다.

 

 

8. 실습 문제 1번

8-1. 구현 코드

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<style>
		#header {
			width: 500px;
			background-color: #FFD400;
			border: 1px solid #000000;
			text-align: center;
		}
		
		#wrap {
			width: 500px;
			background-color: #66dbf6;
			border: 2px solid #808080;
			text-align: center;
			overflow: hidden;
		}
		
		#content {
			width: 350px;
			border: 1px solid red;
			float: left;
		}
		
		#side_banner {
			border: 1px solid red;
			float: right;
		}
		
		#footer {
			width: 500px;
			background-color: #FFD400;
			border: 1px solid #000000;
			text-align: center;
		}
		
		.menu1 {
			color: #1822e2;
			font-weight: bold;
		}
		
		.menu1, .menu3, .menu5 {
			font-size: 20px;
		}
	</style>
</head>
<body>
	<div id="header">
		<h1>HEADER</h1>
	</div>

	<div id = "wrap">
		<div id="content">
			<h1>CONTENT</h1>
			<ul>
				<li class="menu1">menu1
				<li class="menu2">menu2
				<li class="menu3">menu3
				<li class="menu4">menu4
				<li class="menu5">menu5
			</ul>
		</div>
		<div id="side_banner">
			<h1>BANNER</h1>
			<a href="httop://www.sba.seoul.kr" target="_blank"><img src="https://new.sba.kr/images/web/logo.png"></a>
		</div>
	</div>
	
	<div id="footer">
		<h1>FOOTER</h1>
	</div>
</body>
</html>

 

8-2. 구현 화면

 

 

9. 실습 문제 2번

9-1-1. 구현 코드 (Back-End)

package edu.bit.ex;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class HobbyServlet
 */
@WebServlet("/HS")
public class HobbyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HobbyServlet() {
        super();
    }

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 입니다.");
	}

	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		System.out.println("destroy 입니다.");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 입니다.");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost 입니다.");
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String[] hb = request.getParameterValues("hb");
		String subject = request.getParameter("subject");
		String protocol = request.getParameter("protocol");
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter writer = response.getWriter();
		
		writer.println("<html><head></head><body>");
		writer.println("<h1>아이디 : " + id + "</h1>");
		writer.println("<h1>비밀번호 : " + pw + "</h1>");
		writer.print("<h1>취미 : ");
		for (int i = 0; i < hb.length; i++) {
			writer.print(hb[i] + " ");
		}
		writer.println("</h1>");
		writer.println("<h1>전공 : " + subject + "</h1>");
		writer.println("<h1>프로토콜 : " + protocol + "</h1>");
		writer.println("</body></html>");
	}
}

 

9-1-2. 구현 코드 (Front-End)

<!DOCTYPE html>
<html>
	<head>
	<meta charset="UTF-8">
	<title>당신의 정보를 입력해주세요.</title>
</head>
<body>
	<form action="../../HS" method="post">
		이름 : <input type="text" name="uname"><br>
		아이디 : <input type="text" name="id"><br>
		비밀번호 : <input type="password" name="pw"><br>
		취미 : <input type="checkbox" name="hb" value="Book" checked="checked">독서 
			<input type="checkbox" name="hb" value="Cook">요리 
			<input type="checkbox" name="hb" value="Jog">조깅
			<input type="checkbox" name="hb" value="Swim">수영
			<input type="checkbox" name="hb" value="Sleep">취침<br>
		전공 : <input type="radio" name="subject" value="Kor">국어
			<input type="radio" name="subject" value="Eng">영어
			<input type="radio" name="subject" value="Math">수학
			<input type="radio" name="subject" value="Design">디자인<br>
		<select name="protocol">
			<option>ftp
			<option>utp
			<option>http
			<option>tcp
		</select><br>
		<input type="submit" value="전송">
		<input type="reset" value="초기화">
	</form>
</body>
</html>

 

9-2. 구현 화면