Spring 3.1์˜ Cacheable

241 views
Skip to first unread message

๋‚˜์ด๋ฝ€๋ฆฌ

unread,
May 29, 2012, 11:39:09โ€ฏAM5/29/12
to Korea Spring User Group
์Šคํ”„๋ง 3.1์—์„œ ์ง€์›ํ•˜๋Š” Cache Abstraction ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค๋”๋‹ˆ ์‹ค์ œ ์บ์‹ฑ์ด ๋˜๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค์–ด
๋ฌธ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค.

public class CacheTest {
List<String> list = new ArrayList<String>();

public CacheTest(){
for(int i=0; i<5; i++){
list.add(String.valueOf(i*i));
}
}

@Cacheable(value="CacheExample", key="#index")
public String getMap(int index){
System.out.println("CacheTest................");

return list.get(index);
}
}

CacheTest.getMap()์„ ํ˜ธ์ถœํ–ˆ์„ ๊ฒฝ์šฐ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ฝ˜์†”๋กœ ์ฐํžˆ์ง€ ์•Š๋Š”๊ฒŒ ์บ์‹ฑ์„ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€์š”?

XML ์„ค์ •์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ๋ณธ๋งŒ ์„ค์ •ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
<cache:annotation-driven />
<bean id="cacheManager"
class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean
class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="default"/>
<bean
class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="CacheExample" />
</set>
</property>
</bean>

Ehcache๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— 3.1์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•œ์ง€ ๊ฒ€ํ† ํ•ด๋ณด๊ณ  ๋„์ž…ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ
์„ค์ •์ด๋‚˜ ์ฝ”๋”ฉ์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์บ์‹ฑ์ด ์ด๋ค„์ง€์ง€ ์•Š๋Š”๋“ฏํ•˜๋„ค์š”.

Sanghyuk Jung

unread,
May 29, 2012, 8:17:22โ€ฏPM5/29/12
to ks...@googlegroups.com
CacheTest๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ๋„ ๊ฐ™์ด ์˜ฌ๋ ค์ฃผ์‹œ๋ฉด ์›์ธ ์ถ”์ ์— ๋„์›€์ด ๋ ๋“ฏํ•˜๋„ค์š”.

DI๋œย CacheTest ๊ฐ์ฒด๊ฐ€ย proxy๊ฐ€ ์ œ๋Œ€๋กœ ๋จนํ˜”๋Š”์ง€ AopUtils.isProxy๋“ฑ์œผ๋กœ ํ•œ๋ฒˆ ํ™•์ธํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„๋“ฏํ•ฉ๋‹ˆ๋‹ค.


2012๋…„ 5์›” 30์ผ ์˜ค์ „ 12:39, ๋‚˜์ด๋ฝ€๋ฆฌ <nif...@gmail.com>๋‹˜์˜ ๋ง:

--
Google ๊ทธ๋ฃน์Šค 'Korea Spring User Group' ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ–ˆ์œผ๋ฏ€๋กœ ๋ณธ ๋ฉ”์ผ์ด ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ทธ๋ฃน์— ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ks...@googlegroups.com(์œผ)๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์„ธ์š”.
๊ทธ๋ฃน์—์„œ ํƒˆํ‡ดํ•˜๋ ค๋ฉด ksug+uns...@googlegroups.com๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์„ธ์š”.
๋” ๋งŽ์€ ์˜ต์…˜์„ ๋ณด๋ ค๋ฉด http://groups.google.com/group/ksug?hl=ko์—์„œ ๊ทธ๋ฃน์„ ๋ฐฉ๋ฌธํ•˜์„ธ์š”.


๋‚˜์ด๋ฝ€๋ฆฌ

unread,
May 30, 2012, 4:36:06โ€ฏAM5/30/12
to Korea Spring User Group
์ •์ƒํ˜๋‹˜, ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ถœ ์†Œ์Šค๋Š” Spring MVC ์ปจํŠธ๋กค๋Ÿฌ์—์„œ DI(Autowired) ๋ฐ›์•„์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์ ์œผ๋กœ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

public class XXXController {
@Autowired
private CacheTest cache;

@RequestMapping(value = "/list")
public String methodXX(Model model){
logger.error(cache.getMap(2));
}

์œ„ ์ฝ”๋“œ๋กœ ํ˜ธ์ถœ ์‹œ ์บ์‹ฑ์„ ํ•˜๊ณ ์ž ํ•˜๋Š” getMap() ํ•จ์ˆ˜์˜ ์ฝ˜์†”๋ฌธ์žฅ์ด ์ฐํžˆ๊ณ 
์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ฐ์€ ๋กœ๊ทธ๋„ ์ฐํžˆ๋„ค์š”.

Sanghyuk Jung

unread,
May 30, 2012, 7:42:40โ€ฏAM5/30/12
to ks...@googlegroups.com
๋„ค, ํ•œ๋ฒˆ AopUtils.isProxy(cache)๋กœ proxy๊ฐ€ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ์ข‹์„๋“ฏํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋˜์–ด ์žˆ๋‹ค๋ฉด component-scan์„ ์–ธ๋ถ€๋ถ„์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ด์•ผํ• ๋“ฏํ•˜๋„ค์š”

2012๋…„ 5์›” 30์ผ ์˜คํ›„ 5:36, ๋‚˜์ด๋ฝ€๋ฆฌ <nif...@gmail.com>๋‹˜์˜ ๋ง:

๋‚˜์ด๋ฝ€๋ฆฌ

unread,
May 31, 2012, 12:35:00โ€ฏAM5/31/12
to Korea Spring User Group
์ •์ƒํ˜๋‹˜ ๋ง์”€๋Œ€๋กœ AopUtils.isAopProxy() (Spring 3.1.1 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋‹ˆ ๋ฉ”์†Œ๋“œ ๋ช…์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋”๊ตฐ์š”.)
๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ™•์ธํ•ด๋ณด๋‹ˆ
proxy๊ฐ€ ์ ์šฉ์ด ์•ˆ๋˜์–ด์žˆ์–ด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ํ™•์ธํ•ด์„œ ์บ์‹œ ์ ์šฉ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

sts์—์„œ spring template project๋กœ 'MVC' ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑ์„ ํ•ด์„œ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋‹ˆ
application-context.xml๊ณผ servlet-context.xml ์— ๋ถ„์‚ฐํ•˜์—ฌ ์„ค์ •ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
(๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ์‹œ๋ฉด ๋‹ต๋ณ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.)
ํ˜น์‹œ ๋‹ค๋ฅธ ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ณต์œ ํ•ด๋ด…๋‹ˆ๋‹ค.

root-context.xml ์—์„œ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ 
<!-- Cache -->


<bean id="cacheManager"
class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean
class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="default"/>
<bean
class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name="CacheExample" />
<bean
class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"

p:name="CacheTime" />
</set>
</property>
</bean>

servlet-context.xml ์—์„œ ๋นˆ ์Šค์บ”์„ ์žก์•„์คฌ์Šต๋‹ˆ๋‹ค.
<!-- Cache -->
<cache:annotation-driven />

์ด๋กœ์„œ ์Šคํ”„๋ง ์„ค์ •์€ ๋๋‚˜๊ณ  ๋ฐ”๋กœ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


On 5์›”30์ผ, ์˜คํ›„8์‹œ42๋ถ„, Sanghyuk Jung <bene...@gmail.com> wrote:
> ๋„ค, ํ•œ๋ฒˆ AopUtils.isProxy(cache)๋กœ proxy๊ฐ€ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ์ข‹์„๋“ฏํ•ฉ๋‹ˆ๋‹ค.
>
> ์•ˆ๋˜์–ด ์žˆ๋‹ค๋ฉด component-scan์„ ์–ธ๋ถ€๋ถ„์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ด์•ผํ• ๋“ฏํ•˜๋„ค์š”
>

> 2012๋…„ 5์›” 30์ผ ์˜คํ›„ 5:36, ๋‚˜์ด๋ฝ€๋ฆฌ <nife...@gmail.com>๋‹˜์˜ ๋ง:

Reply all
Reply to author
Forward
0 new messages