1. 자바 웹 개발 시작하기
(6주차 : 커뮤니티를 만들어보자!)
2011. 12. 02
DEVELOPMENT #2
이덕곤
2. § 다시 보는 스프링
프레임워크
§ 단순함에서 발견하는 아름다움
§ IoC (Inversion of Control)
§ DI (Dependency Injection)
§ AOP (Aspect Oriented Programming)
§ 중간 정리를 하는 시간… (프로젝트 범위의 설정)
3. § 간단한 게시판을 커뮤니티를 만들어보자!
§ DataBase : MySQL, JDBC, DBCP
§ 하이버네이트, 기초 쿼리(CRUD)
§ Transaction(TX)
§ 쿠키와 세션
§ 커뮤니티 프로젝트의 시작
4. § DB (DataBase)
§ 하나 이상의 자료를 저장하고 효율적으로 관리하기
위한 데이터 집합
§ 공유의 목적으로, 체계적으로 정리된 정보를 효율적
으로 관리하고 검색할 수 있는 정보의 집합
§ DBMS (DataBase Management System)
§ 데이터베이스를 구성하고 운영하기 위해 구성된
소프트웨어 시스템으로 오라클, MySQL등 일반적으로
알고 있는 데이터베이스제품이 DBMS다
5. § 관계형 데이터베이스(Relational Database, RDB)
§ 데이터를 표와 같이 행과 열의 관계로 표현하는 데이터베이스
§ SQL(Structured Query Language)
§ 데이터베이스에 접근하여 데이터를 삽입, 수정, 삭제하기 위한
데이터베이스 질의 언어
관계형 데이터베이스
필드(열)
회원 테이블
아이디
레코드(행)
비밀번호
이름
생년월일
onlyjiny
1111
이명진
1976.8.2
grace1105
2222
변은혜
1976.11.5
jabook
3333
자북
1998.3.4
6. DDL (Data Definition Language) : 데이터와 그 구조를 정의 합니다.
내용
SQL문
CREATE
데이터베이스 객체를 생성 합니다.
DROP
데이터베이스 객체를 삭제 합니다.
ALTER
기존에 존재하는 데이터베이스 객체를 다시 정의하는 역할을 합니다.
DML (Data Manipulation Language) : 데이터의 검색과 수정등의 처리
내용
SQL문
INSERT
데이터베이스 객체에 데이터를 입력
DELETE
데이터베이스 객체에 데이터를 삭제
UPDATE
기존에 존재하는 데이터베이스 객체안의 데이터 수정
SELECT
데이터베이스 객체로부터 데이터를 검색
DCL (Data Control Language) : 데이터베이스 사용자의 권한을 제어
SQL문
내용
GRANT
데이터베이스 객체에 권한을 부여 합니다.
REVOKE
이미 부여된 데이터베이스객체의 권한을 취소합니다.
7. § CRUD라고도 함
§ 입력
§ INSERT INTO 테이블명(필드명, 필드명) VALUES(값, 값);
§ 수정
§ UPDATE 테이블명 SET 필드명=값, 필드명=값 WHERE 조건;
§ 삭제
§ DELETE FROM 테이블명 WHERE 조건;
§ 선택
§ SELECT 보여질 필드명 FROM 테이블명 WHERE 조건;
8. § Open Source managed by Jboss Group
§ 객체를 RDB에 매핑해서 저장하는
ORM(Object-Relational Mapping) Tool
§ 객체 모델링과 그에 따른 모델 과
Relational Data Model 사이에는 개념적 불일치가 존재
=> ORM 자동화 도구들의 등장
§ hibernate은 가장 강력하고 lightWeight하며 조작이
간편하다
§ DB 변경 시 어플리케이션 소스는 전혀 수정하지 않음
§ 성공사례: AT&T, PriceWaterhouseCoopers
12. § JDBC(Java Database Connectivity)
§ 자바를 이용해 데이터베이스 프로그래밍을 하기 위한 표준 인터페이스
§ 자바 프로그램에서 데이터베이스 질의(SQL)를 실행하기 위한 자바 API
§ 데이터베이스 및 애플리케이션 개발자들을 위한 표준 API를 제공
Oracle용 JDBC 드라이버
자바 프로그램
JDBC
Interface
Oracle
MS-SQL용 JDBC 드라이버
Microsoft SQL
MySQL용 JDBC 드라이버
MySQL
13. § Pooling 기법
§ 미리 여러 개의 데이터베이스 Connection을 생성해서 보관
§ Connection이 필요할 때마다 Connection Pool로부터 하나씩 꺼내서
사용하고 사용이 끝나면 다시 Connection을 보관
§ Connection Pool이 데이터베이스의 연결과 해제를 직접 관리
2
Connection 요청
4
ConnectionFactory
Class
Connection Pool
Class
PoolingTest
JSP
Connection 사용
Connection
3
Connection 제공
Connection
Connection
Connection
Connection
5
Connection 반납
Connection
Connection Pool
Connection
1
Connection
생성 및 보관
Database
14. § 트랜잭션(Transaction) : 일련의 연산 집합으로 논리적 기능을 수행
하기 위한 작업의 단위
§ 동시성제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 동시에
수행되는 트랜젝션들 사이의 상호작용을 제어
§ 회복제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 업데이트를
하는 동안 시스템 장애에도 데이터베이스의 기존 상태가 유지
§ ACID 규칙
§ 원자성(atomicity) : 자기 연산을 전부 또는 전무 실행만 한다
§ 일관성(consistency) : 트랜잭션 실행 후 일관성 있는 상태로 변환
§ 격리성(isolation) : 트랜잭션 실행 중 연산의 중간 결과에 다른 트랜잭션이 접근할
수 없다
§ 영속성(durability) : 실행이 성공적으로 완료되면 그 결과는 영속적이다.
16. § 역시 POJO기반
@Entity
§ 저장할 정보
public class User
@Table(name = "byuri_user") //
저장하는사람 ID
{
§ 사용자 번호 : int, 자동 증가
@Id
§ 아이디 : String, 20자
@Column(name = “user_idx")
@GeneratedValue(strategy = GenerationType.AUTO)
§ 비밀번호 : String, 20자
private int userIdx; // PK, 자동생성
§ 이름 : String, 20자
@Column(length = 16, unique = true)
private String userId;
§ 별명 : String, 20자
public int getUserIdx() {
§ 전자우편 : String, 50자
return userIdx;
}
public void setUserIdx(int userIdx) {
§ 테이블명 : ID_user
this.userIdx = userIdx;
}
}
17. § @Service
§ @Transactional
@Service
public class UserServiceImpl implements UserService
{
@Autowired
private UserDao userDao;
§ 가입을 합니다
@Autowired
private BoardDao boardDao;
§ 가입 축하 글을
작성합니다
@Override
@Transactional
public int joinUser(User user)
§ 중간에 에러가
{
……
발생 할 경우
§ 가입을 취소 합니다
}
}
18. § HTTP는 상태를 기억하지 않는다
구분
쿠키(Cookie)
세션(Session)
저장
위치
클라이언트(Client)
서버(Server)
저장
형식
텍스트 형식
Object 형식
종료
시점
쿠키 저장 시 설정
정확한 시점을 알 수 없음
(설정하지 않으면 브라우저 종료 시 소멸)
자 원 클라이언트의 자원을 사용
서버의 자원을 사용
용량
제한
서버가 허용하는 한
용량에 제한이 없음
한 도메인 당 20개,
쿠키 하나 당 4KB, 총 300개
19. § 서로 다른 호스트간, 즉 클라이언트와 서버간에 네트워크
연결이 지속적으로 유지되고 있는 상태
§ HTTP 프로토콜의 특성상 연결이 지속적인 유지 불가
§ 한 클라이언트가 서버의 사이트를 방문하면 JSP 엔진은 유일한 ID를 부여(
session ID라 부름)
§ Session ID 이용 방법
§ 각각의 클라이언트에게 유일한 sessionID를 부여하여 서로 다른 서버 접
근 권한을 부여
§ Session 객체마다 저장해 둔 데이터를 이용하여 서로 다른 클라이언트의
요구에 맞는 서비스 제공 가능
§ 클라이언트 자신만의 고유한 페이지를 열어 놓아서 생길 수 있는 보안상의
문제 해결 가능
20. § User userSession = userDao.getUser(userIdx);
§ HttpSession session = request.getSession();
§ session.setAttribute("userSession", userSession);
메소드
반환값
설 명
getAttribute(name)
Object
세션에 저장되어 있는 속성 값중 name에 해당하는 Object 객체형으로 반환
getAttributeName()
String 배열
세션 객체에 값을 저장하고 있는 각각의 속성의 이름 모두를 배열로 반환
getCreationTime()
long
세션이 형성될 때 시간을 ’70년 1월 1일 자정기준으로 계산된 1/1000초 단위 값
으로 반환
getID()
String
클라이언트에 할당된 sessionID값의 최근 접속시간을 long 형으로 반환
getLastAcessedTime()
long
세션동안 클라이언트가 마지막으로 서버에 보낸 요청시간을 반환
getMaxInactiveInterval(
)
int
사용자가 세션을 부여받은 후 아무것도 하지 않을 깨 자동으로 세션을 종료하도
록 설정된 시간 값
incadidate()
void
현재 실행중인 세션을 무효화 시킴
inNew()
boolean
현재 실행중인 세션이 새로운 것인지 여부를 논리값으로 반환
setAttribute()
void
현재 세션이 새로운 이름의 속성을 만들고 그 속성에 값을 할당
removeAttribute()
void
현재 세션에 저장되어 있는 속성값들 중 지정한 속성 값을 지움
setMaxInactiveInterval()
void
세션을 할당받고 아무런 요청이 없을 때부터 세션을 유지하는 기간 지정
21. § 데이터베이스에 대해 알아보았습니다
§ JDBC에 대해 알아보았습니다
§ DBCP에 대해 이해하였습니다.
§ 하이버네이트, 기초 쿼리(CRUD)를 이해 합니다
§ 서비스를 만들어 보았습니다
§ Transaction(TX)을 이해하고 구현해 보았습니다
§ 쿠키와 세션을 이해하고 세션을 사용해 봅니다
22. § 테스트와 국제화
§ jUnit : 단위 테스트 전략 알아보기
§ 글쓰기 테스트
§ 국제화
§ Validation
§ 예외처리
§ 과제 : 국제화된 커뮤니티로 만들어 오기