<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩하는 수학도</title>
    <link>https://devmath.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 13 Apr 2026 08:25:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>수학도</managingEditor>
    <item>
      <title>[devmath] 프로젝트 생성</title>
      <link>https://devmath.tistory.com/106</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;devmath 프로젝트 시작&lt;/h2&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;040&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/040.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/040.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Java 8 (JDK 1.8)&lt;/li&gt;
&lt;li&gt;Gradle&lt;/li&gt;
&lt;li&gt;인텔리제이 IntelliJ&lt;/li&gt;
&lt;li&gt;깃헙 github&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;Gradle&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Groovy를 이용한 빌드 자동화 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;인텔리제이에서 그레이들 프로젝트 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;1003&quot; width=&quot;700&quot; height=&quot;827&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR5gbc/btrcXjVMbBN/rgTKJpNmXr7XtOlpFbcOdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR5gbc/btrcXjVMbBN/rgTKJpNmXr7XtOlpFbcOdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR5gbc/btrcXjVMbBN/rgTKJpNmXr7XtOlpFbcOdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR5gbc%2FbtrcXjVMbBN%2FrgTKJpNmXr7XtOlpFbcOdk%2Fimg.png&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;1003&quot; width=&quot;700&quot; height=&quot;827&quot; data-ke-mobilestyle=&quot;widthOrigin&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;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;949&quot; width=&quot;700&quot; height=&quot;821&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btN78m/btrc7OsHtsA/MYN3OUfQ24QtxMAmmqTlW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btN78m/btrc7OsHtsA/MYN3OUfQ24QtxMAmmqTlW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btN78m/btrc7OsHtsA/MYN3OUfQ24QtxMAmmqTlW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtN78m%2Fbtrc7OsHtsA%2FMYN3OUfQ24QtxMAmmqTlW0%2Fimg.png&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;949&quot; width=&quot;700&quot; height=&quot;821&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그레이들 프로젝트를 스프링 프로젝트로 변경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;bulid.gradle&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K7pjM/btrc3ptHfoy/kXAhWVqBjxx5MqbVDORkBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K7pjM/btrc3ptHfoy/kXAhWVqBjxx5MqbVDORkBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K7pjM/btrc3ptHfoy/kXAhWVqBjxx5MqbVDORkBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK7pjM%2Fbtrc3ptHfoy%2FkXAhWVqBjxx5MqbVDORkBk%2Fimg.png&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;group : groupId&lt;/li&gt;
&lt;li&gt;version : 애플리케이션의 버전 - SNAPSHOT : 개발단계&lt;/li&gt;
&lt;li&gt;sourceCompatibility : 자바소스를 컴파일시키는 역할 - 1.8 : 자바버전&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;버전 업그레이드 &lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Spring Boot 2.1 -&amp;gt; 2.4&lt;/li&gt;
&lt;li&gt;IntelliJ IDEA 2019 -&amp;gt; 2020&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1629788098053&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plugins {
    id 'org.springframework.boot' version '2.4.1'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}

group 'com.project'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

// for Junit 5
test {
    useJUnitPlatform()
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.boot:spring-boot-starter-mustache')

    // lombok
    implementation('org.projectlombok:lombok')
    annotationProcessor('org.projectlombok:lombok')
    testImplementation('org.projectlombok:lombok')
    testAnnotationProcessor('org.projectlombok:lombok')

    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation(&quot;org.mariadb.jdbc:mariadb-java-client&quot;)
    implementation('com.h2database:h2')

    testImplementation('org.springframework.boot:spring-boot-starter-test')
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Github 연동&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;share project on github&lt;/li&gt;
&lt;li&gt;깃허브 로그인&lt;/li&gt;
&lt;li&gt;share 클릭&amp;nbsp;&lt;/li&gt;
&lt;li&gt;프로젝트 첫 번째 커밋&amp;amp;푸시 - .idea 디렉토리는 커밋하지 않는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;.idea 디렉토리&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리제이에서 프로젝트 실행 시 자동으로 생성되는 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리제이에서는 .gitignore 기본 지원이 없기 때문에 플러그인에서 .ignore를 설치해주어야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;873&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWHG2K/btrcRpPgL7w/FMh1GhkpknxvfGu7Cqj6J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWHG2K/btrcRpPgL7w/FMh1GhkpknxvfGu7Cqj6J1/img.png&quot; data-alt=&quot;.ignore&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWHG2K/btrcRpPgL7w/FMh1GhkpknxvfGu7Cqj6J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWHG2K%2FbtrcRpPgL7w%2FFMh1GhkpknxvfGu7Cqj6J1%2Fimg.png&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;873&quot; data-ke-mobilestyle=&quot;widthOrigin&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;.ignore&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;인텔리제이 재시작&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore File 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;696&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhStnX/btrc1d1T1Qp/GBxTF5llUs4xljUb91cN50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhStnX/btrc1d1T1Qp/GBxTF5llUs4xljUb91cN50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhStnX/btrc1d1T1Qp/GBxTF5llUs4xljUb91cN50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhStnX%2Fbtrc1d1T1Qp%2FGBxTF5llUs4xljUb91cN50%2Fimg.png&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;696&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;604&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvJaY/btrc8hVNJUg/TOiCa1lkLCGKNddRS2hHvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvJaY/btrc8hVNJUg/TOiCa1lkLCGKNddRS2hHvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvJaY/btrc8hVNJUg/TOiCa1lkLCGKNddRS2hHvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxvJaY%2Fbtrc8hVNJUg%2FTOiCa1lkLCGKNddRS2hHvK%2Fimg.png&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;604&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;생성된 .gitignore 파일에 작성&lt;/p&gt;
&lt;pre id=&quot;code_1629789652632&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.gradle
.idea&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Project/devmath</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/106</guid>
      <comments>https://devmath.tistory.com/106#entry106comment</comments>
      <pubDate>Tue, 24 Aug 2021 16:25:00 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 실기 합격</title>
      <link>https://devmath.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기다리고 기다리던 실기 합격 결과!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;559&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEYLpc/btrcNL4qxxy/BXr5jmBJSPO0YQzpATikrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEYLpc/btrcNL4qxxy/BXr5jmBJSPO0YQzpATikrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEYLpc/btrcNL4qxxy/BXr5jmBJSPO0YQzpATikrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEYLpc%2FbtrcNL4qxxy%2FBXr5jmBJSPO0YQzpATikrK%2Fimg.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;559&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;점수는 87점 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;248&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E0XTQ/btrcKI1QPp8/5krsc7NopJEKhsBMqWduQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E0XTQ/btrcKI1QPp8/5krsc7NopJEKhsBMqWduQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E0XTQ/btrcKI1QPp8/5krsc7NopJEKhsBMqWduQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE0XTQ%2FbtrcKI1QPp8%2F5krsc7NopJEKhsBMqWduQ1%2Fimg.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;248&quot; data-ke-mobilestyle=&quot;widthOrigin&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;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;025&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/025.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/025.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자격증 발급 신청!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;847&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0UgrC/btrcHFq80Nw/kXF7HKLyzvpbWeTLZpBvP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0UgrC/btrcHFq80Nw/kXF7HKLyzvpbWeTLZpBvP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0UgrC/btrcHFq80Nw/kXF7HKLyzvpbWeTLZpBvP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0UgrC%2FbtrcHFq80Nw%2FkXF7HKLyzvpbWeTLZpBvP1%2Fimg.png&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;847&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배송오는거 기다리는중 ~&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;008&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/008.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/008.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;</description>
      <category>정보처리기사</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/105</guid>
      <comments>https://devmath.tistory.com/105#entry105comment</comments>
      <pubDate>Fri, 20 Aug 2021 21:43:48 +0900</pubDate>
    </item>
    <item>
      <title>[실전 스프링 부트 워크북] 독서 후기 REVEIW</title>
      <link>https://devmath.tistory.com/104</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;600&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyrFU3/btrcM1zS4FY/0tIkEfK19uqlKG1B4zZ16K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyrFU3/btrcM1zS4FY/0tIkEfK19uqlKG1B4zZ16K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyrFU3/btrcM1zS4FY/0tIkEfK19uqlKG1B4zZ16K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyrFU3%2FbtrcM1zS4FY%2F0tIkEfK19uqlKG1B4zZ16K%2Fimg.jpg&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;600&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;독서 기간 : 2021-08-10 ~ 2021-08-20&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;후기&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입문자보다는 초보자/중급자를 위한 도서이다. 스프링이나 MVC 패턴을 잘 모르는 개발자가 읽기엔 다소 어려울 수 있다. 14장 안에 스프링 부트, 보안, 액추에이터, 배포, 클라우드 등 많은 내용을 넣으려다 보니 친절한 설명을 기대하기는 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 조금이나마 스프링에 대해 아는 독자가 읽는다면, 스프링 부트를 이해하는데 큰 도움이 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 스프링 부트의 가장 큰 장점인 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;자동 구성&lt;/span&gt;&lt;/b&gt;에 대해 잘 알려준다. 원래는 두루뭉실하게만 알고 있었는데, 자동 구성이 무엇인지 제대로 알 수 있었다. 또한 CLI로 스프링 부트에게 명령을 내리는 방법에 대해서도 자세히 나와있다. 하지만 나는 이 단원은 실습하지 않고 가볍게 읽고만 넘어갔다. 스프링 부트 보안, 메시징, 액추에이터가 뭔지 모르는 상태였는데 읽으면서 큰 개념이 잡혔다. 하지만 친절한 설명은 없어서 아직 더 공부해야 할 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BOOK REVIEW/실전 스프링 부트 워크북</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/104</guid>
      <comments>https://devmath.tistory.com/104#entry104comment</comments>
      <pubDate>Fri, 20 Aug 2021 20:33:29 +0900</pubDate>
    </item>
    <item>
      <title>[실전 스프링 부트 워크북] 스프링 부트와 도커</title>
      <link>https://devmath.tistory.com/103</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;Dockerfile&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src/main/resources/docker/Dockerfile 생성&lt;/p&gt;
&lt;pre id=&quot;code_1629458875200&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FROM java:8
VOLUME /tmp
ADD spring-boot-journal-0.0.1-SNAPSHOT.war journal.war
ENV SPRING_PROFILES_ACTIVE docker
EXPOSE 8443
ENTRYPOINT [&quot;java&quot;, &quot;-Djava.security.egd=file:/dev/./urandom&quot;, &quot;-jar&quot;, &quot;/journal.war&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FROM java:8&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenJDK 8 버전이 포함된 9 이미지를 가져온다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VOLUME&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트는 톰캣용 작업 폴더를 자동 생성하기 때문에 볼륨을 만들어야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ADD 아티팩트ID + 버전 + 확장자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 루트에 WAR/JAR 파일을 각각 journal.war.journal.jar 파일로 복사&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ENV&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 프로파일을 켜는 필요한 환경변수 추가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EXPOSE&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL 전용 8443 포트로 서비스한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ENTRYPOINT&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 시동 시 실행할 정보를 선언한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;pom.xml&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;properties&amp;gt;태그 안에 &amp;lt;docker.image.prefix&amp;gt; 태그를 넣어준다.&lt;/p&gt;
&lt;pre id=&quot;code_1629458546970&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;docker.image.prefix&amp;gt;springboot&amp;lt;/docker.image.prefix&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;plugins&amp;gt; 태그 안에 아래의 플러그인을 추가하자.&lt;/p&gt;
&lt;pre id=&quot;code_1629458765718&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;plugin&amp;gt;
	&amp;lt;groupId&amp;gt;com.spotify&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;docker-maven-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.4.1&amp;lt;/version&amp;gt;
    &amp;lt;configuration&amp;gt;
    	&amp;lt;imageName&amp;gt;${docker.image.prefix}/${project.artifactId}&amp;lt;/imageName&amp;gt;
        &amp;lt;dockerDirectory&amp;gt;src/main/resources/docker&amp;lt;/dockerDirectory&amp;gt;
        &amp;lt;resources&amp;gt;
        	&amp;lt;resource&amp;gt;
            	&amp;lt;targetPath&amp;gt;/&amp;lt;/targetPath&amp;gt;
                &amp;lt;directory&amp;gt;${project.build.directory}&amp;lt;/directory&amp;gt;
                &amp;lt;include&amp;gt;${project.build.finalName}.war&amp;lt;/include&amp;gt;
            &amp;lt;/resource&amp;gt;
        &amp;lt;/resources&amp;gt;
    &amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;dockerDirectory&amp;gt;에 Dockerfile 위치를 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;빌드 및 이미지 생성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1629459107450&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./mvnw clean package docker:build -DskipTests=true&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1629459138234&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ docker run -p 8443:8443 springboot/spring-boot-journal&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;브라우저를 열고 스프링 부트 앱 확인 (도커화)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BOOK REVIEW/실전 스프링 부트 워크북</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/103</guid>
      <comments>https://devmath.tistory.com/103#entry103comment</comments>
      <pubDate>Fri, 20 Aug 2021 20:33:24 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 문자열 압축 / 파이썬 / 코딩테스트</title>
      <link>https://devmath.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/60057&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/60057&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629457338534&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 문자열 압축&quot; data-og-description=&quot;데이터 처리 전문가가 되고 싶은 &amp;quot;어피치&amp;quot;는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/60057&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/60057&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/evgZyV/hyLjWwgZ0r/RcjQOBtJVzdpJPmhNVtaS0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/byJHAu/hyLiY3xTUL/Z6yZExfF8Qk0PPkRTm8O2k/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/60057&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/60057&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/evgZyV/hyLjWwgZ0r/RcjQOBtJVzdpJPmhNVtaS0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/byJHAu/hyLiY3xTUL/Z6yZExfF8Qk0PPkRTm8O2k/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 문자열 압축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데이터 처리 전문가가 되고 싶은 &quot;어피치&quot;는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문자열 압축&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 처리 전문가가 되고 싶은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;어피치&quot;&lt;/b&gt;는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다.&lt;br /&gt;간단한 예로 &quot;aabbaccc&quot;의 경우 &quot;2a2ba3c&quot;(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, &quot;abcabcdede&quot;와 같은 문자열은 전혀 압축되지 않습니다. &quot;어피치&quot;는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 압축하여 더 짧은 문자열로 표현할 수 있는지 방법을 찾아보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, &quot;ababcdcdababcdcd&quot;의 경우 문자를 1개 단위로 자르면 전혀 압축되지 않지만, 2개 단위로 잘라서 압축한다면 &quot;2ab2cd2ab2cd&quot;로 표현할 수 있습니다. 다른 방법으로 8개 단위로 잘라서 압축한다면 &quot;2ababcdcd&quot;로 표현할 수 있으며, 이때가 가장 짧게 압축하여 표현할 수 있는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 예로, &quot;abcabcdede&quot;와 같은 경우, 문자를 2개 단위로 잘라서 압축하면 &quot;abcabc2de&quot;가 되지만, 3개 단위로 자른다면 &quot;2abcdede&quot;가 되어 3개 단위가 가장 짧은 압축 방법이 됩니다. 이때 3개 단위로 자르고 마지막에 남는 문자열은 그대로 붙여주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축할 문자열 s가 매개변수로 주어질 때, 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;s의 길이는 1 이상 1,000 이하입니다.&lt;/li&gt;
&lt;li&gt;s는 알파벳 소문자로만 이루어져 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sresult&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&quot;aabbaccc&quot;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;ababcdcdababcdcd&quot;&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;abcabcdede&quot;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;abcabcabcabcdededededede&quot;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;xababcdcdababcdcd&quot;&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예에 대한 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 1개 단위로 잘라 압축했을 때 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 8개 단위로 잘라 압축했을 때 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 3개 단위로 잘라 압축했을 때 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #4&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 2개 단위로 자르면 &quot;abcabcabcabc6de&quot; 가 됩니다.&lt;br /&gt;문자열을 3개 단위로 자르면 &quot;4abcdededededede&quot; 가 됩니다.&lt;br /&gt;문자열을 4개 단위로 자르면 &quot;abcabcabcabc3dede&quot; 가 됩니다.&lt;br /&gt;문자열을 6개 단위로 자를 경우 &quot;2abcabc2dedede&quot;가 되며, 이때의 길이가 14로 가장 짧습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입출력 예 #5&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다.&lt;br /&gt;따라서 주어진 문자열을 x / ababcdcd / ababcdcd 로 자르는 것은 불가능 합니다.&lt;br /&gt;이 경우 어떻게 문자열을 잘라도 압축되지 않으므로 가장 짧은 길이는 17이 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정답 코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1629457423465&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s):
    answer = len(s)

    # 1개 단위(step)부터 압축 단위를 늘려가며 확인
    for step in range(1, len(s) // 2 + 1):
        compressed = &quot;&quot;
        prev = s[0:step]  # 앞에서부터 step만큼의 문자열 추출
        count = 1
    
    # 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
        for j in range(step, len(s), step):
        
        # 이전 상태와 동일하다면 압축 횟수(count) 증가
            if prev == s[j:j + step]:
                count += 1
            
        # 다른 문자열이 나왔다면
            else:
                compressed += str(count) + prev if count &amp;gt;= 2 else prev
                prev = s[j:j + step]  # 다시 초기화
                count = 1
            
        # 남아 있는 문자열에 대해서 처리
        compressed += str(count) + prev if count &amp;gt;= 2 else prev
    
        # 만들어지는 문자열이 가장 짧은 것이 정답
        answer = min(answer, len(compressed))

    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;해설 추가한 코드 &amp;gt; 프로그래머스 말고 다른 파이썬 실행환경에서 돌려보기&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1629457442054&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;s = input()
answer = len(s)

# 1개 단위(step)부터 압축 단위를 늘려가며 확인
for step in range(1, len(s) // 2 + 1):
    compressed = &quot;&quot;
    prev = s[0:step]  # 앞에서부터 step만큼의 문자열 추출
    count = 1
    print(step,'단위로 자르는 경우')
    # 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
    for j in range(step, len(s), step):
        print('j=', j)
        # 이전 상태와 동일하다면 압축 횟수(count) 증가
        print('prev=', prev)
        print('next=', s[j:j+step])
        if prev == s[j:j + step]:
            count += 1
            print('이전 상태와 동일하므로 압축횟수 증가 count=', count)
        # 다른 문자열이 나왔다면
        else:
            compressed += str(count) + prev if count &amp;gt;= 2 else prev
            prev = s[j:j + step]  # 다시 초기화
            count = 1
            print('다른 문자열이 나왔으므로 compressed=', compressed,'담고 prev 초기화 prev =',prev)
    # 남아 있는 문자열에 대해서 처리
    compressed += str(count) + prev if count &amp;gt;= 2 else prev
    print('이번 step 결과 compressed=', compressed)
    # 만들어지는 문자열이 가장 짧은 것이 정답
    print('현재 answer=', answer, '이번 step 결과 len(compressed)=', len(compressed))
    answer = min(answer, len(compressed))
    print('더 작은 값이 answer =', answer,'\n\n')


print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/프로그래머스</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/102</guid>
      <comments>https://devmath.tistory.com/102#entry102comment</comments>
      <pubDate>Fri, 20 Aug 2021 20:04:37 +0900</pubDate>
    </item>
    <item>
      <title>[구현] 08 문자열 재정렬 /파이썬 / 코딩테스트 예제</title>
      <link>https://devmath.tistory.com/101</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문자열 재정렬&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;난이도 ★☆☆&amp;nbsp; 풀이시간 20분&amp;nbsp; 시간제한 1초&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫째 줄에 하나의 문자열 S가 주어집니다. (1 &amp;le; S의 길이 &amp;le; 10,000)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫째 줄에 문제에서 요구하는 정답을 출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력 예시1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;K1KA5CB7&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 예시1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ABCKK13&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력 예시 2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AJKDLSI412K4JSJ9D&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출력 예시 2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ADDIJJJKKLSS20&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;모범 코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1629449261814&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String = input()
Char = list()
num = 0

for i in String:
    if i.isdigit():
        num += int(i)
    else:
        Char.append(i)

Char.sort()
if num != 0:
    Char.append(str(num))

print(&quot;&quot;.join(Char))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력받은 문자열을 하나씩 확인해서 숫자면 num에 더하고 문자면 Char에 담는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Char를 알파벳순으로 정렬하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;num이 0이 아니라면, 즉 입력받은 문자열에 숫자가 하나라도 있다면 Char에 str으로 추가한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/101</guid>
      <comments>https://devmath.tistory.com/101#entry101comment</comments>
      <pubDate>Fri, 20 Aug 2021 17:49:08 +0900</pubDate>
    </item>
    <item>
      <title>[실전 스프링 부트 워크북] CH12 스프링 부트 배포 - JAR 만들기 &amp;amp; WAR 만들기</title>
      <link>https://devmath.tistory.com/100</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 프로젝트를 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;단독형 앱 형태&lt;/span&gt;로 배포해보자 - &lt;/b&gt;&lt;b&gt;JAR 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트로 실행 가능한 JAR 파일을 만드는 방법은 기본적으로 자바와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 main&amp;nbsp; 메서드가 위치한 클래스를 알아서 찾아내고 앱 생성에 필요한 모든 코드를 자동으로 생성하므로 훨씬 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;패키징&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1629373946795&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./mvnw package&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 메이븐 명령어를 실행하면 target/spring-boot-journal-0.0.1-SNAPSHOT.jar 파일이 생성된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JAR 파일 안에서 의존체를 모조리 쓸어 담는다.&lt;/li&gt;
&lt;li&gt;앱 관련 정보는 MANIFEST.MF 파일에 넣는다.&lt;/li&gt;
&lt;li&gt;앱을 시작하는 메인 클래스는 Main-Class 및 Start-Class에 자동 세팅된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;실행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들어진 JAR 파일은 아래 명령으로 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1629374026802&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ java -jar target/spring-boot-journal-0.0.1-SNAPSHOT.jar&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일을 다른 사람에게 보내 서드파티 라이브러리 없이도 돌려보게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 실행과 배포 가능한 WAR 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pom.xml (또는 build.gradle) 파일에서 두가지만 수정하면 된다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&amp;lt;packaging&amp;gt; 태그값을 jar에서 war로 변경한다. (그레이들은 war 플러그인을 적용한다.)&lt;/li&gt;
&lt;li&gt;spring-boot-starter-tomcat 의존체를 추가하고, scope를 provided로 세팅한다. (그레이들은 configurations 섹션명을 providedRuntime으로 바꾼다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;톰캣 의존체는 전부 spring-boot-starter-web 폼에서 내려받기 때문에 이전 폼 파일에는 없었는데, WAR 파일을 만들기 위해서는 따로 추가해주어야 한다. 따로 추가한 후 앱을 패키징하면 '팻JAR' 내부에서 전체 라이브러리는 WEB-INF/lib에, 톰캣 라이브러리는 WEB-INF/lib-provided에 따로 모인다. 이렇게 해야 컨테이너가 탑재된 단독형 앱을 확장 가능한 형태로 유지할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WEB-INF/lib에 추가한 라이브러리는 모두 컨테이너 차지라서 톰캣 라이브러리를 여기에 넣으면 JAR 파일이 충돌하면서 컨테이너가 시동 실패한다. 따라서 스프링 부트에서는 WEB-INF/lib-provided라는 공간을 따로 만들어 톰캣 라이브러리를 담은 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;패키징&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1629374588746&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ .mvnw clean package -DskipTests=true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-DskipTests : 테스트를 건너뛰는 옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1629374642178&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ java -jar target/spring-boot-journal-0.0.1-SNAPSHOT.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 톰캣 기반 서버에 배포하기 (CLI)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 톰캣 기반 서버 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://tomcat.apache.org/&quot;&gt;http://tomcat.apache.org/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1629374941256&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apache Tomcat&amp;reg; - Welcome!&quot; data-og-description=&quot;The Apache Tomcat&amp;reg; software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the &quot; data-og-host=&quot;tomcat.apache.org&quot; data-og-source-url=&quot;http://tomcat.apache.org/&quot; data-og-url=&quot;http://tomcat.apache.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://tomcat.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://tomcat.apache.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apache Tomcat&amp;reg; - Welcome!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Apache Tomcat&amp;reg; software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tomcat.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 톰캣 서버를 강력하게 만든 피보탈 tc 서버 설치 (추천)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://network.pivotal.io/products/pivotal-tcserver&quot;&gt;https://network.pivotal.io/products/pivotal-tcserver&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1629375028151&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download VMware tc Server &amp;mdash; VMware Tanzu Network&quot; data-og-description=&quot;Explore, download, and update software and services.&quot; data-og-host=&quot;network.pivotal.io&quot; data-og-source-url=&quot;https://network.pivotal.io/products/pivotal-tcserver&quot; data-og-url=&quot;https://network.pivotal.io/products/pivotal-tcserver&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biHUBe/hyLik0lrjY/MyoMhnz4fNj9qz4JRznGJ0/img.png?width=257&amp;amp;height=257&amp;amp;face=0_0_257_257&quot;&gt;&lt;a href=&quot;https://network.pivotal.io/products/pivotal-tcserver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://network.pivotal.io/products/pivotal-tcserver&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biHUBe/hyLik0lrjY/MyoMhnz4fNj9qz4JRznGJ0/img.png?width=257&amp;amp;height=257&amp;amp;face=0_0_257_257');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download VMware tc Server &amp;mdash; VMware Tanzu Network&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Explore, download, and update software and services.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;network.pivotal.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서버 설치 경로로 가서 tcruntime-instance.sh 쉘 파일 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. myserver라는 하위 폴더를 만들고 그 안에 8.0.30.C.RELEASE 버전의 톰캣 설치 파일을 모두 옮기기&lt;/p&gt;
&lt;pre id=&quot;code_1629375206684&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./tcruntime-instance.sh create -i . myserver -v 8.0.30.C.RELEASE&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. myserver/webapps 폴더에 spring-boot-journal-0.0.1-SNAPSHOT.war 파일을 복사하고 이름을 journal.war로 변경&lt;/p&gt;
&lt;pre id=&quot;code_1629375325564&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd myserver
$ cd webapps
$ cp ~/pro-spring-boot/ch12/spring-boot-journal/target/spring-boot-journal-0.0.1-SNAPSHOT.war ./journal.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. MYSQL 서버 시동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. bin 폴더에서 tc 서버 켜기&lt;/p&gt;
&lt;pre id=&quot;code_1629375359849&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd
$ cd bin
$ ./tcruntime-ctl.sh start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. tc 서버 로그를 보기 위한 명령&lt;/p&gt;
&lt;pre id=&quot;code_1629375400731&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ tail -f ../logs/catalina.out&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. http://localhost:8080/journal 접속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;톰캣 기반 서버에 배포하기 (STS IDE)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피보탈 tc 서버가 내장되어 있기때문에 별도 설치 x&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Servers 뷰에서 Pivotal tc Server Developer Edition v3.2 &amp;gt; Add and Remove&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. spring-boot-journal 선택 &amp;gt; Add &amp;gt; Finish&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 기본적으로 컨텍스트 경로는 프로젝트명과 동일하게 세팅된다. 컨텍스트 경로를 /journal로 줄이려면 Package Explorer 창의 Servers 섹션에서 server.xml의 다음 코드를 찾아 path를 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1629375687918&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Context docBase=&quot;spring-boot-journal&quot; path=&quot;/journal&quot; reloadable=&quot;true&quot; .../&amp;gt;
&amp;lt;/Host&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Servers 뷰 오른쪽 서버 실행 아이콘을 클릭하여 tc서버 시동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. http://localhost:8080/journal 접속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스프링 부트 앱을 단독형으로 실행하는 것과 tc 서버에 배포/실행하는 것은 무슨 차이일까?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단독형 앱으로 실행할 때는 https://localhost:8443 URL로 SSL 접속을 하지만, tc 서버에 배포할 때는 SSL/HTTPS를 사용하지 않는다. &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;컨테이너에 배포할 때는 단독형으로 실행할 때만 유의미한 프로퍼티를 스프링 부트가 알아서 누락시키기 때문이다.&lt;/span&gt; 따라서 톰캣 서버에 보안을 적용하려면 다른 방법을 사용해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BOOK REVIEW/실전 스프링 부트 워크북</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/100</guid>
      <comments>https://devmath.tistory.com/100#entry100comment</comments>
      <pubDate>Thu, 19 Aug 2021 21:27:06 +0900</pubDate>
    </item>
    <item>
      <title>[실전 스프링 부트 워크북] CH12 스프링 부트 배포 - SSL 기능 통합하여 배포하기</title>
      <link>https://devmath.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;메이븐은 일정한 순서대로 빌드를 수행한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;자바 소스 코드 컴파일&lt;/li&gt;
&lt;li&gt;1의 결과물인 클래스 파일을 작업 폴더 target/classes로 옮김&lt;/li&gt;
&lt;li&gt;단위 테스트&lt;/li&gt;
&lt;li&gt;앱 실행&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SSL(Secure Sockets Layer)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://terms.naver.com/entry.naver?docId=1180906&amp;amp;cid=40942&amp;amp;categoryId=32851&quot;&gt;인터넷에서 데이터를 안전하게 전송하기 위한 인터넷 통신 규약 프로토콜&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629372587637&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;SSL&quot; data-og-description=&quot;보안 소켓 계층을&amp;nbsp;이르는 말로,&amp;nbsp;인터넷에서 데이터를&amp;nbsp;안전하게&amp;nbsp;전송하기 위한 인터넷 통신 규약 프로토콜이다. 인터넷 프로토콜(Internet protocol)이 보안면에서 기밀성을 유지하지 못한다는 문&quot; data-og-host=&quot;terms.naver.com&quot; data-og-source-url=&quot;https://terms.naver.com/entry.naver?docId=1180906&amp;amp;cid=40942&amp;amp;categoryId=32851&quot; data-og-url=&quot;https://terms.naver.com/entry.naver?cid=40942&amp;amp;docId=1180906&amp;amp;categoryId=32851&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfMKSy/hyLikF0Nxc/vqf4K1KhQ3ojFSt9vmeOn1/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270&quot;&gt;&lt;a href=&quot;https://terms.naver.com/entry.naver?docId=1180906&amp;amp;cid=40942&amp;amp;categoryId=32851&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://terms.naver.com/entry.naver?docId=1180906&amp;amp;cid=40942&amp;amp;categoryId=32851&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfMKSy/hyLikF0Nxc/vqf4K1KhQ3ojFSt9vmeOn1/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SSL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;보안 소켓 계층을&amp;nbsp;이르는 말로,&amp;nbsp;인터넷에서 데이터를&amp;nbsp;안전하게&amp;nbsp;전송하기 위한 인터넷 통신 규약 프로토콜이다. 인터넷 프로토콜(Internet protocol)이 보안면에서 기밀성을 유지하지 못한다는 문&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;terms.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #707070;&quot;&gt;간단하게 말하면 들어오고 나가는 데이터들을 암호화하는 보안 기능을 갖고 있는 보안 인증서 라고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;HTTPS(Hypertext Transfer Protocol Over Secure Socket Layer)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP에 SSL을 적용하여 데이터 전송기능의 보안을 강화한 전송기능이라고 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL 인증이 된 도메인이 https:// 주소를 가질 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;[프로젝트] 프로젝트 앱에서 HTTPS 프로토콜 보안 통신이 가능하게끔 SSL 기능을 통합하여 배포해보자&lt;/b&gt;&lt;/h2&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;040&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/040.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/040.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 프로젝트에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(ch9 참고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;① src/main/resources/keystore.jks 파일을 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;② 자가 서명 키스토어(self-signed keystore) 만들기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL을 적용하려면 자가 서명 키스토어 파일이 필요하다. 프로젝트 루트 폴더에서 다음 명령을 실행하여 생성하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1629372955242&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ keytool -genkey -alias tomcat -keyalg RSA -keystore src/main/resources/keystore.jks&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 key-store-password와 key-password를 설정해준다. application.properties에 적어 넣어야 하니 잊으면 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;③ application.propreties 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1629373070470&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server.port = 8443
server.ssl.key-store = classptah:keystore.jks
server.ssl.key-store-password = 키스토어 비밀번호
server.ssl.key-password = 키 비밀번호&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssl을 가동하기 위해 키스토어, 키스토어 비밀번호, 키 비밀번호를 기재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 포트가 8443이기 때문에 접속 URL은 https://localhost:8443이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;④ 앱 실행 후 SSL 테스트&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 부트 앱을 실행하고나서 로그를 보면 톰캣 서버가 8443 포트를 리스닝하고 있다. 시동 후 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;https://localhost:8443&lt;/span&gt;&lt;/b&gt;에 접속하면 비공인 SSL 인증서라 사용자에게 경고하는 차원에서 오류 비슷한 화면을 내보내는데, 고급 탭을 눌러 계속 진행하면 사이트에 접속할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BOOK REVIEW/실전 스프링 부트 워크북</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/99</guid>
      <comments>https://devmath.tistory.com/99#entry99comment</comments>
      <pubDate>Thu, 19 Aug 2021 20:46:26 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 18406번: 럭키 스트레이트 / 구현 / 파이썬</title>
      <link>https://devmath.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/18406&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/18406&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629280196824&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;18406번: 럭키 스트레이트&quot; data-og-description=&quot;첫째 줄에 점수 N이 정수로 주어진다. (10 &amp;le;&amp;nbsp;N&amp;nbsp;&amp;le; 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/18406&quot; data-og-url=&quot;https://www.acmicpc.net/problem/18406&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bIqJWl/hyLikLwUmX/Awf1pD3aInVSKoUbLUZYD0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/18406&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/18406&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bIqJWl/hyLikLwUmX/Awf1pD3aInVSKoUbLUZYD0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;18406번: 럭키 스트레이트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 점수 N이 정수로 주어진다. (10 &amp;le;&amp;nbsp;N&amp;nbsp;&amp;le; 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;럭키 스트레이트&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 제한메모리 제한제출정답맞은 사람정답 비율&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 초&lt;/td&gt;
&lt;td&gt;256 MB&lt;/td&gt;
&lt;td&gt;2645&lt;/td&gt;
&lt;td&gt;1928&lt;/td&gt;
&lt;td&gt;1563&lt;/td&gt;
&lt;td&gt;72.630%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 게임의 아웃복서 캐릭터에게는 럭키 스트레이트라는 기술이 존재한다. 이 기술은 매우 강력한 대신에 항상 사용할 수는 없으며, 현재 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 조건이란 현재 캐릭터의 점수를&lt;span&gt;&amp;nbsp;&lt;/span&gt;N이라고 할 때 점수&lt;span&gt;&amp;nbsp;&lt;/span&gt;N을 자릿수를 기준으로 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 예를 들어 현재 점수가 123,402라면 왼쪽 부분의 각 자릿수의 합은 1+2+3, 오른쪽 부분의 각 자릿수의 합은 4+0+2이므로 두 합이 6으로 동일하여 럭키 스트레이트를 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 점수&lt;span&gt;&amp;nbsp;&lt;/span&gt;N이 주어졌을 때, 럭키 스트레이트를 사용할 수 있는 상태인지 아닌지를 알려주는 프로그램을 작성하시오. 럭키 스트레이트를 사용할 수 있다면 &quot;LUCKY&quot;를, 사용할 수 없다면 &quot;READY&quot;라는 단어를 출력한다. 또한 점수&lt;span&gt;&amp;nbsp;&lt;/span&gt;N의 자릿수는 항상 짝수 형태로만 주어진다. 예를 들어 자릿수가 5인 12,345와 같은 수는 입력으로 들어오지 않는다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 점수&lt;span&gt;&amp;nbsp;&lt;/span&gt;N이 정수로 주어진다. (10 &amp;le;&amp;nbsp;N&amp;nbsp;&amp;le; 99,999,999) 단, 점수&lt;span&gt;&amp;nbsp;&lt;/span&gt;N의 자릿수는 항상 짝수 형태로만 주어진다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 럭키 스트레이트를 사용할 수 있다면 &quot;LUCKY&quot;를, 사용할 수 없다면 &quot;READY&quot;라는 단어를 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;123402&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LUCKY&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7755&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;READY&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정답코드&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1629280254711&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = input()

k = len(n)//2

left = list(map(int, n[:k]))
right = list(map(int, n[k:]))

if sum(left) == sum(right):
    print(&quot;LUCKY&quot;)
else:
    print(&quot;READY&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1629280304159&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = input()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값을 문자열 리스트로 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n = [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;0&quot;, &quot;2&quot;]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629280397251&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;k = len(n)//2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n의 길이를 절반으로 나눠서 가운데 인덱스를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;k = 6//2 = 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629280441067&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리스트에는 안담아도 됨
left = list(map(int, n[:k]))
right = list(map(int, n[k:]))&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;n[:k]&lt;/span&gt;&lt;/b&gt;&amp;nbsp; 리스트 n의 0번째(생략하면 0부터) 값부터 k-1번째 값까지&lt;/li&gt;
&lt;li&gt;n[:k] = [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;map(int, n[:k])&lt;/span&gt;&lt;/b&gt;&amp;nbsp; n[:k]의 값들을 int형으로 바꿔서 map에 담은 값&lt;/li&gt;
&lt;li&gt;left = [1, 2, 3]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;n[k:]&lt;/span&gt;&lt;/b&gt;&amp;nbsp; 리스트 n의 k번째 값부터 마지막까지&lt;/li&gt;
&lt;li&gt;right = [4, 0, 2]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629280734425&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if sum(left) == sum(right):
    print(&quot;LUCKY&quot;)
else:
    print(&quot;READY&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;sum(left)&lt;/span&gt;&lt;/b&gt;&amp;nbsp; 리스트 left에 있는 값의 합을 구해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sum(left) = 1 + 2 + 3 = 6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sum(right) = 4 + 0 + 2 =6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같으면 &quot;LUCKY&quot; 출력&lt;/p&gt;</description>
      <category>코딩테스트/백준</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/98</guid>
      <comments>https://devmath.tistory.com/98#entry98comment</comments>
      <pubDate>Wed, 18 Aug 2021 19:00:40 +0900</pubDate>
    </item>
    <item>
      <title>[실전 스프링 부트 워크북] CH6. 스프링 부트 테스트</title>
      <link>https://devmath.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;(공부중)&lt;/p&gt;</description>
      <category>BOOK REVIEW/실전 스프링 부트 워크북</category>
      <author>수학도</author>
      <guid isPermaLink="true">https://devmath.tistory.com/97</guid>
      <comments>https://devmath.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 16 Aug 2021 23:07:29 +0900</pubDate>
    </item>
  </channel>
</rss>