자바 웹 개발 시작하기 (6주차 : 커뮤니티를...

24
자바 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!) 2011. 12. 02 DEVELOPMENT #2 이덕곤

Upload: dk-lee

Post on 20-Dec-2014

511 views

Category:

Technology


7 download

DESCRIPTION

Java web development 06 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!) 2011. 12. 02 벌써 2년도 넘은 자료지만 그래도 필요하신분이 있을지 몰라서... (지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)

TRANSCRIPT

Page 1: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

2011. 12. 02

DEVELOPMENT #2

이덕곤

Page 2: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  다시 보는 스프링 프레임워크 §  단순함에서 발견하는 아름다움

§  IoC (Inversion of Control)

§  DI (Dependency Injection)

§  AOP (Aspect Oriented Programming)

§  중간 정리를 하는 시간… (프로젝트 범위의 설정)

Page 3: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  간단한 게시판을 커뮤니티를 만들어보자!

§  DataBase : MySQL, JDBC, DBCP

§  하이버네이트, 기초 쿼리(CRUD)

§  Transaction(TX)

§  쿠키와 세션

§  커뮤니티 프로젝트의 시작

Page 4: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  DB (DataBase) §  하나 이상의 자료를 저장하고 효율적으로 관리하기

위한 데이터 집합

§  공유의 목적으로, 체계적으로 정리된 정보를 효율적 으로 관리하고 검색할 수 있는 정보의 집합

§  DBMS (DataBase Management System)

§  데이터베이스를 구성하고 운영하기 위해 구성된 소프트웨어 시스템으로 오라클, MySQL등 일반적으로 알고 있는 데이터베이스제품이 DBMS다

Page 5: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

회원 테이블

관계형 데이터베이스

레코드(행)

필드(열)

§  관계형 데이터베이스(Relational Database, RDB) §  데이터를 표와 같이 행과 열의 관계로 표현하는 데이터베이스

§  SQL(Structured Query Language) §  데이터베이스에 접근하여 데이터를 삽입, 수정, 삭제하기 위한

데이터베이스 질의 언어

아이디 비밀번호 이름 생년월일

onlyjiny 1111 이명진 1976.8.2

grace1105 2222 변은혜 1976.11.5

jabook 3333 자북 1998.3.4

Page 6: 자바 웹 개발 시작하기 (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 이미 부여된 데이터베이스객체의 권한을 취소합니다.

Page 7: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  CRUD라고도 함

§  입력 §  INSERT INTO 테이블명(필드명, 필드명) VALUES(값, 값);

§  수정 §  UPDATE 테이블명 SET 필드명=값, 필드명=값 WHERE 조건;

§  삭제 §  DELETE FROM 테이블명 WHERE 조건;

§  선택

§  SELECT 보여질 필드명 FROM 테이블명 WHERE 조건;

Page 8: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  Open Source managed by Jboss Group

§  객체를 RDB에 매핑해서 저장하는 ORM(Object-Relational Mapping) Tool

§  객체 모델링과 그에 따른 모델 과 Relational Data Model 사이에는 개념적 불일치가 존재 => ORM 자동화 도구들의 등장

§  hibernate은 가장 강력하고 lightWeight하며 조작이 간편하다

§  DB 변경 시 어플리케이션 소스는 전혀 수정하지 않음

§  성공사례: AT&T, PriceWaterhouseCoopers

Page 9: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

Transient Objects Business Layer

Session Factory

Transaction Factory

Connection Provider

Session Transaction

Persistence Layer

Persistence Objects

JNDI JDBC JTA

Hibernate API J2EE API

Page 10: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  this.hibernateTemplate.save(board);

§  this.hibernateTemplate.update(board);

§  this.hibernateTemplate.delete(board);

§  Board board = (Board) this.hibernateTemplate.execute(new HibernateCallback<Object>(){

public Object doInHibernate(Session session) { Criteria criteria = session.createCriteria(Board.class); criteria.add(Restrictions.eq("boardIdx", boardIdx)); return criteria.uniqueResult(); }

});

Page 11: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  criteria.addOrder(Order.asc("postIdx"));

§  criteria.setMaxResults(1);

§  return criteria.uniqueResult();

§  Criterion subject = Restrictions.like("subject", "%" + 검색어 + "%");

§  Criterion summary = Restrictions.like("summary", "%" + 검색어 + "%");

§  LogicalExpression orExp = Restrictions.or(subject, summary);

§  criteria.add(orExp);

§  criteria.add(Restrictions.ge("regDate", startDate));

§  criteria.add(Restrictions.le("regDate", endDate));

Page 12: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  JDBC(Java Database Connectivity) §  자바를 이용해 데이터베이스 프로그래밍을 하기 위한 표준 인터페이스

§  자바 프로그램에서 데이터베이스 질의(SQL)를 실행하기 위한 자바 API

§  데이터베이스 및 애플리케이션 개발자들을 위한 표준 API를 제공

자바 프로그램 JDBC Interface

Oracle

Microsoft SQL

MySQL

Oracle용 JDBC 드라이버

MS-SQL용 JDBC 드라이버

MySQL용 JDBC 드라이버

Page 13: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

PoolingTest JSP

Connection Pool Class

Connection Pool

Connection

Connection

Connection

ConnectionFactory Class

Database

Connection

Connection

Connection 생성 및 보관 1

Connection 요청 2

Connection 제공 3

Connection 사용 4

Connection 반납 5 Connection Connection

§  Pooling 기법 §  미리 여러 개의 데이터베이스 Connection을 생성해서 보관

§  Connection이 필요할 때마다 Connection Pool로부터 하나씩 꺼내서 사용하고 사용이 끝나면 다시 Connection을 보관

§  Connection Pool이 데이터베이스의 연결과 해제를 직접 관리

Page 14: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  트랜잭션(Transaction) : 일련의 연산 집합으로 논리적 기능을 수행하기 위한 작업의 단위 §  동시성제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 동시에

수행되는 트랜젝션들 사이의 상호작용을 제어

§  회복제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 업데이트를 하는 동안 시스템 장애에도 데이터베이스의 기존 상태가 유지

§  ACID 규칙

§  원자성(atomicity) : 자기 연산을 전부 또는 전무 실행만 한다

§  일관성(consistency) : 트랜잭션 실행 후 일관성 있는 상태로 변환

§  격리성(isolation) : 트랜잭션 실행 중 연산의 중간 결과에 다른 트랜잭션이 접근할 수 없다

§  영속성(durability) : 실행이 성공적으로 완료되면 그 결과는 영속적이다.

Page 15: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  라이브러리 추가 §  org.springframework.transaction-3.0.6.RELEASE.jar

§  applicationContext.xml 수정 §  xmlns:tx="http://www.springframework.org/schema/tx"

§  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

§  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

§  <property name="sessionFactory">

§  <ref bean="sessionFactory" /></property></bean>

§  <tx:annotation-driven transaction-manager="transactionManager" />

Page 16: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  역시 POJO기반

§  저장할 정보 §  사용자 번호 : int, 자동 증가

§  아이디 : String, 20자

§  비밀번호 : String, 20자

§  이름 : String, 20자

§  별명 : String, 20자

§  전자우편 : String, 50자

§  테이블명 : ID_user

@Entity

@Table(name = "byuri_user") // 저장하는사람 ID

public class User

{

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

@Column(name = “user_idx")

private int userIdx; // PK, 자동생성

@Column(length = 16, unique = true)

private String userId;

public int getUserIdx() {

return userIdx;

}

public void setUserIdx(int userIdx) {

this.userIdx = userIdx;

}

}

Page 17: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  @Service

§  @Transactional

§  가입을 합니다

§  가입 축하 글을 작성합니다

§  중간에 에러가 발생 할 경우

§  가입을 취소 합니다

@Service

public class UserServiceImpl implements UserService

{

@Autowired

private UserDao userDao;

@Autowired

private BoardDao boardDao;

@Override

@Transactional

public int joinUser(User user)

{

……

}

}

Page 18: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  HTTP는 상태를 기억하지 않는다

구분 쿠키(Cookie) 세션(Session) 저장 위치 클라이언트(Client) 서버(Server)

저장 형식 텍스트 형식 Object 형식

종료 시점

쿠키 저장 시 설정 (설정하지 않으면 브라우저 종료 시 소멸)

정확한 시점을 알 수 없음

자 원 클라이언트의 자원을 사용 서버의 자원을 사용

용량 제한

한 도메인 당 20개, 쿠키 하나 당 4KB, 총 300개

서버가 허용하는 한 용량에 제한이 없음

Page 19: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  서로 다른 호스트간, 즉 클라이언트와 서버간에 네트워크 연결이 지속적으로 유지되고 있는 상태 §  HTTP 프로토콜의 특성상 연결이 지속적인 유지 불가

§  한 클라이언트가 서버의 사이트를 방문하면 JSP 엔진은 유일한 ID를 부여(session ID라 부름)

§  Session ID 이용 방법 §  각각의 클라이언트에게 유일한 sessionID를 부여하여 서로 다른 서버 접

근 권한을 부여

§  Session 객체마다 저장해 둔 데이터를 이용하여 서로 다른 클라이언트의 요구에 맞는 서비스 제공 가능

§  클라이언트 자신만의 고유한 페이지를 열어 놓아서 생길 수 있는 보안상의 문제 해결 가능

Page 20: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  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 세션을 할당받고 아무런 요청이 없을 때부터 세션을 유지하는 기간 지정

Page 21: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  데이터베이스에 대해 알아보았습니다

§  JDBC에 대해 알아보았습니다

§  DBCP에 대해 이해하였습니다.

§  하이버네이트, 기초 쿼리(CRUD)를 이해 합니다

§  서비스를 만들어 보았습니다

§  Transaction(TX)을 이해하고 구현해 보았습니다

§  쿠키와 세션을 이해하고 세션을 사용해 봅니다

Page 22: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  테스트와 국제화

§  jUnit : 단위 테스트 전략 알아보기

§  글쓰기 테스트

§  국제화

§  Validation

§  예외처리

§  과제 : 국제화된 커뮤니티로 만들어 오기

Page 23: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

§  http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

§  http://ko.wikipedia.org/wiki/SQL

§  http://en.wikipedia.org/wiki/SQL

§  http://www.hibernate.org/

§  http://toby.epril.com/?p=468

§  http://antop.tistory.com/25

§  http://creatorw.tistory.com/42

§  http://www.javajigi.net/pages/viewpage.action?pageId=5415

§  http://wiki.javajigi.net/pages/viewpage.action?pageId=297 §  http://w.nya.kr/doku.php?id=%EC%88%98%EC%97%85:%EC%9B%B9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9

E%98%EB%B0%8D_%EC%84%A4%EA%B3%84:%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%EC%9D%98_%EB%8C%80%ED%99%94_%EC%BF%A0%ED%82%A4%EC%99%80_%EC%84%B8%EC%85%98

Page 24: 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)