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

0 views
1,499 views

Published on

Java web development 06

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

벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
0
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
84
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. 자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!) 2011. 12. 02 DEVELOPMENT #2 이덕곤
  2. 2. §  다시 보는 스프링 프레임워크 §  단순함에서 발견하는 아름다움 §  IoC (Inversion of Control) §  DI (Dependency Injection) §  AOP (Aspect Oriented Programming) §  중간 정리를 하는 시간… (프로젝트 범위의 설정)
  3. 3. §  간단한 게시판을 커뮤니티를 만들어보자! §  DataBase : MySQL, JDBC, DBCP §  하이버네이트, 기초 쿼리(CRUD) §  Transaction(TX) §  쿠키와 세션 §  커뮤니티 프로젝트의 시작
  4. 4. §  DB (DataBase) §  하나 이상의 자료를 저장하고 효율적으로 관리하기 위한 데이터 집합 §  공유의 목적으로, 체계적으로 정리된 정보를 효율적 으로 관리하고 검색할 수 있는 정보의 집합 §  DBMS (DataBase Management System) §  데이터베이스를 구성하고 운영하기 위해 구성된 소프트웨어 시스템으로 오라클, MySQL등 일반적으로 알고 있는 데이터베이스제품이 DBMS다
  5. 5. §  관계형 데이터베이스(Relational Database, RDB) §  데이터를 표와 같이 행과 열의 관계로 표현하는 데이터베이스 §  SQL(Structured Query Language) §  데이터베이스에 접근하여 데이터를 삽입, 수정, 삭제하기 위한 데이터베이스 질의 언어 관계형 데이터베이스 필드(열) 회원 테이블 아이디 레코드(행) 비밀번호 이름 생년월일 onlyjiny 1111 이명진 1976.8.2 grace1105 2222 변은혜 1976.11.5 jabook 3333 자북 1998.3.4
  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 이미 부여된 데이터베이스객체의 권한을 취소합니다.
  7. 7. §  CRUD라고도 함 §  입력 §  INSERT INTO 테이블명(필드명, 필드명) VALUES(값, 값); §  수정 §  UPDATE 테이블명 SET 필드명=값, 필드명=값 WHERE 조건; §  삭제 §  DELETE FROM 테이블명 WHERE 조건; §  선택 §  SELECT 보여질 필드명 FROM 테이블명 WHERE 조건;
  8. 8. §  Open Source managed by Jboss Group §  객체를 RDB에 매핑해서 저장하는 ORM(Object-Relational Mapping) Tool §  객체 모델링과 그에 따른 모델 과 Relational Data Model 사이에는 개념적 불일치가 존재 => ORM 자동화 도구들의 등장 §  hibernate은 가장 강력하고 lightWeight하며 조작이 간편하다 §  DB 변경 시 어플리케이션 소스는 전혀 수정하지 않음 §  성공사례: AT&T, PriceWaterhouseCoopers
  9. 9. Transient Objects Business Layer Persistence Objects Persistence Layer Session Factory Transaction Factory Connection Provider JNDI Hibernate API Session JDBC J2EE API Transaction JTA
  10. 10. §  this.hibernateTemplate.save(board); §  this.hibernateTemplate.update(board); §  this.hibernateTemplate.delete(board); §  Board board = (Board) this.hibernateTemplate.execute(new Hiberna teCallback<Object>(){ public Object doInHibernate(Session session) { Criteria criteria = session.createCriteria(Board.class); criteria.add(Restrictions.eq("boardIdx", boardIdx)); return criteria.uniqueResult(); } });
  11. 11. §  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));
  12. 12. §  JDBC(Java Database Connectivity) §  자바를 이용해 데이터베이스 프로그래밍을 하기 위한 표준 인터페이스 §  자바 프로그램에서 데이터베이스 질의(SQL)를 실행하기 위한 자바 API §  데이터베이스 및 애플리케이션 개발자들을 위한 표준 API를 제공 Oracle용 JDBC 드라이버 자바 프로그램 JDBC Interface Oracle MS-SQL용 JDBC 드라이버 Microsoft SQL MySQL용 JDBC 드라이버 MySQL
  13. 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. 14. §  트랜잭션(Transaction) : 일련의 연산 집합으로 논리적 기능을 수행 하기 위한 작업의 단위 §  동시성제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 동시에 수행되는 트랜젝션들 사이의 상호작용을 제어 §  회복제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 업데이트를 하는 동안 시스템 장애에도 데이터베이스의 기존 상태가 유지 §  ACID 규칙 §  원자성(atomicity) : 자기 연산을 전부 또는 전무 실행만 한다 §  일관성(consistency) : 트랜잭션 실행 후 일관성 있는 상태로 변환 §  격리성(isolation) : 트랜잭션 실행 중 연산의 중간 결과에 다른 트랜잭션이 접근할 수 없다 §  영속성(durability) : 실행이 성공적으로 완료되면 그 결과는 영속적이다.
  15. 15. §  라이브러리 추가 §  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.hibern ate3.HibernateTransactionManager"> §  <property name="sessionFactory"> §  <ref bean="sessionFactory" /></property></bean> §  <tx:annotation-driven transaction-manager="transactionManager" />
  16. 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. 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. 18. §  HTTP는 상태를 기억하지 않는다 구분 쿠키(Cookie) 세션(Session) 저장 위치 클라이언트(Client) 서버(Server) 저장 형식 텍스트 형식 Object 형식 종료 시점 쿠키 저장 시 설정 정확한 시점을 알 수 없음 (설정하지 않으면 브라우저 종료 시 소멸) 자 원 클라이언트의 자원을 사용 서버의 자원을 사용 용량 제한 서버가 허용하는 한 용량에 제한이 없음 한 도메인 당 20개, 쿠키 하나 당 4KB, 총 300개
  19. 19. §  서로 다른 호스트간, 즉 클라이언트와 서버간에 네트워크 연결이 지속적으로 유지되고 있는 상태 §  HTTP 프로토콜의 특성상 연결이 지속적인 유지 불가 §  한 클라이언트가 서버의 사이트를 방문하면 JSP 엔진은 유일한 ID를 부여( session ID라 부름) §  Session ID 이용 방법 §  각각의 클라이언트에게 유일한 sessionID를 부여하여 서로 다른 서버 접 근 권한을 부여 §  Session 객체마다 저장해 둔 데이터를 이용하여 서로 다른 클라이언트의 요구에 맞는 서비스 제공 가능 §  클라이언트 자신만의 고유한 페이지를 열어 놓아서 생길 수 있는 보안상의 문제 해결 가능
  20. 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. 21. §  데이터베이스에 대해 알아보았습니다 §  JDBC에 대해 알아보았습니다 §  DBCP에 대해 이해하였습니다. §  하이버네이트, 기초 쿼리(CRUD)를 이해 합니다 §  서비스를 만들어 보았습니다 §  Transaction(TX)을 이해하고 구현해 보았습니다 §  쿠키와 세션을 이해하고 세션을 사용해 봅니다
  22. 22. §  테스트와 국제화 §  jUnit : 단위 테스트 전략 알아보기 §  글쓰기 테스트 §  국제화 §  Validation §  예외처리 §  과제 : 국제화된 커뮤니티로 만들어 오기
  23. 23. §  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%B 8%EC%99%80%EC%9D%98_%EB%8C%80%ED%99%94_%EC%BF%A0%ED%82%A4%EC%99%80_%EC%84%B8%E C%85%98

×