Spring ํŠน์ง•(1): POJO

0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
5/10
post-thumbnail

๐Ÿ“Œ 1. POJO(Plain Old Java Object)๋ž€?


๐Ÿ“Ž POJO๋ž€?

EJB(Enterprise JavaBeans) ๋“ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Java Bean์ด ์•„๋‹Œ ์•„๋ž˜์™€๊ฐ™์ด Getter, Setter๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ€์žฅ ์ˆœ์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค์ด๋‹ค.

์ž๋ฐ”๋ฅผ ์ด์šฉํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ ๋“ฑ ๋กœ์šฐ๋ ˆ๋ฒจ(Transaction, Multi Thread)์˜ ๋กœ์ง๊นŒ์ง€ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋ถ€๋‹ด๊ฐ์„ ์—†์• ๊ณ ์ž EJB(Enterprise Java Beans)๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.

EJB๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋กœ์šฐ๋ ˆ๋ฒจ์˜ ๋กœ์ง ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ˆ˜๊ณ ๋ฅผ ๋œ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ํ•œ ๋‘๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ๋Œ€ํ•œ EJB๋ฅผ ์ƒ์†(Extends)๋ฐ›๊ฑฐ๋‚˜ ํ™•์žฅ(Implements)ํ–ˆ์„์‹œ ๊ฐ€๋ฒผ์šด ์„œ๋น„์Šค์กฐ์ฐจ๋„ ๋ฌด๊ฒ๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์œผ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„  ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค.

์ด์— JAVA์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์ธ ๊ฐ์ฒด์ง€ํ–ฅ์— ์ง‘์ค‘ํ•˜๊ณ , ํŠน์ • ํด๋ž˜์Šค๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ข…์†๋˜์ง€ ์•Š์€ POJO ๊ตฌ์„ฑ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ Spring์€ POJO ๋ฐฉ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , IoC์™€ DI, AOP ๋“ฑ Spring์˜ ์ฃผ์š” ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด POJO ๊ธฐ๋ฐ˜์˜ ๊ตฌ์„ฑ์„ ์ด๋ฃจ๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ‘‰ POJO ์ฝ”๋“œ ์˜ˆ์‹œ

public class User {
    private int id;
    private String name;
    private String email;
    
    public int getId() {
    	return id;
    }
    public String getName() {
    	return name;
    }
    public String getEmail() {
    	return email;
    }
    
    public void setId(int id) {
    	this.id = id;
    }
    public void setName(String name) {
    	this.name = name;
    }
    public void setEmail(String email) {
    	this.email = email;
    }
}

๐Ÿ“Ž POJO์˜ ์กฐ๊ฑด

๊ฒฐ๊ตญ, POJO๋Š” ์•„๋ž˜ ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์›๋ฆฌ์— ์ถฉ์‹คํ•˜๋ฉด์„œ, ํŠน์ • ํ™˜๊ฒฝ๊ณผ ๊ทœ์•ฝ์— ์ข…์†๋˜์ง€ ์•Š์•„ ํ•„์š”์— ๋”ฐ๋ผ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋œ ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค.

๐Ÿ‘‰ ํŠน์ • ๊ทœ์•ฝ์— ์ข…์†๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

ํŠน์ • ๊ทœ์•ฝ์— ์ข…์†๋˜์–ด ์žˆ์œผ๋ฉด ๋‹จ์ผ ์ƒ์† ์ œํ•œ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ์˜ ์ด์ „์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

๐Ÿ‘‰ ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์— ์™ธ๋ถ ์ข…์†์ ์ธ http request, session ๋“ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ POJO๋ฅผ ์œ„๋ฐฐํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ธฐ์ˆ ์ ์ธ ๋‚ด์šฉ์„ ๋‹ด์€ ์›น ์ •๋ณด ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ์•„๋ž˜ 3๊ฐ€์ง€๋Š” POJO๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์ด๋‹ค.

  • ๋ฏธ๋ฆฌ ์ง€์ •๋œ ํด๋ž˜์Šค๋ฅผ Extendsํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Implementํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ๋ฏธ๋ฆฌ ์ •์˜๋œ Annotation์„ ํฌํ•จํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

๐Ÿ‘‰ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€ํ‚ค๋Š” ํด๋ž˜์Šค์—ฌ์•ผ ํ•œ๋‹ค.

์ฑ…์ž„๊ณผ ์—ญํ• ์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ฝ”๋“œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค.

๐Ÿ“Ž POJO์˜ ์žฅ์ 

๐Ÿ‘‰ ํŠน์ • ๊ทœ์•ฝ์— ์ข…์†๋˜์ง€ ์•Š์•„ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ‘‰ ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š์•„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹๋‹ค.
๐Ÿ‘‰ ํŠน์ • ๊ทœ์•ฝ์— ์ข…์†๋˜์ง€ ์•Š์•„ ๋กœ์šฐ๋ ˆ๋ฒจ ์ฝ”๋“œ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ์ฝ”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ๊น”๋”ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


๐Ÿ“Ž POJO ํŠน์ง•

  1. Spring์—์„œ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ๋กœ ์‚ฌ์šฉ
  2. ์Šคํ”„๋ง์˜ ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ด xml์— ๋ช…์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ @Component๋กœ ๋“ฑ๋ก์‹œํ‚ค๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  3. Component๋ฅผ ํ†ตํ•˜์—ฌ xmlํŒŒ์ผ์— ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  Component-scan์œผ๋กœ ๊ฐ์ฒด์˜ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  4. Component("์ด๋ฆ„")๋ฅผ ํ†ตํ•˜์—ฌ ๋นˆ ์ด๋ฆ„(id)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. Component("์ด๋ฆ„)์„ ์ƒ๋žตํ•  ๊ฒฝ์šฐ ํด๋ž˜์Šค์˜ ์•ž๊ธ€์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด๋ฆ„์ด ์ง€์ •๋œ๋‹ค. Ex) Product > @Component("product") Goods > @Component("goods")
  6. servelet-context.xml ํŒŒ์ผ์˜ <context:component-scan base-package="ํŒจํ‚ค์ง€๋ช…" />์˜ ์ง€์ •๋œ ๊ฒฝ๋กœ์— ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก์ด ์žˆ์–ด์•ผ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  7. @Component ์™ธ @Controller , @Service , @Repository , @Aspect , @Configuration ์–ด๋…ธํ…Œ์ด์…˜๋„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์ด ๋œ๋‹ค.

๐Ÿ“– ์ฐธ๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€