[Spring] Annotation

์กฐ๋ฏผ๊ฒฝยท2025๋…„ 3์›” 13์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
9/13

Chapter 1 : ๐ŸŽฏ Annotation ์ž์„ธํžˆ ๋ณด๊ธฐ


๐Ÿ’ก Spring์—์„œ ์‚ฌ์šฉํ•˜๋Š” Annotation๋“ค์ด ๊ฐ๊ฐ ์–ด๋–ค ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šตํ•œ๋‹ค๋ฉด ๋ชจ๋ฅด๋Š” Annotation์ด ๋‚˜์˜ฌ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์Šค์Šค๋กœ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค!



โœ”๏ธ @Component

๐Ÿ“Œ ์ฃผ์š” ํŠน์ง•

  • Spring Bean์— ๋“ฑ๋กํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    • Spring Bean์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

    • WAS๊ฐ€ Servlet ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ์—ญํ• !


๐Ÿ“Œ ์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…

  • @Indexed

    • ํด๋ž˜์Šค๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์œผ๋กœ Spring Bean์— ๋” ๋น ๋ฅด๊ฒŒ ๋“ฑ๋ก๋˜๋„๋ก ๋„์™€์ค€๋‹ค.

๐Ÿ“ฆ Servlet Container(๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ ์ž๋ฃŒ)

๐Ÿ“š Servlet์„ ์ง€์›ํ•˜๋Š” WAS ๋‚ด๋ถ€์—๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ดˆ๊ธฐํ™”, ์ƒ์„ฑ, ๊ด€๋ฆฌ, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Servlet์˜ ์ƒ๋ช…์ฃผ๊ธฐ

    • Servlet์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•œ๋‹ค.

    • ์ฆ‰, WAS(์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ)๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ Servlet๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋œ๋‹ค.

  • Servlet ๊ฐ์ฒด ์ƒ์„ฑ์‹œ์ 

    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ธ์Šคํ„ด์Šคํ™” ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ, ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑํ•œ๋‹ค.

  • Servlet ์˜ˆ์‹œ ์ฝ”๋“œ

@WebServlet(name="ExampleServlet", urlPatterns = "/example")
public class ExampleServlet extends HttpServlet { // HttpServlet์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.
	
	@Override
	protected void service(
		HttpServletRequest request,  // HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” Servlet
		HttpServletResponse response // HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” Servlet
	) {
		// application logic
	}

}
@WebServlet(name="Example2Servlet", urlPatterns = "/example2")
// ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ

@WebServlet(name="Example3Servlet", urlPatterns = "/example3")
// ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ

@WebServlet(name="Example4Servlet", urlPatterns = "/example4")
// ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ
  • Servlet Container๊ฐ€ ํ•˜๋Š” ์ผ

    • ์„œ๋ธ”๋ฆฟ์„ ์ดˆ๊ธฐํ™”, ์ƒ์„ฑ, ๊ด€๋ฆฌ, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰

      • Servlet ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๋™์‹œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด Multi Thread๋ฅผ ์ง€์›ํ•œ๋‹ค.

    ๐Ÿ‘€ Q. ์‹ฑ๊ธ€ํ†ค์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

    ๐Ÿ’ฌ A. ์‹ฑ๊ธ€ํ†ค์€ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธgํ•œ๋‹ค. ํŠน์ • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์ž์›์˜ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•จ์œผ๋กœ์จ ์ƒํƒœ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๊ณต์œ  ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.




โœ”๏ธ @Target

๐Ÿ“Œ ์ฃผ์š” ํŠน์ง•

  • @Target์ด ์„ ์–ธ๋œ ํ•˜์œ„ ์–ด๋…ธํ…Œ์ด์…˜์ด ์–ด๋–ค ๋ฒ”์œ„์— ์ ์šฉ๋˜๋Š”์ง€ ์„ค์ •ํ•œ๋‹ค.

๐Ÿ”ข ElementType Enum ์†์„ฑ

  • ๊ฐ๊ฐ์˜ Enum๋งˆ๋‹ค ์ ์šฉ๋˜๋Š” ๋ฒ”์œ„๊ฐ€ ์ƒ๋‹จ์— ์ฃผ์„์œผ๋กœ ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.




โœ”๏ธ @Retention

๐Ÿ“Œ ์ฃผ์š” ํŠน์ง•

  • @Retention ํ•˜์œ„์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๐Ÿ”ข RetentionPolicy Enum ์†์„ฑ

  • SOURCE

    • ์†Œ์Šค ์ฝ”๋“œ(.java)์—์„œ๋งŒ ์œ ์ง€๋œ๋‹ค.

    • ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • CLASS

    • ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค ํŒŒ์ผ(.class)์— ์ €์žฅ๋˜์ง€๋งŒ, JVM์ด ์‹คํ–‰ ์‹œ ์ฝ์ง€ ์•Š๋Š”๋‹ค. (์ฃผ์„๊ณผ ๊ฐ™์Œ)

    • Default ๊ฐ’์ด๋‹ค.

  • RUNTIME

    • ํด๋ž˜์Šค ํŒŒ์ผ(.class)์— ์ €์žฅ๋˜๊ณ , JVM์— ์˜ํ•ด ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

    • ์ฆ‰, ์‹ค์ œ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์˜ ์ฝ”๋“œ์— ๋ฐ˜์˜๋˜์–ด ์˜ํ–ฅ์„ ์ค€๋‹ค.




โœ”๏ธ @Documented

๐Ÿ“Œ ์ฃผ์š” ํŠน์ง•

  • Javadoc ๋“ฑ์˜ ๋ฌธ์„œํ™” ๋„๊ตฌ์— ์˜ํ•ด ๋ฌธ์„œํ™”๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

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