SlideShare a Scribd company logo
1 of 24
Download to read offline
자바 웹 개발 시작하기
(6주차 : 커뮤니티를 만들어보자!)
2011. 12. 02

DEVELOPMENT #2

이덕곤
§  다시 보는 스프링

프레임워크

§  단순함에서 발견하는 아름다움

§  IoC (Inversion of Control)
§  DI (Dependency Injection)
§  AOP (Aspect Oriented Programming)
§  중간 정리를 하는 시간… (프로젝트 범위의 설정)
§  간단한 게시판을 커뮤니티를 만들어보자!
§  DataBase : MySQL, JDBC, DBCP
§  하이버네이트, 기초 쿼리(CRUD)
§  Transaction(TX)
§  쿠키와 세션
§  커뮤니티 프로젝트의 시작
§  DB (DataBase)
§  하나 이상의 자료를 저장하고 효율적으로 관리하기
위한 데이터 집합
§  공유의 목적으로, 체계적으로 정리된 정보를 효율적
으로 관리하고 검색할 수 있는 정보의 집합

§  DBMS (DataBase Management System)
§  데이터베이스를 구성하고 운영하기 위해 구성된
소프트웨어 시스템으로 오라클, MySQL등 일반적으로
알고 있는 데이터베이스제품이 DBMS다
§  관계형 데이터베이스(Relational Database, RDB)
§  데이터를 표와 같이 행과 열의 관계로 표현하는 데이터베이스

§  SQL(Structured Query Language)
§  데이터베이스에 접근하여 데이터를 삽입, 수정, 삭제하기 위한
데이터베이스 질의 언어
관계형 데이터베이스

필드(열)
회원 테이블
아이디

레코드(행)

비밀번호

이름

생년월일

onlyjiny

1111

이명진

1976.8.2

grace1105

2222

변은혜

1976.11.5

jabook

3333

자북

1998.3.4
DDL (Data Definition Language) : 데이터와 그 구조를 정의 합니다.
내용

SQL문
CREATE

데이터베이스 객체를 생성 합니다.

DROP

데이터베이스 객체를 삭제 합니다.

ALTER

기존에 존재하는 데이터베이스 객체를 다시 정의하는 역할을 합니다.

DML (Data Manipulation Language) : 데이터의 검색과 수정등의 처리
내용

SQL문
INSERT

데이터베이스 객체에 데이터를 입력

DELETE

데이터베이스 객체에 데이터를 삭제

UPDATE

기존에 존재하는 데이터베이스 객체안의 데이터 수정

SELECT

데이터베이스 객체로부터 데이터를 검색

DCL (Data Control Language) : 데이터베이스 사용자의 권한을 제어
SQL문

내용

GRANT

데이터베이스 객체에 권한을 부여 합니다.

REVOKE

이미 부여된 데이터베이스객체의 권한을 취소합니다.
§  CRUD라고도 함
§  입력
§  INSERT INTO 테이블명(필드명, 필드명) VALUES(값, 값);

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

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

§  선택
§  SELECT 보여질 필드명 FROM 테이블명 WHERE 조건;
§  Open Source managed by Jboss Group
§  객체를 RDB에 매핑해서 저장하는
ORM(Object-Relational Mapping) Tool
§  객체 모델링과 그에 따른 모델 과
Relational Data Model 사이에는 개념적 불일치가 존재
=> ORM 자동화 도구들의 등장
§  hibernate은 가장 강력하고 lightWeight하며 조작이
간편하다
§  DB 변경 시 어플리케이션 소스는 전혀 수정하지 않음
§  성공사례: AT&T, PriceWaterhouseCoopers
Transient
Objects

Business Layer
Persistence
Objects

Persistence Layer

Session Factory
Transaction
Factory

Connection
Provider

JNDI

Hibernate API

Session

JDBC

J2EE API

Transaction

JTA
§  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();
}
});
§  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));
§  JDBC(Java Database Connectivity)
§  자바를 이용해 데이터베이스 프로그래밍을 하기 위한 표준 인터페이스
§  자바 프로그램에서 데이터베이스 질의(SQL)를 실행하기 위한 자바 API
§  데이터베이스 및 애플리케이션 개발자들을 위한 표준 API를 제공

Oracle용 JDBC 드라이버

자바 프로그램

JDBC
Interface

Oracle

MS-SQL용 JDBC 드라이버

Microsoft SQL

MySQL용 JDBC 드라이버

MySQL
§  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
§  트랜잭션(Transaction) : 일련의 연산 집합으로 논리적 기능을 수행
하기 위한 작업의 단위
§  동시성제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 동시에
수행되는 트랜젝션들 사이의 상호작용을 제어
§  회복제어 모듈 : 데이터베이스를 일관성 있게 유지하기 위하여 업데이트를
하는 동안 시스템 장애에도 데이터베이스의 기존 상태가 유지

§  ACID 규칙
§  원자성(atomicity) : 자기 연산을 전부 또는 전무 실행만 한다
§  일관성(consistency) : 트랜잭션 실행 후 일관성 있는 상태로 변환
§  격리성(isolation) : 트랜잭션 실행 중 연산의 중간 결과에 다른 트랜잭션이 접근할
수 없다

§  영속성(durability) : 실행이 성공적으로 완료되면 그 결과는 영속적이다.
§  라이브러리 추가
§  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" />
§  역시 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;
}
}
§  @Service
§  @Transactional

@Service
public class UserServiceImpl implements UserService
{
@Autowired
private UserDao userDao;

§  가입을 합니다

@Autowired
private BoardDao boardDao;

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

@Override
@Transactional
public int joinUser(User user)

§  중간에 에러가

{
……

발생 할 경우
§  가입을 취소 합니다

}
}
§  HTTP는 상태를 기억하지 않는다
구분

쿠키(Cookie)

세션(Session)

저장
위치

클라이언트(Client)

서버(Server)

저장
형식

텍스트 형식

Object 형식

종료
시점

쿠키 저장 시 설정

정확한 시점을 알 수 없음

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

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

서버의 자원을 사용

용량
제한

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

한 도메인 당 20개,
쿠키 하나 당 4KB, 총 300개
§  서로 다른 호스트간, 즉 클라이언트와 서버간에 네트워크
연결이 지속적으로 유지되고 있는 상태
§  HTTP 프로토콜의 특성상 연결이 지속적인 유지 불가
§  한 클라이언트가 서버의 사이트를 방문하면 JSP 엔진은 유일한 ID를 부여(
session ID라 부름)

§  Session ID 이용 방법
§  각각의 클라이언트에게 유일한 sessionID를 부여하여 서로 다른 서버 접
근 권한을 부여
§  Session 객체마다 저장해 둔 데이터를 이용하여 서로 다른 클라이언트의
요구에 맞는 서비스 제공 가능
§  클라이언트 자신만의 고유한 페이지를 열어 놓아서 생길 수 있는 보안상의
문제 해결 가능
§  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

세션을 할당받고 아무런 요청이 없을 때부터 세션을 유지하는 기간 지정
§  데이터베이스에 대해 알아보았습니다
§  JDBC에 대해 알아보았습니다
§  DBCP에 대해 이해하였습니다.
§  하이버네이트, 기초 쿼리(CRUD)를 이해 합니다
§  서비스를 만들어 보았습니다
§  Transaction(TX)을 이해하고 구현해 보았습니다
§  쿠키와 세션을 이해하고 세션을 사용해 봅니다
§  테스트와 국제화
§  jUnit : 단위 테스트 전략 알아보기
§  글쓰기 테스트

§  국제화
§  Validation
§  예외처리
§  과제 : 국제화된 커뮤니티로 만들어 오기
§  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
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)

More Related Content

What's hot

Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA경원 이
 
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료수홍 이
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Jaesup Kwak
 
자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획DK Lee
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration수홍 이
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis BasicJi-Woong Choi
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
DK Lee
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summaryHoChul Shin
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Choonghyun Yang
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3J B
 

What's hot (20)

Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 : 계획
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summary
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
Java JPA
Java JPAJava JPA
Java JPA
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 

Viewers also liked

20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)DK Lee
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기Myung Woon Oh
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며DK Lee
 
스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 라한사 아
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)brain816
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부mosaicnet
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
Anatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club DataAnatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club DataSri Ambati
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수Yeon Soo Kim
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012devCAT Studio, NEXON
 

Viewers also liked (16)

20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며
 
스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기
 
Database design
Database designDatabase design
Database design
 
자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)자바 프로그래밍 Agile(1장 시작하기)
자바 프로그래밍 Agile(1장 시작하기)
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부
 
P2P Transfers
P2P TransfersP2P Transfers
P2P Transfers
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
Anatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club DataAnatomy of a Data Product and Lending Club Data
Anatomy of a Data Product and Lending Club Data
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012
 

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

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기sung ki choi
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)Hankyo
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena DollyJi-Woong Choi
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5Hyeonseok Yang
 
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)Amazon Web Services Korea
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4Seok-joon Yun
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 

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

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5
 
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
 
Spring portfolio2
Spring portfolio2Spring portfolio2
Spring portfolio2
 
Spark sql
Spark sqlSpark sql
Spark sql
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 

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

  • 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
  • 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. §  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. §  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. §  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) : 실행이 성공적으로 완료되면 그 결과는 영속적이다.
  • 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. §  역시 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 §  예외처리 §  과제 : 국제화된 커뮤니티로 만들어 오기
  • 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