개발/💻 CS 지식

[ 빅데이터응용 ] Chapter1. Database Application Design and Development

정소은 2025. 9. 20. 21:13

 

 

 

웹과 데이터베이스의 관계

  • 사용자는 쇼핑몰 등 웹 환경에서 데이터베이스를 사용하고 있다는 사실조차 인식하지 못함.
  • SQL을 몰라도 웹 애플리케이션을 통해 데이터 조회 및 처리가 가능.
  • 폼 기반 툴, GUI, 리포트 생성기, 데이터 분석 도구 등을 통해 쉽게 접근 가능.

 

웹 기반 애플리케이션 개발의 필요성

  • 웹은 사실상 표준 사용자 인터페이스(de facto standard).
  • 브라우저만 있으면 누구나 어디서든 데이터베이스 접근 가능.
  • 따라서 DB 애플리케이션 개발 시 웹 기반 접근이 가장 효율적.

 

HTML과 웹 문서

  • 웹 문서는 HTML(HyperText Markup Language) 기반으로 작성.
  • HTML 문서 구성 요소:
    • 텍스트 및 서식 (굵게, 기울임 등)
    • 하이퍼링크 (문서 간 연결)
    • 폼(Form): 사용자 입력을 받아 DB와 상호작용 가능

 

폼(Form)과 데이터베이스 연동

  • 검색창, 입력 박스 등을 통해 사용자가 키워드 입력 → SQL 쿼리 변경 후 DB 조회.
  • 결과를 웹 서버를 거쳐 사용자에게 전달.
  • 폼 활용이 웹-DB 연동의 핵심 기초.

 

정적(Static) vs 동적(Dynamic) 웹 문서

  • 정적 HTML 문서
    • 내용 고정 → 시간이 지나면 무의미.
    • 사용자별 맞춤 제공 불가.
    • 데이터 업데이트 시 모든 페이지를 수동 수정해야 함.
  • 동적 웹 문서
    • DB와 연결되어 실시간 데이터 반영.
    • 사용자 맞춤(customization) 가능.
    • 한 곳(DB)만 수정해도 모든 페이지 자동 갱신.
  • 따라서 동적 웹 문서가 현대 웹 애플리케이션의 기본.

 

데이터 분석과 OLAP

  • 단순한 표 생성도 사실은 여러 SQL 쿼리가 필요.
  • 고급 SQL 및 OLAP(Online Analytical Processing) 기능 활용 시 한 번의 쿼리로 복잡한 집계 가능.
  • 따라서 데이터베이스 고급 기능 이해가 중요.

 

URL (Uniform Resource Locator)

  • 웹에서 모든 자원은 URL로 접근 가능.
  • URL 기본 구조:
    프로토콜://서버주소/경로/문서?매개변수=값&다른매개변수=값
  • 구성 요소:
    • 프로토콜: http, https, ftp 등 (어떻게 접근할지)
    • 서버 주소: 도메인 이름(www.example.com) 또는 IP 주소
    • 경로: 서버 내 특정 문서나 프로그램 위치
    • 쿼리스트링(Query String): ? 뒤에 오는 key=value 형식, 여러 개는 &로 구분

📌 예시
http://www.google.com/search?q=database&t=manual

  • 프로토콜: http
  • 서버: www.google.com
  • 프로그램: search
  • 매개변수: q=database, t=manual

 

쿼리스트링 (Arguments in URL)

  • ? : 인자(argument) 시작
  • & : 여러 인자 구분
  • 예:→ q = "database", t = "manual"
    http://.../search?q=database&t=manual

📌 함수 호출처럼 생각 가능:

search(q="database", t="manual")

 

HTML 기본

  • 웹페이지는 HTML로 작성됨.
  • 주요 태그:
    • <table>, <tr>, <td> → 표(table), 행(row), 열(cell)
    • <form> → 사용자 입력
    • <input> → 입력창, 버튼
    • <select>, <option> → 드롭다운
    • <i> → 이탤릭
    • <center> → 가운데 정렬

 

HTML Form 동작

  • <form>: 사용자 입력을 서버로 전송
    • action="bankquery" : 전송할 서버 프로그램
    • method="GET" : 전송 방식 (URL 뒤에 붙음)
  • 입력 요소:
    • 드롭다운 (<select name="type">)
      • <option value="account">Account</option>
      • <option value="loan">Loan</option>
    • 텍스트 입력 (<input type="text" name="id">)
    • 제출 버튼 (<input type="submit">)

📌 예:

<form action="bankquery" method="GET">
  Select account or loan:
  <select name="type">
    <option value="account">Account</option>
    <option value="loan">Loan</option>
  </select>
  Enter number:
  <input type="text" name="id">
  <input type="submit" value="Submit">
</form>
 

사용자가 "Loan" 선택하고 id=102 입력 →
bankquery?type=loan&id=102 가 서버로 전달됨.

 

HTTP 프로토콜의 특징

  • Stateless(비연결성)
    • 요청(Request)을 보내고 응답(Response)을 받으면 연결이 끊어짐
    • 서버는 이전 요청을 기억하지 않음 → 매번 새로운 사용자처럼 인식
  • 장점: 서버 부하 감소, 수많은 사용자 처리 가능
  • 단점: 로그인 상태 유지, 사용자 맞춤 정보 제공이 어려움

 

세션(Session)의 필요성

  • 사용자가 여러 번 요청하더라도 같은 사용자임을 식별해야 하는 경우 발생
  • 예: 쇼핑몰 로그인 → 장바구니 유지, 결제 진행
  • 세션은 여러 요청을 하나의 사용자 활동으로 묶어줌

 

쿠키(Cookie)의 개념과 역할

  • 쿠키란?
    • 서버가 브라우저에 저장하는 작은 텍스트 파일
    • 사용자 인증 정보(ID, 로그인 여부, 사용자 선호 설정 등) 포함 가능
  • 동작 방식
    1. 서버 → 브라우저: 쿠키 전송
    2. 브라우저: 쿠키 저장 후 다음 요청 시 쿠키를 함께 전송
    3. 서버: 쿠키를 확인해 사용자를 식별
  • 장점: 사용자의 로그인 상태, 개인화 정보 유지 가능
  • 보안 이슈: 쿠키에 민감한 정보가 담길 경우 악용 가능

 

세션과 쿠키의 관계

  • HTTP는 연결을 기억하지 않기 때문에, 세션을 구현하기 위해 쿠키 사용
  • 쿠키에 세션 ID 저장 → 서버가 사용자를 추적 가능
  • 한 번 로그인하면 세션 ID를 통해 여러 요청에서 동일 사용자로 인식

 

자바 서블릿(Servlet) 소개

  • 서블릿이란?
    • 웹 서버에 탑재되어 동작하는 자바 기반 웹 애플리케이션
    • 요청을 받고, 처리한 뒤 HTML 결과를 응답으로 돌려줌
  • 특징
    • 요청이 들어올 때마다 새로운 스레드(Thread)로 실행 → 동시성 처리 가능
    • HttpServlet 클래스를 상속받아 doGet(), doPost() 메서드 재정의

 

서블릿 동작 과정

  1. 클라이언트가 요청 (ex. 로그인, 계좌 조회)
  2. request 객체에서 전달된 파라미터 추출 (getParameter())
  3. 필요 시 DB(JDBC 등)와 연동 → 데이터 조회
  4. 조회 결과를 HTML 형식으로 작성하여 response 객체를 통해 반환

예시:

Public class BankQueryServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse result) throws ServletException, IOException {
	
    // Client에서 보내는 request 처리 : Parameter 처리
	String type = request.getParameter(“type”);
	String number = request.getParameter(“number”);
    
    // input받은 정보를 DB에 업데이트  
	//…code to find the loan amount/account balance …
	//…using JDBC to communicate with the database..
	//…we assume the value is stored in the variable balance
    
    // Client로 다시 보낼 response 처리
	result.setContentType(“text/html”);
	PrintWriter out = result.getWriter( );
	out.println(“<HEAD><TITLE>Query Result</TITLE></HEAD>”);
	out.println(“<BODY>”);
	out.println(“Balance on “ + type + number + “=“ + balance);
	out.println(“</BODY>”);
	out.close ( );
}
}

 

캐싱(Caching)의 개념

  • 캐싱이란?
    자주 사용되는 데이터를 임시 저장소(cache)에 저장해두고, 다음에 같은 요청이 오면 서버가 다시 계산하거나 DB 조회하지 않고 빠르게 응답하는 방식
  • 웹에서 캐싱은 성능 향상 서버 부하 감소에 매우 중요

 

웹에서의 캐싱 방식

  1. 브라우저 캐시 (Client-side Cache)
    • 웹 브라우저가 HTML, CSS, 이미지 같은 정적 리소스를 저장
    • 사용자가 같은 페이지를 다시 열면 서버에 요청하지 않고 로컬에서 바로 로드
    • 장점: 빠른 속도, 네트워크 비용 절감
  2. 프록시/중간 캐시 (Proxy Cache)
    • 클라이언트와 서버 사이에 위치한 캐시 서버가 데이터를 저장
    • 여러 사용자가 같은 데이터를 요청할 경우, 캐시 서버가 대신 응답 → 서버 부담 줄어듦
  3. 서버 캐시 (Server-side Cache)
    • 애플리케이션 서버나 DB 서버에서 결과를 메모리에 저장
    • 같은 요청이 오면 DB를 다시 조회하지 않고 캐시된 값을 바로 응답
    • 예: 로그인한 사용자 정보, 최근 조회한 계좌 잔액

 

캐싱과 세션/쿠키의 관계

  • 쿠키/세션은 사용자 상태 유지를 위한 것
  • 캐싱은 데이터나 결과 재활용을 통한 성능 향상
  • 둘 다 웹 성능 최적화에 중요한 역할을 하지만, 목적이 다름

 

캐싱의 장단점

  • 장점
    • 응답 속도 향상
    • 서버와 DB 부하 감소
    • 네트워크 사용량 절감
  • 단점/주의점
    • 데이터 최신성 문제 (캐시에 오래된 값이 남아있을 수 있음)
    • 사용자별 맞춤 데이터에는 사용하기 어려움 (예: 로그인 정보)
    • 캐시 무효화 전략 필요 (TTL, 만료시간 설정)