<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>rin_H.log</title>
        <link>https://velog.io/</link>
        <description>hyerin / 한단계씩 배워가는 백엔드 개발자..(‘•̀ ▽ •́ )φ</description>
        <lastBuildDate>Tue, 05 Sep 2023 14:19:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>rin_H.log</title>
            <url>https://velog.velcdn.com/images/hyerin_story/profile/e47e8ce6-9bdd-4028-86f1-10b88ff23b55/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. rin_H.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyerin_story" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Java] StringBuilder]]></title>
            <link>https://velog.io/@hyerin_story/Java-StringBuilder</link>
            <guid>https://velog.io/@hyerin_story/Java-StringBuilder</guid>
            <pubDate>Tue, 05 Sep 2023 14:19:39 GMT</pubDate>
            <description><![CDATA[<h2 id="stringbuilder-클래스">StringBuilder 클래스</h2>
<p><code>StringBuilder</code>, <code>StringBuffer</code>, <code>String</code> 클래스는 문자열을 다루는 클래스이다.</p>
<blockquote>
<p>내부적으로 StringBuilder 클래스는 문자열을 저장하기 위한 메모리 공간을 지니고 있다.
그리고 이 메모리 공간은 String 클래스와 달리 문자를 추가하거나 삭제하는 것이 가능하다.</p>
</blockquote>
<h4 id="즉-string-클래스가-문자열을-생성자로-넣어-인스턴스를-한번-생성하고-나면">즉, String 클래스가 문자열을 생성자로 넣어 인스턴스를 한번 생성하고 나면</h4>
<h4 id="인스턴스가-가진-문자열-값을-변경하지-못하는-단점을-보완한-클래스이다">인스턴스가 가진 문자열 값을 변경하지 못하는 단점을 보완한 클래스이다.</h4>
<br>

<h3 id="stringbuilder-메소드">StringBuilder 메소드</h3>
<p>아래의 메소드는 String 클래스와 동일함.</p>
<blockquote>
<ul>
<li><strong><code>charAt()</code></strong> - 특정 인덱스 위치의 문자 반환</li>
</ul>
</blockquote>
<ul>
<li><strong><code>indexOf()</code> / <code>lastIndexOf()</code></strong> - 문자열 검색해서 위치 반환</li>
<li><strong><code>length()</code></strong> - 문자열 길이 반환</li>
<li><strong><code>replace()</code></strong> - 검색된 문자열 교체</li>
<li><strong><code>substring()</code></strong> - 특정 인덱스 범위 내 문자열을 복사해서 새로 생성된 인스턴스 반환</li>
<li><strong><code>toString()</code></strong> - 문자열 출력</li>
</ul>
<p>여기부터는 StringBuilder에 존재하는 메소드이다.</p>
<h3 id="append">append()</h3>
<ul>
<li><p>문자열 추가</p>
<pre><code class="language-java">public class Main {
  public static void main(String[] args) {

      StringBuilder a = new StringBuilder(&quot;Hello&quot;);

      a.append(&quot; World&quot;);
      System.out.println(a);         // &quot;Hello World&quot;        
  }
}</code></pre>
</li>
</ul>
<h3 id="reverse">reverse()</h3>
<ul>
<li><p>해당 문자 전체를 뒤집는다.</p>
<pre><code class="language-java">public class Main {
  public static void main(String[] args) {

      StringBuilder a = new StringBuilder(&quot;Hello&quot;);

      a.reverse();
      System.out.println(a.toString());         // &quot;Hello World&quot;        
  }
}</code></pre>
</li>
</ul>
<h3 id="delete">delete()</h3>
<ul>
<li><p>매개변수로 전달받은 인덱스 사이의 문자열 제거</p>
</li>
<li><p>parameter : 인덱스 시작점, 인덱스 끝점 + 1</p>
</li>
<li><p>문자열에서 시작과 끝은 항상 &quot;시작&lt;=범위&lt;끝&quot; 형태</p>
<pre><code class="language-java">public class Main {
  public static void main(String[] args) {

      StringBuilder a = new StringBuilder(&quot;Hello&quot;);

      a.append(&quot; World&quot;);
      System.out.println(a);  // &quot;Hello World&quot;

      a.delete(6, 9);         // (6~8 삭제)
      System.out.println(a);  // &quot;Hello ld&quot;         
  }
}</code></pre>
</li>
</ul>
<h3 id="deletecharat">deleteCharAt()</h3>
<ul>
<li><p>특정 인덱스의 한 문자만 삭제</p>
</li>
<li><p>delete() 메소드에서 범위를 한 글자만 잡는 것과 동일한 효과</p>
<pre><code class="language-java">public class Main {
  public static void main(String[] args) {

      StringBuilder a = new StringBuilder(&quot;Hello&quot;);

      a.append(&quot; World&quot;);
      System.out.println(a);                 // &quot;Hello World&quot;

      // a.delete(6,7) 과 같음
      a.deleteCharAt(6);
      System.out.println(a);                // &quot;Hello orld&quot;        
  }
}</code></pre>
</li>
</ul>
<h3 id="insert">insert()</h3>
<ul>
<li><p>특정 위치에 문자열 삽입</p>
</li>
<li><p>매개변수로 받은 인덱스 위치부터 문자열을 삽입</p>
<pre><code class="language-java">public class Main {
  public static void main(String[] args) {

      StringBuilder a = new StringBuilder(&quot;He World&quot;);

      a.insert(2, &quot;llo&quot;);
      System.out.println(a);            // &quot;Hello World&quot;

      a.insert(5, 55);
      System.out.println(a);             // &quot;Hello55 World&quot;    
  }
}</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] String 관련 함수]]></title>
            <link>https://velog.io/@hyerin_story/Java-String-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@hyerin_story/Java-String-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98</guid>
            <pubDate>Wed, 23 Aug 2023 17:03:43 GMT</pubDate>
            <description><![CDATA[<h2 id="문자열-함수">문자열 함수</h2>
<blockquote>
<p>알고리즘과 웹 개발에서 기본이 되는 문자열 관련 함수를 정리해보자.</p>
</blockquote>
<h3 id="1-문자열-비교">(1) 문자열 비교</h3>
<h4 id="equals"><code>equals()</code></h4>
<blockquote>
<p>두 개의 문자열이 동일한 값을 가지고 있는지를 비교하여 결과값 리턴 함수
<code>객체끼리 내용 비교</code></p>
</blockquote>
<h4 id="">==</h4>
<blockquote>
<p><code>주소의 값을 비교</code></p>
</blockquote>
<p>예제로 <code>==</code> 과 <code>equals()</code> 의 차이점을 비교해보자</p>
<pre><code class="language-java">public class Test {

    public static void main(String[] args) throws Exception{

        String str1 = &quot;abc&quot;;
        String str2 = str1;
        String str3 = new String(&quot;abc&quot;);

        // == 연산자는 주소를 비교
        System.out.println(str1 == str2);         // true
        // str2 에 st1 값을 넣었으므로 주소 같이 공유

        System.out.println(str1 == str3);        // false
        // str1 과 str3는 각각 생성 되었으므로 주소가 다름

        // equals() 는 내용을 비교
        System.out.println(str1.equals(str2));    // ture
        System.out.println(str1.equals(str3));    // true
        // 내용을 비교하기떄문에 abc 내용이 같으므로 true 반환

    }
}</code></pre>
<p>그래서 문자열을 비교할 때는 <code>==</code> 보다는 <code>equals</code> 를 사용</p>
<h3 id="2-length">(2) length()</h3>
<blockquote>
<p>문자열 길이 반환</p>
</blockquote>
<h3 id="3-substring">(3) substring()</h3>
<blockquote>
<p><code>문자의 시작번호</code> 또는 <code>문자의 시작과 끝</code> 을 지정
-&gt; 문자열 중 특정 부분을 뽑아낼 때 경우 사용</p>
</blockquote>
<pre><code class="language-java">public class Test{

    public static void main(String[] args) {
        String example = &quot;안녕하세요&quot;;

        String target1 = example.substring(0);
        String target2 = example.substring(1, 4);   // (1, 2, 3) 인덱스까지 출력
        String target3 = example.substring(4);


        System.out.println(target1);     // 안녕하세요
        System.out.println(target2);     // 녕하세
        System.out.println(target3);     // 요
    }
}</code></pre>
<h3 id="4-touppercase--tolowercase">(4) toUpperCase() / toLowerCase()</h3>
<blockquote>
<ul>
<li>toUpperCase() : 문자열 모두 대문자 변경</li>
</ul>
</blockquote>
<ul>
<li>toLowerCase() : 문자열 모두 소문자 변경</li>
</ul>
<h3 id="5-indexof">(5) indexOf()</h3>
<blockquote>
<p>문자열에서 특정 문자가 시작되는 인덱스 리턴</p>
</blockquote>
<h3 id="6-replace--replaceall--replacefirst">(6) replace() / replaceAll() / replaceFirst()</h3>
<blockquote>
<p>특정 문자를 원하는 문자로 변경하고 싶을 경우 사용</p>
</blockquote>
<h3 id="7-split">(7) split()</h3>
<blockquote>
<p>지정한 문자로 문자열을 나눌 수 있다. 받는 변수가 배열로 선언되어야 한다.</p>
</blockquote>
<pre><code class="language-java">String str = &quot;abc#def#ghi&quot;;
String[] splitStr = str.split(&quot;#&quot;);</code></pre>
<h3 id="8-charat">(8) charAt()</h3>
<blockquote>
<p>String 타입의 문자열에서 특정 문자를 char 타입으로 변환할 때 사용하는 함수</p>
</blockquote>
<pre><code class="language-java">public class Test{
    public static void main(String[] args) {
        String example = &quot;안녕하세요&quot;;

        char target1;
        char target2;
        char target3;

        target1 = example.charAt(0);
        target2 = example.charAt(1);
        target3 = example.charAt(2);

        System.out.println(target1);    // 안
        System.out.println(target2);    // 녕
        System.out.println(target3);    // 하
    }
}</code></pre>
<h4 id="8-1-숫자-형태-string에서-int로-변환">(8)-1. 숫자 형태 String에서 int로 변환</h4>
<blockquote>
<p>String 관련 문제를 풀 때 꼭 알아야 하는 함수
<strong><code>int num = str.charAt(i) - &#39;0&#39;;</code></strong></p>
</blockquote>
<pre><code class="language-java">String numbers = &quot;12345&quot;;

// 숫자로 구성된 String 변수에서 특정 숫자를 바로 int 변수로 가져올 수 있다.
int targetNumber1 = numbers.charAt(0) - &#39;0&#39;;      // 1
int targetNumber2 = numbers.charAt(1) - &#39;0&#39;;      // 2
int targetNumber3 = numbers.charAt(2) - &#39;0&#39;;      // 3

System.out.println(&quot;targetNumber1 = &quot;+targetNumber1);
System.out.println(&quot;targetNumber2 = &quot;+targetNumber2);
System.out.println(&quot;targetNumber3 = &quot;+targetNumber3);

int test1 = 10 - targetNumber1;      // 9
int test2 = 10 - targetNumber2;      // 8
int test3 = 10 - targetNumber3;      // 7

System.out.println(&quot;10 - targetNumber1 = &quot;+test1);
System.out.println(&quot;10 - targetNumber2 = &quot;+test2);
System.out.println(&quot;10 - targetNumber3 = &quot;+test3);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Intellij] Java 프로젝트 생성]]></title>
            <link>https://velog.io/@hyerin_story/Intellij-Java-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@hyerin_story/Intellij-Java-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Fri, 18 Aug 2023 05:59:04 GMT</pubDate>
            <description><![CDATA[<h3 id="1-인텔리제이-실행">(1) 인텔리제이 실행</h3>
<p>새 프로젝트를 생성하면 <code>New Project</code>를 클릭하고, 기존의 프로젝트를 열려면 <code>Open</code> 버튼을 클릭한다. 
<img src="https://velog.velcdn.com/images/hyerin_story/post/3a1b77d1-7982-4894-935c-ca999f4b801a/image.png" alt=""></p>
<h3 id="2-프로젝트-생성">(2) 프로젝트 생성</h3>
<p><code>New Project</code> 선택</p>
<blockquote>
<ul>
<li><code>Name</code> : 프로젝트명</li>
</ul>
</blockquote>
<ul>
<li><code>Location</code> : 프로젝트 경로</li>
<li><code>Create Git Repository</code> : 해당 프로젝트를 Git Repository로 만들지 선택</li>
<li><code>Language</code> : 프로젝트 사용 언어</li>
<li><code>Build System</code> : 프로젝트 빌드 프로그램</li>
<li><code>JDK</code> : 사용할 JDK 선택</li>
<li><code>Add sample code</code> : 샘플 코드 추가</li>
<li><code>Advanced Settings</code> : 모듈 관련 설정</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hyerin_story/post/6041b0c1-8854-418a-a5ca-385fd6f3d980/image.png" alt=""></p>
<p>설정을 하고 <code>Create</code> 누르면 프로젝트가 생성된다.</p>
<p>프로젝트 생성할 때 add sample code를 선택하고 생성했다면 src 폴더 아래 Main 파일이 생겨있을 것이다.</p>
<h3 id="3-프로젝트-실행">(3) 프로젝트 실행</h3>
<p>Main 파일을 확인해보면 다음과 같은 코드가 생성되어있다.
<img src="https://velog.velcdn.com/images/hyerin_story/post/c2e68848-20e0-4874-b950-3932162d5e3f/image.png" alt=""></p>
<p>이제 실행하기 위해서 <code>왼쪽 초록색 화살표</code>를 누르거나 <code>Shift + F10</code>을 누르면 된다.</p>
<p>그러면 콘솔창에 <code>Hello World!</code>가 출력된다 !</p>
<p><img src="https://velog.velcdn.com/images/hyerin_story/post/5882fde1-ffdd-468b-a12a-dd95582cdde4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring boot] Post 요청, Content-Type]]></title>
            <link>https://velog.io/@hyerin_story/Spring-boot-Post-%EC%9A%94%EC%B2%AD-Content-Type</link>
            <guid>https://velog.io/@hyerin_story/Spring-boot-Post-%EC%9A%94%EC%B2%AD-Content-Type</guid>
            <pubDate>Thu, 17 Aug 2023 16:38:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Client에서 POST 방식으로 요청을 보낼 때 발생할 수 있는 오류에 대해서 알아보고자 포스팅</p>
</blockquote>
<p>Client에서 요청 시에 <code>HttpMediaTypeNotSupportedException::415 status code</code> Exception이 발생하며 동작하지 않는 이슈가 있다.</p>
<h4 id="보통-orgspringframeworkwebhttpmediatypenotsupportedexception-예외">보통 <strong><code>org.springframework.web.HttpMediaTypeNotSupportedException</code></strong> 예외</h4>
<ul>
<li><em><strong>RestAPI에서 허용할 수 있는 MediaType이 아니면 에러가 발생한다.</strong></em></li>
</ul>
<p>해결 방법은 <code>Content-Type</code>을 잘 맞추면 에러가 생기지 않는다 !</p>
<br>

<h2 id="content-type">Content-Type</h2>
<p><code>RestAPI</code>의 경우 보통 <code>JSON</code> 타입으로 요청하고, 요청을 받는다. 
그래서 당연히 Content-Type으로 application/json를 사용한다고 생각하고 있었고, 이번에 프로젝트 중 오류를 겪게 되어서 자료를 찾게 되었다.</p>
<blockquote>
<p>html <code>form</code> 태그를 사용해서 <code>POST</code> 방식으로 요청하거나, jQuery의 ajax 등의 요청을 할 때, Content-Type의 defalut는 <code>application/json</code>이 아니라 <code>application/x-www-form-urlencoded</code>이다.</p>
</blockquote>
<h4 id="applicationx-www-form-urlencoded">application/x-www-form-urlencoded</h4>
<pre><code class="language-java">Content-Type: application/x-www-form-urlencoded

name=kim&amp;age=27

//요청 : key1=value1&amp;key2=value2의 형식으로</code></pre>
<h4 id="applicationjson">application/json</h4>
<pre><code class="language-java">Content-Type: application/json

{
    &quot;name&quot;:&quot;kim&quot;,
    &quot;age&quot;:&quot;27&quot;
}

//요청 : 위의 형식으로</code></pre>
<br>

<h2 id="spring에서-post-요청-받기">Spring에서 POST 요청 받기</h2>
<p>보통 <code>RestAPI</code>에서 POST 요청을 받을 때 data가 <code>json 형식</code>으로 body에 들어있다고 가정한다.
따라서 body에서 json 객체를 꺼내어 dto로 받기 위해서 백엔드에서 아래와 같은 코드를 짜게 된다.</p>
<pre><code class="language-java">@PostMapping(value = &quot;/new&quot;)
public String post(@RequestBody Person person){

    log.info(&quot;person : {}&quot;, person);

    return person.toString();
}</code></pre>
<p>그런데, 프론트에서 Content-Type을 <code>application/json</code>을 추가해서 보내지 않으면 <strong><code>415 error</code> *<em>가 발생한다.
프론트에서 오류를 해결하는 방법은 *</em><code>Content-Type을 application/json</code></strong>으로 보내는 것</p>
<h4 id="그럼-우리는-백엔드에서-오류를-해결하는-방법을-알고있어야-한다-"><em>그럼, 우리는 백엔드에서 오류를 해결하는 방법을 알고있어야 한다 !</em></h4>
<br>

<h2 id="백엔드에서-해결">백엔드에서 해결</h2>
<p><code>@RequestBody</code>나 <code>@ModelAttribute</code>, <code>@RequestParam</code> 등의 어노테이션을 사용하면
AnnotationMethodHandlerAdapter에 의해 등록된다.
<br></p>
<h3 id="1-requestbody-person">(1) @RequestBody Person</h3>
<blockquote>
<p>model 객체 앞에 이 어노테이션을 붙이고 JSON 형식의 데이터가 들어오면 해당 json 데이터를 jackson 라이브러리를 사용하여 model 객체로 변환해준다.
-&gt; 당연히 Content-Type은 application/json</p>
</blockquote>
<pre><code class="language-java">@PostMapping(value = &quot;/new&quot;)
public String post(@RequestBody Person person){

    log.info(&quot;person : {}&quot;, person);

    return person.toString();
}</code></pre>
<h3 id="2-requestbody-multivaluemapstring-string">(2) @RequestBody MultiValueMap&lt;String, String&gt;</h3>
<blockquote>
<p>MultiValueMap과 함께 어노테이션을 붙이면 application/x-www-form-urlencoded로 정의된 폼 데이터를 주고 받을 때 사용한다.
-&gt; Content-Type은 application/x-www-form-urlencoded</p>
</blockquote>
<pre><code class="language-java">@PostMapping(value = &quot;/new&quot;)
public String post(@RequestBody MultiValueMap&lt;String, String&gt; data){

    log.info(&quot;data : {}&quot;, data);

    return data.toString();
}</code></pre>
<h3 id="3-modelattribute-person">(3) @ModelAttribute Person</h3>
<blockquote>
<p>model 객체와 함께 @ModelAttribute를 사용하면 key=value를 model로 converting 하게 된다. 앞에 어노테이션을 붙이지 않아도 암묵적으로 사용된다.
-&gt; Content-Type은 application/x-www-form-urlencoded</p>
</blockquote>
<pre><code class="language-java">@PostMapping(value = &quot;/new&quot;)
public String post(Person person){

    log.info(&quot;data : {}&quot;, data);

    return data.toString();
}</code></pre>
<h3 id="4-두-가지-요청-방식">(4) 두 가지 요청 방식</h3>
<blockquote>
<p>모든 요청을 x-www-urlencoded로 받고 있는 상황에서 json 방식을 추가로 제공해야 하는 상황에 있다면 두 개의 메소드를 만들어주면 된다. 첫번째 메소드는 form-urlencoded 타입, 두번째 메소드는 json 타입을 받는다.</p>
</blockquote>
<pre><code class="language-java">// form-urlencoded 타입
@PostMapping(value = &quot;/new&quot;, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String postFormRequest(Person person){

    log.info(&quot;form type : person : {}&quot;, person);

    return person.toString();
}

// json 타입
@PostMapping(value = &quot;/new&quot;, consumes = MediaType.APPLICATION_JSON_VALUE)
public String postjSONRequest(@RequestBody Person person){

    log.info(&quot;json type : person : {}&quot;, person);

    return person.toString();
}</code></pre>
<br>

<h3 id="정리하면">정리하면,</h3>
<blockquote>
<p><strong>단순히 <code>POST</code> 방식에서는 <code>@RequestBody</code>를 써야한다거나, 반대로 <code>@ModelAttribute</code>는 <code>GET</code> 방식에서만 쓸 수 있다 라고만 알고 있다면 이러한 오류를 마주쳤을 때 해결하기 힘들 수 있다.</strong>
즉, parameter의 signature 타입과 어노테이션이 AnnotationMethodHandlerAdapter를 통해 알맞는 MessageConverter를 등록한다는 이해가 필요 !</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] JVM (자바 가상 머신)]]></title>
            <link>https://velog.io/@hyerin_story/Java-JVM-%EC%9E%90%EB%B0%94-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0</link>
            <guid>https://velog.io/@hyerin_story/Java-JVM-%EC%9E%90%EB%B0%94-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0</guid>
            <pubDate>Thu, 17 Aug 2023 15:48:23 GMT</pubDate>
            <description><![CDATA[<h2 id="jvm-이란">JVM 이란?</h2>
<p>*<em>Java Virtual Machine, 자바 가상 머신의 약자 *</em></p>
<p>JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다.
Java와 OS(운영체제) 사이에서 중개자 역할을 수행하여 Java가 OS(운영체제)에 구애받지 않고 독립적으로 작동이 가능하다.</p>
<ul>
<li>메모리 관리, Garbage collection을 수행</li>
</ul>
<h3 id="jvm의-특징">JVM의 특징</h3>
<ul>
<li>컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환</li>
<li>스택 기반의 가상 머신</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hyerin_story/post/57dc2bc2-4a4c-47e3-8fdc-16428042f4f0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] EC2 구축]]></title>
            <link>https://velog.io/@hyerin_story/AWS-EC2-%EA%B5%AC%EC%B6%95</link>
            <guid>https://velog.io/@hyerin_story/AWS-EC2-%EA%B5%AC%EC%B6%95</guid>
            <pubDate>Mon, 07 Aug 2023 11:09:18 GMT</pubDate>
            <description><![CDATA[<h2 id="1-⭐ec2란">1. ⭐EC2란?</h2>
<ul>
<li>아마존 웹서비스(AWS)에서 제공하는 클라우드 컴퓨팅 서비스</li>
<li>클라우드 컴퓨팅은 인터넷을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공한다.</li>
</ul>
<blockquote>
<p>EC2 서비스는 AWS에서 비용, 성능, 용량면에서 탄력적인 클라우드 컴퓨터를 제공하는 서비스
-&gt; <code>AWS에서 독립된 컴퓨터를 임대해주는 서비스</code></p>
</blockquote>
<h4 id="ec2-장점">EC2 장점</h4>
<ul>
<li>하드웨어 구매없이 더 빠르게 애플리케이션을 개발하고 배포할 수 있다.</li>
<li>원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능</li>
<li>요구사항이나 갑작스러운 트래픽 증가 등 변동 사항에 따라 신속하게 규모 확장하거나 축소 가능
  -&gt; 즉, 트래픽 예측 필요성이 줄어든다.</li>
</ul>
<h3 id="1-1-ec2-특징">1-1. EC2 특징</h3>
<ol>
<li>컴퓨팅 요구사항의 변화에 따라 컴퓨팅 파워를 조정</li>
<li>실제로 사용한 용량만큼 지불</li>
<li>OS 선택이 쉽게 가능 (Linux or Window)</li>
<li>몇분이면 전세계에 컴퓨터 수백여대 생성 가능</li>
<li>머신러닝, 웹서버, 게임서버, 이미지 처리 등 다양한 용도에 최적화된 서버를 쉽게 구성 가능</li>
<li>여러 다른 AWS 서비스와의 유기적인 연동 가능</li>
</ol>
<h2 id="2-⭐ec2-구축">2. ⭐EC2 구축</h2>
<blockquote>
<ol>
<li>AWS 회원가입 진행
<a href="https://aws.amazon.com/ko/free/?all-free-tier.sort-by=item.additionalFields.SortRank&amp;all-free-tier.sort-order=asc&amp;awsf.Free%20Tier%20Types=*all&amp;awsf.Free%20Tier%20Categories=*all">AWS 회원가입</a></li>
</ol>
</blockquote>
<ul>
<li>프리티어 요금제는 한도 내에서 무료로 AWS 서비스 사용 가능</li>
</ul>
<blockquote>
<ol start="2">
<li>위치 <code>서울</code>로 설정
<img src="https://velog.velcdn.com/images/hyerin_story/post/c0defd37-cc49-48cd-8f8b-b9212fe67af0/image.png" alt=""></li>
</ol>
</blockquote>
<blockquote>
<ol start="3">
<li>EC2 찾아서 클릭 후 -&gt; <code>인스턴스 시작</code>
<img src="https://velog.velcdn.com/images/hyerin_story/post/877ab59d-85ec-4c40-b17e-83df3ab0c21f/image.png" alt=""></li>
</ol>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] for문의 종류 - for, 향상된 for]]></title>
            <link>https://velog.io/@hyerin_story/Java-for%EB%AC%B8%EC%9D%98-%EC%A2%85%EB%A5%98-for-%ED%96%A5%EC%83%81%EB%90%9C-for</link>
            <guid>https://velog.io/@hyerin_story/Java-for%EB%AC%B8%EC%9D%98-%EC%A2%85%EB%A5%98-for-%ED%96%A5%EC%83%81%EB%90%9C-for</guid>
            <pubDate>Mon, 07 Aug 2023 09:24:50 GMT</pubDate>
            <description><![CDATA[<h1 id="for문">for문</h1>
<h2 id="1-기본-for문">1) 기본 for문</h2>
<pre><code class="language-java">// for문 사용 방법
for( 초기식; 조건식; 증감식 ){

    // 조건식이 true일 경우 수행
    System.out.println(&quot;출력하고자 하는 내용&quot;);  

}

// 기본 for문 예제
List&lt;String&gt; list = new ArrayList&lt;&gt;();
list.add(&quot;1번&quot;);
list.add(&quot;2번&quot;);
list.add(&quot;3번&quot;);

for (int i = 0; i &lt; list.size(); i++) {
    System.out.println(list.get(i));
}</code></pre>
<h2 id="2-향상된-for문">2) 향상된 for문</h2>
<pre><code class="language-java">// 향상된 for문 예제
List&lt;String&gt; list = new ArrayList&lt;&gt;();
list.add(&quot;1번&quot;);
list.add(&quot;2번&quot;);
list.add(&quot;3번&quot;);

for( String str : list ){
    System.out.println(str);
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] Collection Framework 이란?]]></title>
            <link>https://velog.io/@hyerin_story/Java-Collection-Framework-%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@hyerin_story/Java-Collection-Framework-%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Mon, 07 Aug 2023 09:00:43 GMT</pubDate>
            <description><![CDATA[<h2 id="1-collection-framework">1. Collection Framework</h2>
<blockquote>
<p>데이터 집합/그룹을 의미하며 객체들을 한곳에 모아 관리하고, 편하게 사용하기 위해 제공되는 환경</p>
</blockquote>
<br>

<h4 id="collection-종류">collection 종류</h4>
<ul>
<li>List</li>
<li>Map</li>
<li>Set</li>
<li>Stack</li>
<li>Queue</li>
</ul>
<h3 id="collection을-사용하는-이유">collection을 사용하는 이유?</h3>
<blockquote>
<ul>
<li>다수의 data를 다루는데 표준화된 클래스들을 제공하기 때문에 자료구조를 직접 구현하지 않고 편하게 사용 가능</li>
</ul>
</blockquote>
<ul>
<li>객체를 보관하기 위한 공간을 미리 정하지 않아도 되므로, 상황에 따라 객체의 수를 동적으로 정할 수 있음</li>
</ul>
<br>

<h3 id="1-1-list">1-1. List</h3>
<p><code>ArrayList</code> <code>LinkedList</code></p>
<blockquote>
<p><strong><code>순서가 있는 데이터 집합, 데이터 중복 허용</code></strong></p>
<blockquote>
<p><strong>ArrayList</strong>
배열로 구현된 List
단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어서 조회 기능 성능에 뛰어나다.
<strong>LinkedList</strong>
노드의 주소를 기억하고 있는 List
양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 된다.</p>
</blockquote>
</blockquote>
<br>

<h3 id="1-2-map">1-2. Map</h3>
<p><code>HashMap</code> <code>HashTable</code> <code>TreeMap</code></p>
<blockquote>
<p><strong><code>key - value 의 쌍으로 이루어진 데이터 집합, 데이터 순서 보장 x</code></strong></p>
<blockquote>
<p><strong>HashMap</strong>
가장 일반적으로 사용
key 값에 해시함수를 적용하여 나온 인덱스에 value를 저장</p>
</blockquote>
</blockquote>
<br>

<h3 id="1-3-set">1-3. Set</h3>
<p><code>HashSet</code> <code>TreeSet</code></p>
<blockquote>
<p>value에 중복된 값을 저장하지 않는다. Map의 key-value 구조에서 key 대신 value가 들어감
<strong><code>순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용 x</code></strong></p>
<blockquote>
<p><strong>HashSet</strong>
value가 포함되어 있는지 아닌지만 관심이 있다.
가장 빠른 임의 접근 속도이고, 순서를 예측할 수 없다.</p>
</blockquote>
</blockquote>
<br>

<h3 id="1-4-stack--queue">1-4. Stack &amp; Queue</h3>
<blockquote>
<p><strong>Stack :</strong> 직접 new 연산자로 객체를 생성하여 사용 가능
<strong>Queue :</strong> new 연산자로 객체를 생성함으로써 사용 가능</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] JVM (자바 가상 머신)]]></title>
            <link>https://velog.io/@hyerin_story/Java-JVM-%EC%9E%90%EB%B0%94-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0-98jayjbl</link>
            <guid>https://velog.io/@hyerin_story/Java-JVM-%EC%9E%90%EB%B0%94-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0-98jayjbl</guid>
            <pubDate>Sun, 06 Aug 2023 15:02:34 GMT</pubDate>
            <description><![CDATA[<h2 id="jvm-이란">JVM 이란?</h2>
<h4 id="java-virtual-machine-자바-가상-머신의-약자-">*<em>Java Virtual Machine, 자바 가상 머신의 약자 *</em></h4>
<p>JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다.
Java와 OS(운영체제) 사이에서 중개자 역할을 수행하여 Java가 OS(운영체제)에 구애받지 않고 독립적으로 작동이 가능하다.</p>
<blockquote>
<p><em><strong>즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터</strong></em></p>
</blockquote>
<ul>
<li>메모리 관리, Garbage collection을 수행</li>
</ul>
<h3 id="jvm의-특징">JVM의 특징</h3>
<ul>
<li>컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환</li>
<li>스택 기반의 가상 머신</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hyerin_story/post/57dc2bc2-4a4c-47e3-8fdc-16428042f4f0/image.png" alt=""></p>
<h4 id="원시코드-java-는-cpu가-인식하지-못하기-때문에-기계어로-컴파일을-해줘야-한다">원시코드( <code>*.java</code> )는 CPU가 인식하지 못하기 때문에 기계어로 컴파일을 해줘야 한다.</h4>
<p>-&gt; 하지만, Java는 <code>JVM</code> 이라는 가상머신을 거쳐서 OS에 도달하므로 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 <code>Java bytecode (*.class)</code>로 변환된다.</p>
<blockquote>
<p><code>*.java</code> -&gt; <code>Java Compiler (변환)</code> -&gt; <code>*.class (Java bytecode)</code></p>
</blockquote>
<p>변환된 bytecode는 기계어가 아니므로 OS에서 바로 실행되지 않는다 !
-&gt; 이때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다.</p>
<h4 id="그래서-os에-종속적이지-않고-java-파일-하나만-만들면-어느-디바이스든-jvm-위에서-실행할-수-있다">그래서 OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다.</h4>
<h3 id="java-bytecode">Java bytecode</h3>
<blockquote>
<p>JVM이 이해할 수 있는 언어로 변환된 자바 소스코드</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] OOP(객체 지향 프로그래밍) ]]></title>
            <link>https://velog.io/@hyerin_story/Java-OOP%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</link>
            <guid>https://velog.io/@hyerin_story/Java-OOP%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</guid>
            <pubDate>Sun, 06 Aug 2023 14:51:56 GMT</pubDate>
            <description><![CDATA[<h2 id="1-oop-이란">1. OOP 이란?</h2>
<p>Object Oriented Programming의 줄임말</p>
<blockquote>
<p>객체 지향 프로그래밍은 현실 세계의 사물을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징을 뽑아와서 프로그래밍 하는 것이다.
-&gt; <code>추상화</code></p>
</blockquote>
<h4 id="프로그래밍에서-필요한-데이터를-추상화시켜서-상태와-행위를-가진-객체로-만들고-그-객체-간의-상호-작용을-통해-로직을-구성하는-방법을-의미">프로그래밍에서 필요한 데이터를 추상화시켜서 상태와 행위를 가진 객체로 만들고, 그 객체 간의 상호 작용을 통해 로직을 구성하는 방법을 의미</h4>
<h3 id="1-장점">1) 장점</h3>
<ul>
<li>다른 클래스를 가져와 사용할 수 있고, 상속을 받을 수 있으므로 코드의 재사용성 증가</li>
<li>자주 사용되는 로직을 라이브러리로 만들어서 신뢰성 확보 가능</li>
<li>객체 단위로 코드가 나눠져 작성되므로 디버깅이 쉽고, 유지보수가 용이</li>
</ul>
<h3 id="2-단점">2) 단점</h3>
<ul>
<li>처리 속도가 느림</li>
<li>객체가 많아지면 용량이 커짐</li>
<li>설계할 때 많은 노력과 시간이 필요</li>
</ul>
<h2 id="2-객체-지향-특징">2. 객체 지향 특징</h2>
<h3 id="1-캡슐화">1) 캡슐화</h3>
<blockquote>
<p>코드 재활용하는 것을 목적으로 한다.
클래스라는 캡슐에 기능과 특성을 담는다.</p>
</blockquote>
<h3 id="2-상속">2) 상속</h3>
<blockquote>
<p>클래스로부터 즉, 부모로부터 속성과 메서드를 물려받는다.
다른 클래스를 가져와 사용할 때, 그 클래스를 직접 수정하는 대신 상속을 받아 변경하고자 하는 부분만 변경하면 된다.</p>
</blockquote>
<h3 id="3-추상화">3) 추상화</h3>
<blockquote>
<p>불필요한 정보 외 중요한 정보만 표현함으로써 공통의 속성과 기능을 묶어 이름을 붙이는 것이다.</p>
</blockquote>
<h3 id="4-다형성">4) 다형성</h3>
<blockquote>
<p>하나의 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있다.
<code>오버 라이딩</code>, <code>오버로딩</code></p>
</blockquote>
<h2 id="3-oop의-5가지-설계-원칙-solid">3. OOP의 5가지 설계 원칙 (SOLID)</h2>
<h3 id="1-srp-single-responsibility-principle">1) SRP (Single Responsibility Principle)</h3>
<blockquote>
<p><code>단일 책임 원칙</code>
클래스는 단 하나의 책임을 가지고, 그에 대한 책임을 져야 한다.</p>
</blockquote>
<h3 id="2-ocp-open-close-principle">2) OCP (Open Close Principle)</h3>
<blockquote>
<p><code>개방-폐쇄 원칙</code>
확장에는 열려있어야 하고, 변경에는 닫혀 있어야 한다.
-&gt; 즉, 클래스를 상속하여 수정한다.</p>
</blockquote>
<h3 id="3-lsp-liskov-substitution-principle">3) LSP (Liskov Substitution Principle)</h3>
<blockquote>
<p><code>리스 코프 치환 원칙</code>
상위 타입의 객체를 하위 타입의 객체로 지환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
-&gt; 즉, 자식 클래스를 사용중일 때, 거기에 부모 클래스로 치환하여도 문제가 없어야 한다.</p>
</blockquote>
<h3 id="4-isp-interface-segregation-principle">4) ISP (Interface Segregation Principle)</h3>
<blockquote>
<p><code>인터페이스 분리 원칙</code>
각 행위에 대한 인터페이스는 서로 분리되어야 한다.</p>
</blockquote>
<h3 id="5-dip-dependency-inversion-principle">5) DIP (Dependency Inversion Principle)</h3>
<blockquote>
<p><code>의존 역전 원칙</code>
상위 클래스가 하위 클래스에 의존하면 안 된다는 법칙</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring boot] JPA ddl-auto 옵션]]></title>
            <link>https://velog.io/@hyerin_story/Spring-boot-JPA-ddl-auto-%EC%98%B5%EC%85%98</link>
            <guid>https://velog.io/@hyerin_story/Spring-boot-JPA-ddl-auto-%EC%98%B5%EC%85%98</guid>
            <pubDate>Wed, 19 Jul 2023 16:45:28 GMT</pubDate>
            <description><![CDATA[<h3 id="개요">개요</h3>
<p>JPA의 인터페이스 중의 하나인 Hibernate는 엔티티만 등록해놓으면 데이터베이스 DDL을 자동으로 작성하여 테이블을 생성하거나 수정할 수 있다.</p>
<blockquote>
<p>Entity에 테이블을 매핑하면 쿼리문을 사용하지 않고, 값 추출이 가능하다.
=&gt; 추출하는 방법은 <code>ddl-auto 옵션</code>을 사용하면 된다.</p>
</blockquote>
<h3 id="ddl-auto-종류">ddl-auto 종류</h3>
<h4 id="springjpahibernateddl-auto종류">spring.jpa.hibernate.ddl-auto=종류</h4>
<blockquote>
</blockquote>
<ul>
<li><code>create</code></li>
<li><code>create-drop</code></li>
<li><code>update</code></li>
<li><code>validate</code></li>
<li><code>none(default)</code></li>
</ul>
<h3 id="create">create</h3>
<h4 id="springjpahibernateddl-autocreate">spring.jpa.hibernate.ddl-auto=create</h4>
<blockquote>
<p>엔티티로 등록된 클래스와 매핑되는 테이블을 자동으로 생성(create)</p>
</blockquote>
<p>이 과정에서 기존에 해당 클래스와 매핑되는 테이블이 존재한다면 기존 테이블은 삭제되고, 다시 테이블을 생성하게 된다.</p>
<pre><code>drop table if exists member cascade
Hibernate:

    create table member (
           member_id bigint not null,
        address varchar(255),
        email varchar(255),
        name varchar(255),
        password varchar(255),
        phone_number varchar(255),
        primary key (member_id)
    )
 // 실행 시
 Hibernate:

     drop table if exists member cascade</code></pre><h3 id="update">update</h3>
<h4 id="springjpahibernateddl-autoupdate">spring.jpa.hibernate.ddl-auto=update</h4>
<blockquote>
<p>엔티티로 등록된 클래스와 매핑되는 테이블이 없으면 새로 생성하는 것은 create와 동일하지만 기존 테이블이 존재한다면 위의 두 경우와 달리 테이블의 컬럼을 변경</p>
</blockquote>
<p>기존에 존재하는 컬럼의 속성은 건드리지 않고, 새로운 컬럼이 추가되는 변경사항만 반영한다.</p>
<blockquote>
<p>개발 초기에는 create 또는 update 옵션을 이용하고 추후에 validate로 옵션을 설정해주는 것이 좋다 !</p>
</blockquote>
<p>ddl-auto 내용을 update한다면, 프로그램을 재시작하더라도 데이터가 사라지지 않습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] Break문, Continue문]]></title>
            <link>https://velog.io/@hyerin_story/JAVA-Break%EB%AC%B8-Continue%EB%AC%B8</link>
            <guid>https://velog.io/@hyerin_story/JAVA-Break%EB%AC%B8-Continue%EB%AC%B8</guid>
            <pubDate>Mon, 17 Jul 2023 02:28:24 GMT</pubDate>
            <description><![CDATA[<h3 id="🟡break문">🟡Break문</h3>
<blockquote>
<p><code>반복문 탈출</code>할 때 쓰는 명령문
-&gt; switch ~ case 구문, for/while 구문</p>
</blockquote>
<h4 id="break문에서-제일-중요한-핵심은-제일-인접한-반복문-탈출이다">break문에서 제일 중요한 핵심은 제일 인접한 반복문 탈출이다.</h4>
<blockquote>
<p>즉, 중첩된 반복문은 제일 가까운 반복문을 나가게 된다.</p>
</blockquote>
<h4 id="break문-예시">break문 예시</h4>
<pre><code class="language-java">while(true) {
    System.out.print(&quot; &quot; + a);
    if(a == 10) {
        break;         // 반복문 탈출
    }
    a++;            
}</code></pre>
<pre><code>0 1 2 3 4 5 6 7 8 9 10</code></pre><p>💡만약, 예시에서 바깥쪽 무한루프가 하나 더 있다면?
-&gt; 안쪽의 while(true)의 탈출할 수 있지만 break를 바깥쪽 반복에도 명시해주지 않으면 무한루프를 빠져나가지 못하고 반복문을 계속 돌게 된다.</p>
<h3 id="🟡continue문">🟡Continue문</h3>
<blockquote>
<p>반복문을 다시 처음으로 돌린다.
-&gt; 즉, continue를 만나면 밑에 있는 명령문을 실행하지 않고 다시 반복문으로 올라가게 된다.</p>
</blockquote>
<p><span style="color:red;">단, 값이 초기화되지 않음 ! </span></p>
<h4 id="continue-예시">Continue 예시</h4>
<pre><code class="language-java">for (int i = 0; i &lt; 10; i++) {
    if (i == 5) {
        continue;
    }
    System.out.print(i + &quot; &quot;);
}</code></pre>
<pre><code>0 1 2 3 4 6 7 8 9</code></pre><pre><code class="language-java">// continue문이 우연으로 break처럼 돌아가는 코드같지만 우연의 일치일뿐 continue와 break 역할 명확히 체크!
for(int i = 0; i &lt; 6; i++) {
    if(i == 5) {
        continue;
    }
    System.out.println(i);
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 입/출력 개념]]></title>
            <link>https://velog.io/@hyerin_story/JAVA-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@hyerin_story/JAVA-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Sun, 16 Jul 2023 15:17:40 GMT</pubDate>
            <description><![CDATA[<p>모든 프로그램의 기본은 입출력(I/O)이다. 변수의 담긴 값이나 문자열을 확인하거나, 데이터를 입력받아 코드를 수행하도록 할 수 있다.
java에서 어떤 방식으로 프로그램에 입출력 하는지 알아보자.</p>
<h3 id="👉출력-메소드">👉<strong>출력 메소드</strong></h3>
<blockquote>
<p><em><strong>변수의 값이나 문자열을 확인</strong></em>
-&gt; <code>System.out.print()</code>, <code>System.out.println()</code>, <code>System.out.printf()</code></p>
</blockquote>
<h4 id="systemoutprint">System.out.print()</h4>
<blockquote>
<p>소괄호 안의 내용을 단순 출력, <strong><code>개행(줄바꿈) x</code></strong></p>
</blockquote>
<pre><code class="language-java">System.out.print(&quot;Hello&quot;);
System.out.print(&quot; &quot;);
System.out.print(&quot;java!&quot;);</code></pre>
<pre><code>Hello java!</code></pre><h4 id="systemoutprintln">System.out.println()</h4>
<blockquote>
<p>소괄호 안의 내용을 단순 출력, <strong><code>개행(줄바꿈) O</code></strong></p>
</blockquote>
<pre><code class="language-java">System.out.println(&quot;Hello&quot;);
System.out.println(&quot;World&quot;);
System.out.print(&quot;java\n&quot;);    //println(), \n 같은 의미
System.out.print(&quot;!!&quot;);</code></pre>
<pre><code>Hello
World
java
!!</code></pre><h4 id="systemoutprintf">System.out.printf()</h4>
<blockquote>
<p><code>형식지정자</code>를 이용해서 변수의 값을 다양한 형식으로 줄력, <strong><code>개행(줄바꿈) X</code></strong>
<code>%d(정수), %c(문자), %f(실수), %s(문자열)</code></p>
</blockquote>
<pre><code class="language-java">String str = &quot;Hello Java!&quot;;
System.out.print(&quot;%s&quot;, str);</code></pre>
<pre><code>Hello Java!</code></pre><h3 id="👉입력-메소드">👉입력 메소드</h3>
<blockquote>
<p><strong>Scanner 변수명 = new Scanner(System.in);</strong>
-&gt; import 필요 : import java.util.Scanner;</p>
<blockquote>
<p><strong>문자열 입력 : 변수명.next()
정수 입력 : 변수명.nextInt()
실수 입력 :  변수명.nextFloat()</strong></p>
</blockquote>
</blockquote>
<pre><code class="language-java">import java.util.Scanner;
public class ScannerTest{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print(&quot;숫자 입력 : &quot;)
        int a = sc.nextInt();
        System.out.println(a);
    }
}</code></pre>
<pre><code>숫자 입력 : (입력하기)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring boot] Maven]]></title>
            <link>https://velog.io/@hyerin_story/Spring-boot-Maven</link>
            <guid>https://velog.io/@hyerin_story/Spring-boot-Maven</guid>
            <pubDate>Fri, 14 Jul 2023 10:12:30 GMT</pubDate>
            <description><![CDATA[<h3 id="maven이란">Maven이란?</h3>
<ul>
<li>Java 프로젝트의 빌드를 자동화 해주는 빌드 관리 도구</li>
</ul>
<p>앞에 포스트에서 진행한 프로젝트를 생성하면 <code>src/main/java/***</code> 파일에 들어가보면 설정한 Name을 된 <code>***Application.java</code> 들어간다.</p>
<p>이제 이 소스에 간단한 Hello World 출력하는 예제를 진행한다.</p>
<h4 id="hello-world-출력하기">Hello World 출력하기</h4>
<pre><code class="language-java">@RestController
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    //localhost:8080를 호출하면 helloWorld를 찍어주기 위한 함수
    @RequestMapping(&quot;/&quot;)
    public String helloWorld(){
        return &quot;helloWorld&quot;;
    }

}</code></pre>
<p>이제 실행해보자. 주소창에 <code>localhost:8080</code> 입력한다.</p>
<p><img src="https://velog.velcdn.com/images/hyerin_story/post/ea6d1497-9f94-49a8-accc-d3523d6adb2d/image.png" alt=""></p>
<p>위와 같이 출력되는 것을 볼 수 있다.</p>
]]></description>
        </item>
    </channel>
</rss>