๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ 

PSA( Portable Service Abstract )

2020. 6. 7. 00:02
๋ฐ˜์‘ํ˜•

PSA ๋ž€ ? ์ž˜ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค

 

 

๋‚˜์˜ ์ฝ”๋“œ

ํ™•์žฅ์„ฑ์ด ์ข‹์ง€ ๋ชปํ•œ ์ฝ”๋“œ or ๊ธฐ์ˆ ์— ํŠนํ™”๋˜์–ด ์žˆ๋Š” ์ฝ”๋“œ

 

 

 

๋‚˜์˜ ์ฝ”๋“œ

+++++++++

์ž˜ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค(PSA)

++++++++++++++++

ํ™•์žฅ์„ฑ์ด ์ข‹์ง€ ๋ชปํ•œ ์ฝ”๋“œ or ๊ธฐ์ˆ ์— ํŠนํ™”๋˜์–ด ์žˆ๋Š” ์ฝ”๋“œ

 

 

 

 

์Šคํ”„๋ง ํŠธ๋žœ์žญ์…˜

 

 

@Transactional ์ด๋ผ๋Š” annotation์„ ์ฒ˜๋ฆฌํ•˜๋Š” Aspect ๊ฐ€ ์žˆ๋‹ค.

๊ทธ Aspect์—์„œ๋Š” *PlatformTransactionManager ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•ด๋†จ๋‹ค.

* ์ž˜ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค(PSA) ์˜ ์˜ˆ

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— PlatformTransactionManager ์˜ ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๋“ค์ด ๋ฐ”๋€Œ๋”๋ผ๋„, ํŠธ๋žœ์žญ์…˜์˜ Aspect ์ฝ”๋“œ๋Š” ๋ฐ”๋€Œ์ง€๊ฐ€ ์•Š๋Š”๋‹ค.

 

 

์—ฌ๊ธฐ์„œ๋Š” Repository ๋ผ๋Š” interface๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š”๋ฐ , ์ด ํ”„๋กœ์ ํŠธ๋Š” Spring JPA Data ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, 

SpringBoot์˜ ์ž๋™์„ค์ •์— ์˜ํ•ด์„œ JpaTransactionManager ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

 

 

 

@Transactional์„ ์ฒ˜๋ฆฌํ•˜๋Š” @Aspact๋Š” PlatformTransactionManager ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ

๊ตฌํ˜„์ฒด๊ฐ€ JpaTransactionManager -> DataSourceTransactionManager ์œผ๋กœ ๋ฐ”๋€Œ์–ด๋„ 

๊ทธ Transactional์„ ์ฒ˜๋ฆฌํ•˜๋Š” Aspect ์ฝ”๋“œ๋Š” ๋ฐ”๋€Œ์ง€๊ฐ€ ์•Š๋Š”๋‹ค.

 

 

 

์Šคํ”„๋ง ์บ์‹œ

 

@EnableCaching๊ฐ€ ํ™œ์„ฑํ™”๊ฐ€ ๋˜๋ฉด  @Cachenable | @CacheEvict | ..... ๋“ฑ์˜ annotation์„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š”๋ฐ,

์‚ฌ์šฉํ•˜๋ ค๋ฉด CacheManager๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค. (์ด ๋ถ€๋ถ„์€ ํŠธ๋žœ์žญ์…˜๊ณผ ๋™์ผํ•˜๋‹ค.)

์ด annotation์„ ์ฒ˜๋ฆฌํ•˜๋Š” Aspect๊ฐ€ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š”๋ฐ ๊ทธ Aspect๋Š” ๋ถ„๋ช…ํžˆ TransactionManager๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

์œ„์— ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด @Bean์ด ํ•˜๋‚˜ ์žˆ๊ณ  ๊ทธ ์•ˆ์— JCacheMAnagerCustomizer๊ฐ€ ์žˆ๋‹ค? -> ์—ฌ๊ธฐ์„  JCacheManager๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค.

 

๋งŒ์•ฝ EhCacheManagerCustomizer๋กœ ๋ฐ”๊พผ๋‹ค๊ณ  ํ•˜๋ฉด EhCaheManger๋ฅผ ์“ฐ๊ฒŒ ๋ ๊ฑฐ๊ณ , ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” Aspect์˜ ์ฝ”๋“œ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 

์Šคํ”„๋ง ์›น MVC

 

 

์ด ์ฝ”๋“œ๋Š” @Controller ์™€ @GetMapping ์„ ์‚ฌ์šฉํ•ด์„œ ์›น MVC๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

@LogExecutionTime
	@GetMapping("/owners/new") //์ด๋Ÿฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์•„๋ž˜์˜ ๋ฉ”์†Œ๋“œ๋“ค์ด ์‹คํ–‰๋จ.
	public String initCreationForm(Map<String, Object> model) {
		Owner owner = new Owner();
		model.put("owner", owner);
		return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
	}

๊ทธ๋ฆฌ๊ณ  return View์— ํ•ด๋‹นํ•˜๋Š” view๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

 

๊ทผ๋ฐ ์ด ์ฝ”๋“œ๊ฐ€ survlet ์ผ์ˆ˜๋„ ์žˆ๊ณ , Reactive ์ผ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ์ถ”์ƒํ™”๊ฐ€ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— survlet์—์„œ Reactive๋กœ ๋ฐ”๊ฟ€์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ด๊ฒƒ์ด PSA์˜ ๊ฐ€์žฅ ํฐ ๋ชฉํ‘œ๊ณ  ์žฅ์ ์ด๋‹ค.

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 4. IoC ์ปจํ…Œ์ด๋„ˆ 4๋ถ€ : @Component์™€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”
  • ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • AOP (Aspect-Oriented Programming)
  • IoC (Inversion of Control) , DI (Dependency Injection)
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
PSA( Portable Service Abstract )
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.