E-Government Framework
OracleJava
๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์น˜
โ€ข Download
ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ
์„œ๋ฒ„ ์„ค์น˜
ํ”„๋กœ์ ํŠธ ์‹คํ–‰๊ฒฐ๊ณผ
Hello World!
ํ”„๋กœ์ ํŠธ ๋ช…:helloworld
๊ทธ๋ฃน์•„์ด๋”” ๋ช…: com.oraclejava
์•„ํ‹ฐํŒฉํŠธ ๋ช…: helloworld(์ž๋™์ž…๋ ฅ)
HelloWorld.java
MainApp.java
Bean Configuration file
Singleton scope
Prototype scope
Bean ์ •์˜ ์ƒ์†
@AspectJ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ
AOP์ง€์›
โ€“ @AspectJ๋Š” Java 5 ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ์ผ
๋ฐ˜ Java ํด๋ž˜์Šค๋กœ ๊ด€์ (Aspect)๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ
์‹์ด๋‹ค. @AspectJ ๋ฐฉ์‹์€ AspectJ 5 ๋ฒ„์ „์—์„œ
์†Œ๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, Spring์€ 2.0 ๋ฒ„์ „๋ถ€ํ„ฐ AspectJ
5 ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค. Spring AOP ์‹คํ–‰ํ™˜
๊ฒฝ์€ AspectJ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์ง์กฐ๊ธฐ(Weaver)์—
๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์—†์ด @AspectJ ์–ด๋…ธํ…Œ์ด์…˜์„
์ง€์›ํ•œ๋‹ค.
Annotation ๊ธฐ๋ฐ˜ ์„ค์ •
@Autowired
โ€ข ํ•„๋“œ์— ์ ์šฉ
Spring MVC
DispatcherServlet
ApplicationContext์™€
WebApplicationContext์™€์˜ ๊ด€๊ณ„
HandlerMapping
โ€ข BeanNameUrlHandlerMapping
โ€“ ๋นˆ ์ •์˜ ํƒœ๊ทธ์—์„œ name attribute๋กœ ์„ ์–ธ๋œ
url๊ณผ class attribute๋กœ ์ •์˜๋œ Controller๋งคํ•‘
โ€ข RequestMappingHandlerMapping
โ€“ @MVC๊ฐœ๋ฐœ
โ€“ ๊ธฐ๋ณธ HandlerMapping
RequestMappingHandlerMapping
์‚ฌ์šฉ๋ฐฉ๋ฒ•
โ€ข ์„ ์–ธํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•
โ€ข <mvc:annotation-driven/>์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ
๋ฒ•
โ€ข RequestMappingHandlerMapping์„ ์ง์ ‘
์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
<mvc:annotation-driven/>์˜ ์˜๋ฏธ
โ€ข Spring MVC์˜ ๊ธฐ๋ณธ ์„ค์ •์ด ์…‹ํŒ…๋จ.
โ€“ 1. Spring 3์˜ Type Conversion ์„œ๋น„์Šค
2. ์ˆซ์ž ํ•„๋“œ์— ๋Œ€ํ•œ @NumberFormat ์ง€์›
3. Date, Calendar์— ๋Œ€ํ•œ @DateTimeFormat ์ง€
์›
4. @Controller ์œ ํšจ์„ฑ ์ฒดํฌ @Valid ์ง€์›(ํด๋ž˜์Šค
ํŒจ์Šค์— JSR-303 ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ)
5. XML ์ฝ๊ณ  ์“ฐ๊ธฐ ์ง€์› classpath JAXB ์—ฐ๊ฒฐ์‹œ
(Html Message๋ฅผ
@RequestBody/@ResponseBody๋กœ ์—ฐ๊ฒฐ์ง€์›)
6. JSON ์ฝ๊ณ  ์“ฐ๊ธฐ ์ง€์› Jackson (5๋ฒˆ๊ณผ ๋™์ผ)
๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ(ibatis)
Ibatis ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ง•
โ€ข ์ถ”์ƒํ™”๋œ ์ ‘๊ทผ๋ฐฉ์‹
โ€ข ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ SQL๋ถ„๋ฆฌ
โ€ข ์ฟผ๋ฆฌ ์‹คํ–‰์˜ ์ž…์ถœ๋ ฅ ๊ฐ์ฒด ๋ฐ”์ธ๋”ฉ ์ง€์›
โ€ข Dynamic SQL ์ง€์›
โ€ข ๋‹ค์–‘ํ•œ DB์ฒ˜๋ฆฌ ์ง€์›
์‚ฌ์ „ ์ค€๋น„
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค ๋ช… ์—ฐ๊ด€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
ibatis-sqlmap-2.3.4.726.ja
r
iBATIS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ํ•„์ˆ˜)
commons-dbcp-1.2.2.jar
database connection poo
ling ์ง€์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์„ ํƒ)
commons-logging-1.1.1.j
ar
commons ๋กœ๊น…(์„ ํƒ)
log4j-1.3alpha-8.jar log4j(์„ ํƒ)
oscache-2.4.jar
์ค‘์•™์ง‘์ค‘ ๋˜๋Š” ๋ถ„์‚ฐ ์บ์Ё
์ง€์›(์„ ํƒ)
cglib-nodep-2.1_3.jar
Runtime Bytecode Enhan
cing ํ•„์š” ์‹œ(์„ ํƒ)
Oracle, Mysql, SqlServer๋“ฑ์˜ JDBC ๋“œ๋ผ์ด๋ฒ„
sql-map-config.xml ์„ค์ • ๋ฐ ๊ธฐ๋ณธ
Spring ์„ค์ •
sql mapping xml ์„ค์ •
DAO ํด๋ž˜์Šค ์ƒ์„ฑ
Mybatis ํ”„๋ ˆ์ž„์›Œํฌ ์ ์šฉ
โ€ข ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ
iBatis MyBatis ๋น„๊ณ 
com.ibatis.* org.apache.ibatis.* ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ
SqlMapConfig Configration ์šฉ์–ด๋ณ€๊ฒฝ
sqlMap mapper ์šฉ์–ด๋ณ€๊ฒฝ
sqlMapClient sqlSession ๊ตฌ๋ฌธ๋Œ€์ฒด
rowHandler resultHandler ๊ตฌ๋ฌธ๋Œ€์ฒด
resultHandler SqlSessionFactory ๊ตฌ๋ฌธ๋Œ€์ฒด
parameterMap, paramete
rClass
parameterType ์†์„ฑ ํ†ตํ•ฉ
resultClass resultType ์šฉ์–ด๋ณ€๊ฒฝ
#var# #{var} ๊ตฌ๋ฌธ๋Œ€์ฒด
$var$ ${var} ๊ตฌ๋ฌธ๋Œ€์ฒด
<isEqual> , <isNull> <if> ๊ตฌ๋ฌธ๋Œ€์ฒด
๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐฉ์‹ ๋ณ€๊ฒฝ
typeAlias ์œ„์น˜ ๋ณ€๊ฒฝ
โ€ข sqlMap์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋˜ typeAlias๊ฐ€
sqlMap์ด ๋ฐ”๋€ mapper ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š
๊ณ  Configration ํŒŒ์ผ์—์„œ ์ •์˜ํ•˜๋„๋ก ๋ณ€
๊ฒฝ๋˜์—ˆ๋‹ค
Dynamic Statement ๋ณ€ํ™”
โ€ข <isEqual> , <isNull> ๋“ฑ์˜ ๊ตฌ๋ฌธ์ด <if>๋กœ ํ†ตํ•ฉ๋˜
์—ˆ๋‹ค.
โ€ข <if test=โ€œuserID != nullโ€> ํ˜•ํƒœ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ
ํ•  ์ˆ˜ ์žˆ๋‹ค.
<dynamic> ํ˜•ํƒœ๋กœ ํ•ด์„œ where ์กฐ๊ฑด์ ˆ์ด๋‚˜ and ,
or ๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๋˜๊ฒƒ์ด <where>๋‚˜ update์—
์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” <set> ๋“ฑ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
โ€ข <select id="getUserList" resultType="User>
SELECT * FROM TR_USER <where> <if
test="isAdmin != null"> authLevel = '1' </if>
</where> </select>
์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ Tag Library
โ€ข <ui:pagination/>
์ด๋ฆ„ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€
paginationInfo
ํŽ˜์ด์ง•๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ
์ดํ„ฐ. ๋ฐ์ดํ„ฐ ํƒ€์ž…์€
egovframework.rte.ptl.mvc.tags.ui.pagin
ation.PaginationInfo์ด๋‹ค.
yes
type
ํŽ˜์ด์ง•๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง์„ ๋‹ด๋‹นํ•  ํด๋ž˜์Šค
์˜ ์•„์ด๋””. ์ด ์•„์ด๋””๋Š” ๋นˆ์„ค์ • ํŒŒ์ผ์—
์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ rendererType์˜ key๊ฐ’
์ด๋‹ค.
yes
jsFunction
ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์— ๊ฑธ๋ฆฌ๊ฒŒ ๋  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
ํ•จ์ˆ˜ ์ด๋ฆ„. ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๊ธฐ๋ณธ์ ์ธ
argument๋กœ ์ „๋‹ฌ๋œ๋‹ค.
yes
๊ด€๋ จ ํด๋ž˜์Šค ๋นˆ ์„ค์ •
ํŽ˜์ด์ง• JSP์— ์ ์šฉ
์ปจํŠธ๋กค๋Ÿฌ ์ฝ”๋”ฉ
Ajax ์ง€์› ์„œ๋น„์Šค
โ€ข ์ผ๋ฐ˜์ ์œผ๋กœ Ajax ๊ธฐ๋Šฅ์€ javascript ์–ธ์–ด๋กœ
๊ฐœ๋ฐœํ•˜๋‚˜, server-side ๊ตฌํ˜„์— ์ต์ˆ™ํ•œ J2EE
๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ์‰ฝ์ง€ ์•Š์€ ์ž‘์—…์ด ๋  ์ˆ˜
์žˆ๋‹ค.
โ€ข Ajax ์ง€์› ์„œ๋น„์Šค์—์„œ๋Š” Ajax๋ฅผ ์ด์šฉํ•ด ์ž
์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ custom tagํ˜•ํƒœ๋กœ ์ œ
๊ณตํ•œ๋‹ค.
โ€ข ๊ธฐ๋Šฅ์€ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ AjaxTags๋ฅผ
์ด์šฉํ•œ๋‹ค.
์„ค์น˜ ์ˆœ์„œ
ajax:autocomplete
๊ฐœ์š”
ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€
baseUrl
์ž๋™์™„์„ฑ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š”
server-side ์•ก์…˜์„ ์œ„ํ•œ URL.
yes
source
์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค„ ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. ์ž…๋ ฅ
ํ•„๋“œ์— ์ถ”์ฒœ ๊ฒ€์ƒ‰๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๋ฉด target๊ณผ
source๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ž…๋ ฅํ•œ๋‹ค.
yes
target ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. yes
parameters
baseUrl์— ์ถ”๊ฐ€ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค.์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ comma
๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค.
yes
className ์ถ”์ฒœ ๊ฒ€์ƒ‰๋ฆฌ์ŠคํŠธ์— ์ ์šฉํ•  CSS ํด๋ž˜์Šค์ด๋ฆ„ yes
indicator Ajax ์š”์ฒญ์ค‘์ผ๋•Œ ๋ณด์—ฌ์ค„ ํ‘œ์‹œ. no
minimumCharact
ers
Ajax ์š”์ฒญ์„ ์œ„ํ•œ ์ตœ์†Œ ์ž…๋ ฅ๊ฐ’. no
preFunction Ajax ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
postFunction Ajax ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
errorFunction Ajax ์š”์ฒญ error์‹œ์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
ajax:select
๊ฐœ์š”
ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€
baseUrl ์ž๋™์™„์„ฑ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” server-side ์•ก์…˜์„ ์œ„ํ•œ URL. yes
source
์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค„ ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. ์ž…๋ ฅ ํ•„๋“œ์— ์ถ”์ฒœ ๊ฒ€์ƒ‰๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๋ฉด
target๊ณผ source๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ž…๋ ฅํ•œ๋‹ค.
yes
target ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. yes
parameters baseUrl์— ์ถ”๊ฐ€ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค.์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ comma๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค. no
eventType no
executeOnLoad ์‘๋‹ต ๋ฐ์ดํ„ฐ๋กœ select box๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ค‘์ผ๋•Œ ๊ตฌ์„ฑ์ค‘์ธ์ง€๋ฅผ ๋ณ„๋„ ํ‘œ์‹œ๋ฅผ ํ• ์ง€ ์—ฌ๋ถ€.[default=false] no
defaultOptions Ajax ์‘๋‹ต๊ฐ’์ด ์—†์„๋•Œ ๋ณด์—ฌ์ค„ ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ. comma๋กœ ๊ตฌ๋ณ„ํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค. no
preFunction Ajax ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
postFunction Ajax ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
errorFunction Ajax ์š”์ฒญ error์‹œ์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
parser ์‘๋‹ต ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ parser.[default=ResponseHtmlParser] no
ajax:tabPanel
๊ฐœ์š”
ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€
id tabPanel์˜ ID yes
preFunction
Ajax ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „
์— ๋™์ž‘ํ•˜๋Š” function ์ด
๋ฆ„.
no
postFunction
Ajax ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์—
๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„.
no
errorFunction
Ajax ์š”์ฒญ error์‹œ์— ๋™์ž‘
ํ•˜๋Š” function ์ด๋ฆ„.
no
parser
์‘๋‹ต ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ parse
r.[default=ResponseHtmlP
arser]
no
ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์–ธ
โ€ข <%@ taglib prefix="ajax"
ri="http://ajaxtags.sourceforge.net/tags/aj
axtags" %>
Javascript, CSS ์„ ์–ธ
<script type="text/javascript"
src="<%=request.getContextPath()%>/ajaxtags/js/prototype.js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/ajaxtags/js/scriptaculous/scriptaculous.
js"></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/ajaxtags/js/overlibmws/overlibmws.js"
></script>
<script type="text/javascript"
src="<%=request.getContextPath()%>/ajaxtags/js/ajaxtags.js"></script>
<link type="text/css" rel="stylesheet"
href="<%=request.getContextPath()%>/ajaxtags/css/ajaxtags.css" />
<link type="text/css" rel="stylesheet"
href="<%=request.getContextPath()%>/ajaxtags/css/displaytag.css" />
Controller
List<Department> deptList =
departmentService.getDepartmentList(param);
AjaxXmlBuilder ajaxXmlBuilder = new AjaxXmlBuilder();
for (Iterator iter = deptList.iterator(); iter.hasNext();) {
Department dept = (Department) iter.next();
ajaxXmlBuilder.addItem(dept.getDeptname(),
dept.getDeptid());
}
model.addObject("ajaxXml",ajaxXmlBuilder.toString());
View
package com.easycompany.view;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.AbstractView;
public class AjaxXmlView extends AbstractView {
@Override
protected void renderMergedOutputModel(Map model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write((String) model.get("ajaxXml")); //Model Attribute ์ด๋ฆ„์€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ
์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ...
writer.close();
}
}
UX ์ฒ˜๋ฆฌ
โ€ข ์˜คํ”ˆ์†Œ์Šค์ธ jQuery Mobile์‚ฌ์šฉ
โ€ข html5, CSS3, javascript๋ฅผ ์ œ๊ณต
โ€“ HTML5: ๋ชจ๋ฐ”์ผ ์›น ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ์‹œ ์‚ฌ์šฉ ํ• 
์ˆ˜ ์žˆ๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋กœ์„œ ๋ชจ๋ฐ”์ผ ํŠนํ™” ํƒœ๊ทธ ๋ฐ
๋””๋ฐ”์ด์Šค API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
โ€“ CSS3: ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ๋ฐ ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ์ ํ•ฉ
ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณด์—ฌ์ง€๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค
โ€“ JavaScript Module App Framework: UX/UI
controller component์˜ ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•˜๋Š”
javascript ๋ฐ‘ Json ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
๋ชจ๋ฐ”์ผ ํŽ˜์ด์ง€ ํ—ค๋”
<!DOCTYPE html>
<html>
<head>
<title>eGovFrame</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-
scale=1.0, user-scalable=no">
<link rel="stylesheet" href="/css/egovframework/mbl/cmm/jquery.mobile-1.3.2.css"/>
<link rel="stylesheet" href="/css/egovframework/mbl/cmm/EgovMobile-1.3.2.css" />
<script src="/js/egovframework/mbl/cmm/jquery-1.9.1.min.js"></script>
<script src="/js/egovframework/mbl/cmm/jquery.mobile-1.3.2.min.js"></script>
<script src="/js/egovframework/mbl/cmm/EgovMobile-1.3.2.js"></script>
</head>
<body>
...
</body>
</html>
๋ชจ๋ฐ”์ผ Page Body
<div data-role=โ€œpageโ€>
<div data-role=โ€œheaderโ€>
</div>
<div data-role=โ€œcontentโ€>
</div>
<div data-role=โ€œfooterโ€>
</div>
</div>
๋ชจ๋ฐ”์ผ ๊ฐ€์ด๋“œ ์ƒ˜ํ”Œ
โ€ข http://m.egovframe.go.kr/mguide3.5/
๋ชจ๋ฐ”์ผ ๊ธฐ๋ณธ ํ™œ์šฉ ๊ตฌ์กฐ
HTML5 <Tag> ํŒจํ„ด์ธ โ€˜data-roleโ€™ ์†์„ฑ์— ์ ์šฉ๋œ
๊ฐ’์— ๋”ฐ๋ผ Page, Header, Content, Footer ์˜์—ญ์œผ
๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
๋ชจ๋ฐ”์ผ ์ƒ˜ํ”Œ ์ž‘์„ฑ

E government framework

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
    Hello World! ํ”„๋กœ์ ํŠธ ๋ช…:helloworld ๊ทธ๋ฃน์•„์ด๋””๋ช…: com.oraclejava ์•„ํ‹ฐํŒฉํŠธ ๋ช…: helloworld(์ž๋™์ž…๋ ฅ)
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
    @AspectJ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ AOP์ง€์› โ€“@AspectJ๋Š” Java 5 ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ์ผ ๋ฐ˜ Java ํด๋ž˜์Šค๋กœ ๊ด€์ (Aspect)๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ ์‹์ด๋‹ค. @AspectJ ๋ฐฉ์‹์€ AspectJ 5 ๋ฒ„์ „์—์„œ ์†Œ๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, Spring์€ 2.0 ๋ฒ„์ „๋ถ€ํ„ฐ AspectJ 5 ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค. Spring AOP ์‹คํ–‰ํ™˜ ๊ฒฝ์€ AspectJ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์ง์กฐ๊ธฐ(Weaver)์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์—†์ด @AspectJ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
    HandlerMapping โ€ข BeanNameUrlHandlerMapping โ€“ ๋นˆ์ •์˜ ํƒœ๊ทธ์—์„œ name attribute๋กœ ์„ ์–ธ๋œ url๊ณผ class attribute๋กœ ์ •์˜๋œ Controller๋งคํ•‘ โ€ข RequestMappingHandlerMapping โ€“ @MVC๊ฐœ๋ฐœ โ€“ ๊ธฐ๋ณธ HandlerMapping
  • 21.
    RequestMappingHandlerMapping ์‚ฌ์šฉ๋ฐฉ๋ฒ• โ€ข ์„ ์–ธํ•˜์ง€ ์•Š๋Š”๋ฐฉ๋ฒ• โ€ข <mvc:annotation-driven/>์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ ๋ฒ• โ€ข RequestMappingHandlerMapping์„ ์ง์ ‘ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
  • 22.
    <mvc:annotation-driven/>์˜ ์˜๋ฏธ โ€ข SpringMVC์˜ ๊ธฐ๋ณธ ์„ค์ •์ด ์…‹ํŒ…๋จ. โ€“ 1. Spring 3์˜ Type Conversion ์„œ๋น„์Šค 2. ์ˆซ์ž ํ•„๋“œ์— ๋Œ€ํ•œ @NumberFormat ์ง€์› 3. Date, Calendar์— ๋Œ€ํ•œ @DateTimeFormat ์ง€ ์› 4. @Controller ์œ ํšจ์„ฑ ์ฒดํฌ @Valid ์ง€์›(ํด๋ž˜์Šค ํŒจ์Šค์— JSR-303 ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ) 5. XML ์ฝ๊ณ  ์“ฐ๊ธฐ ์ง€์› classpath JAXB ์—ฐ๊ฒฐ์‹œ (Html Message๋ฅผ @RequestBody/@ResponseBody๋กœ ์—ฐ๊ฒฐ์ง€์›) 6. JSON ์ฝ๊ณ  ์“ฐ๊ธฐ ์ง€์› Jackson (5๋ฒˆ๊ณผ ๋™์ผ)
  • 23.
  • 24.
    Ibatis ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ง• โ€ข์ถ”์ƒํ™”๋œ ์ ‘๊ทผ๋ฐฉ์‹ โ€ข ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ SQL๋ถ„๋ฆฌ โ€ข ์ฟผ๋ฆฌ ์‹คํ–‰์˜ ์ž…์ถœ๋ ฅ ๊ฐ์ฒด ๋ฐ”์ธ๋”ฉ ์ง€์› โ€ข Dynamic SQL ์ง€์› โ€ข ๋‹ค์–‘ํ•œ DB์ฒ˜๋ฆฌ ์ง€์›
  • 25.
    ์‚ฌ์ „ ์ค€๋น„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค๋ช… ์—ฐ๊ด€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ibatis-sqlmap-2.3.4.726.ja r iBATIS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ํ•„์ˆ˜) commons-dbcp-1.2.2.jar database connection poo ling ์ง€์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์„ ํƒ) commons-logging-1.1.1.j ar commons ๋กœ๊น…(์„ ํƒ) log4j-1.3alpha-8.jar log4j(์„ ํƒ) oscache-2.4.jar ์ค‘์•™์ง‘์ค‘ ๋˜๋Š” ๋ถ„์‚ฐ ์บ์Ё ์ง€์›(์„ ํƒ) cglib-nodep-2.1_3.jar Runtime Bytecode Enhan cing ํ•„์š” ์‹œ(์„ ํƒ) Oracle, Mysql, SqlServer๋“ฑ์˜ JDBC ๋“œ๋ผ์ด๋ฒ„
  • 26.
    sql-map-config.xml ์„ค์ • ๋ฐ๊ธฐ๋ณธ Spring ์„ค์ •
  • 27.
    sql mapping xml์„ค์ •
  • 28.
  • 29.
    Mybatis ํ”„๋ ˆ์ž„์›Œํฌ ์ ์šฉ โ€ข์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ iBatis MyBatis ๋น„๊ณ  com.ibatis.* org.apache.ibatis.* ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ SqlMapConfig Configration ์šฉ์–ด๋ณ€๊ฒฝ sqlMap mapper ์šฉ์–ด๋ณ€๊ฒฝ sqlMapClient sqlSession ๊ตฌ๋ฌธ๋Œ€์ฒด rowHandler resultHandler ๊ตฌ๋ฌธ๋Œ€์ฒด resultHandler SqlSessionFactory ๊ตฌ๋ฌธ๋Œ€์ฒด parameterMap, paramete rClass parameterType ์†์„ฑ ํ†ตํ•ฉ resultClass resultType ์šฉ์–ด๋ณ€๊ฒฝ #var# #{var} ๊ตฌ๋ฌธ๋Œ€์ฒด $var$ ${var} ๊ตฌ๋ฌธ๋Œ€์ฒด <isEqual> , <isNull> <if> ๊ตฌ๋ฌธ๋Œ€์ฒด
  • 30.
  • 31.
    typeAlias ์œ„์น˜ ๋ณ€๊ฒฝ โ€ขsqlMap์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋˜ typeAlias๊ฐ€ sqlMap์ด ๋ฐ”๋€ mapper ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š ๊ณ  Configration ํŒŒ์ผ์—์„œ ์ •์˜ํ•˜๋„๋ก ๋ณ€ ๊ฒฝ๋˜์—ˆ๋‹ค
  • 32.
    Dynamic Statement ๋ณ€ํ™” โ€ข<isEqual> , <isNull> ๋“ฑ์˜ ๊ตฌ๋ฌธ์ด <if>๋กœ ํ†ตํ•ฉ๋˜ ์—ˆ๋‹ค. โ€ข <if test=โ€œuserID != nullโ€> ํ˜•ํƒœ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. <dynamic> ํ˜•ํƒœ๋กœ ํ•ด์„œ where ์กฐ๊ฑด์ ˆ์ด๋‚˜ and , or ๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๋˜๊ฒƒ์ด <where>๋‚˜ update์— ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” <set> ๋“ฑ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. โ€ข <select id="getUserList" resultType="User> SELECT * FROM TR_USER <where> <if test="isAdmin != null"> authLevel = '1' </if> </where> </select>
  • 33.
    ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ Tag Library โ€ข<ui:pagination/> ์ด๋ฆ„ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€ paginationInfo ํŽ˜์ด์ง•๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐ ์ดํ„ฐ. ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ egovframework.rte.ptl.mvc.tags.ui.pagin ation.PaginationInfo์ด๋‹ค. yes type ํŽ˜์ด์ง•๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง์„ ๋‹ด๋‹นํ•  ํด๋ž˜์Šค ์˜ ์•„์ด๋””. ์ด ์•„์ด๋””๋Š” ๋นˆ์„ค์ • ํŒŒ์ผ์— ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ rendererType์˜ key๊ฐ’ ์ด๋‹ค. yes jsFunction ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์— ๊ฑธ๋ฆฌ๊ฒŒ ๋  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ ์ด๋ฆ„. ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๊ธฐ๋ณธ์ ์ธ argument๋กœ ์ „๋‹ฌ๋œ๋‹ค. yes
  • 34.
  • 35.
  • 36.
  • 37.
    Ajax ์ง€์› ์„œ๋น„์Šค โ€ข์ผ๋ฐ˜์ ์œผ๋กœ Ajax ๊ธฐ๋Šฅ์€ javascript ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•˜๋‚˜, server-side ๊ตฌํ˜„์— ์ต์ˆ™ํ•œ J2EE ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ์‰ฝ์ง€ ์•Š์€ ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ๋‹ค. โ€ข Ajax ์ง€์› ์„œ๋น„์Šค์—์„œ๋Š” Ajax๋ฅผ ์ด์šฉํ•ด ์ž ์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ custom tagํ˜•ํƒœ๋กœ ์ œ ๊ณตํ•œ๋‹ค. โ€ข ๊ธฐ๋Šฅ์€ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ AjaxTags๋ฅผ ์ด์šฉํ•œ๋‹ค.
  • 38.
  • 39.
    ajax:autocomplete ๊ฐœ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€ baseUrl ์ž๋™์™„์„ฑ๊ธฐ๋Šฅ์„์œ„ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” server-side ์•ก์…˜์„ ์œ„ํ•œ URL. yes source ์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค„ ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. ์ž…๋ ฅ ํ•„๋“œ์— ์ถ”์ฒœ ๊ฒ€์ƒ‰๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๋ฉด target๊ณผ source๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ž…๋ ฅํ•œ๋‹ค. yes target ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. yes parameters baseUrl์— ์ถ”๊ฐ€ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค.์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ comma ๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค. yes className ์ถ”์ฒœ ๊ฒ€์ƒ‰๋ฆฌ์ŠคํŠธ์— ์ ์šฉํ•  CSS ํด๋ž˜์Šค์ด๋ฆ„ yes indicator Ajax ์š”์ฒญ์ค‘์ผ๋•Œ ๋ณด์—ฌ์ค„ ํ‘œ์‹œ. no minimumCharact ers Ajax ์š”์ฒญ์„ ์œ„ํ•œ ์ตœ์†Œ ์ž…๋ ฅ๊ฐ’. no preFunction Ajax ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no postFunction Ajax ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no errorFunction Ajax ์š”์ฒญ error์‹œ์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no
  • 40.
    ajax:select ๊ฐœ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€ baseUrl์ž๋™์™„์„ฑ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” server-side ์•ก์…˜์„ ์œ„ํ•œ URL. yes source ์ถ”์ฒœ ๊ฒ€์ƒ‰์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค„ ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. ์ž…๋ ฅ ํ•„๋“œ์— ์ถ”์ฒœ ๊ฒ€์ƒ‰๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๋ฉด target๊ณผ source๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ž…๋ ฅํ•œ๋‹ค. yes target ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ํ…์ŠคํŠธ ํ•„๋“œ ์ด๋ฆ„. yes parameters baseUrl์— ์ถ”๊ฐ€ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค.์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ comma๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค. no eventType no executeOnLoad ์‘๋‹ต ๋ฐ์ดํ„ฐ๋กœ select box๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ค‘์ผ๋•Œ ๊ตฌ์„ฑ์ค‘์ธ์ง€๋ฅผ ๋ณ„๋„ ํ‘œ์‹œ๋ฅผ ํ• ์ง€ ์—ฌ๋ถ€.[default=false] no defaultOptions Ajax ์‘๋‹ต๊ฐ’์ด ์—†์„๋•Œ ๋ณด์—ฌ์ค„ ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ. comma๋กœ ๊ตฌ๋ณ„ํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค. no preFunction Ajax ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no postFunction Ajax ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no errorFunction Ajax ์š”์ฒญ error์‹œ์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no parser ์‘๋‹ต ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ parser.[default=ResponseHtmlParser] no
  • 41.
    ajax:tabPanel ๊ฐœ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช… ํ•„์ˆ˜์—ฌ๋ถ€ idtabPanel์˜ ID yes preFunction Ajax ์š”์ฒญ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „ ์— ๋™์ž‘ํ•˜๋Š” function ์ด ๋ฆ„. no postFunction Ajax ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ๋™์ž‘ํ•˜๋Š” function ์ด๋ฆ„. no errorFunction Ajax ์š”์ฒญ error์‹œ์— ๋™์ž‘ ํ•˜๋Š” function ์ด๋ฆ„. no parser ์‘๋‹ต ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ parse r.[default=ResponseHtmlP arser] no
  • 42.
    ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์–ธ โ€ข<%@ taglib prefix="ajax" ri="http://ajaxtags.sourceforge.net/tags/aj axtags" %>
  • 43.
    Javascript, CSS ์„ ์–ธ <scripttype="text/javascript" src="<%=request.getContextPath()%>/ajaxtags/js/prototype.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/ajaxtags/js/scriptaculous/scriptaculous. js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/ajaxtags/js/overlibmws/overlibmws.js" ></script> <script type="text/javascript" src="<%=request.getContextPath()%>/ajaxtags/js/ajaxtags.js"></script> <link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/ajaxtags/css/ajaxtags.css" /> <link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/ajaxtags/css/displaytag.css" />
  • 44.
    Controller List<Department> deptList = departmentService.getDepartmentList(param); AjaxXmlBuilderajaxXmlBuilder = new AjaxXmlBuilder(); for (Iterator iter = deptList.iterator(); iter.hasNext();) { Department dept = (Department) iter.next(); ajaxXmlBuilder.addItem(dept.getDeptname(), dept.getDeptid()); } model.addObject("ajaxXml",ajaxXmlBuilder.toString());
  • 45.
    View package com.easycompany.view; import java.io.PrintWriter; importjava.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.AbstractView; public class AjaxXmlView extends AbstractView { @Override protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.write((String) model.get("ajaxXml")); //Model Attribute ์ด๋ฆ„์€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ... writer.close(); } }
  • 46.
    UX ์ฒ˜๋ฆฌ โ€ข ์˜คํ”ˆ์†Œ์Šค์ธjQuery Mobile์‚ฌ์šฉ โ€ข html5, CSS3, javascript๋ฅผ ์ œ๊ณต โ€“ HTML5: ๋ชจ๋ฐ”์ผ ์›น ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ์‹œ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋กœ์„œ ๋ชจ๋ฐ”์ผ ํŠนํ™” ํƒœ๊ทธ ๋ฐ ๋””๋ฐ”์ด์Šค API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. โ€“ CSS3: ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ๋ฐ ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ์ ํ•ฉ ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณด์—ฌ์ง€๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค โ€“ JavaScript Module App Framework: UX/UI controller component์˜ ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” javascript ๋ฐ‘ Json ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • 47.
    ๋ชจ๋ฐ”์ผ ํŽ˜์ด์ง€ ํ—ค๋” <!DOCTYPEhtml> <html> <head> <title>eGovFrame</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum- scale=1.0, user-scalable=no"> <link rel="stylesheet" href="/css/egovframework/mbl/cmm/jquery.mobile-1.3.2.css"/> <link rel="stylesheet" href="/css/egovframework/mbl/cmm/EgovMobile-1.3.2.css" /> <script src="/js/egovframework/mbl/cmm/jquery-1.9.1.min.js"></script> <script src="/js/egovframework/mbl/cmm/jquery.mobile-1.3.2.min.js"></script> <script src="/js/egovframework/mbl/cmm/EgovMobile-1.3.2.js"></script> </head> <body> ... </body> </html>
  • 48.
    ๋ชจ๋ฐ”์ผ Page Body <divdata-role=โ€œpageโ€> <div data-role=โ€œheaderโ€> </div> <div data-role=โ€œcontentโ€> </div> <div data-role=โ€œfooterโ€> </div> </div>
  • 49.
  • 50.
  • 51.
    HTML5 <Tag> ํŒจํ„ด์ธโ€˜data-roleโ€™ ์†์„ฑ์— ์ ์šฉ๋œ ๊ฐ’์— ๋”ฐ๋ผ Page, Header, Content, Footer ์˜์—ญ์œผ ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
  • 52.