Table

  • Div+css가 레이아웃 구성을 대체함
  • td 또는 tr, td와 같이 써야 함
  • th: 헤더 이름, 자동으로 볼드 처리됨
  • tr: 행
  • td: 열
  • 셀 병합: 왼쪽에서 오른쪽, 위에서 아래로만 가능
    1. colspan: 열 병합
    2. rowspan: 행 병합

▽ 예제 코드 1 ▽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <table border="1">
        <tr>
            <td colspan="2" align=center>A</td>
        </tr>
        <tr>
            <td>C</td>
            <td>D</td>
        </tr>
    </table>
    <hr>
    <table border="1">
        <tr>
            <td>A</td>
            <td rowspan=2>B</td>
        </tr>
        <tr>
            <td>C</td>
        </tr>
    </table>
</body>
</html>

 

▽ 예제 코드 1 - 결과 ▽

 

▽ 예제 코드 2 ▽

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <table border="1" bordercolor="red">
            <tr>
                <td rowspan="2">가</td>
                <td colspan="2" align=center>나</td>
            </tr>
            <tr>
                <td>라</td>
                <td rowspan="2">마</td>
            </tr>
            <tr>
                <td colspan="2" align=center>바</td>
            </tr>
        </table>
    </body>
</html>

▽ 예제 코드 2 - 결과 ▽

 

 

 

Input

  • text: 메시지를 한 줄 입력 가능
  • password: 입력하면 echo character로 보여 줌
  • placeholder: 어떤 용도로 사용하는지 명시해 줌
  • button
  • checkbox: 여러 개 선택 가능
  • radio button: name 속성에 같은 값을 주면 중복 체크 방지할 수 있음

Textarea

  • 메시지를 여러 줄 입력 가능

Select

  • 여러 값 중 하나 선택 가능

 

▽ 예제 코드 3 ▽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input type="text"
    placeholder="ID를 입력하세요."><br>
    <input type="password"
    placeholder="PW를 입력하세요."><br>
    <input type="button" value="로그인">
    <input type="button" value="회원 가입">
    <br>
    <input type="checkbox">아이디를 기억합니다.<br>
    <input type="radio" name="agreement">동의합니다.<br>
    <input type="radio" name="agreement">동의하지 않습니다.<br>
    <textarea placeholder="메시지를 입력하세요."></textarea>
    <br>
    <select size="3" multiple>
        <option>Apple</option>
        <option>Mango</option>
        <option>Orange</option>
    </select>
</body>
</html>

▽ 예제 코드 3 - 결과 ▽

 

 

 

 

 

 

HTML

  • Hyper Text Markup Language
  • 하이퍼 링크 기능을 포함하는 구조화 문서
  • HT(Hyper Text): 하이퍼 링크가 걸려 있는 텍스트
  • ML(Markup Language)
    • 구조화 언어
    • HTML, XML 등
  • 웹 브라우저 상에 요소(Element)를 생성해주는 역할
  • 동적 기능은 포함하지 않는 정적 문서
  • Element / Tag / Attribute
  • 시작 태그 ~ 종료 태그
  • <html> ~ </html>
    • 여기서부터 HTML 문법이 적용된다는 영역의 지점
  • <head> ~ <head>
    • 문서 내에 필요한 환경 설정 및 정보 저장 영역
  • <body> ~ <body>
    • 화면에 보여지게 될 요소를 생성하는 영역
  • Attribute
    • 태그를 꾸미는 속성값
    • 속성값 넣을 때 더블 쿼터는 안 써도 상관없음
    • 띄어쓰기가 있을 때는 써야 함

 

CSS

  • Cascade Style Sheet
  • 문서로 작성된 구조화 데이터를 스타일링하는 언어
  • HTML에 의해 생성된 요소의 레이아웃을 잡아 주고 꾸미는 역할
  • Inline Sytle 방식
    • 태그 내부에 속성값으로써 Style을 작성하는 방식
    • html 태그와 섞어 사용하기 때문에 잘 안 씀
    • 대상 태그를 지정해 줌
  • Internal Style 방식
    • Head 영역 내부에 Style 영역을 구성하여 Style을 작성하는 방식
    • Selector 문법을 사용하여 element에 접근함
  • External Style 방식
    • style 코드가 너무 많을 시 가독성이 떨어지므로 css 파일을 따로 생성하여 import하는 방식

 

 

 

JavaScript

  • Web Browser에서 작성된 문서에 대한 동적 기능을 부여하는 언어

 

 

DBCP

  • Database Connection Pool
  • 순간 접속자가 다량으로 발생했을 시, 미리 생성해 둔 Connection 객체를 대여하는 방식으로 접속자를 제한하는 기술
  • APACHE DBCP를 제일 많이 씀(Maven Repository에서 다운로드)
  • 동시 접속자가 한 번에 많이 들어오면 Connection을 close 하기 전에 서버가 다운됨
  • Server를 켜는 순간 Connection을 많이 만들어 놓고 Pool에 저장함
  • 접속한 사용자에게 저장한 Connection을 줌
  • 저장한 Connection을 다 썼으면 다음 사용자는 대기시킴
  • Connection이 반환되면 대기하는 사용자에게 순서대로 줌

 

▽ 예제 코드 1 ▽

import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp2.BasicDataSource;

public class TempMain {

	public static void main(String[] args) {
	
		BasicDataSource bds = new BasicDataSource();
        
		// DBMS 계정 및 초기 설정
		bds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		bds.setUsername("kh");
		bds.setPassword("kh");
		bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        
		// 미리 만들어 놓을 Connection 객체 개수를 설정
		// 서버에 접속하자마자 Connection을 주지 않고 DB에 접속할 때 줌
		// DB 접속-처리 속도가 빠르기 때문에 순간 동시 접속하는 수임
		// XE는 100이 최대 가능 수
		bds.setInitialSize(30); 
		
		try (Connection con = bds.getConnection();){

		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

 

 

Singleton Pattern

  • 인스턴스 생성을 통제하는 디자인 패턴
  • 인스턴스를 1개 이상 생성하지 못하게 막는 기술

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbcp2.BasicDataSource;

public class CafeManager {
	
	// bds는 getConnection() 안으로 들어가면 지역 변수가 되기 때문에 멤버 필드로 빼야 함
	// but, CafeManager는 DB 접속 시도할 때마다 만들어지기 때문에
	// Connection 객체를 가지는 bds가 또 여러 개 만들어짐
	// -> 자원성 문제 생김
	// -> CafeManager를 한 번만 생성하도록 제한을 줘야 함
	// -> Design Pattern 중 Singleton Pattern 적용
	
	// 1. 생성자를 private으로 바꿔 줌
	// -> new 막기, private은 클래스 내부에서만 접근할 수 있음
	// 2. instance 생성
 	BasicDataSource bds = new BasicDataSource();
 	private static CafeManager instance = null;
 	
 	// 3. 메서드를 통해서 생성자를 쓸 수 있게 함
 	// 4. synchronized를 통해 한 번에 하나의 Thread만 접근할 수 있도록 함
 	public synchronized static CafeManager getInstance() { // DAO
 		
 		// 6. 1번만 만들 수 있게 함
 		if(instance == null)
 			instance = new CafeManager();
 		
 		return instance;
 	}
	
	// getConnection() 안으로 들어가면 설정해 주는 코드가 반복되기 때문에
	// 딱 한 번 실행하는 생성자로 넣어 줌
	private CafeManager() {
		bds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
		bds.setUsername("kh");
		bds.setPassword("kh");
		bds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
		bds.setInitialSize(30); 
	}
	
	public Connection getConnection() throws Exception {
		return bds.getConnection();
	}
    
}

 

 

 

 

DTO(Data Transfer Object)

  • VO(Value Object)와 같은 말
  • 단순 데이터 전송 목적의 클래스로, 멤버 필드 / getter / setter / constructor로 구성되는 클래스
  • 기능 구현은 하지 않음
  • 클래스 간 데이터 전송을 위해 데이터를 보관하는 목적

 

DAO(Data Access object)

  • 데이터를 입출력 / 수정 / 삭제 등의 데이터 관련 기능만을 모아 두는 클래스
  • 데이터베이스 또는 웹 등에 엑세스하는 기능만을 모아 놓은 오브젝트

 

 

 

 

암호화

  • 데이터베이스 관리자가 DB에 저장된 사용자의 개인 정보를 볼 수 있는 위험성이 있음
  • 암호화해서 저장해야 함

 

단방향성 암호화

  • 암호화 후, 복호화 못 함
  • MD5
    1. 글자를 64 크기나 128 크기 글자로 암호화함
    2. 크기가 제한되어 있기 때문에 다른 글자가 같은 글자로 암호화되어 중복될 가능성 있음
  • SHA-256, SHA-512 등

 

 

▽ 예제 코드 1 ▽

import java.math.BigInteger;
import java.security.MessageDigest;

public class EncryptionExam {

	// 64 크기
	public static String getSHA256(String input){

		String toReturn = null;

		try {
			MessageDigest digest = MessageDigest.getInstance("SHA-256");
			digest.reset();
			digest.update(input.getBytes("utf8"));
			// 숫자 부분이 글자 크기 설정임
			toReturn = String.format("%064x", new BigInteger(1, digest.digest()));
		} catch (Exception e) {
			e.printStackTrace();
		}

		return toReturn;
		
	}
	
	// 128 크기
	public static String getSHA512(String input){

		String toReturn = null;

		try {
			MessageDigest digest = MessageDigest.getInstance("SHA-512");
			digest.reset();
			digest.update(input.getBytes("utf8"));
			toReturn = String.format("%0128x", new BigInteger(1, digest.digest()));
		} catch (Exception e) {
			e.printStackTrace();
		}

		return toReturn;
		
	}

	public static void main(String[] args) {

		System.out.println(getSHA512("Hello"));
		System.out.println(getSHA512("Hello"));
		System.out.println(getSHA512("A"));
		System.out.println(getSHA512("B"));
		System.out.println(getSHA512("C"));

		
	}

}

 

 

▽ 출력 결과 ▽

3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315
3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315
21b4f4bd9e64ed355c3eb676a28ebedaf6d8f17bdc365995b319097153044080516bd083bfcce66121a3072646994c8430cc382b8dc543e84880183bf856cff5
848b0779ff415f0af4ea14df9dd1d3c29ac41d836c7808896c4eba19c51ac40a439caf5e61ec88c307c7d619195229412eaa73fb2a5ea20d23cc86a9d8f86a0f
3d637ae63d59522dd3cb1b81c1ad67e56d46185b0971e0bc7dd2d8ad3b26090acb634c252fc6a63b3766934314ea1a6e59fa0c8c2bc027a7b6a460b291cd4dfb

 

 

 

 

+ Recent posts