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

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

Dec 20, 2014

Download

Technology

DK Lee

Java web development 06

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

벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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주차 : 커뮤니티를 만들어보자!)