week 6 jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

Collection์˜ ์ข…๋ฅ˜์™€ ํŠน์ง•์„ ์„ค๋ช…ํ•˜์‹œ์˜ค

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(Collection Framework)

  • ์ž๋ฐ”์—์„œ ์ปฌ๋ ˆ์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ž€, ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•ด ๋†“์€ ๊ฒƒ์ด๋‹ค.

  • JDK 1.2 ์ด์ „๊นŒ์ง€๋Š” Vector, Hashtable, Properties์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์„ ์„œ๋กœ ๊ฐ์ž ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ์œผ๋‚˜ JDK 1.2๋ถ€ํ„ฐ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ๋ชจ๋“  ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋ฅผ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ฒด๊ณ„ํ™”๋˜์—ˆ๋‹ค.

  • ์ด๋Ÿฌํ•œ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์€ ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค(interface)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค.

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค

  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ํฌ๊ฒŒ ์ปฌ๋ ‰์…˜์„ 3๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ•ต์‹ฌ์ด ๋˜๋Š” ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ–ˆ๋‹ค.
  1. List ์ธํ„ฐํŽ˜์ด์Šค
  2. Set ์ธํ„ฐํŽ˜์ด์Šค
  3. Map ์ธํ„ฐํŽ˜์ด์Šค
  • ์—ฌ๊ธฐ์„œ List์™€ Set ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ณตํ†ต์ ์„ ๋ฝ‘์•„๋‚ด์–ด ์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค์ธ Collection์„ ์ถ”๊ฐ€๋กœ ์ •์˜ํ•˜์˜€๋‹ค.
  • Map ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌ์กฐ์ƒ์˜ ์ฐจ์ด๋กœ ์ธํ•ด ๋ณ„๋„๋กœ ์ •์˜๋œ๋‹ค. ํ›„์— ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์‹ค์„ธ ์†Œ์Šค๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๋Šฅ๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

์ž๋ฐ”์—์„œ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ„์˜ ์ƒ์† ๊ด€๊ณ„๋Š” ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

  • ์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋‚˜ <K, V>๋Š” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ์ œ๋„ค๋ฆญ์œผ๋กœ ํ‘œํ˜„๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค.

์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ„๋žตํ•œ ํŠน์ง•

List

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ์˜ˆ) ๋Œ€๊ธฐ์ž ๋ช…๋‹จ
  • Vector, ArrayList, LinkedList, Stack, Queue ๋“ฑ

Set

  • ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์˜ˆ) ์–‘์˜ ์ •์ˆ˜์ง‘ํ•ฉ, ์†Œ์ˆ˜์˜ ์ง‘ํ•ฉ
  • HashSet, TreeSet ๋“ฑ

Map<K, V>

  • ํ‚ค(Key)์™€ ๊ฐ’(Value)์˜ ํ•œ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ˆœ์„œ๊ฐ€ ์—†๋‹ค.

  • ํ‚ค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ๊ฐ’์€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜ˆ) ์šฐํŽธ๋ฒˆํ˜ธ, ์ง€์—ญ๋ฒˆํ˜ธ(์ „ํ™”๋ฒˆํ˜ธ) HashMap, TreeMap, Hashtable, Properties

  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค(Collection Class)๋ผ๊ณ  ํ•œ๋‹ค. (์ฆ‰ ์œ„์˜ List, Set, Map 3๊ฐ€์ง€ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Œ.) ๊ตฌํ˜„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฆ„์ด ํด๋ž˜์Šค์˜ ์ด๋ฆ„์— ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ์ด๋ฆ„๋งŒ์œผ๋กœ๋„ ํด๋ž˜์Šค์˜ ํŠน์ง•์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด์žˆ๋‹ค.

(Vector, Stack, Hashtable, Properties์™€ ๊ฐ™์€ ํด๋ž˜์Šค๋“ค์€ ์ปฌ๋ ˆ์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ์กด์žฌํ•˜๋˜ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ช…๋ช…๋ฒ•์„ ๋”ฐ๋ฅด์ง€ ์•Š์Œ, Vector๋‚˜ Hashtable๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์€ ํ˜ธํ™˜์„ ์œ„ํ•ด์„œ ๋‚จ๊ฒจ๋‘์—ˆ์ง€๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ทธ ๋Œ€์‹  ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ArrayList์™€ HashMap์„ ์‚ฌ์šฉํ•˜์ž)

Call By Value / Call By Reference ์ฐจ์ด ์„ค๋ช… ๋ฐ ์˜ˆ์‹œ

Call by value

Call by value์™€ Call by reference์˜ ์„ค๋ช…์œผ๋กœ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” swap ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

์ผ๋‹จ ๋จผ์ € ์˜ˆ์ œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Class CallByValue{
		public static void swap(int x, int y) {
				int temp = x;
				x = y;		
				y = temp;
		}

		public static void main(String[] args) {
				
				int a = 10;
				int b = 20;
		
				System.out.println("swap() ํ˜ธ์ถœ ์ „ : a = " + a + ", b = " + b);
				swap(a, b);
				System.out.println("swap() ํ˜ธ์ถœ ํ›„ : a = " + a + ", b = " + b);
		
		}
}

๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋‚˜์˜ฌ๊นŒ์š”?

swap() ํ˜ธ์ถœ ์ „ : a = 10, b = 20

swap() ํ˜ธ์ถœ ํ›„ : a = 10, b = 20

"์–ด? ๋ถ„๋ช… swap() ๋ฉ”์„œ๋“œ์— a, b๋ฅผ ๋„˜๊ฒผ์œผ๋‹ˆ๊นŒ ๊ฐ’์ด ๋ฐ”๊ปด์•ผ ํ•˜๋Š”๊ฑฐ ์•„๋ƒ?"

๋„ค, ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์„ ๋จผ์ € ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด swap() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์— ์‚ฌ์šฉํ•œ ์ธ์ž a, b์™€ swap() ๋ฉ”์„œ๋“œ๋‚ด์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ x, y๋Š” ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋˜์‹ค๊ฒ๋‹ˆ๋‹ค.

main()์—์„œ ์„ ์–ธ ๋œ ๋ณ€์ˆ˜ a์™€ b๊ฐ€ ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ์˜ 0x0001๋ฒˆ์ง€์™€ 0x0005๋ฒˆ์ง€์— ํ• ๋‹น ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ• ๋‹น ๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ณ€์ˆ˜์—๋Š” ๊ฐ๊ฐ 10๊ณผ 20์˜ ๊ฐ’์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„, swap() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์— ์‚ฌ์šฉํ•œ ์ธ์ž a์™€ b๋Š” ํ• ๋‹น ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ด๊ฒจ์ ธ ์žˆ๋˜ ๊ฐ’๋งŒ์ด ๋ณต์‚ฌ๋˜์–ด swap() ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ x์™€ y์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๋‹ด๊ฒจ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐํ•˜๊ฒŒ๋„ swap() ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋“ค์€ main()์— ์กด์žฌํ•˜๋Š” a์™€ b๊ฐ€ ์•„๋‹Œ swap() ๋‚ด๋ถ€์— ์ƒˆ๋กœ ์ƒ์„ฑ ๋œ x์™€ y์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์ˆ˜ํ–‰ ํ›„์—๋„ ๊ฒฐ๊ณผ ๊ฐ’์— ๋ณ€ํ™”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์žฅํ™ฉํ•˜๊ฒŒ ์„ค๋ช…ํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์š”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Call by value๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์— ์‚ฌ์šฉ๋˜๋Š” ์ธ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’(value)์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ณด๋‚ธ๋‹ค.

Call by reference

Call by reference๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์— ์‚ฌ์šฉ๋˜๋Š” ์ธ์ž๊ฐ€, ๊ฐ’์ด ์•„๋‹Œ ์ฃผ์†Œ(Address)๋ฅผ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ, ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ(Reference)ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋„ ์œ„์™€ ๋น„์Šทํ•œ ์˜ˆ์ œ๋ฅผ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Class CallByReference{
		int value;

		CallByReference(int value) {
				this.value = value;
		}

		public static void swap(CallByReference x, CallByReference y) {
				int temp = x.value;
				x.value = y.value;
				y.value = temp;
		}

		public static void main(String[] args) {
				CallByReference a = new CallByReference(10);
				CallByReference b = new CallByReference(20);
				
				System.out.println("swap() ํ˜ธ์ถœ ์ „ : a = " + a.value + ", b = " + b.value);
				swap(a, b);
				System.out.println("swap() ํ˜ธ์ถœ ์ „ : a = " + a.value + ", b = " + b.value);
		
		}

}

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

swap() ํ˜ธ์ถœ ์ „ : a = 10, b = 20

swap() ํ˜ธ์ถœ ํ›„ : a = 20, b = 10

์ด๋ฒˆ์—๋Š” ์›ํ•˜๋Š” ๋Œ€๋กœ a์™€ b์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์–ด์„œ ์ž˜ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ์„ ๋ณด๋ฉฐ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/eda660a4-e38e-4faa-9cb7-147b7f6baf8e/Untitled.png

main()์—์„œ ์„ ์–ธ ๋œ CallByReference ํƒ€์ž…์˜ ๋ณ€์ˆ˜ a์™€ b๋Š” ๊ฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ 0x0001๋ฒˆ์ง€์™€ 0x0005๋ฒˆ์ง€์— ์ €์žฅ๋œ 10๊ณผ 20์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„, swap() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์— ์ธ์ž a์™€ b๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ ๋œ ์ฃผ์†Œ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜ x์™€ y์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ swap() ๋ฉ”์„œ๋“œ๋Š” 10๊ณผ 20์ด ์ €์žฅ ๋œ 0x0001๋ฒˆ์ง€์™€ 0x0005๋ฒˆ์ง€์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์—ฐ์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. main()์—์„œ ์„ ์–ธ ๋œ ๋ณ€์ˆ˜ a์™€ b๋Š” ๊ฐ๊ฐ 0x0001๋ฒˆ์ง€์™€ 0x0005๋ฒˆ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ๋“ค์—ฌ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋ณ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Call by reference๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ž ๊ฐ’์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ(Address)๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ณด๋‚ธ๋‹ค.

AspectJ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

AspectJ๋ž€?

  • AspectJ๋Š” PARC์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์šฉ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (AOP) ํ™•์žฅ ๊ธฐ๋Šฅ์ด๋‹ค.

  • ์ดํด๋ฆฝ์Šค ์žฌ๋‹จ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ๋…๋ฆฝํ˜• ๋˜๋Š” ์ดํด๋ฆฝ์Šค๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • AspectJ๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋‹จ์ˆœํ•จ๊ณผ ์ด์šฉ์„ฑ์„ ๊ฐ•์กฐํ•จ์œผ๋กœ์จ ํญ๋„“๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” AOP์— ๋Œ€ํ•œ ๋”” ํŒฉํ„ฐ ํ‘œ์ค€(์‚ฌ์‹ค ์ƒ ํ‘œ์ค€)์ด ๋˜์—ˆ๋‹ค.

  • AspectJ๋ž€ ์ˆœ์ˆ˜ Spring AOP API์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ์— ๋Œ€ํ•œ Advisor๋ฅผ ์ง€์›ํ•˜๊ณ , CTW, LTW๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์œ„๋น™ ๋ฐฉ๋ฒ•์„์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ํผํฌ๋จผ์Šค๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

  • ๋˜ํ•œ @Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ฐ”ํƒ•์œผ๋กœ Aspect ๋กœ์ง์„ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์–ด ๊ธฐ์กด์˜ xml๋ฐฉ์‹๋ณด๋‹ค๋Š” ๋” ํŽธ๋ฆฌํ•˜๋‹ค.

  • ํ˜„์žฌ๋Š” Spring AOP + AspectJ๋Š” ๊ฑฐ์˜ ํ‘œ์ค€์ด๋ผ๊ณ  ํ•  ์ •๋„๋กœ ๋งŽ์ด ์‚ฌ์šฉ์ด ๋˜๊ณ  ์žˆ๋Š” ์ถ”์„ธ๋‹ค.

  • AspectJ๋Š” ์Šคํ”„๋ง ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ AOP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ๋„ AOP๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” API์ด๋‹ค.

  • Aspect๋ž€ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ํด๋ž˜์Šค์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

  • ๊ทธ ์ž์ฒด๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋‹ด์€ ํ•ต์‹ฌ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋งŽ์€ ์˜ค๋ธŒ์ ํŠธ์— ๊ฑธ์ณ์„œ ํ•„์š”ํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ถ”์ƒํ™” ํ•ด๋†“์€ ๊ฒƒ์ด๋‹ค.

  • ๊ตฌ์กฐ์ ์œผ๋กœ ๋ณด์ž๋ฉด Aspect = PointCut + Advisor์ด๋‹ค.

์œ„๋น™ Weaving

  • ์œ„๋น™(Weaving) ์ด๋ž€? Aspect ํด๋ž˜์Šค์— ์ •์˜ ํ•œ Advice ๋กœ์ง์„ ํƒ€๊นƒ(Target)์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์œ„๋น™ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” RTW, CTW, LTW 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๋Ÿฐํƒ€์ž„ ์‹œ, ์œ„๋น™ (RTW: Runtime Weaving)

  • Spring AOP์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์œ„๋น™ ๋ฐฉ์‹์ด๋‹ค. Proxy๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹ค์ œ ํƒ€๊นƒ(Target) ์˜ค๋ธŒ์ ํŠธ์˜ ๋ณ€ํ˜•์—†์ด ์œ„๋น™์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์‹ค์ œ ๋Ÿฐํƒ€์ž„ ์ƒ, Method ํ˜ธ์ถœ ์‹œ์— ์œ„๋น™์ด ์ด๋ฃจ์–ด ์ง€๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์†Œ์ŠคํŒŒ์ผ, ํด๋ž˜์Šค ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ณ€ํ˜•์ด ์—†๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํฌ์ธํŠธ ์ปท์— ๋Œ€ํ•œ ์–ด๋“œ๋ฐ”์ด์Šค ์ ์šฉ ๊ฐฏ์ˆ˜๊ฐ€ ๋Š˜์–ด ๋‚ ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ๋˜ํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด์„œ๋งŒ ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปดํŒŒ์ผ ์‹œ, ์œ„๋น™ (CTW: Compile time Weaving)

  • AspectJ์—๋Š” AJC (AspectJ Compiler)๋ผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ๋Š”๋ฐ Java Compiler๋ฅผ ํ™•์žฅํ•œ ํ˜•ํƒœ์˜ ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค. (AspectJ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)
  • AJC๋ฅผ ํ†ตํ•ด java ํŒŒ์ผ์„ ์ปดํŒŒ์ผ ํ•˜๋ฉฐ, ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์กฐ์ž‘์„ ํ†ตํ•ด Advisor ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•˜์—ฌ ์œ„๋น™์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์žฅ์ ์œผ๋กœ๋Š” 3๊ฐ€์ง€ ์œ„๋น™ ์ค‘์—์„œ๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ํผํฌ๋จผ์Šค๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. (JVM ์ƒ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ ๋ฉ”์†Œ๋“œ ๋‚ด์— ์ด๋ฏธ advise ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž… ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ)
  • ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ lombok๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์•„์ฃผ ๋†’๋‹ค. (๊ฑฐ์˜ ๊ฐ™์ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€)

AOP ์ ์šฉ๊ธฐ์ˆ 

  • ์Šคํ”„๋ง์˜ AOP๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ๋ฒ•๋“ค์„ ํ™œ์šฉํ•œ ํ”„๋ก์‹œ ๋ฐฉ์‹์˜ AOP์™€ AspectJ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ๋ฅผ ์“ฐ์ง€ ์•Š๋Š” AOP ๊ธฐ์ˆ ์ด ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ”„๋ก์‹œ ์—†์ด ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ์— ์ ์šฉํ•ด ์ค„ ์ˆ˜ ์žˆ์„๊นŒ?
  • AspectJ๋Š” ํ”„๋ก์‹œ์ฒ˜๋Ÿผ ๊ฐ„์ ‘์ ์ธ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ, ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋œฏ์–ด๊ณ ์ณ์„œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ง์ ‘ ๋„ฃ์–ด์ฃผ๋Š” ์ง์ ‘์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.(์ปดํŒŒ์ผ ์œ„๋น™)
  • ์ปดํŒŒ์ผ๋œ ํƒ€๊นƒ์˜ ํด๋ž˜์Šค ํŒŒ์ผ ์ž์ฒด๋ฅผ JVM์— ๋กœ๋”ฉ๋˜๋Š” ์‹œ์ ์„ ๊ฐ€๋กœ์ฑ„์„œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์กฐ์ž‘ํ•˜๋Š” ๋ณต์žกํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฆ‰, ํŠธ๋žœ์žญ์…˜ ์ฝ”๋“œ๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ•จ๊ป˜ ์žˆ์—ˆ์„ ๋•Œ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฐ๋‹ค. ์™œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ• ๊นŒ?
  1. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์กฐ์ž‘ํ•ด ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด๋ฒ„๋ฆฌ๋ฉด DI ์ปจํ…Œ์ด๋„ˆ์˜ ๋„์›€์„ ๋ฐ›์•„ ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  2. ํ”„๋ก์‹œ ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•œ AOP๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์ƒ์ด ๋ฉ”์†Œ๋“œ๋กœ ์ œํ•œ๋˜์ง€๋งŒ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋ฉด ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ์„ฑ, ํ•„๋“œ ๊ฐ’์˜ ์กฐํšŒ์™€ ์กฐ์ž‘, ์Šคํƒœํ‹ฑ ์ดˆ๊ธฐํ™” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํƒ€๊นƒ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ˆœ๊ฐ„์—๋„ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • AspectJ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ปดํŒŒ์ผ๋Ÿฌ, ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋Œ€๋ถ€๋ถ„์€ ํ”„๋ก์‹œ ๋ฐฉ์‹์˜ ์Šคํ”„๋ง AOP๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.

์ถœ์ฒ˜: https://haviyj.tistory.com/33 [What do you want?]

์Šคํ”„๋ง ๋นˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋˜๋Š”๋ฐ ๊ตณ์ด ๋‚ด๋ถ€์— ์ƒํƒœ๋ฅผ ๋‘๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

Spring Bean์ด๋ž€

  • Spring์—์„œ POJO(plain, old java object)๋ฅผ โ€˜Beansโ€™๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • Beans๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ์„ ์ด๋ฃจ๋Š” ๊ฐ์ฒด์ด๋ฉฐ, Spring IoC(Inversion of Control) ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ธ์Šคํ„ด์Šคํ™”, ๊ด€๋ฆฌ, ์ƒ์„ฑ๋œ๋‹ค.
  • Beans๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๊ณต๊ธ‰ํ•˜๋Š” ์„ค์ • ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ(XML, class ์„ค์ • ํŒŒ์ผ)์— ์˜ํ•ด ์ƒ์„ฑ๋œ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด Bean์˜ ์ƒ์„ฑ, Bean Life Cycle, Bean Dependency(์ข…์†์„ฑ) ๋“ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ์ฒด๊ฐ€ ์ง€์ •๋˜๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด๋Š” getBean() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

Spring Bean ์ •์˜

  • ์ผ๋ฐ˜์ ์œผ๋กœ XML, class ํŒŒ์ผ์— ์ •์˜ํ•œ๋‹ค. ์ฃผ์š” ์†์„ฑ
  • class(ํ•„์ˆ˜): ์ •๊ทœํ™”๋œ ์ž๋ฐ” ํด๋ž˜์Šค ์ด๋ฆ„
  • id: bean์˜ ๊ณ ์œ  ์‹๋ณ„์ž
  • scope: ๊ฐ์ฒด์˜ ๋ฒ”์œ„ (sigleton, prototype)
  • constructor-arg: ์ƒ์„ฑ ์‹œ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•  ์ธ์ˆ˜
  • property: ์ƒ์„ฑ ์‹œ bean setter์— ์ „๋‹ฌํ•  ์ธ์ˆ˜
  • init method์™€ destroy method

Spring Bean Scope

  • ์Šคํ”„๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  bean์„ singleton์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹œ JVM ์•ˆ์—์„œ ์Šคํ”„๋ง์ด bean๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์Šคํ”„๋ง์„ ํ†ตํ•ด์„œ bean์„ ์ œ๊ณต๋ฐ›์œผ๋ฉด ์–ธ์ œ๋‚˜ ์ฃผ์ž…๋ฐ›์€ bean์€ ๋™์ผํ•œ ๊ฐ์ฒด๋ผ๋Š” ๊ฐ€์ •ํ•˜์—์„œ ๊ฐœ๋ฐœ์„ ํ•œ๋‹ค.
  • request, session, global session์˜ Scope๋Š” ์ผ๋ฐ˜ Spring ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ, Spring MVC Web Application์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ์ฐธ๊ณ 

1. Singleton

  • โ€˜singletonโ€™ bean์€ Spring ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ bean๋„ ์ œ๊ฑฐ๋œ๋‹ค.
  • ์ƒ์„ฑ๋œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋Š” single beans cache์— ์ €์žฅ๋˜๊ณ , ํ•ด๋‹น bean์— ๋Œ€ํ•œ ์š”์ฒญ๊ณผ ์ฐธ์กฐ๊ฐ€ ์žˆ์œผ๋ฉด ์บ์‹œ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ฆ‰, ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๊ฒƒ์„ ์ฐธ์กฐํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  bean์€ scope์ด ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด singleton์ด๋‹ค.

2. Prototype

  • โ€˜prototypeโ€™ bean์€ ๋ชจ๋“  ์š”์ฒญ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์ฆ‰, prototype bean์€ ์˜์กด์„ฑ ๊ด€๊ณ„์˜ bean์— ์ฃผ์ž… ๋  ๋•Œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์ฃผ์ž…๋œ๋‹ค.
  • ์ •์ƒ์ ์ธ ๋ฐฉ์‹์œผ๋กœ gc์— ์˜ํ•ด bean์ด ์ œ๊ฑฐ๋œ๋‹ค.

์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ ํ•ฉํ•œ ๊ฐ์ฒด

  • ์ƒํƒœ๊ฐ€ ์—†๋Š” ๊ณต์œ  ๊ฐ์ฒด: ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋Š” ๋™๊ธฐํ™” ๋น„์šฉ์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๋ฒˆ ์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ณณ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค. ์ฝ๊ธฐ์šฉ์œผ๋กœ๋งŒ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ๊ณต์œ  ๊ฐ์ฒด: 1๋ฒˆ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‚˜ ์ฝ๊ธฐ ์ „์šฉ์ด๋ฏ€๋กœ ์—ฌ์ „ํžˆ ๋™๊ธฐํ™” ๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค. ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ ์ง€๋‹Œ ๊ณต์œ  ๊ฐ์ฒด: ๊ฐ์ฒด ๊ฐ„์˜ ๋ฐ˜๋“œ์‹œ ๊ณต์œ ํ•ด์•ผ ํ•  ์ƒํƒœ๋ฅผ ์ง€๋‹Œ ๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด, ์ด ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ์ƒํƒœ์˜ ์“ฐ๊ธฐ๋ฅผ ๊ฐ€๋Šฅํ•œ ๋™๊ธฐํ™” ํ•  ๊ฒฝ์šฐ ์‹ฑ๊ธ€ํ†ค๋„ ์ ํ•ฉํ•˜๋‹ค.
  • ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์ง€๋‹ˆ๋ฉด์„œ๋„ ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋งค์šฐ ๋†’์€ ๊ฐ์ฒด: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—์„œ ์ •๋ง๋กœ ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋†’๋‹ค๋ฉด, ์“ฐ๊ธฐ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ๋น„์šฉ์„ ๊ฐ์•ˆํ•˜๊ณ ์„œ๋ผ๋„ ์‹ฑ๊ธ€ํ†ค์„ ๊ณ ๋ คํ• ๋งŒํ•˜๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ 1. ์žฅ์‹œ๊ฐ„์— ๊ฑธ์ณ ๋งค์šฐ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, 2. ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋งค์šฐ ์ž‘์€ ์–‘์˜ ์“ฐ๊ธฐ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ, 3. ๊ฐ์ฒด ์ƒ์„ฑ๋น„์šฉ์ด ๋งค์šฐ ํด ๋•Œ์— ์œ ์šฉํ•œ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋น„์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ ํ•ฉํ•œ ๊ฐ์ฒด

  • ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์ง€๋‹Œ ๊ฐ์ฒด: ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋งŽ์•„์„œ ๋™๊ธฐํ™” ๋น„์šฉ์ด ๊ฐ์ฒด ์ƒ์„ฑ ๋น„์šฉ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
  • ์ƒํƒœ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด: ์ผ๋ถ€ ์ œํ•œ์ ์ธ ๊ฒฝ์šฐ, ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š” ๋นˆ์„ ์ฐธ์กฐํ•˜์—ฌ ๋‹ค๋ฅธ ์˜์กด๊ฐ์ฒด์™€๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜์กด ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด ์‹ฑ๊ธ€ํ†ค๋ณด๋‹ค ๋น„์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค.

https://gmlwjd9405.github.io/2018/11/10/spring-beans.html

๋Œ€์นญํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹๊ณผ ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹์˜ ์ฐจ์ด

Nginx์™€ Apache์ค‘ ์–ด๋–ค๊ฑธ ์„ ํƒํ• ๊ฒƒ์ธ๊ฐ€?

โš ๏ธ **GitHub.com Fallback** โš ๏ธ