<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>서기리보이의 블로그</title>
    <link>https://invincibletyphoon.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Jul 2026 19:00:05 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>서기리보이</managingEditor>
    <item>
      <title>Chap 2.3 POJO 레퍼런스 자동연결(@Autowired)</title>
      <link>https://invincibletyphoon.tistory.com/77</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;레시피 2-2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;내용은 별 내용 없어서 생략했다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;이번 장에서는 POJO 인스턴스에 대한 레퍼런스 자동 연결 기능을 보도록 하자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;1. Autowired&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;POJO 필드에 @Autowired 어노테이션을 붙이면 그 필드에 호환되는 빈을 찾아서 연결한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;필드 변수를 초기화해주지 않아도 자동으로 호환되는 레퍼런스를 찾아 초기화해준다는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;다음 예제는 이전 포스팅에서 다루었던 SequenceGenerator 예제를 변형한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Sequence&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;Sequence&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;Sequence(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;id,&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;prefix,&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.id&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.suffix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getId()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getPrefix()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getSuffix()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;SequenceDao&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;interface&lt;/span&gt;&amp;nbsp;SequenceDao&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;Sequence&amp;nbsp;getSequence(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;getNextValue(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;SequenceDaoImpl&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.HashMap;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Map;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.concurrent.atomic.AtomicInteger;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.ComponentScan;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.stereotype.Component;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Component(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;sequenceDao&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceDaoImpl&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;implements&lt;/span&gt;&amp;nbsp;SequenceDao&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;,&amp;nbsp;Sequence&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;sequences&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;HashMap&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;,&amp;nbsp;AtomicInteger&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;values&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;HashMap&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceDaoImpl()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sequences.put(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;Sequence(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;30&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;A&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.put(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AtomicInteger(&lt;span style=&quot;color:#0099cc&quot;&gt;10000&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;Sequence&amp;nbsp;getSequence(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;sequences.get(sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;getNextValue(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AtomicInteger&amp;nbsp;value&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;values.get(sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;value.getAndIncrement();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;Main&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.ApplicationContext;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.AnnotationConfigApplicationContext;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;Main&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;main(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;args)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApplicationContext&amp;nbsp;context&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AnnotationConfigApplicationContext(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;com.apress.springrecipes.sequence&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SequenceService&amp;nbsp;sequenceService&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;context.getBean(SequenceService.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;println&lt;/span&gt;(sequenceService.generate(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;println&lt;/span&gt;(sequenceService.generate(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;여기까지는 이전 포스팅과 똑같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;다음에 설명하는 SequenceService가 이번 포스팅의 핵심 내용이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;SequenceService&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.beans.factory.annotation.Autowired;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.stereotype.Service;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Service&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceService&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;SequenceDao&amp;nbsp;sequenceDao;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceService()&amp;nbsp;{}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceService(SequenceDao&amp;nbsp;sequenceDao)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.sequenceDao&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;sequenceDao;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setSequenceDao(SequenceDao&amp;nbsp;sequenceDao)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.sequenceDao&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;sequenceDao;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;generate(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&amp;nbsp;sequence&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;sequenceDao.getSequence(sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;value&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;sequenceDao.getNextValue(sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;sequence.getPrefix()&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&amp;nbsp;value&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&amp;nbsp;sequence.getSuffix();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;SequenceService 클래스는 서비스 클래스로, DAO(Data Access Object)와 연동하여 요청을 처리해주는 클래스다. (이런 구현 방법이 실제로 자주 쓰인다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;@Service 어노테이션이 붙어있기 때문에 SequenceService는 스프링 빈으로 등록되고, @Autowired가 있기 때문에 sequenceDao 필드엔 이에 호환되는 SequenceDaoImpl 클래스가 자동으로 연결된다. 그렇기 때문에 Main 클래스에서 sequenceService.sequenceDao 필드를 초기화하는 내용이 없음에도 generate() 메소드를 호출해도 오류가 생기지 않는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;배열, 맵 연결&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;배열형 프로퍼티에 @Autowired를 붙이면 스프링은 매치되는 모든 빈을 찾아서 연결하고, type-safe한 컬렉션에 @Autowired를 붙였을 때도 호환되는 모든 빈을 찾아서 연결된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGenerator{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;PrefixGenerator[]&amp;nbsp;prefixGenerators;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGenerator{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;PrefixGenerator&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;prefixGenerators;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGenerator{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;,&amp;nbsp;PrefixGenerator&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;prefixGenerators;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이와 같은 경우 prefixGenerators에 호환되는 모든 빈들이 연결된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;2. @Autowired로 POJO 메소드와 생성자 연결&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;@Autowired는 POJO &lt;b&gt;Setter&amp;nbsp;메서드, 생성자&lt;/b&gt;에도 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;그렇게 되면 세터 메서드와 생성자의 패러미터로 들어오는 변수에 호환되는 빈이 자동으로 연결된다. (패러미터는 여러개 있어도 가능하다)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;45&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;46&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.beans.factory.annotation.Autowired;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGenerator&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;PrefixGenerator&amp;nbsp;prefixGenerator;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;initial;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;counter;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceGenerator()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceGenerator(PrefixGenerator&amp;nbsp;prefixGenerator,&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix,&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;initial)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefixGenerator&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefixGenerator;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.suffix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.initial&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;initial;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//@Autowired&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setPrefixGenerator(PrefixGenerator&amp;nbsp;prefixGenerator)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefixGenerator&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefixGenerator;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&amp;nbsp;&amp;nbsp;@Autowired&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;myOwnCustomInjectionName(PrefixGenerator&amp;nbsp;prefixGenerator)&amp;nbsp;{&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefixGenerator&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefixGenerator;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setSuffix(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.suffix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setInitial(&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;initial)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.initial&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;initial;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;synchronized&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getSequence()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuilder&amp;nbsp;builder&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;StringBuilder();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.append(prefixGenerator.getPrefix());&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.append(initial&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&amp;nbsp;counter&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;builder.append(suffix);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;builder.&lt;span style=&quot;color:#066de2&quot;&gt;toString&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;위에서 Setter 메소드에 @Autowired 어노테이션을 붙여 prefixGenerator에 매칭되는 빈 오브젝트를 자동으로 찾아서 집어넣는다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;스프링에서 기본적으로는 @Autowired를 붙인 프로퍼티는 필수 프로퍼티로 취급되어, 매칭되는 빈이 없으면 예외가 발생한다. @Autowired의 &lt;b&gt;required 속성값을 false로 지정&lt;/b&gt;하면 선택적 프로퍼티로 취급되어 빈을 못 찾아도 그냥 지나친다.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGenerator&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Autowired(required&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#0099cc&quot;&gt;false&lt;/span&gt;)&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;myOwnCustomInjectionName(PrefixGenerator&amp;nbsp;prefixGenerator)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefixGenerator&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefixGenerator;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. 모호한 자동 연결 명시하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;@Primary&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;스프링에서는 @Primary를 붙여 후보 빈을 명시한다. 여러 빈이 자동 연결 대상일 때, 특정한 빈에 우선권을 부여하는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;@Qualifier&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;@Qualifier에 이름을 줘서 후보 빈을 명시할 수도 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;4. 여&lt;/span&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;러곳에 분산된 POJO 참조 문제 해결&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;어플리케이션 규모가 커지면 모든 POJO 설정을 하나의 자바 구성 클래스에 담기 어렵기 떄문에, 보통 POJO 기능에 따라 여러 자바 구성 클래스로 나눠서 관리한다. 그런데 자바 구성 클래스가 여러개 있으면 서로다른 클래스에 정의된 POJO를 자동으로 연결하거나 참조하기가 쉽지 않다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이는 다음의 두가지 방법으로 해결 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&amp;nbsp;방법1. 자바 구성 클래스가 위치한 경로마다 어플리케이션 컨텍스트를 초기화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;AnnotationConfigApplication&amp;nbsp;context&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AnnotationConfigApplicationContext(PrefixConfiguration.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;,&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SequenceGeneratorConfiguration.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&amp;nbsp;방법2. @Import로 구성 파일을 나눠서 임포트&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Configuration&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Import(PrefixConfiguration.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceConfiguration{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;....&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 24pt;&quot;&gt;4. 레퍼런스&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 16px;&quot;&gt;스프링 5 레시피(4판) - 한빛 미디어&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT 관련/스프링(스프링5 레시피)</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/77</guid>
      <comments>https://invincibletyphoon.tistory.com/77#entry77comment</comments>
      <pubDate>Tue, 25 Feb 2020 18:34:15 +0900</pubDate>
    </item>
    <item>
      <title>스프링 프로젝트 생성</title>
      <link>https://invincibletyphoon.tistory.com/76</link>
      <description>&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;기본적인 스프링 프로젝트 생성에서부터 막힐 수 있기 때문에 미리미리 정리...&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;STS 상단의 File - new - Project... 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1 스프링 붓.PNG&quot; data-origin-width=&quot;1926&quot; data-origin-height=&quot;1028&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CnsXe/btqCcCJfaWo/lly4ukgPOivFxK5v1befU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CnsXe/btqCcCJfaWo/lly4ukgPOivFxK5v1befU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CnsXe/btqCcCJfaWo/lly4ukgPOivFxK5v1befU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCnsXe%2FbtqCcCJfaWo%2Flly4ukgPOivFxK5v1befU1%2Fimg.png&quot; data-filename=&quot;1 스프링 붓.PNG&quot; data-origin-width=&quot;1926&quot; data-origin-height=&quot;1028&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;Spring Starter Project 선택.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2 스프링 붓 설정.PNG&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;1025&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8PBu0/btqCd0Jo2U5/kTcPkuY7Z2OFMxN9vW2LsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8PBu0/btqCd0Jo2U5/kTcPkuY7Z2OFMxN9vW2LsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8PBu0/btqCd0Jo2U5/kTcPkuY7Z2OFMxN9vW2LsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8PBu0%2FbtqCd0Jo2U5%2FkTcPkuY7Z2OFMxN9vW2LsK%2Fimg.png&quot; data-filename=&quot;2 스프링 붓 설정.PNG&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;1025&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;프로젝트 명, Type(그레이들/Maven 선택) 값 설정. 나머지 값들은 기본으로 두면 됨.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;그 다음 Next-Next-Finish 하면 프로젝트 생성.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3 불필요 파일 삭제.PNG&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LLlEZ/btqCbheRVhy/LmwyP75Kc2S3E7tBLDLkbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LLlEZ/btqCbheRVhy/LmwyP75Kc2S3E7tBLDLkbk/img.png&quot; data-alt=&quot;불필요한 파일들 삭제(빨간 네모 부분)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LLlEZ/btqCbheRVhy/LmwyP75Kc2S3E7tBLDLkbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLLlEZ%2FbtqCbheRVhy%2FLmwyP75Kc2S3E7tBLDLkbk%2Fimg.png&quot; data-filename=&quot;3 불필요 파일 삭제.PNG&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;1034&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;불필요한 파일들 삭제(빨간 네모 부분)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;프로젝트에서 불필요한 파일들을 삭제하고, src/main/java 디렉토리에 필요한 코드를 작성하면 된다.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT 관련/스프링(스프링5 레시피)</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/76</guid>
      <comments>https://invincibletyphoon.tistory.com/76#entry76comment</comments>
      <pubDate>Sun, 23 Feb 2020 17:06:34 +0900</pubDate>
    </item>
    <item>
      <title>Chap 2.1 자바로 POJO 구성하기</title>
      <link>https://invincibletyphoon.tistory.com/75</link>
      <description>&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt; font-weight: 700; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;;&quot;&gt;0. 들어가기에 앞서&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;이번 장의 주제는 스프링의 주요 기능이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;IoC(Inversion of Control. 제어의 역전)&lt;/b&gt;은 스프링 프레임워크의 심장부라고 할 수 있다. IoC 컨테이너는 &lt;b&gt;POJO(Plain Old Java Object. 오래된 방식의 단순 자바 객체)&lt;/b&gt;를 구성하고 관리하는데, &lt;u&gt;스프링 프레임워크의 가장 중요한 의의가 이 POJO로 자바 애플리케이션을 개발하는 것&lt;/u&gt;이므로 스프링의 주요 기능은 대부분 IoC 컨테이너 안에서 POJO를 구상하고 관리하는 일과 연관되어있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;* '빈(bean)' = 'POJO 인스턴스'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;* '컴포넌트(component)' = 'POJO 클래스'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 24pt;&quot;&gt;&lt;b&gt;1. 자바로 POJO 구성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;스프링 IoC 컨테이너에서 어노테이션을 붙여 POJO 관리하기.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;해결책&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;@Configuration, @Bean을 붙인 자바 구성 클래스를 만들거나, @Component, @Repository, @Service, @Controller 등을 붙인 자바 컴포넌트를 구성하여 POJO 클래스를 설계한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;IoC 컨테이너는 이렇게 어노테이션(annotation)을 붙인 자바 클래스를 스캐닝하여 어플리케이션의 일부인 것 처럼 POJO 인스턴스/빈을 구성한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;예제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;순차번호 생성기(다목적 시퀀스 생성기) 어플리케이션 개발을 위해&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;SequenceGenerator를 다음과 같이 구현한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Sequence는 prefix, suffix, initial 세가지 프로터피를 가지고, getSequence() 메소드를 호출하면 이 세가지 값이 조합된 시퀀스가 리턴된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;SequenceGenerator&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.concurrent.atomic.AtomicInteger;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGenerator&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;initial;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;AtomicInteger&amp;nbsp;counter&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AtomicInteger();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceGenerator()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setPrefix(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;prefix)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setSuffix(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.suffix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;setInitial(&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;initial)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.initial&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;initial;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getSequence()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;builder&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initial&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter.getAndIncrement()&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;+&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;builder;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이제 @Configuration, @Bean 어노테이션을 이용하여 자바 POJO를 생성하는 클래스 SequenceGeneratorConfiguration을 다음과 같이 구현한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;SequenceGeneratorConfiguration&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.appress.springrecipes.sequence.config;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Bean;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Configuration;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence.SequenceGenerator;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//@Configuration&amp;nbsp;:&amp;nbsp;이&amp;nbsp;클래스가&amp;nbsp;구성클래스임을&amp;nbsp;알림&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Configuration&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGeneratorConfiguration&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//@Bean&amp;nbsp;:&amp;nbsp;@Configuration&amp;nbsp;어노테이션이&amp;nbsp;달린&amp;nbsp;클래스의&amp;nbsp;빈(Bean)&amp;nbsp;인스턴스&amp;nbsp;정의부&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Bean&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceGenerator&amp;nbsp;sequenceGenerator()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SequenceGenerator&amp;nbsp;seqgen&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;SequenceGenerator();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;seqgen.setPrefix(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;30&quot;&lt;/span&gt;);;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;seqgen.setSuffix(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;A&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;seqgen.setInitial(&lt;span style=&quot;color:#0099cc&quot;&gt;100000&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;seqgen;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;스프링은 @Configuration이 달린 구성 클래스를 보면 일단 그 안의 빈(Bean)인스턴스 정의부, 즉 @Bean을 붙인, 빈 인스턴스를 생성해 반환하는 메서드를 찾는다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;구성 클래스의 메소드에 @Bean을 붙이면 빈이 생성되는데 @Bean의 name 속성값을 지정해 빈 이름을 지정해 줄 수 있다.(ex : @Bean(name=&quot;mys1&quot;) -&amp;gt; 생성되는 빈 이름은 mys1으로 생성됨.). name 속성값을 지정해주지 않으면 원본 메소드 이름과 같은 이름의 빈이 생성된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;다음 단계로 어노테이션을 붙인 자바 클래스를 스캐닝하기 위해&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;IoC 컨테이너를 인스턴스화해야한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;스프링에서 제공하는 IoC 컨테이너는 기본 구현체인 &lt;b&gt;Bean Factory&lt;/b&gt;, 그리고 이와 호환되는 고급 구현체인&amp;nbsp;&lt;b&gt;Application Context &lt;/b&gt;두가지가 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;둘은 각각 빈 팩토리, 어플리케이션 컨텍스트에 접근하기위한 인터페이스다. 그리고 Application Context는 BeanFactory의 하위 인터페이스라서 호환성이 보장된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp;* Application Context&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;는 기본 기능에 충실하면서도 Bean Factory보다 발전된 기능을 가지고 있으니, 리소스 제약을 받는 상황이 아니라면 Application Context를 사용하는게 좋다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;ApplicationCotext는 인터페이스이므로, 사용하려면 구상 클래스(concrete class)가 필요하다. 스프링에서 지원하는 ApplicationContext의 몇가지 구상체 중에서, &lt;b&gt;AnnotationConfigApplicationContext&lt;/b&gt;가 가장 최근 작품이고, 유연하기 때문에 사용이 권장된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;이제 Main클래스를 통해 시퀀스 생성기를 실행하는 것을 보자.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.ApplicationContext;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.AnnotationConfigApplicationContext;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;com.appress.springrecipes.sequence.config.SequenceGeneratorConfiguration;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;Main&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;main(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;args){&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//ApplicationContext를&amp;nbsp;구현한&amp;nbsp;구상&amp;nbsp;클래스들&amp;nbsp;중&amp;nbsp;AnnotationConfigApplicationContext&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApplicationContext&amp;nbsp;context&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AnnotationConfigApplicationContext(SequenceGeneratorConfiguration.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//getBean()&amp;nbsp;메소드로&amp;nbsp;구성&amp;nbsp;클래스에&amp;nbsp;선언된&amp;nbsp;빈을&amp;nbsp;가져옴&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SequenceGenerator&amp;nbsp;generator&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;context.getBean(SequenceGenerator.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;println&lt;/span&gt;(generator.getSequence());&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;println&lt;/span&gt;(generator.getSequence());&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;2. POJO 클래스에 @Component를 붙여 DAO 빈 생성하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;지금까지는 구성클래스 값을 하드코딩해서 스프링 빈을 인스턴스화했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;실제로 POJO는 대부분 DB나 유저 입력을 이용해 인스턴스화한다. 이번에는 더 현실적인 시나리오로, Domain 클래스와 DAO(Data Access Object)를 이용해 POJO을 생성한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;DB를 실제로 구현하진 않고, DAO 클래스에 하드코딩할 것이다. (이런 구조가 추후에 많이 사용된다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;앞에 나온 시퀀스 생성기에 도메인 클래스, DAO 패턴을 적용하기 위해 클래스 구조를 바꿔야한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;우선 Sequence 도메인 클래스를 만든다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Sequence&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;Sequence&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;Sequence(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;id,&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;prefix,&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;suffix)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.id&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.prefix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;this&lt;/span&gt;.suffix&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getId()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getPrefix()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;prefix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;getSuffix()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;suffix;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;다음은 DB 데이터 액세스를 처리하는 DAO 인터페이스와 이를 구현한 구상 클래스를 보자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;SequenceDao&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;interface&lt;/span&gt;&amp;nbsp;SequenceDao&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//DB&amp;nbsp;테이블에서&amp;nbsp;sequenceId로&amp;nbsp;POJO나&amp;nbsp;Sequence&amp;nbsp;객체를&amp;nbsp;로드함&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sequence&amp;nbsp;getSequence(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//다음&amp;nbsp;시퀀스&amp;nbsp;값을&amp;nbsp;얻어옴&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;getNextValue(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;b&gt;SequenceDaoImpl&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.HashMap;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Map;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.concurrent.atomic.AtomicInteger;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.stereotype.Component;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Component(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;sequenceDao&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceDaoImpl&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;implements&lt;/span&gt;&amp;nbsp;SequenceDao&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;,&amp;nbsp;Sequence&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;sequences&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;HashMap&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;final&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;,&amp;nbsp;AtomicInteger&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;values&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;HashMap&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//생성자에서&amp;nbsp;데이터베이스를&amp;nbsp;하드코딩으로&amp;nbsp;구현함&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;SequenceDaoImpl()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sequences.put(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;Sequence(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;30&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;A&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.put(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AtomicInteger(&lt;span style=&quot;color:#0099cc&quot;&gt;10000&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;Sequence&amp;nbsp;getSequence(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;sequences.get(sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;int&lt;/span&gt;&amp;nbsp;getNextValue(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;&amp;nbsp;sequenceId)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AtomicInteger&amp;nbsp;value&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;values.get(sequenceId);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;return&lt;/span&gt;&amp;nbsp;value.getAndIncrement();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;SequenceDaoImpl 클래스에 @Component(&quot;sequenceDao&quot;)를 붙이면 스프링은 이 클래스를 이용해 POJO를 생성한다. @Component에 넣은 값(&quot;sequenceDao&quot;)으로 빈 이름으로 할당된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;@Component는 스프링이 발견할 수 있게 POJO에 붙이는 &lt;b&gt;범용 어노테이션&lt;/b&gt;이다. 스프링에는 &lt;b&gt;Persistent(영속화), Service(서비스), Presentation(표현)의 세 레이어&lt;/b&gt;가 있는데, &lt;u&gt;&lt;b&gt;@Repository, @Service, @Controller&lt;/b&gt;가 각각 이 세 레이어를 가리키는 어노테이션&lt;/u&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;POJO의 쓰임새가 명확하지 않을 땐 그냥 @Com[onent를 붙여도 되고, 특정 용도에 맞게 쓰려면 구체적으로 명시하는 편이 좋다.(ex: @Repository는 발생한 예외를 DataAccessException으로 감싸 던지기 때문에 디버깅시 유리함)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;스캐닝 커스터마이징&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;기본적으로 스프링은 @Configuration, @Bean, @Component, @Repository, @Service, @Controller가 달린 클래스를 모두 감지하는데, 필터를 적용하여 스캐닝 과정을 커스터마이징하면 원하는 어노테이션만 골라서 컨텍스트에 포함시키거나 제외할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;모든 패키지를 스캐닝하면 시동 과정이 쓸데없이 느려 질 수 있어서 유용하다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;다음 예시와 같이 필터를 적용 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence.config;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.ComponentScan;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.Configuration;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.FilterType;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@Configuration&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;@ComponentScan(&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;includeFilters&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@ComponentScan.Filter(&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;type&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;FilterType.REGEX,&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pattern&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;com.apress.springrecipes.sequence.*Dao&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;com.apress.springrecipes.sequence.*Service&quot;&lt;/span&gt;&amp;nbsp;}&lt;/b&gt;)&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;excludeFilters&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@ComponentScan.Filter(&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&amp;nbsp;type&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;FilterType.ANNOTATION,&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;classes&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;{org.springframework.stereotype.Controller.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;}&lt;/b&gt;)&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;SequenceGeneratorConfiguration&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;스프링에서 지원하는 필터 표현식은 네종류다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;- annotation : 필터 대상 어노테이션 타입 지정&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;- assignable : 필터 대상 클래스/인터페이스 지정&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;- regex : 정규 표현식을 이용한&amp;nbsp;클래스 매칭으로 대상 클래스 지정&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;- aspectj : AspectJ 포인트컷 표현식으로 클래스를 매칭하여 대상 클래스 지정&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;위 예시에서는 regex, annotation 표현식을 이용해 필터링을 적용하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;includeFilters에서 com.appress.springrecipes.sequence.*Dao/*Service 형태의 이름을 가진 클래스를 포함하도록 했기 때문에, 어노테이션이 달려있지 않아도 스프링이 자동 감지한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;excludeFilters에서는 Controller 클래스를 지정해 제외시켰다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;테스트는 다음의 코드로 진행한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;Main&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#fafafa;border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px;border-right:2px solid #e5e5e5&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;package&lt;/span&gt;&amp;nbsp;com.apress.springrecipes.sequence;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.ApplicationContext;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.springframework.context.annotation.AnnotationConfigApplicationContext;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;&amp;nbsp;Main&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;void&lt;/span&gt;&amp;nbsp;main(&lt;span style=&quot;color:#066de2&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;args)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApplicationContext&amp;nbsp;context&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;new&lt;/span&gt;&amp;nbsp;AnnotationConfigApplicationContext(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;com.apress.springrecipes.sequence&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SequenceDao&amp;nbsp;sequenceDao&amp;nbsp;&lt;span style=&quot;color:#a71d5d&quot;&gt;=&lt;/span&gt;&amp;nbsp;context.getBean(SequenceDao.&lt;span style=&quot;color:#a71d5d&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;println&lt;/span&gt;(sequenceDao.getNextValue(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#066de2&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color:#066de2&quot;&gt;println&lt;/span&gt;(sequenceDao.getNextValue(&lt;span style=&quot;color:#63a35c&quot;&gt;&quot;IT&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right;margin-top:-13px;margin-right:5px;font-size:9px;font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color:#e5e5e5text-decoration:none&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom;padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;text-decoration:none;color:white&quot;&gt;&lt;span style=&quot;font-size:9px;word-break:normal;background-color:#e5e5e5;color:white;border-radius:10px;padding:1px&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. 레퍼런스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;스프링 5 레시피(4판) - 한빛 미디어&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT 관련/스프링(스프링5 레시피)</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/75</guid>
      <comments>https://invincibletyphoon.tistory.com/75#entry75comment</comments>
      <pubDate>Sun, 23 Feb 2020 16:05:45 +0900</pubDate>
    </item>
    <item>
      <title>스프링 시작(Chapter1)</title>
      <link>https://invincibletyphoon.tistory.com/74</link>
      <description>&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 24pt;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;1. 환경 구축&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;스프링 프레임워크를 이용한 개발을 위한 개발툴(IDE)에는 이클립스, STS, 인텔리제이, 메모장 등을 사용할 수 있는데, 글쓴이는 STS를 이용한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;최신 STS4 버전을 이용하고, jdk 1.8.0_241 버전을 이용한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;설치방법은 다음의 '나 연구소'라는 블로그에&amp;nbsp;정리가 잘 되어있으니 (&lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221613874213&amp;amp;proxyReferer=https%3A%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;링크&lt;/a&gt;)를 참조하면 좋을 듯 하다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: left; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 18.6667px;&quot;&gt;&amp;nbsp;설치를 완료하고,&amp;nbsp;&lt;/span&gt;&lt;font color=&quot;#333333&quot; face=&quot;KoPub Dotum&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;SpringToolSuite4.exe 를 실행하면 이클립스와 거의 똑같은 화면이 뜬다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: left; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 24pt;&quot;&gt;2. 메이븐 프로젝트 임포트 및 실행&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;STS4를 실행하면 다음과 같은 화면이 뜬다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); font-size: 14px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px; width: 500px; height: 270px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9906FB425E4E3FC32A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9906FB425E4E3FC32A&quot; width=&quot;500&quot; height=&quot;270&quot; filename=&quot;1 Create new Spring Start project.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 500px; height: 270px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;여기서 Create new Spring Starter Project를 클릭하고, 그 후 설정은 이번에는 모두 기본값으로 두고 진행한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이후 File&amp;nbsp;- Import 을 클릭하고, Maven/Existing Maven Project 옵션을 선택한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9923883F5E4E449E32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9923883F5E4E449E32&quot; width=&quot;500&quot; height=&quot;271&quot; filename=&quot;2 옵션 선택.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이후 디렉토리 설정에서 ch01/springintro_mvn 디렉토리를 지정한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F2273A5E4E44FC26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F2273A5E4E44FC26&quot; width=&quot;500&quot; height=&quot;269&quot; filename=&quot;3 디렉토리 설정.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;여기서 Import Maven Projects 창에서 pom.xml com.apress.springrecipes... 이 내용이 보이면 프로젝트가 정상적으로 임포트 된 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 상태가 됬다면 Finish하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이후 프로젝트를 선택하고 RunAs - Maven Build 옵션을 선택하고, 팝업창이 뜨면 Run하면 빌드된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999DB5365E4E46EB2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999DB5365E4E46EB2F&quot; width=&quot;500&quot; height=&quot;268&quot; filename=&quot;4 빌드 완료.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이제 F5를 눌러 프로젝트 디렉토리를 갱신해보면 하위 디렉토리에 target 디렉토리사 새로 생겨있다. 이 디렉토리 아래 springintro_mvn-4.0.0-SNAPSHOT.jar 파일을 우클릭하고 Run as - Run configurations 옵션을 선택하면 실행 설정을 편집하는 팝업이 뜬다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99686A3B5E4E48312E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99686A3B5E4E48312E&quot; width=&quot;500&quot; height=&quot;269&quot; filename=&quot;5 실행 설정.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;여기서 좌측에 Java application을 선택하고, Main Class 박스에 이 프로젝트의 메인 클래스 com.apress.springrecipes.hello.Main을 입력한다.(탐색 기능을 쓰면 정확히 찾을 수 있음)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이제 Run 버튼을 클릭하면 인사말이 뜬다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9913613A5E4E485930&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9913613A5E4E485930&quot; width=&quot;500&quot; height=&quot;267&quot; filename=&quot;6 실행 결과.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;실행 결과&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 32px; font-weight: 700;&quot;&gt;3. 그레이들&amp;nbsp;프로젝트 임포트 및&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 32px; font-weight: 700;&quot;&gt;실행&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;그레이들은 메이븐보다 최근에 나온 빌드 스크립트로, 조만간 메이븐을 대체할 예정이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;STS에서 그레이들을 사용하려면 우선 Buildship 확장 플러그인을 설치해야한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;STS상단 메뉴에서 Help&amp;nbsp;- Eclipse Marketplace 를 선택하고, Gradle 키워드로 검색한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;(책에서는 2.0버전을 설치하라고 되어있지만 현재는 3.0버전밖에 없음)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1000px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D1D3475E4F307F08&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D1D3475E4F307F08&quot; width=&quot;1000&quot; height=&quot;537&quot; filename=&quot;7 - 그레이들 인테그레이트.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이제 예제 소스를 임포트하는 단계다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;File - Import 에서 Gradle/Existing Gradle Projects 옵션으로 넘어간다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;디렉토리는 예제 소스의 ch01/springintro 디렉토리로 설정한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1000px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B7C23B5E4F371F09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B7C23B5E4F371F09&quot; width=&quot;1000&quot; height=&quot;536&quot; filename=&quot;8 - 임포트.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;이후 프로젝트를 선택하고 Run 하면 실행된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;책에서는 프로젝트를 빌드하고, libs 디렉터리의 springintro.jar 파일을 선택에 Run configurations 설정에서 Main class를 설정해줘야한다고 하는데 이 과정이 필요없이 바로 실행이 됬다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;빌드쉽 버전 차이 때문에 그런게 아닐까 싶다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;배움이 즐거운 개발자님의 포스팅을 통해 빌드하는 법을 찾았다.(&lt;/span&gt;&lt;a href=&quot;https://galid1.tistory.com/500&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;링크&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;우선 STS에서 Gradle Tasks 뷰를 띄워야한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;우측 상단에 커맨드 검색 기능을 이용해 Show View(Gradle Tasks) 커맨드를 선택하여 Gradle Tasks 뷰를 띄우고, 해당 프로젝트의 build/jar를 더블 클릭하면 빌드된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1000px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99475B405E4F3DC80D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99475B405E4F3DC80D&quot; width=&quot;1000&quot; height=&quot;537&quot; filename=&quot;9 - 그레이들 테스크.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;그러면 실제 디렉토리에 다음과 같이 jar 파일이 생성되어있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: center; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 1000px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995217335E4F3E2310&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995217335E4F3E2310&quot; width=&quot;1000&quot; height=&quot;567&quot; filename=&quot;10 - 빌드 완료.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-size: 32px; font-weight: 700;&quot;&gt;3. 빌드 스크립트&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;자바 애플리케이션을 개발하다보면 JAR 파일이나 구성 파일 복사, 컴파일에 필요한 클래스패스 설정, JAR 의존체 다운로드 등 자잘한 작업이 많은데, 자바 빌드 툴이 이를 대신 처리한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;빌드 파일만 있으면 빌드시 원 개발자가 의도한 작업을 그대로 재현할 수 있기 때문에 자바 빌드 툴은 중요하다. 메이븐 pom.xml, 그레이들 build.gradle 파일만 있으면 빌드 툴에 무관하게 다른 유저, 다른 시스템에서도 일관되게 빌드할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;자바 개발자들은 대부분 빌드 스크립트로 메이븐 pom.xml이나 이보다 나중에 나온 build.gradle을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 부분은 아직 빌드 스크립트를 본 적 없어서 이해가 가지 않을 수 있으니 일단 넘어가자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 32px; font-weight: 700;&quot;&gt;4. 레퍼런스&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 32px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;스프링 5 레시피(4판) - 한빛 미디어&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221613874213&amp;amp;proxyReferer=https%3A%2F%2Fwww.google.com%2F&quot;&gt;https://m.blog.naver.com/PostView.nhn?blogId=pyj721aa&amp;amp;logNo=221613874213&amp;amp;proxyReferer=https%3A%2F%2Fwww.google.com%2F&lt;/a&gt;&amp;nbsp;- STS 설치&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;a href=&quot;https://github.com/nililee/spring-5-recipes&quot;&gt;https://github.com/nililee/spring-5-recipes&lt;/a&gt;&amp;nbsp;- 스프링 예제&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;a href=&quot;https://galid1.tistory.com/500&quot;&gt;https://galid1.tistory.com/500&lt;/a&gt;&amp;nbsp;- 그레이들 빌드 하는 법.&lt;/p&gt;</description>
      <category>IT 관련/스프링(스프링5 레시피)</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/74</guid>
      <comments>https://invincibletyphoon.tistory.com/74#entry74comment</comments>
      <pubDate>Thu, 20 Feb 2020 17:12:34 +0900</pubDate>
    </item>
    <item>
      <title>MQTT 프로토콜</title>
      <link>https://invincibletyphoon.tistory.com/73</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;1. Mqtt 프로토콜이란?&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;Message Queue for Telemetry Transport&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&amp;nbsp;발행-구독&lt;/b&gt; 기반 메시징 프로토콜로, 보통 TCP/IP 기반으로 구현된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;2. 구조&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991C633A5DD636491A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991C633A5DD636491A&quot; width=&quot;500&quot; height=&quot;277&quot; filename=&quot;mqtt-fidge-diagram.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;사진 출처 :&amp;nbsp;&lt;a href=&quot;https://www.segger.com/products/security-iot/emmqtt/&quot;&gt;https://www.segger.com/products/security-iot/emmqtt/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Mqtt는 하나의 브로커 서버와 다수의 클라이언트로 구성된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;위 그림에서 보듯이 냉장고, 스마트폰, PC 등이 클라이언트로 브로커 서버와 연결하고, 브로커 서버는 클라이언트들과 데이터를 주고 받는다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;한 클라이언트가 메시지를 Publish하면&amp;nbsp;해당 메시지의 Topic을 Subscribe해둔 클라이언트들에게 메시지가 전달된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;클라이언트는 브로커 서버에게 어떤 Topic을 Subscribe하여 관심있는 메시지를 받아 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. 특징&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; margin: 0px auto; padding: 10px;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700; font-size: 18.6667px;&quot;&gt;1) 발행-구독 기반&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700; font-size: 18.6667px;&quot;&gt;2) 가볍다&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700; font-size: 18.6667px;&quot;&gt;3) 1서버 - 다수의 클라이언트 구조&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700; font-size: 18.6667px;&quot;&gt;4) 3단계의 QoS 지원&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;5) 다양한 개발언어, 다양한 클라이언트 지원&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 2em; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); font-size: 14px; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;1)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;발행(Publish) - 구독(Subscribe) 기반&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Mqtt 프로토콜에서 주고받는 메시지는 &lt;b&gt;(Topic + 메시지)&lt;/b&gt;로 구성되고, 각 클라이언트들은 특정 토픽들을 &lt;b&gt;구독(Subscribe)&lt;/b&gt; 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;한 클라이언트가 메시지를 발행(publish)하면 메시지의 Topic을 구독한 클라이언트들은 모두 그 메시지를 받고, 구독하지 않은 클라이언트들은 메시지를 받지 못한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;2) 가볍다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Mqtt 프로토콜은 주고받는 메시지의 크기가 작기 때문에 IoT 디바이스 등 대역폭이 제한되는 디바이스에서 사용하기 좋다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;3) 1서버 - 다수의 클라이언트 구조&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Mqtt 프로토콜은 하나의 서버에 다수의 클라이언트가 연결하는 구조를 가진다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;4) 3단계의 QoS&amp;nbsp;지원&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Qos(Quality of Service).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Mqtt 프로토콜은 0,1,2 세단계의 QoS를 지원한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;0 (fire and foget)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;최대 1회 전송. Topic을 동해 메시지를 전송하고 클라이언트가 메시지를 제대로 받았는지 보장하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;1 (acknowledged delivery)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;최소 1회 전송. 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송한다.(중복 전송의 위험성 존재)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;2 (assured delivery)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;등록된 클라이언트는 요구된 메시지를 정확이 한 번 수신할 수 있게 보장한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;5) 다양한 개발언어, 다양한 클라이언트 지원&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;C, 자바, Node.js, 파이썬 등 다양한 개발언어로 Broker/Client를 개발할 수 있는 라이브러리가 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;4. 레퍼런스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://woowabros.github.io/experience/2017/08/11/ost_mqtt_broker.html&quot;&gt;http://woowabros.github.io/experience/2017/08/11/ost_mqtt_broker.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/MQTT&quot;&gt;https://en.wikipedia.org/wiki/MQTT&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://mqtt.org/&quot;&gt;http://mqtt.org/&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT 관련/기타</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/73</guid>
      <comments>https://invincibletyphoon.tistory.com/73#entry73comment</comments>
      <pubDate>Wed, 20 Nov 2019 17:36:02 +0900</pubDate>
    </item>
    <item>
      <title>3장 ER 모델을 이용한 데이터 모델링</title>
      <link>https://invincibletyphoon.tistory.com/71</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;1. ER (Entity &amp;amp; Attributes)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Entity(엔티티)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;ER 모델링의 기본 컨셉이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;엔티티는&amp;nbsp;mini world의 특정 사물이다 오브젝트를 나타낸다. (사람, 차, 집 등 물리적인 것이나, 회사, 직업, 강의 등 개념적인 것)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Attribute(속성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;어트리뷰트는 엔티티의 특성을 나타낸다. 이름, 주민번호, 집주소, 성별 등을 어트리뷰트로 쓸 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;2. Attribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Simple(Atomic) Attribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;atomic한 하나의 value를 갖는 어트리뷰트다. 주민등록번호, 주민번호 등이 여기에 해당 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Composite Attribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;여러 어트리뷰트가 합쳐진 어트리뷰트다. 주소(아파트 동번호 + 아파트 호수 + 지역구 명 + 도시 명 + 국가 명), 이름(First name, Last name) 등이 있을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Multi-valued Attribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;배열처럼 여러개의 값을 가지는 어트리뷰트다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;이전 학력(초등학교, 중학교, 고등학교, 대학교...) 등이 있을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Composite + Multi-valued 어트리뷰트도 있을 수 있고, Composite, Multi-valued 어트리뷰트는 다양한 레벨에 존재 할 수 있다.(Composite 어트리뷰트를 여럿 가지는 Multi-valued 어트리뷰트, Multi-valued 어트리뷰트를 가지는 Composite 어트리뷰트 등)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;2.1 Stored Attribute VS Derived Attribute&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Stored Attribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;값이 저장된 어트리뷰트.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Derived Attribute&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Stored Attribute로부터 도출될 수 있는 어트리뷰트.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;ex) 직원들 개개인의 정보만 저장된 DB에서, 직원의 나이는 Stored Attribute, 직원들의 숫자는 Derived Attribute.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. Entity Type and Entity Set&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Entity Type(intension)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;같은 어트리뷰트들을 가진 엔티티들의 집합. 스키마 같은 개념적인 것.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Entity Set(extension)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;어떤 엔티티 타입의 모든 엔티티들의 집합.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이름 그대로 엔티티 타입은 타입, Set은 엔티티 인스턴스들의 집합이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;4. Key Attribute(키 속성)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;어떤 엔티티 타입에서 각각의 엔티티가 &lt;u&gt;unique한(서로다른 값을 가지는) 값을 가져야하는 어트리뷰트&lt;/u&gt;를 Key Attribute라고 부른다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;5. Value Sets(Domain)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;모든 Simple 어트리뷰트들은 특정 Value Set(Domain)과 연관된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;예를 들어 MM-DD-YYYY 형식의 Date라는 어트리뷰트의 M,D,Y는 모두 정수이고, 나이 어트리뷰트는 16~70 범위의 도메인을 가진다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Value Set은 수학적으로 다음과 같이 표현한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;txc-formula&quot; src=&quot;https://t1.daumcdn.net/cfile/tistory/993A844D5DD2662D24&quot; historydata=&quot;%3Cflashrichtext%20version%3D%221%22%3E%0A%20%20%3Ctextformat%20font%3D%22Dotum%22%20size%3D%2216%22%20color%3D%222236962%22%20bold%3D%22false%22%20italic%3D%22false%22%20underline%3D%22false%22%20url%3D%22%22%20target%3D%22transparent%22%20align%3D%22left%22%20leftMargin%3D%2225%22%20rightMargin%3D%2225%22%20indent%3D%220%22%20leading%3D%220%22%20blockIndent%3D%220%22%20kerning%3D%22true%22%20letterSpacing%3D%220%22%20display%3D%22block%22%3E%28A%3AE%5Crightarrow%20P%28V%29%29%3C/textformat%3E%0A%3C/flashrichtext%3E%2C%0A14%2C%0A0xFFFFFF&quot; width=&quot;106&quot; height=&quot;31&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;P(V) : Power Set of V&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;A(e) : 엔티티 e의 어트리뷰트 A&amp;nbsp;값&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 정의는 싱글 밸류 어트리뷰트, 멀티 밸류 어트리뷰트에 모두 적용될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;컴포지트 어트리뷰트는 다음처럼 표현한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;txc-formula&quot; src=&quot;https://t1.daumcdn.net/cfile/tistory/99DC74425DD266E020&quot; historydata=&quot;%3Cflashrichtext%20version%3D%221%22%3E%0A%20%20%3Ctextformat%20font%3D%22Dotum%22%20size%3D%2216%22%20color%3D%222236962%22%20bold%3D%22false%22%20italic%3D%22false%22%20underline%3D%22false%22%20url%3D%22%22%20target%3D%22transparent%22%20align%3D%22left%22%20leftMargin%3D%2225%22%20rightMargin%3D%2225%22%20indent%3D%220%22%20leading%3D%220%22%20blockIndent%3D%220%22%20kerning%3D%22true%22%20letterSpacing%3D%220%22%20display%3D%22block%22%3E%28V%3DP%28P%28V_%7B%201%20%7D%29%5Ctimes%20P%28V_%7B%202%20%7D%29%5Ctimes%20...%5Ctimes%20P%28V_%7B%20n%20%7D%29%29%29%3C/textformat%3E%0A%3C/flashrichtext%3E%2C%0A14%2C%0A0xFFFFFF&quot; width=&quot;253&quot; height=&quot;27&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;V1,V2,...,Vn은 A의 Simple Component Attrubute의 Value Set이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;6. ER 다이어그램&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;다이어그램 구성요소&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C5944F5DD2677220&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C5944F5DD2677220&quot; width=&quot;500&quot; height=&quot;314&quot; filename=&quot;2.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;다이어그램 예시&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 439px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EC9D4B5DD2679326&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EC9D4B5DD2679326&quot; width=&quot;439&quot; height=&quot;267&quot; filename=&quot;3.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;7. Relationship&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;Relationship은 둘 이상의 엔티티를 연관시킨다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;ex)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;EMPLOYEE 홍길동 works on the SpaceX PROJECT&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;EMPLOYEE 안철수 works for the H&amp;amp;R DEPRATMENT&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;n개의 엔티티 E_1, E_2, E_3,... E_n 타입들 사이의&amp;nbsp;&lt;b&gt;Relationship set R(관계집합)&lt;/b&gt;은 E_j(1 &amp;lt;= j &amp;lt;=n)에 속하는 엔티티 n개(e_1, e_2, ... , e_n)와 관계를 갖는 r_i의 집합이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;7.1 Relation Type의 Degree&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DF52385DD2698F2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DF52385DD2698F2C&quot; width=&quot;500&quot; height=&quot;244&quot; filename=&quot;6.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;왼쪽의 WORKS_ON Relationship은 두 가지 엔티티를&amp;nbsp;관계시키므로 Degree가 Binary고, 오른쪽의 SUPPLY 엔티티는 세가지 엔티티를 관계시키므로 Degree가 Ternary라고 한다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;7.2 Cardinality Ratio&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Cardinality Ratio는 한 엔티티가 Relationship 인스턴스에 참여할 수 있는 최대 숫자를 나타낸다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;1:1, 1:N, N:1, M:N 이 있다.&lt;/span&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;464&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 232px; height: 249px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9997F73D5DD26BAE33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9997F73D5DD26BAE33&quot; width=&quot;320&quot; height=&quot;208&quot; filename=&quot;7.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1 : 1&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 232px; height: 249px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9923EC3D5DD26BAF19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9923EC3D5DD26BAF19&quot; width=&quot;320&quot; height=&quot;231&quot; filename=&quot;8.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;N:1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;왼쪽 그림은 EMPLOYEE 하나당 DEPARTMENT 하나와 관계를 맺는 1:1관계, 오른쪽 그림은 DEPARTMENT 하나당 EMPLOYEE N개가 관계를 맺는 N:1 관계의 예시다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;7.3&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp;Binary Relationship의 Structural Constraint&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Binary Relationship에는 다음과 같은 구조적 제약사항들이 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Participation Constraint&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;엔티티가 존재하려면 또다른 엔티티와 관계되어야한다.&amp;nbsp;Total Participation이든 Partial Participation이든 말이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;8. Weak Entity&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;위크 엔티티 타입은 자기 자신을 위한 키 어트리뷰트를 가지지 않는 엔티티 타입을 말한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;자기 자체로는 존재 할 수 없고, 다른 엔티티와의 Partial Relationship 관계를&amp;nbsp;통해서만 존재할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;ER 다이어그램에서는 다음과 같이 표현한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 335px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996D83435DD26D8925&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996D83435DD26D8925&quot; width=&quot;335&quot; height=&quot;89&quot; filename=&quot;9.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>IT 관련/데이터베이스(이론)(비공개)</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/71</guid>
      <comments>https://invincibletyphoon.tistory.com/71#entry71comment</comments>
      <pubDate>Mon, 18 Nov 2019 17:44:18 +0900</pubDate>
    </item>
    <item>
      <title>REST API</title>
      <link>https://invincibletyphoon.tistory.com/68</link>
      <description>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;1. REST API(RESTFul API)란&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;Representational State Transfer API.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;REST API에 대해서 간략히만 말하면, GET, POST, DELETE, PUT의 4가지 메소드를 제공하는 API 구조를 말한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;주로 웹 서버를 구현 할 때, 리소스 조회 - GET, 리소스 생성 - POST, 리소스 삭제 - DELETE, 리소스 수정 - PUT 메소드로 외부에서 리소스에 접&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;근 가능하게 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이정도만 알고, 서버 구현용 언어(자바스크립트 등) 하나만 사용할 줄 알아도 기본적인 REST API 서버 기능 구현까지는 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;2. REST API 특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; margin: 0px auto; padding: 10px; text-align: left;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;1)&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;클라이언트-서버 구조&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;2) 인터페이스 일관성(Uniform interface)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;3) 무상태성(Stateless)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;4) 캐시 사용 가능&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;5) 계층형 구조(Layered System)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;6) Code On Demand&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;7) 자체 표현구조(Self-describing)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 2em; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;1) REST API는 기본적으로 클라이언트와 서버가 분리된 클라이언트-서버 구조로 디자인된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;2) 서버와 클라이언트가 일관된 인터페이스를 따르게 하여 클라이언트와 서버를 서로 떨어뜨려 놓는다. 이에 따라 서버와 클라이언트는 서로 독립적으로 발전 될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;3) 세션, 쿠키 등 상태를 저장하는 방법을&amp;nbsp;사용하지 않는다. 상태가 없기 때문에 REST API 호출은 서로 독립적으로 수행되고, 각각의 호출에는 작업을 완수하기 위해 필요한 데이터가 모두 포함되어야한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;4) 무상태성 때문에 Request의 크기가 커질 수 있기 때문에,&amp;nbsp;오버헤드 최소화를 위해 캐시를 사용할 것을 권장한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;5) REST 서버는 다중 계층으로 구성 될 수 있다. 보안, 로드밸런싱, 암호화 계층을 추가하는 등 구조상의 유연성을 둘 수 있고, PROXY, 게이트웨이같은 네트워크 기반의 중간 메체를 사용할 수도 있는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;6) Code On Demand.&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;필요에 따라 &lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;자바스크립트나 Applet 등 서버의 일부 코드가 클라이언트에게 제공 될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;7) REST API는 메시지만 보고도 쉽게 이해할 수 있는 자체 표현적 구조를 가지고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 정도가 REST API의 특징들이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;사람들마다 6번이나 7번 특징은 제외시키는 경우도 있는데, REST API에 대해서 설명할 때는 이 7가지 정도만 알면 충분하다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. 디자인 가이드&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; margin: 0px auto; padding: 10px; text-align: left;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;1)&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;URL은 정보의 자원을 표현해야한다.(리소스명은 동사보다는 명사를 사용)&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;b style=&quot;font-size: 18.6667px;&quot;&gt;2) 자원에 대한 행위를 HTTP 메소드(GET, POST, PUT, DELETE)로 표현한다.&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 2em; box-sizing: border-box; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;1 ex)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;GET&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://192.168.0.63:1337&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; letter-spacing: 0pt; color: rgb(0, 0, 0); background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 14pt;&quot;&gt;http://192.168.0.63:1337/members/1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;DELETE&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://192.168.0.63:1337&quot; style=&quot;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; letter-spacing: 0pt; color: rgb(0, 0, 0); background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-size: 14pt;&quot;&gt;http://192.168.0.63:1337/members/1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;2 ex)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;회원 정보 조회 : GET members/1&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;회원 추가&amp;nbsp;: POST&amp;nbsp;/members/2 (회원 정보는 request의 body 부분에 포함시킵니다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;회원 삭제 : DELETE /members/1&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;회원 정보 업데이트 : DELETE /members/1 (수정 정보는 request의 body 부분에 포함시킵니다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;참고로 각각의 메소드를 섞어서 쓰는 것도 가능하긴 한데, 원래의 목적대로 사용하는 것이 올바른 디자인 방식이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;GET - 리소스 조회&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;POST - 리소스 생성&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;PUT - 리소스 수정&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;DELETE - 리소스 삭제&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;특히 GET, POST를 섞어서 쓰는 경우가 있는데, GET은 request의 body가 없기 때문에 URL로만 데이터를 표현한다. 그래서 전송가능한 데이터 크기에 제한이 있고, 기타 메소들마다 차이가 있으니 제역할에 맞게 사용하도록 하자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;4. REST의 3요소&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; margin: 0px auto; padding: 10px;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- 리소스(URL)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- 메소드(GET, POST, PUT, DELETE)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- 메시지&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 2em; box-sizing: border-box; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); font-size: 14px; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;5. 장점&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; margin: 0px auto; padding: 10px; text-align: left;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- HTTP&amp;nbsp;프로토콜을 그대로 활용 할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- 유연하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 2em; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: left; color: rgb(51, 51, 51); font-size: 14px; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;REST API 구조는 HTTP 프로토콜을 그대로 활용하기 때문에 HTTP 프로토콜을 기반으로 REST API 서버를 구현하기 위해서 추가적인 라이브러리나 소프트웨어를 설치할 필요가 없다.(GET, POST, PUT, DELETE 메소드 모두 HTTP 메소드의 일종이다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;REST API 구조를 이용하면 다양한 포멧의 데이터를 리턴할 수 있어 유연하고, 계층적 구조를 가지기 때문에 서버 구조 구현에도 좀 더 유연함을 가지고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;6. 레퍼런스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.mulesoft.com/resources/api/restful-api&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;https://www.mulesoft.com/resources/api/restful-api&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/REST&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;https://ko.wikipedia.org/wiki/REST&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/HTTP&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;https://ko.wikipedia.org/wiki/HTTP&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://meetup.toast.com/posts/92&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;https://meetup.toast.com/posts/92&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/68</guid>
      <comments>https://invincibletyphoon.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 15 Nov 2019 14:47:35 +0900</pubDate>
    </item>
    <item>
      <title>이터레이터 패턴(Iterator Pattern)</title>
      <link>https://invincibletyphoon.tistory.com/66</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;1. 이터레이터 패턴이란&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;1.1 정의&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이터레이터 패턴을 사용하면 집합체 내에서 어떤 식으로 일이 처리되는지 몰라도 그 안에 들어있는 항목들에 대해서 반복작업을 수행 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;예를 들어, 집합체가 C++의 vector이든, list이든 상관 없이 같은 코드로 반복 작업을 수행할 수 있게 하는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;b&gt;1.2 구조&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996822475DCCA2D826&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996822475DCCA2D826&quot; width=&quot;500&quot; height=&quot;183&quot; filename=&quot;IteratorPattern.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;여기서 Client는 Aggregate라는 집합체 클래스에 대해 어떤 반복 작업을 수행하려고 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;반복 작업은 Aggregate의 createIterator() 메소드로 Iterator를 생성해서수행한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Iterator의 메소드들은&amp;nbsp;조금 다르게 구성되는 경우도 있다. 이 다이어그램에서 Iterator는 java.util.Iterator이고 C++의 Iterator의 경우 ++, -- 연산자를 사용할 수 있고, begin(), end() 등의 메소드를 포함한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;중요한 것은 어떤 구조이든지간에 집합체 내부 구조와 상관없이 반복 작업을 수행할 수 있다는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;2. 장점&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; margin: 0px auto; padding: 10px;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- 집합체 클래스의 응집도를 높여준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;- 집합체 내에서 어떤 식으로 일이 처리되는지 알 필요 없이, 집합체 안에 들어있는 모든 항목에 접근 할 수 있게 해준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 2em; font-family: &amp;quot;KoPub Dotum&amp;quot;; color: rgb(51, 51, 51); font-size: 14px; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;응집도는 클래스나 모듈이 특정 목적이나 역할을 얼마나 일관되게 지원하는지를 나타내는 척도다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이터레이터 패턴을 사용하면 원래 클래스의 역할(집합체 관리)에서 반복 작업이라는 다른 역할을 분리시켜 응집도를 높일 수 있고, 그 덕에 컬랙션 변경에 의한 클래스의 변경, 반복자 기능 변경에 의한 클래스 변경을 방지할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이터페이터 패턴을 사용하면&amp;nbsp;집합체 내에서 어떤 식으로 일이 처리되는지 알 필요 없이 반복작업을 수행할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;집합체가 ArrayList로 이루어져있든, List로 이루어져있든 상관없이 똑같은 코드로 반복 작업을 수행 할 수 있는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. 레퍼런스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-family: Batang, 바탕; font-size: 18.6667px; text-align: justify;&quot;&gt;- Head First Design Pattern(O'REILLY media)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-family: Batang, 바탕; font-size: 18.6667px; text-align: justify;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%B0%98%EB%B3%B5%EC%9E%90_%ED%8C%A8%ED%84%B4&quot;&gt;https://ko.wikipedia.org/wiki/%EB%B0%98%EB%B3%B5%EC%9E%90_%ED%8C%A8%ED%84%B4&lt;/a&gt;&lt;/p&gt;&lt;p&gt;-&amp;nbsp;&lt;a href=&quot;https://www.geeksforgeeks.org/iterators-c-stl/&quot;&gt;https://www.geeksforgeeks.org/iterators-c-stl/&lt;/a&gt;&amp;nbsp;: C++ iterator example&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT 관련/디자인 패턴</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/66</guid>
      <comments>https://invincibletyphoon.tistory.com/66#entry66comment</comments>
      <pubDate>Thu, 14 Nov 2019 09:35:08 +0900</pubDate>
    </item>
    <item>
      <title>Class Diagram</title>
      <link>https://invincibletyphoon.tistory.com/61</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 32px;&quot;&gt;&lt;b&gt;0. 들어가기에 앞서&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;클래스 다이어그램은 시스템 구조를 나타내고, 객체지향 모델링의 빌딩 블록으로 사용된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;여러 다이어그램들 중 객체지향 언어와 직접적인 연관을 가지는 유일한 다이어그램이고, 어플리케이션의 구조 디자인, 분석, 시스템의 역할 묘사, 그리고 Reverse Engineering(역공학)에 사용될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;개인적인 프로젝트 경험으로, 시스템이 어떤 요소들로 구성되는지 사람들에게 설명해주고, 시스템 유지 보수를 위해서 많이 사용했었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;1. 클래스 다이어그램&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;클래스 다이어그램은 &lt;b&gt;클래스&lt;/b&gt;와 &lt;b&gt;클래스들 사이의 관계&lt;/b&gt;를 나타내는 정적&lt;b&gt; &lt;/b&gt;모델이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;클래스 다이어그램은 클래스와 그들 사이의 Relationship(관계)로 구성된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;1.1&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;클래스(Class)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;- 시스템 내의 오브젝트들(사람, 장소, 물건 등등)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;- 시스템 내의 정보를 저장/관리한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;- &lt;b&gt;Attribute&lt;/b&gt;(클래스의 특성), &lt;b&gt;Operation&lt;/b&gt;(클래스의 동작)을 가진다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B7A3345DC917E618&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B7A3345DC917E618&quot; width=&quot;200&quot; height=&quot;159&quot; filename=&quot;001.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;환자 클래스&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이는 진료 예약 시스템에서 환자(Patient)라는 클래스다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Patient 클래스는 amount(진료비), insurance carrier(보험회사 명)이라는 Attribute를 가지고, make appointment(진료 예약), calcuate last visit(최근 방문일 계산), change status(상태 변환), provides medical history(진료기록 제공)이라는 Operation을 가진다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;1.2&amp;nbsp;Relationship&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;- 클래스들 사이의 관계&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;- 클래스들 사이의 선으로 표현된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 262px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F128415DC914920B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F128415DC914920B&quot; width=&quot;262&quot; height=&quot;570&quot; filename=&quot;002.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;이것도 병원 진료 예약 시스템의 일부분이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;Patient는 Appoinment(예약)을 스케줄하는 관계를 가진다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;Patient 1명이 여러번 진료 예약을 할 수 있으니, Patient는 n (0 &amp;lt;= n)개의 Appointment와 관계를 가진다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;클래스 다이어그램 예시&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9957FC4D5DC9117B0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9957FC4D5DC9117B0A&quot; width=&quot;640&quot; height=&quot;446&quot; filename=&quot;1.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;이 그림은 클래스 다이어그램의 한 예시다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;2. Relationship의 종류&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;클래스들간의 관계를 나타내는 Relationship에는 다음과 같은 것들이 있다.&lt;/span&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;964&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 186px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990B21365DC9187C1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990B21365DC9187C1E&quot; width=&quot;186&quot; height=&quot;67&quot; filename=&quot;3.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 132px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BFE9365DC9187C21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BFE9365DC9187C21&quot; width=&quot;132&quot; height=&quot;44&quot; filename=&quot;4.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Association&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Generalization&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 230px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99317E365DC9187C10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99317E365DC9187C10&quot; width=&quot;230&quot; height=&quot;56&quot; filename=&quot;5.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 236px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D3F6365DC9187C20&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D3F6365DC9187C20&quot; width=&quot;236&quot; height=&quot;61&quot; filename=&quot;6.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Aggregation&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:482;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Composition&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;Association&lt;/b&gt;은 클래스와 클래스 사이의 관계, 혹은 클래스 자신과의 관계를 나타낸다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;단순한 줄로 표시하고, 연관된 클래스가 서로 어떤 관계를 나타내는지를 표시하고, Multiplicity Symbol이라는 것을 가진다. 이 예시의 경우 오른쪽 클래스 하나당 왼쪽 클래스가 0개이상 관계를 가지는 예시다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;Generalization&lt;/b&gt;은 &lt;b&gt;a kind of&lt;/b&gt; 관계를 나타낸다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;객체지향 언어에서 부모 클래스 상속, 인터페이스 구현을 이것으로 표현한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;Aggregation&lt;/b&gt;은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;Association의 한 종류로,&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 18.6667px;&quot;&gt;논리적인 a part of&lt;/b&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt; 관계를 나타낸다. A class is a part of B class라고 하면 A는 논리적으로 B와 Aggregation 관계를 가진다고 표현 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;Composition&lt;/b&gt;은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;Association의 한 종류로,&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;물리적인&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 18.6667px;&quot;&gt;a part of&lt;/b&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;관계를 나타낸다. A class is a part of B class라고 하면 A는 논리적으로 B와 Composition관계를 가진다고 표현 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;Aggregation VS Composition&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Aggregation과 Composition은 모두 포함 관계를 나타내는데, &lt;u&gt;논리적/물리적인 관계&lt;/u&gt;를 나타낸다는 차이만 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이게 잘 헷갈리는 부분인데, A is a part of B일 때 이 관계가 &lt;u&gt;Aggregation 관계면 B가 소멸되도 A는 소멸되지 않고&lt;/u&gt;, &lt;u&gt;Composition 관계면 B가 소멸 되면 A도 함께 소멸된다&lt;/u&gt;고 보면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;(그리고 두 경우 모두 A가 소멸되도 B는 소멸되지 않는다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;예를 들어, &quot;학생 is a part of 동아리&quot; 관계는 Aggregation 관계이고, &quot;바퀴 is a part of 자동차&quot; 관계는 Composition 관계다. 동아리가 소멸되어도 학생들은 소멸되지 않기 때문에 이는 논리적인 관계고, 자동차가 소멸 될 때는 바퀴도 함께 소멸되므로 물리적인 관계라고 볼 수 있다. (바퀴를 따로 떼서 파는 경우는 생각하지 말도록 하자.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;3.클래스 다이어그램 간소화&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;클래스 다이어그램이 너무 복잡하면 이해하기가 어려울 수 있기 때문에,&amp;nbsp;클래스 다이어그램은 간소화 과정을 거칠 필요가 있다.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;클래스 다이어그램은 다음과 같은 방법으로 간소화 할 수 있다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; width: 847.5px; margin: 0px auto; padding: 10px;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;- Concrete Class만 묘사한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;- view 메커니즘을 적용하여 필요한 클래스 몇가지만 골라서 묘사한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;- 일부 클래스들을&amp;nbsp;패키지로 묶어서 취급한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;클래스에는 Concrete Class와 Abstract Class가 있다. 그 중 Concrete Class만 묘사하여 다이어그램을 간소화하는 방법인데, 이는 잘 고려해보고 써야한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;어떤 Concrete Class인 CClass가 Abstract Class인 AClass를 상속받고 있고, 다른 외부 클래스들이 주로 AClass와 관계를 가지는 경우, 이 방법을 쓰면 다이어그램을 이해하기 어려워지는 원인이 될 수 있기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;View 메커니즘은 원래 데이터베이스에 나오는 개념이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;데이터베이스에서 View는 필요한 데이터만을 원하는 형태로 골라서 본다는 개념인데, 이를 클래스 다이어그램에도 적용하여 상황에 따라 필요한 클래스들만 묘사하여 다이어그램을 간소화하는 방법이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;연관된 클래스들끼리 묶어 패키지로 만드는 방법이다.&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;패키지로 취급하면 다이어그램이 더 간단해질 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;4. 레퍼런스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 18.6667px; text-align: justify;&quot;&gt;System Analysis &amp;amp; Design 5th - WILEY&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9E%98%EC%8A%A4_%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8&quot;&gt;https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9E%98%EC%8A%A4_%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8&lt;/a&gt;&amp;nbsp;- 위키피디아 클래스 다이어그램&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.tutorialspoint.com/uml/uml_class_diagram.htm&quot;&gt;https://www.tutorialspoint.com/uml/uml_class_diagram.htm&lt;/a&gt;&amp;nbsp;- Tutorial Point. Class Diagram&lt;/p&gt;</description>
      <category>IT 관련/소프트웨어 공학</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/61</guid>
      <comments>https://invincibletyphoon.tistory.com/61#entry61comment</comments>
      <pubDate>Mon, 11 Nov 2019 16:41:04 +0900</pubDate>
    </item>
    <item>
      <title>Activity Diagram (액티비티 다이어그램)</title>
      <link>https://invincibletyphoon.tistory.com/60</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;1. Activity Diagram이란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;액티비티 다이어그램은 일련의 Activity들로 어떤 프로세스를 표현하는 다이어그램으로, 모든 종류의 프로세스를 표현하는데 사용 될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;2. Acitvity Diagram의 구성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;658&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; width: 658px;&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 168px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992922335DC27CCC0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992922335DC27CCC0F&quot; width=&quot;168&quot; height=&quot;81&quot; filename=&quot;1.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 182px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99646E335DC27CCC1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99646E335DC27CCC1E&quot; width=&quot;182&quot; height=&quot;84&quot; filename=&quot;2.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 194px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992AD2415DC280C703&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992AD2415DC280C703&quot; width=&quot;194&quot; height=&quot;101&quot; filename=&quot;3.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Action&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Activity&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Object node&lt;/p&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 177px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999426335DC27CCD14&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999426335DC27CCD14&quot; width=&quot;177&quot; height=&quot;41&quot; filename=&quot;4.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 173px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991F7A3B5DC2812422&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991F7A3B5DC2812422&quot; width=&quot;173&quot; height=&quot;47&quot; filename=&quot;5.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Control flow&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Object flow&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 69px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999031335DC27CCD0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999031335DC27CCD0C&quot; width=&quot;69&quot; height=&quot;63&quot; filename=&quot;6.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 66px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AA67335DC27CCE13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AA67335DC27CCE13&quot; width=&quot;66&quot; height=&quot;62&quot; filename=&quot;7.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Initial node&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Final Node&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 267px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F1D13C5DC27CCE12&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F1D13C5DC27CCE12&quot; width=&quot;267&quot; height=&quot;124&quot; filename=&quot;9.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 254px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9936283C5DC27CCE0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9936283C5DC27CCE0F&quot; width=&quot;254&quot; height=&quot;104&quot; filename=&quot;10.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 321px; height: 31px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Decision node&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 321px; height: 31px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Merge node&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 31px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 116px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E6703C5DC27CCF09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E6703C5DC27CCF09&quot; width=&quot;116&quot; height=&quot;89&quot; filename=&quot;11.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 75px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995BA83C5DC27CCF17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995BA83C5DC27CCF17&quot; width=&quot;75&quot; height=&quot;79&quot; filename=&quot;12.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Fork node&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width:321;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Join node&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 57px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; rowspan=&quot;1&quot; colspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;&lt;b&gt;Action/Activity&lt;/b&gt; - 어떤 Action이나 Action의 집합. 동사 + 명사로 이름이 붙여짐.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;b&gt;Object Node&lt;/b&gt; - 한 Activity에서 다른 Activity로 이어지는 flow of information을 나타내는 것.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Control Flow&lt;/b&gt; - 실행 순서를 나타내는 화살표.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;&lt;b&gt;Object Flow&lt;/b&gt; - Flow of Object를 나타내는 것.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Initial Node &lt;/b&gt;- Activity Diagram의 시작점(Action 들의 시작점)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Final&amp;nbsp;Node &lt;/b&gt;- Activity Diagram 종료지점(Activity의 Flow들이 모두 끝나는 시점)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Decision Node&lt;/b&gt; - 분기점.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Merge Node &lt;/b&gt;- Decision Path들을 하나로 모으는 노드.(Decision Node로 나눠진 Control flow를 다시 합침)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Fork&amp;nbsp;Node&lt;/b&gt; - 평행적으로 수행되는 Flow를 나누는 노드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;Join Node&lt;/b&gt; - Fork Node로 나눠진 Control Flow를 다시 하나로 합치는 노드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&amp;nbsp;구성 요소들을&amp;nbsp;정리해놓고 보니 너무 많고 애매한 정의가 많아서 정의를&amp;nbsp;달달달 외우는 것 보다는 예시를 보면서 이해하고, 나중에 필요할 때는 예시와 정의를 같이 찾아보는게 좋겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;b&gt;&amp;nbsp;컨트롤 노드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Initial node, Final node, Decision node, Merge node, Forke node, Join node를 컨트롤 노드(Control Node)라고 부른다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&amp;nbsp;예제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;다음 액티비티 다이어그램은 병원의 진료 예약 관리 기능에 대한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;진료 예약 관리에서는 예약, 예약 취소, 예약 변경 기능을 제공한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 612px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996EF3495DC37ACC07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996EF3495DC37ACC07&quot; width=&quot;612&quot; height=&quot;660&quot; filename=&quot;01.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;처음 이 액티비티가 시작되면 환자의 정보를 받는다.(Get Patient Onformation)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 때 예약정보(Appt Request Info) 오브젝트가 생성되어 이후 예약 할 지, 예약을 취소 할 지, 예약을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;변경 할 지 결정할 때 사용된다.(기존 환자)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;또, 이 오브젝트는 신규 환자가 예약을 잡을 때도 사용된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;환자의 정보를 받은 이후에는 기존에 등록된 환자인지, 신규환자인지에 따라 다른 프로세스가 진행된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;3. Swimlanes&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Swimlane은 오브젝트들간의 역할 분리를 나타낸다. 분리된 역할들이 서로다른 오브젝트에서 평행적으로 수행된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;Swimlane은 가로로 그려도 되고 세로로 그려도 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&amp;nbsp;예제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 예제는 학교 점심 도시락을 만드는 Activity에 대한 액티비티 다이어그램이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 465px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9932D1465DC37B0F06&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9932D1465DC37B0F06&quot; width=&quot;465&quot; height=&quot;759&quot; filename=&quot;02.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이 액티비티가 시작되면 바로 firstParent와 secondParent로 flow가 분할되어 평행적으로 진행된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;firstParent를 보면 내부에서 다시 GetJelly, GetPeanutButter, GetBread로 flow가 분할되어 평&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;행적으로 수행되는데, 처음에 firstParent, secondParent로 나뉜것과는 달리 모든 flow가 오브젝트 내부에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;수행된다는 차이가 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;4. Activity Diagram 작성 가이드라인&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; width: 847.5px; margin: 0px auto; padding: 10px;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;1. 작성하는 Activity의 Scope를 정한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;2. Activity들을 식별하고, flow로 각각을 잇는다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;3. 필요한 Decision들을 식별한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;4. 프로세스 상에서 평행적으로 수행될수 있는 부분들을 식별한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;0&quot; style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;5. 액티비티 다이어그램을 작성한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 24pt;&quot;&gt;&lt;b&gt;5. Activity Diagram과 Usecase의 관계&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; border-width: 3px; background-color: rgb(240, 239, 239); border-style: solid; border-color: orange; width: 847.5px; margin: 0px auto; padding: 10px;&quot;&gt;&lt;p class=&quot;0&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; text-align: justify; word-break: keep-all; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;- 유즈케이스 디스크립션상에서&amp;nbsp;하나의 Flow가 액티비티 다이어그램의 하나의 액션/액티비티에 대응된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;-&amp;nbsp;액티비티 다이어그램 상의 모든 오브젝트들은 유즈케이스 디스크립션에서 어급되는 것이어야한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;- 유즈케이스 디스크립션 상의 흐름(Sequence)는 액티비티 다이어그램의 흐름과 맞아야한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 24pt;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 700;&quot;&gt;6. 레퍼런스&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-right: 0px; margin-left: 0px; font-family: &amp;quot;KoPub Dotum&amp;quot;; text-align: justify; color: rgb(51, 51, 51); font-size: 14px; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-size: 14pt;&quot;&gt;System Analysis &amp;amp; Design 5th - WILEY&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT 관련/소프트웨어 공학</category>
      <author>서기리보이</author>
      <guid isPermaLink="true">https://invincibletyphoon.tistory.com/60</guid>
      <comments>https://invincibletyphoon.tistory.com/60#entry60comment</comments>
      <pubDate>Wed, 6 Nov 2019 17:00:26 +0900</pubDate>
    </item>
  </channel>
</rss>