웹 프로그래밍과 JSP의 기초에 대해서 공부해보자:)
dqQQQ
·2023. 11. 27. 21:15
개요
웹 프로그래밍의 기반이 되는 인터넷의 기술적 배경을 이해하고 관련 기술에 대해서 알아보겠다.
인터넷
인터넷 자체는 네트워크 인프라라고 할 수 있다.
www나 Email은 인터넷 기반의 서비스이다.
이러한 서비스들은 TCP/IP의 4계층 중에서 응용계층에 속한다.
네트워크에서 서비스를 제공하는 컴퓨터를 서버라고 하고, 서비스를 이용하는 컴퓨터를 클라이언트라고 한다.
웹 서비스를 제공하는 소프트웨어가 있어야 웹서버의 역할을 할 수 있는데 아파치가 대표적이다.
그리고 클라이언트에서 사용할 수 있는 소프트웨어는 흔히 말하는 웹 브라우저, 크롬 사파리 같은 것을 말한다.
웹 서비스의 동작 과정
JSP
JSP는 Java Server Page의 약자로 서블릿이라고 하는 자바로 구현된 웹 프로그래밍 기술에 기반한다.
JSP는 자바의 모든 기능을 이용할 수 있으며 함 께 스크립트를 사용할 수도 있다.
JSP는 기본적으로 서블릿으로 변경되어 실행되며, 메모리상에 적재된 서블릿을 스레드로 실행함으로써 시스템 자원을 효율적으로 실행할 수 있다.
스프링 프레임워크와 결합하여 가장 많이 사용하는 웹 서버 기술이다.
서블릿
서블릿은 자바를 이용한 서버 프로그래밍 기술로 자바를 웹 환경에서 사용할 수 있는 기술이다.
JSP와 서블릿은 대체 기술이라기보다 상호보완적인 기술이다.
서블릿은 컨테이너라고 불리는 서버 소프트웨어에 의해 동작한다.
서블릿 실행 과정
서블릿 동작 과정
JSP와 서블릿의 관계
지시어
page
page 지시어는 현재의 JSP 페이지를 컨테이너에서 처리하는 데 필요한 각종 속성을 기술하는 부분이다.
형식지정에 필요한 contentType속성, 자바 클래스 사용에 필요한 import속성, 오류 페이지 관리에 필요한 errorPage속성을 많이 사용한다.
<%@ page 속성1="값" 속성2="값" %>
의 형태로 사용한다.
include
현재 JSP 파일에 다른 HTML이나 JSP 문서를 포함하기 위한 기능을 제공한다.
<%@ include file="파일이름" %>
의 형태로 사용한다.
액션
액션은 JSP 주요 구성요소중 하나로 JSP 페이지 간의 흐름제어, 자바 애플릿 지원, 자바 빈즈와 JSP의 상호작용을 지원한다.
include
include 액션과 include 지시어는 하는 기능은 비슷하다.
그러나 지시어는 해당 파일을 포함시키고 컴파일하는 반면, 액션은 실행시점에서 호출하여 결과를 포함한다.
각각의 파일을 따로 컴파일해서 관리하기 때문에 동적인 페이지를 포함시킬 경우 사용한다.
<jsp:include page="파일 이름" />
forward
현재 페이지를 완전히 다른 페이지로 전환할 때 사용한다.
include 액션은 실행파일이 다른 처리들을 포함하는 개념이면 forward는 페이지 제어권을 완전히 넘긴다.
<jsp:forward page="파일이름" />
의 형태로 사용한다.
plugin
웹 브라우저에서 자바 플러그인을 사용하여 자바 애플릿이나 자바 빈즈 컴포턴트를 실행할 수 있게한다.
웹 브라우저에서 자동으로 해당 태그를 생성하므로 크게 사용되지 않는 액션이다.
useBean
액션에서 가장 중요한 부분으로, JSP 빈즈를 다루는 액션이다.
<jsp:useBean id="변수이름" class="클래스이름"/>
<jsp:setProperty name="변수이름" property="속성이름"/>
<jsp:getProperty name="변수이름" property="속성이름"/>
선언
서블릿으로 변환된 JSP 내용은 모두 jspService()메서드에 들어가 있다.
JSP내에서 메서드나 멤버변수를 선언하고 싶을 때 선언 태그를 사용하면된다.
<%! ~ %>
의 형태로 사용하면 된다.
Scriptlet
JSP 파일에서 자바 코드를 작성하는 부분이다.
<% ~ %>
의 형태로 사용한다.
내장객체
JSP 내에서 선언하지 않고 사용하는 객체이다.
서블릿 형태로 변환된 코드 내에 포함되어 있는 멤버변수, 메서드등의 객체로 생각하면 된다.
request
사용자 요청과 관련된 기능을 제공하는 내장객체이다.
주로 클라이언트에서 서버로 전달되는 정보를 처리하려고 사용한다.
가장 대표적인 유형이 HTML을 통해 입력된 값을 JSP에서 가져올 때 사용하는 것이다.
request 주요 메서드
메서드 | 설명 |
---|---|
getParameterNames() | 현재 요청에 포함된 매개 변수의 이름을 열거 형태로 넘김 |
getParameter(name) | 문자열 name과 이름이 같은 매개변수의 값을 가져옴 |
getParameterValues(name) | 문자열 name과 이름이 같은 매개변수의 값을 배열 형태로 가져옴 |
getCookies() | 모든 쿠키 값을 javax.servlet.http.Cookie의 배열 형태로 가져옴 |
getMethod() | 현재 요청이 GET이나 POST 형태로 가져옴 |
getSession() | 현재 세션 객체를 가져옴 |
getRemoteAddr() | 클라이언트의 IP 주소를 알려줌 |
getProtocol() | 현재 서버의 프로토콜을 문자열 형태로 알려줌 |
setCharacterEncoding() | JSP로 전달되는 내용을 지정한 캐릭터셋으로 변환 |
response
request와 반대되는 개념으로 사용자 응답과 관련된 기능을 제공하는 내장객체이다.
response 주요 메서드
메서드 | 설명 |
---|---|
setContentType(type) | type으로 설정 |
setHeader(name, value) | 문자열 name의 이름으로 문자열 value의 값을 헤더로 설정 |
setDateHeader(name, date) | name으로 시간을 헤더에 설정 |
sendError(status, msg) | 오류 코드를 세팅하고 메시지를 보냄 |
sendRedirect(url) | 클라이언트 요청을 다른 페이지로 보냄 |
out
출력 스트림으로 사용자 웹 브라우저로 출력하기 위한 채널이다.
브라우저에 텍스트를 출력하는 데 사용한다.
out 주요 메서드
메서드 | 설명 |
---|---|
getBufferSize() | output buffer의 크기를 바이트로 알려줌 |
getRemaining() | 남아 있는 버퍼의 크기 중 사용 가능한 비율을 알려줌 |
clearBuffer() | 버퍼에 있는 콘텐츠를 모두 지움 |
flush() | 버퍼를 비우고 output stream도 비움 |
close() | output stream을 닫고 버퍼를 비움 |
println(content) | content의 내용을 newline과 함께 출력 |
print(content) | content의 내용을 출력 |
session
HTTP 프로토콜은 비연결형 프로토콜이기 때문에 한 페이지가 출력된 다음에는 연결이 끊어진다.
따라서 로그인 같은 기능의 처리가 힘들다. 이러한 문제점을 해결하기 위한 것이 쿠키와 세션이다.
쿠키는 사용자와 관련된 정보를 PC에 보관하는 방식이고, 세션은 서버에 보관하는 방식이다.
세션이 보안 문제에 유리하고 제약사항이 적은 편이기 때문에 최근에는 대부분 세션을 이용한다.
세션이 최초로 설정되는 것은 웹에 최초로 접속이 이루어졌을 때다.
session 주요 메서드
메서드 | 설명 |
---|---|
getID() | 각 접속에 대한 세션 고유의 ID를 문자열 형태로 반환 |
getCreatingTime() | 세션 생성 시간을 1970/1/1로부터 밀리세컨드 값으로 반환 |
getLastAccessedTime() | 현재 세션으로 마지막 작업한 시간을 밀리세컨드 값으로 반환 |
getMaxInactiveInterval() | 세션 유지 시간을 초로 반환 |
invalidate() | 세션 종료 |
MVC와 JSP 내장객체
MVC 패턴에 따르면 JSP는 뷰의 역할만 수행해야 한다.
컨트롤러에서 처리한 데이터를 JSP로 가져와야하는데 이때 필요한 것이 내장객체이다.
데이터베이스의 기본개념을 익히고 기본적인 SQL문을 알아보겠다.
JSP를 사용하는 이유중 하나인 자바와 SQL을 연동하는 JDBC에 대해서도 알아보겠다.
DB
DB는 관리할 수 있는 형태로 정리된 자료를 말하며 DBMS는 DB를 만들고 사용하기 위한 도구를 지칭한다.
DB는 모두 관계형 데이터베이스에 기본을 두고 있으며 SQL이라는 표준 데이터베이스 관리 언어를 지원한다.
서로 관련된 정보를 모아서 레코드를 만들고 다시 서로 관련된 레코드들을 모아서 데이터 파일을 만든다.
DB의 장점
- 데이터 중복을 최소화할 수 있다.
- 데이터 불일치 문제를 해결할 수 있다.
- 데이터를 쉽게 공유할 수 있다.
- 정보 표준화를 이룰 수 있다.
- 데이터에 대한 보안성을 제공한다.
- 데이터의 무결성이 유지된다.
- 대량의 데이터를 좀더 빠르게 검색할 수 있다.
- 텍스트 이외의 다양한 데이터를 관리할 수 있다.
- 어플리케이션 개발에 도움이 된다.
관계형 데이터베이스
데이터를 효율적으로 관리하려고 데이터에 관계 개념을 사용한 것이다.
데이터의 기본 관리 단위는 테이블이고 칼럼과 로우로 이루어져있다.
관계라는 의미는 테이블 간의 연관관계를 말하는 것으로 관계형 데이터베이스에서는 주 키와 외래 키등을 통해 테이블 간의 관계를 구조화한다.
DB의 테이블
테이블이란 데이터를 공통 속성으로 묶고 분류하여 기록한 형태로 데이터베이스 관리의 기본이다.
칼럼은 데이터를 구별하기 위한 속성이다. 필드라고도 한다.
로우 한줄 단위의 데이터의 집합이다. 레코드라고도 한다.
DB의 키
만약 중복된 데이터가 있다고 했을 때 데이터의 업데이트의 요청을 어떤것에 반영해야하는지 모호할 때가 있다.
이를 해결하기 위해 키를 사용한다.
키
데이터베이스에서는 데이터를 다른 데이터와 구분할 수 있는 고유 정보가 필요한데, 이를 키라고 한다.
키는 관계형 데이터베이스의 대표적인 특징 중 하나이다.
주 키
Primary key.
테이블 하나에서 키 여러개를 가질 수 있지만, 그중 절대적으로 우선시되는 키를 주 키라고 한다.
테이블 하나에서 주 키는 오직 하나이며 로우를 구분해주는 값이다. 중복되는 데이터는 없어야한다.
외래 키
테이블 간의 관계를 나타내고, 데이터의 일관성을 유지하기 위해 사용한다.
SQL
데이터베이스 시스템에서 자료를 처리하는 용도로 사용되는 구조적 데이터 쿼리 언어를 의미한다.
SQL은 크게 DML과 DDL로 나누어진다.
DDL
Data Definition Language의 약자이다.
CREATE TABLE
테이블을 생성할 때 사용하는 명령어이다.
자료가 들어있는 테이블의 구조를 변경하는 것은 쉽지 않기에 처음 만들 때 잘만들어야한다.
ALTER TABLE
테이블 구조를 변경할 때 사용하는 명령어이다.
그러나 변경할 때 제약사항이 있다.
테이블에 자료가 없는 경우
- 칼럼의 데이터 자료형을 변경할 수 있다.
- 칼럼의 폭을 줄이거나 늘릴 수 있다.
- NULL이나 NOT NULL 속성을 갖는 칼럼을 추가시킬 수 있다.
테이블에 자료가 있는 경우
- 칼럼의 데이터 자료형을 변경할 수 없다.
- 폭을 줄일 수는 없지만, 늘릴 수는 있다.
- NOT NULL 필드는 추가할 수 있으나 NULL은 추가할 수 없다.
DROP TABLE
테이블을 완전 삭제할 때 사용하는 명령어이다.
DML
Data Manipulation Language의 약자이다.
INSERT
테이블에 새로운 데이터를 추가할 때 사용한다.
SELECT
테이블에서 데이터를 조회하는 데 사용하는 구문이다.
UPDATE
데이터의 내용을 업데이트 시킬 때 사용한다.
DELETE
데이터를 삭제할 때 사용하는 명령이다.
JDBC
Java DataBase Connectivity의 약자로 자바 프로그램에서 다른 기종간의 DB를 접속할 수 있도록 만든 API 규격이다.
JDBC의 프로그래밍 단계
- JDBC 드라이버 로드
- DB 연결
- Statement 생성
- SQL문 전송
- 결과 받기
- 연결 해제
JDBC 드라이버 로드
데이터베이스에 접속하려면 해당 데이터베이스의 JDBC 드라이버를 로드해야한다.
JDK에 있는 JDBC는 구현 내용없이 규격만 포함되어 있다.
System.setProperty()와 Class.forName()클래스를 사용해서 로드한다.
DB 연결
데이터베이스와 연결하려면 Connection 클래스의 인스턴스가 필요하며 DriverManager.getConnection() 메서드를 이용해서 연결할 수 있다.
Statement 생성
Statement는 데이터베이스 연결로부터 SQL문을 수행할 수 있도록 해주는 클래스이다.
executeQuery()를 이용해서 SELECT문을 executeUpdate()를 사용하여 UPDATE, DELETE를 수행한다.
'CS지식' 카테고리의 다른 글
C++를 공부해보자:) (0) | 2023.11.30 |
---|---|
정보처리기사의 주요 개념을 요약해봤다:) (0) | 2023.11.27 |
암호수학에 대해서 공부해보자:) (0) | 2023.11.27 |
암호론에 대해서 공부해보자:) (0) | 2023.11.27 |
추상 자료형 트리에 대해서 알아보자:) (0) | 2023.11.27 |