{"componentChunkName":"component---src-templates-blog-post-js","path":"/springboot/스프링-부트-custom-annotation/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"102cc3ee-8609-5242-8fbd-34b28e576dce","excerpt":"스프링 부트 Custom Annotation(커스텀 어노테이션), GET 요청 ~ JSON 응답 Custom Annotation 프로그램에 관한 데이터를 제공하거나 코드에 정보를 추가할 때 사용하는 것을 어노테이션이라고 한다. 대표적인 어노테이션으로는 @Controller…","html":"<p><img src=\"/assets/springboot.png\" alt=\"스프링 부트 Custom Annotation(커스텀 어노테이션), GET 요청 ~ JSON 응답\" title=\"스프링 부트 Custom Annotation(커스텀 어노테이션), GET 요청 ~ JSON 응답\"></p>\n<h2 id=\"custom-annotation\" style=\"position:relative;\"><a href=\"#custom-annotation\" aria-label=\"custom annotation permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Custom Annotation</h2>\n<p>프로그램에 관한 데이터를 제공하거나 코드에 정보를 추가할 때 사용하는 것을 어노테이션이라고 한다. 대표적인 어노테이션으로는 @Controller, @SpringBootApplication등이 있다. 하지만 위 예시 어노테이션들은 이미 만들어진 어노테이션들이고, 직접 커스텀해서 어노테이션을 만들 수 있는데, 이것을 커스텀 어노테이션이라고 한다.</p>\n<h3 id=\"custom-annotation-만들기\" style=\"position:relative;\"><a href=\"#custom-annotation-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"custom annotation 만들기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Custom Annotation 만들기</h3>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Target</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span><span class=\"token class-name\">ElementType</span><span class=\"token punctuation\">.</span><span class=\"token constant\">METHOD</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@Retention</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">RetentionPolicy</span><span class=\"token punctuation\">.</span><span class=\"token constant\">RUNTIME</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token annotation punctuation\">@interface</span> <span class=\"token class-name\">LogExclusion</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>@interface를 추가하여 어노테이션으로 만들수 있다.</p>\n<p><strong>@Target</strong></p>\n<p>어노테이션이 생성될 수 있는 위치를 지정하는 어노테이션이다.</p>\n<table>\n<thead>\n<tr>\n<th>이름</th>\n<th>설명</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>PACKAGE</td>\n<td>패키지 선언 시</td>\n</tr>\n<tr>\n<td>TYPE</td>\n<td>타입(클래스, 인터페이스, enum) 선언 시</td>\n</tr>\n<tr>\n<td>CONSTUCTOR</td>\n<td>생성자 선언 시</td>\n</tr>\n<tr>\n<td>FIELD</td>\n<td>enum 상수를 포함한 멤버변수 선언 시</td>\n</tr>\n<tr>\n<td>METHOD</td>\n<td>메소드 선언시</td>\n</tr>\n<tr>\n<td>ANNOTATION_TYPE</td>\n<td>어노테이션 타입 선언 시</td>\n</tr>\n<tr>\n<td>LOCAL_VARIABLE</td>\n<td>지역변수 선언 시</td>\n</tr>\n<tr>\n<td>PARAMETER</td>\n<td>파라미터 선언 시</td>\n</tr>\n<tr>\n<td>TYPE_PARAMETER</td>\n<td>파라미터 타입 선언 시</td>\n</tr>\n</tbody>\n</table>\n<p><strong>@Retention</strong></p>\n<p>어노테이션이 언제까지 유효할지 정하는 어노테이션입니다.</p>\n<table>\n<thead>\n<tr>\n<th>이름</th>\n<th>설명</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>RUNTIME</td>\n<td>컴파일 이후에도 참조 가능</td>\n</tr>\n<tr>\n<td>CLASS</td>\n<td>클래스를 참조할 때 까지 유효</td>\n</tr>\n<tr>\n<td>SOURCE</td>\n<td>컴파일 이후 어노테이션 정보 소멸</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"custom-annotation-rest-api-test\" style=\"position:relative;\"><a href=\"#custom-annotation-rest-api-test\" aria-label=\"custom annotation rest api test permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Custom Annotation REST API Test</h3>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// CoffeeController.java</span>\n\n<span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CoffeeController</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n  <span class=\"token annotation punctuation\">@ResponseBody</span>\n  <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/americano\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">americano</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">Coffee</span> coffee <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Coffee</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    coffee<span class=\"token punctuation\">.</span><span class=\"token function\">setTitle</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"americano\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> coffee\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@ResponseBody</span>\n  <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/espresso\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">espresso</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">Coffee</span> coffee <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Coffee</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    coffee<span class=\"token punctuation\">.</span><span class=\"token function\">setTitle</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"espresso\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> coffee\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@ResponseBody</span>\n  <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">findAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">Coffee</span> coffee <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Coffee</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    coffee<span class=\"token punctuation\">.</span><span class=\"token function\">setTitle</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"americano, espresso\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> coffee<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>Request</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">GET : http://api.domain.com/coffee/americano // {\"americano\"}\nGET : http://api.domain.com/coffee/espresso // {\"espresso\"}\nGET : http://api.domain.com/coffee/espresso // {\"americano, espresso\"}</code></pre></div>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/springboot/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-custom-annotation/#custom-annotation\">Custom Annotation</a></p>\n<ul>\n<li><a href=\"/springboot/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-custom-annotation/#custom-annotation-%EB%A7%8C%EB%93%A4%EA%B8%B0\">Custom Annotation 만들기</a></li>\n<li><a href=\"/springboot/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-custom-annotation/#custom-annotation-rest-api-test\">Custom Annotation REST API Test</a></li>\n</ul>\n</li>\n</ul>","wordCount":{"words":74},"fields":{"slug":"/springboot/스프링-부트-custom-annotation/","image":"/assets/springboot.png","faq":[]},"frontmatter":{"title":"스프링 부트 Custom Annotation(커스텀 어노테이션), GET 요청 ~ JSON 응답","date":"2021년 3월 16일","dateISO":"2021-03-16T20:29:29.537Z","updatedISO":null,"category":"springboot","description":"프로그램에 관한 데이터를 제공하거나 코드에 정보를 추가할 때 사용하는 것을 어노테이션이라고 한다. 대표적인 어노테이션으로는 @Controller, @SpringBootApplication등이 있다. 하지만 위 예시 어노테이션들은 이미 만들어진 어노테이션들이고, 직접 커스텀해서 어노테이션을 만들 수 있는데, 이것을 커스텀 어노테이션이라고 한다.","tags":["스프링","스프링부트","Spring","SpringBoot","Java","프레임워크","Custom Annotation","REST API"]}}},"pageContext":{"slug":"/springboot/스프링-부트-custom-annotation/","previous":{"fields":{"slug":"/springboot/스프링-부트-소개/"},"frontmatter":{"title":"스프링 부트 소개","tags":["스프링","스프링부트","Spring","SpringBoot","Java","프레임워크"]}},"next":{"fields":{"slug":"/study/Vue-JS를-활용한-프론트엔드-개발/"},"frontmatter":{"title":"Vue JS를 활용한 프론트엔드 개발","tags":["Vue.js","JamStack","Netlify","Nuxt.js","JavaScript"]}}}},"staticQueryHashes":["213619243","3262363727"]}