<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>엠마의 개발공부일지</title>
    <link>https://dev-emmababy.tistory.com/</link>
    <description>오답로그 : [내가보려고 만든 오답노트같은 블로그 ]</description>
    <language>ko</language>
    <pubDate>Wed, 26 Aug 2026 14:06:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Emmababy</managingEditor>
    <image>
      <title>엠마의 개발공부일지</title>
      <url>https://tistory1.daumcdn.net/tistory/4314232/attach/aaec8ffabb6c4df2b22c50eafa79ef17</url>
      <link>https://dev-emmababy.tistory.com</link>
    </image>
    <item>
      <title>FCM을 활용한 web push기능 구현</title>
      <link>https://dev-emmababy.tistory.com/157</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;스프링 - 리액트 프로젝트에서 웹으로 push알림 보내기&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;FCM이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Firebase Cloud Messaging(알림push요청을 fcm서버로보내면, 해당 토큰을 가진 유저에게 알림발송)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;실시간 알림을 받을 수 있기때문에, 웹사이트에서 활용하기 좋음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;웹 이외에도 IOS, Android에서도 사용가능(사용방법이 각각 조금씩 다름)&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;FCM을 사용하는 이유?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;비슷한기술로 SSE를 많이 사용하지만, SSE는 단방향통신만 가능하고 FCM은 양방향가능! 추후 확장가능성을 생각할때 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;전체흐름&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FCM은 여러 언어로 구현할 수 있지만, 이 포스팅은 프론트-TS, 백엔드-Springboot기준으로 작성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXVD6i/btr8keRgX7I/gxm856ENq7kkLKEz8jn1z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXVD6i/btr8keRgX7I/gxm856ENq7kkLKEz8jn1z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXVD6i/btr8keRgX7I/gxm856ENq7kkLKEz8jn1z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXVD6i%2Fbtr8keRgX7I%2Fgxm856ENq7kkLKEz8jn1z1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;706&quot; height=&quot;404&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;FE&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;/b&gt;1. FCM사이트에서 프로젝트를 생성하고, 토큰을 요청한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. FCM토큰을 리턴받는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BE&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;4. 토큰은 서버측에서 관리해야하므로 DB에 저장한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 알림발송해야할때 DB에서 토큰을 꺼낸다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 메시지객체에 토큰과 내용을 포함하여 FCM으로 보내면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. FCM에서 토큰 주인에게 바로 web push알람을 보내준다&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;- FE는 FCM사이트(&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://console.firebase.google.com/u/0/&quot;&gt;https://console.firebase.google.com/u/0/&lt;/a&gt;) 코드스니펫을 받아 fcm으로 토큰요청이 가능!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- BE는 FE로부터 토큰을 건네받았다고 가정하고 아래의 설명 진행!&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;부연설명&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;0. FCM을 시작하기위해선 해당 사이트(&lt;a style=&quot;background-color: #ffc1c8;&quot; href=&quot;https://console.firebase.google.com/u/0/&quot;&gt;https://console.firebase.google.com/u/0/&lt;/a&gt;)가입 후 프로젝트를 생성해야함.&lt;/span&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;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;FE : 프로젝트설정 &amp;gt; 일반 &amp;gt; 내 앱 메뉴에서 자바스크립트 코드를 복사하여 FCM으로 토큰요청하여 받는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;BE : 프로젝트설정 &amp;gt; 서비스계정 탭&amp;gt; &lt;b&gt;자바코드(FCM초기화 요청코드)&lt;/b&gt;를 복사하여 빈으로 등록, &lt;b&gt;새 비공개키(json파일)를 다운&lt;/b&gt;받아 프로젝트에 &amp;lsquo;resources&amp;rsquo;경로 바로아래에 저장한다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 백엔드에서는 프로젝트 실행할 때마다 FCM 초기화요청을 FCM서버로 보내야한다. 그래야 그 다음부터 메시지 발송요청을하면 정상적으로 발송됨&lt;/blockquote&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;background-color: #ffc1c8;&quot;&gt;1. 초기화 요청 코드 적용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 초기화는 프로젝트를 실행할때 한번만 실행되면 되므로 설정파일(Webconfig)에 빈으로 등록했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 초기화할때는 나의정보가 포함된상태로 fcm서버에 요청이되는방식인데, 이 정보는 비공개키(json파일)에 포함되어있다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;비공개키(json파일)의 경로를 변수에 저장해두고, 그안에 내용을 InputStream을 이용해 읽어올 수 있도록 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;FirebaseOption부분은 정해진 양식이나, FCM 사이트에서 생성한 프로젝트가 하나일경우 .setProjectId 메서드는 생략해도된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;초기화부분에서 예외가 발생할 수 있으므로 무조건 try-catch로 예외처리를 한다(없으면 에러남!)&lt;/p&gt;
&lt;pre id=&quot;code_1681968521419&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @Value(&quot;${com.blackdragon.fcm.path}&quot;)
    private String fcmPath;
    
	@Bean
    public FirebaseApp initializer() {
        try {
            log.info(&quot;initialized start&quot;);
            InputStream inputStream =
                    new ClassPathResource(fcmPath).getInputStream();

            FirebaseOptions options = FirebaseOptions.builder()
                    .setCredentials(GoogleCredentials.fromStream(inputStream))
                    .setProjectId(&quot;heytossme2&quot;)
                    .build();
            log.info(&quot;initialized completed&quot;);
            return FirebaseApp.initializeApp(options);
        } catch (Exception e) {
            log.error(&quot;error message = {}&quot;, e.getMessage());
        }
        return null;
    }&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;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;2. 메시지발송 메서드를 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;나는 서비스단에 해당 메서드를 정의했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;포인트는 발송되는 이부분! send메서드에 FCM에서 정해놓은 Message형식을 넣어주면 끝!&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;FirebaseMessaging.getInstance().send(message);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Message의 형식에는 사이트(https://firebase.google.com/docs/cloud-messaging/send-message?hl=ko#java)에서 여러활용방법을 찾아볼 수 있지만, 나의경우에는 가장 기본인 &lt;u&gt;&lt;b&gt;알림내용 + FCM토큰&lt;/b&gt;&lt;/u&gt;만 포함했다.(필수이기도하고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그리고 알림내용은 WebPushConfig 객체에서 필요한부분만 추가(알림타이틀, 내용) 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;만약 알림을 보낸내역을 따로 DB에 저장한다면, 발송완료 후 예외가 터지지않을경우에 저장해주면 된다(아래코드참고)&lt;/p&gt;
&lt;pre id=&quot;code_1681969005179&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void sendPush(NotificationRequest request) {
    log.info(&quot;request : &quot; + request.getRegistrationToken());
    WebpushConfig webpushConfig = WebpushConfig.builder()
            .setNotification(new WebpushNotification(request.getTitle(), request.getBody()))
            .build();

    Message message = Message.builder()
            .setWebpushConfig(webpushConfig)
            .setToken(request.getFcmToken())
            .build();

    for (var app : FirebaseApp.getApps()) {
        log.info(&quot;app list = {}&quot;, app.getName());
    }

    try {
        String response = FirebaseMessaging.getInstance().send(message);
        log.info(&quot;response : &quot; + response);
    } catch (FirebaseMessagingException e) {
        log.error(&quot;fcm을 통한 메시지 push 발송 실패&quot;);
        log.error(&quot;error code : &quot; + e.getErrorCode());
        log.error(&quot;error message : &quot; + e.getMessage());
    } catch (Exception e) {
        log.error(&quot;error : &quot; + e.getMessage());
        for (var i : e.getStackTrace()) {
            log.error(&quot;error : {}&quot;, i);
        }
    }

    Notification notification = Notification.builder()
            .message(request.getBody())
            .type(request.getType())
            .readOrNot(false)
            .item(request.getItem())
            .member(request.getMember())
            .build();

    notificationRepository.save(notification);
}&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;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;3. 해당 메서드 호출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이제 필요한 시점에 아래와같이 sendpush메서드를 사용하면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;buyerPush - 이 객체에는 알림을 보낼때 필요한 모든정보를 담아두었다.&lt;/p&gt;
&lt;pre id=&quot;code_1681969445315&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;notificationService.sendPush(buyerPush);&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;&amp;nbsp;&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 style=&quot;width: 100%;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  트러블슈팅&lt;/b&gt;&lt;/h3&gt;
&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;1. Default Error가 발생하는경우&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl2eip/btsbvrfeNba/nQg0fptER5PCGRTuLww0cK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl2eip/btsbvrfeNba/nQg0fptER5PCGRTuLww0cK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl2eip/btsbvrfeNba/nQg0fptER5PCGRTuLww0cK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl2eip%2FbtsbvrfeNba%2FnQg0fptER5PCGRTuLww0cK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;629&quot; height=&quot;59&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;- FCM 프로젝트가 1개일땐 자동으로 Default로 지정, 여러개일땐 각각의 프로젝트id로 지정해줘야하는데 제대로 Initializing이 안되었을 때&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;알림을 받는사람의 토큰값을 잘못저장해놓고 보냈을 때&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;토큰값이 비어있을때&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;2. 메시지 발송 실패&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;발송되는 메시지의 형태를 갖추었다면 특이 에러는 발생하지 않음&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;만약 fcm토큰이 사용 불가가 된다면 아래와 같은 에러 발생&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qiF2N/btsbA5P0h7b/hEu1ayaA3zudyuC2KIrXS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qiF2N/btsbA5P0h7b/hEu1ayaA3zudyuC2KIrXS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qiF2N/btsbA5P0h7b/hEu1ayaA3zudyuC2KIrXS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqiF2N%2FbtsbA5P0h7b%2FhEu1ayaA3zudyuC2KIrXS0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;45&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;3. FCM token의 특징&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;FCM토큰은 만료기간이 없음&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;FCM토큰 사용이 불가한 경우&lt;/b&gt;는 FCM프로젝트를 삭제했거나, 현재 사용하는 프로젝트로 부터 받은 private key가 아닌 다른 프로젝트의 키를사용하지않는경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rArr; 기기 별로 토큰이 발급 되기 때문에, 아무런 생각 없이 기존 토큰을 쓰는 경우가 있음(=나))&lt;/span&gt;&lt;br /&gt;&lt;span&gt;(또는 기존 다른 프로젝트에서 발급 받은 FCM토큰을 교체하지 않고 사용하는 경우&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;FCM 토큰은 기기별 로 발급 됨&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;4. 비공개키(json파일) 경로&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;로컬환경에서 이 파일을 불러오는경로와, 배포환경(AWS, Azure같은..)에서 불러오는 경로는 다름!ㅠㅠ 나의경우는 아래와같았음&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;로컬 : path: src/main/resources/firebase-service-account.json&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;배포환경 : path: file:/home/runner/work/project-BE/project-BE/src/main/resources/firebase-service-account.json&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;나처럼 오래 삽질하지말고, 빠르게익혀서 빠르게 적용하고 다음을 향해 나아가는분이 있길... 바란다&lt;/p&gt;</description>
      <category>Stack/etc</category>
      <category>fcmwebpush</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/157</guid>
      <comments>https://dev-emmababy.tistory.com/157#entry157comment</comments>
      <pubDate>Thu, 6 Apr 2023 14:59:29 +0900</pubDate>
    </item>
    <item>
      <title>Swagger - 프로젝트 문서화 하기</title>
      <link>https://dev-emmababy.tistory.com/156</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Swagger 라이브러리 추가&lt;/p&gt;
&lt;pre id=&quot;code_1674204943122&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    implementation 'io.springfox:springfox-boot-starter:3.0.0'
    implementation 'io.springfox:springfox-swagger-ui:3.0.0'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. application.yml에 설정 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;=&amp;gt; 스프링MVC와 Swagger를 매칭해 주기 위함&lt;/p&gt;
&lt;pre id=&quot;code_1674205122461&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  spring:
    mvc:
      pathmatch:
        matching-strategy: ant_path_matcher&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Swagger 설정파일 추가&lt;/p&gt;
&lt;pre id=&quot;code_1674205772533&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build().apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(&quot;title&quot;)
                .description(&quot;description&quot;)
                .version(&quot;1.0&quot;)
                .build();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 서버 실행 후 http://localhost:8080/swagger-ui/index.html 주소에서 swagger페이지 확인가능&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Swagger페이지 커스텀하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 단순 Error API없애기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API목록중에 내가 만들지않은 Error API가 있을것이다. 그것을 안보이게 하고싶으면 아래의 내용을 참고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Swagger 설정파일에서 apis부분을 any()가 아닌 내 프로젝트명으로 바꿔준다(자바 아래의 패키지명)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; (error api는 내 프로젝트가아닌 spring단에서 만들어진 api이기때문에, 내 프로젝트에서 만들어진것만 쓰겠다는 의미)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCbOUw/btrWP9fEDpK/1e2pZpSMpfPzkDDCkRvGrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCbOUw/btrWP9fEDpK/1e2pZpSMpfPzkDDCkRvGrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCbOUw/btrWP9fEDpK/1e2pZpSMpfPzkDDCkRvGrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCbOUw%2FbtrWP9fEDpK%2F1e2pZpSMpfPzkDDCkRvGrK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;256&quot; height=&quot;107&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1674206400433&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(&quot;com.emma_dev.ohguohgu&quot;))
                .paths(PathSelectors.any())
                .build().apiInfo(apiInfo());
    }&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;&lt;b&gt;2. 특정 경로의 API만 가져오고 싶은경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- path부분에 any()가 아닌 ant()메서드를 사용하여 원하는 경로만 보이게 설정 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 나만 보고싶은 api가 있는경우 설정값을 다르게하여 노출이 안되게 할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1674206750963&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(&quot;com.emma_dev.ohguohgu&quot;))
                .paths(PathSelectors.ant(&quot;/admin/**&quot;))
                .build().apiInfo(apiInfo());
    }&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;&lt;b&gt;3. 각 API에 부가설명 붙이기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 API 맨 오른쪽에 회색글씨로 API메서드 명이 써있는데, 이 부분을 API에 대한 설명으로 교체할 수 있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/stJpu/btrWP82dMJC/BmtbloBS22iKna2t3NuQn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/stJpu/btrWP82dMJC/BmtbloBS22iKna2t3NuQn1/img.png&quot; data-alt=&quot;부가설명 없음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/stJpu/btrWP82dMJC/BmtbloBS22iKna2t3NuQn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FstJpu%2FbtrWP82dMJC%2FBmtbloBS22iKna2t3NuQn1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1202&quot; height=&quot;233&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부가설명 없음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qorHv/btrWQrHe52J/3pJynfCmkuZk1PbKM9UfeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qorHv/btrWQrHe52J/3pJynfCmkuZk1PbKM9UfeK/img.png&quot; data-alt=&quot;부가설명있음(편안)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qorHv/btrWQrHe52J/3pJynfCmkuZk1PbKM9UfeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqorHv%2FbtrWQrHe52J%2F3pJynfCmkuZk1PbKM9UfeK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;237&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부가설명있음(편안)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API에 @ApiOperation을 추가하여 부가설명을 붙일 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4GZlm/btrWPJokk68/IxjSdFNM32uvadjMj11QkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4GZlm/btrWPJokk68/IxjSdFNM32uvadjMj11QkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4GZlm/btrWPJokk68/IxjSdFNM32uvadjMj11QkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4GZlm%2FbtrWPJokk68%2FIxjSdFNM32uvadjMj11QkK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;534&quot; height=&quot;112&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;112&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;아래와같이 각 API명과, 추가 설명을 붙이고싶다면, @ApiOperation 어노테이션에 notes키워드를 추가해주면 된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8QNRB/btrWQslRPwf/8HYWTnCDW1ccsUKZcz38tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8QNRB/btrWQslRPwf/8HYWTnCDW1ccsUKZcz38tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8QNRB/btrWQslRPwf/8HYWTnCDW1ccsUKZcz38tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8QNRB%2FbtrWQslRPwf%2F8HYWTnCDW1ccsUKZcz38tK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1194&quot; height=&quot;191&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m4QmP/btrWQ36RTpZ/lqsTu29eouTgcXFv6dC0NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m4QmP/btrWQ36RTpZ/lqsTu29eouTgcXFv6dC0NK/img.png&quot; data-alt=&quot;이런식으로 구현 못해놓고 얼렁뚱땅 넘어가면 안된다(ㅠㅠ)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m4QmP/btrWQ36RTpZ/lqsTu29eouTgcXFv6dC0NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm4QmP%2FbtrWQ36RTpZ%2FlqsTu29eouTgcXFv6dC0NK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;918&quot; height=&quot;104&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런식으로 구현 못해놓고 얼렁뚱땅 넘어가면 안된다(ㅠㅠ)&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;4. 파라미터로 넘어오는 인자에 대한 설명을 붙이고 싶을때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력해줘야하는 인자의 형식이라던가 설명이 필요할때는 해당 파라미터앞에 @ApiParam어노테이션을 추가하여 value를 입력해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBgCUU/btrWQcp5Uhi/EjvtBCnZwleoUG0eltiXT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBgCUU/btrWQcp5Uhi/EjvtBCnZwleoUG0eltiXT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBgCUU/btrWQcp5Uhi/EjvtBCnZwleoUG0eltiXT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBgCUU%2FbtrWQcp5Uhi%2FEjvtBCnZwleoUG0eltiXT1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1504&quot; height=&quot;417&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k3TUC/btrWQcX00cu/Uuxwb5xveCbuRVLzKp273K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k3TUC/btrWQcX00cu/Uuxwb5xveCbuRVLzKp273K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k3TUC/btrWQcX00cu/Uuxwb5xveCbuRVLzKp273K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk3TUC%2FbtrWQcX00cu%2FUuxwb5xveCbuRVLzKp273K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;689&quot; height=&quot;118&quot; data-origin-width=&quot;689&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Stack/Spring &amp;amp; Springboot</category>
      <category>api문서만들기</category>
      <category>swagger</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/156</guid>
      <comments>https://dev-emmababy.tistory.com/156#entry156comment</comments>
      <pubDate>Fri, 20 Jan 2023 18:56:15 +0900</pubDate>
    </item>
    <item>
      <title>2022년 회고 : Break time</title>
      <link>https://dev-emmababy.tistory.com/155</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;⛔ 재정비 타임&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해 최고의 사건은 아무래도 퇴사 후 각잡고 공부를 시작한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사다닐때 내가 뭘 알고 뭘 모르는지 정말 모르겠어서 고민이 많았다. 체계적인 공부를 하며 맘껏 질문하고 제대로 공부해보는 시간을 갖고싶었다. 당시&amp;nbsp;다니던회사에서는&amp;nbsp;백엔드를&amp;nbsp;해볼수있는기회가&amp;nbsp;전혀없었고,&amp;nbsp;계속&amp;nbsp;다른방향으로&amp;nbsp;가던터라&amp;nbsp;성장의&amp;nbsp;기회를&amp;nbsp;잡기어려웠기때문에&amp;nbsp;지금이라도&amp;nbsp;공부해서&amp;nbsp;진짜&amp;nbsp;내&amp;nbsp;자리에&amp;nbsp;찾아가고싶다는&amp;nbsp;열망이커서&amp;nbsp;퇴사를했다.&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개월의&amp;nbsp;과정중&amp;nbsp;현재&amp;nbsp;4개월을&amp;nbsp;채운상태이고,&amp;nbsp;이&amp;nbsp;순간&amp;nbsp;드는생각은&amp;nbsp;'커리큘럼이&amp;nbsp;진짜&amp;nbsp;괜찮다는것'.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;궁금했던것들이&amp;nbsp;아주&amp;nbsp;체계적이고&amp;nbsp;꼼꼼하게&amp;nbsp;짜여서&amp;nbsp;수업영상으로&amp;nbsp;제공된다.&amp;nbsp;공부를하면서도&amp;nbsp;이것만해서&amp;nbsp;될까?싶은&amp;nbsp;의문이&amp;nbsp;전혀들지않아서&amp;nbsp;좋았다.&amp;nbsp;이&amp;nbsp;과정을&amp;nbsp;다&amp;nbsp;따라가는것만으로도&amp;nbsp;충분할것같아서&amp;nbsp;마음이&amp;nbsp;놓인달까.&amp;nbsp;물론&amp;nbsp;따라가는것자체가&amp;nbsp;힘들긴하지만...&amp;nbsp;그건&amp;nbsp;내가해야할&amp;nbsp;몫이니깐&amp;nbsp;일단&amp;nbsp;따라가는중이다&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달. 프로젝트를 아주 지겹도록 해야하는기간이다.&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; &amp;nbsp;여러가지를해볼테니 해본것중 비슷한거를해야하는상황이오면 땀이 덜나지않을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &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 data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&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;h3 data-ke-size=&quot;size23&quot;&gt;  내 마음을 돌봤던 시간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 1월 1일, 나의 다이어리에 적혀있던 문구는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;'내 마음이 어땠는지 살펴보며, 나를 챙길 줄 아는 내가 되길 바란다'&lt;/i&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;나는 원활하고 무탈하게 하루하루를 보내는걸 아주 많이 선호하기때문에, 내가 좀 손해보더라도 그게 맞다고 생각한다면 묻고 go! 하는 경향이 아주 크다. 그러다보니 나를 못챙기는 상황이 꽤나 많았는데, 그럴때마다 내탓을 했던것같다.&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;/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월에 세우는 목표에 불과했지만, 우연히 만난 책 한권이 내 마음을 평온하게 도와줬다. '나만 이렇게 생각했던건 아니구나, 이렇게 느끼는게 이상한게 아니었구나'등등 너무 사소해서 주변에 말할필요을 못느낀것들, 그리고 궁금했던 것들을 다른사람들은 어떻게 생각하고 살아가는지 알게되서 좋았다.&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;s&gt;+) 읽고 싶은 책 리트스가 생긴것은 덤 &lt;/s&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;
&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;h3 data-ke-size=&quot;size23&quot;&gt; &amp;zwj;♀️ Reboot Time&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사를 퇴사하던 8월즈음, 난 무기력증에 시달렸다.&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;회사그만두고 공부를 시작하기 전에 돈쓰는것도 재미없다는것을 느낀나는 이 사태의 심각성을 느끼고 결단을 내렸다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;대학생 때 이후로 아르바이트는 처음이라 너무떨렸지만, 뭐라도 해서 움직이지않으면 갯벌에 묻히듯이 내 스스로에게 잠식될것만 같아서 필사적으로 열심히 다녔다.&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;내가&amp;nbsp;의도한대로&amp;nbsp;사람들과&amp;nbsp;말하며&amp;nbsp;활발하게&amp;nbsp;일을하니&amp;nbsp;몸은힘들었지만&amp;nbsp;꽤나&amp;nbsp;즐겁다.&amp;nbsp;즉각적으로&amp;nbsp;사람들의&amp;nbsp;피드백이오니까&amp;nbsp;속이&amp;nbsp;후련하달까..?&amp;nbsp;코딩과는&amp;nbsp;다른&amp;nbsp;결의&amp;nbsp;일이라&amp;nbsp;신선한느낌이다.&amp;nbsp;그래도&amp;nbsp;알바할때마다&amp;nbsp;느끼는건,&amp;nbsp;진짜 내&amp;nbsp;일을&amp;nbsp;하며&amp;nbsp;즐거움을&amp;nbsp;느낀다면&amp;nbsp;몇배나&amp;nbsp;더&amp;nbsp;즐겁겠다..!&amp;nbsp;집가서&amp;nbsp;열공해야지!!&amp;nbsp;이런느낌!&amp;nbsp;얼마나&amp;nbsp;좋은&amp;nbsp;선순환인가 &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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  이사&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;나도 나지만 우리 강아지가 이동네를 좋아하는것같아서 너무좋다&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;/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;이 집에서 마음의 안정을 찾은 나는&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;&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;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;2023년에는 좀 더 나아진내가, 좀 더 좋은 회사에 둥지를 틀었으면 하는게 가장 큰 바람이다.&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;/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;앞으로 나의목표는 위대한사람이아니라 존버러이다! &lt;/p&gt;</description>
      <category>마음의소리/후기</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/155</guid>
      <comments>https://dev-emmababy.tistory.com/155#entry155comment</comments>
      <pubDate>Sun, 1 Jan 2023 15:57:29 +0900</pubDate>
    </item>
    <item>
      <title>thymeleaf수정 시, 서버 재시작하지않고 바로 반영하는 방법</title>
      <link>https://dev-emmababy.tistory.com/154</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;thymeleaf코드만 수정하고나서, 서버 재시작없이 바로 반영하는 방법&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;1. maven =&amp;gt; pom.xml&amp;nbsp; &amp;nbsp;/ gradle =&amp;gt; build.gradle에 devtools 의존성 추가&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;compileOnly(&quot;org.springframework.boot:spring-boot-devtools&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. application.yml =&amp;gt; spring 설정 아래에 devtools, thymeleaf관련 설정 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfMsbD/btrT2RCQ1Tr/NajQ3eVzwosNyV8wV9wgn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfMsbD/btrT2RCQ1Tr/NajQ3eVzwosNyV8wV9wgn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfMsbD/btrT2RCQ1Tr/NajQ3eVzwosNyV8wV9wgn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfMsbD%2FbtrT2RCQ1Tr%2FNajQ3eVzwosNyV8wV9wgn0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;218&quot; height=&quot;185&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;185&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 data-ke-size=&quot;size16&quot;&gt;3. 설정화면(단축키 : ctrl + alt + s) -&amp;gt; build,Execution, Deployment &amp;gt; Compiler &amp;gt;&amp;nbsp; Build project automatically 체크!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csFVYl/btrT6Xg5kIg/eMGsSNHCew4rt8dEMe9wyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csFVYl/btrT6Xg5kIg/eMGsSNHCew4rt8dEMe9wyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csFVYl/btrT6Xg5kIg/eMGsSNHCew4rt8dEMe9wyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsFVYl%2FbtrT6Xg5kIg%2FeMGsSNHCew4rt8dEMe9wyk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;679&quot; height=&quot;705&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. edit configuration에서 modify options 클릭 후 아래의 두 설정을 선택하여 적용!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r6Wtu/btrT3p7eHAO/OQcu5mKJhGg58vCBX0hNLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r6Wtu/btrT3p7eHAO/OQcu5mKJhGg58vCBX0hNLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r6Wtu/btrT3p7eHAO/OQcu5mKJhGg58vCBX0hNLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr6Wtu%2FbtrT3p7eHAO%2FOQcu5mKJhGg58vCBX0hNLK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1033&quot; height=&quot;667&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 서버 재시작하면 타임리프 수정내용이 바로 적용되어 보이게 됨!&lt;/p&gt;</description>
      <category>Stack/Spring &amp;amp; Springboot</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/154</guid>
      <comments>https://dev-emmababy.tistory.com/154#entry154comment</comments>
      <pubDate>Tue, 20 Dec 2022 11:49:48 +0900</pubDate>
    </item>
    <item>
      <title>배열   |   이차원배열 회전시키기</title>
      <link>https://dev-emmababy.tistory.com/153</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;▶주어진 2차원배열을 시계방향 90도로 회전시킨 결과를 출력하시오&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NJBL4/btrS1KkAC3Y/yKIeAQg4YjydTukKbtQf20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NJBL4/btrS1KkAC3Y/yKIeAQg4YjydTukKbtQf20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NJBL4/btrS1KkAC3Y/yKIeAQg4YjydTukKbtQf20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNJBL4%2FbtrS1KkAC3Y%2FyKIeAQg4YjydTukKbtQf20%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;162&quot; height=&quot;271&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;271&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;▶Guide&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 그리려고하는 2차원배열의 형태를 머리속으로 그려놓고, 빈 2차원 배열을 만들어준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존배열을 읽어오는 2중 for문을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한줄을 잡아서 어떤 인덱스로 변경되는지 파악해보고, 2중 for문안의 i, j 값을 활용하여 대입해주기&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 전체 배열길이 3과, 내부배열길이 5를 분리해서 생각하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 이중 for문을 그대로 만들어준다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d88m5c/btrS5AnCk4q/eZKqMCCkrAra7UsJTgiqU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d88m5c/btrS5AnCk4q/eZKqMCCkrAra7UsJTgiqU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d88m5c/btrS5AnCk4q/eZKqMCCkrAra7UsJTgiqU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd88m5c%2FbtrS5AnCk4q%2FeZKqMCCkrAra7UsJTgiqU1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;539&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;539&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 data-ke-size=&quot;size16&quot;&gt;&amp;gt; 이 안에서 쓰는 숫자는 i, j 뿐이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; &lt;b&gt;i, j 로 조합하여 만들어지는 숫자 (r) 하나만 계산하면 끝!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 배열의 90도 회전으로인해 &lt;u&gt;00자리에 있는숫자가, 02자리에 찍혀야 한다&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 여기까지는 i, j값만 잘 매칭하면 되서 수월하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 이과정에서 초보는 약간의 수고로움은 있을수밖에 없는것같다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;903&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCopVx/btrS5z95KnL/RdLMJ9swUeANTTw5KXspd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCopVx/btrS5z95KnL/RdLMJ9swUeANTTw5KXspd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCopVx/btrS5z95KnL/RdLMJ9swUeANTTw5KXspd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCopVx%2FbtrS5z95KnL%2FRdLMJ9swUeANTTw5KXspd1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;626&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;903&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; r 계산할때는 새로만들어질 배열을 머릿속으로 그려봐야 이해가잘된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3c0OF/btrS1JF1eIr/notiLCutiwkCmupNobP2r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3c0OF/btrS1JF1eIr/notiLCutiwkCmupNobP2r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3c0OF/btrS1JF1eIr/notiLCutiwkCmupNobP2r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3c0OF%2FbtrS1JF1eIr%2FnotiLCutiwkCmupNobP2r0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;554&quot; height=&quot;539&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;539&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 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 사용된 i, j, r을 새로운 이차원배열에 배치해서 대입해주면 끝!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 확인을 위해 이차원배열로 출력해보기&lt;/p&gt;
&lt;pre id=&quot;code_1670426202784&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public static void main(String[] args) {

        int[][] arr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};
        int[][] arr90 = new int[arr[0].length][arr.length];

        for (int i = 0; i &amp;lt; arr.length; i++) {
            for (int j = 0; j &amp;lt; arr[i].length; j++) {
                int r = arr.length - 1 - i;
                arr90[j][r] = arr[i][j];
            }
        }

        for (int i = 0; i &amp;lt; arr90.length; i++) {
            for (int j = 0; j &amp;lt; arr90[i].length; j++) {
                System.out.print(arr90[i][j]);
            }
            System.out.println();
        }

    }&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코딩테스트준비</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/153</guid>
      <comments>https://dev-emmababy.tistory.com/153#entry153comment</comments>
      <pubDate>Thu, 8 Dec 2022 00:17:47 +0900</pubDate>
    </item>
    <item>
      <title>JSP파일에서 JDBC연결이 안될 때</title>
      <link>https://dev-emmababy.tistory.com/152</link>
      <description>&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;gt; java에서는 db에서 데이터를 잘 가져오지만, jsp파일에서는 아래와 같은 오류가 발생&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sihyV/btrRhI1ImcZ/e1uDcGaQ1XpynqGURKm8j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sihyV/btrRhI1ImcZ/e1uDcGaQ1XpynqGURKm8j0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sihyV/btrRhI1ImcZ/e1uDcGaQ1XpynqGURKm8j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsihyV%2FbtrRhI1ImcZ%2Fe1uDcGaQ1XpynqGURKm8j0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;398&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;896&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;&lt;span&gt;jsp&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; jdbc&lt;/span&gt;&lt;span&gt;연결이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;잘&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안되는경우&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;원인으로는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;두가지로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추려볼수있습니다&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Driver jar파일이 인식안되는경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;경로가 분명하지않아서 인식안되는경우&lt;/span&gt;&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;해결방법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;번의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경우&lt;/span&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;span&gt;WEB-INF lib&lt;/span&gt;&lt;span&gt;폴더에&lt;/span&gt;&lt;span&gt; 본인이 쓰고자 하는 jdbc jar&lt;/span&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;넣어줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf1n6j/btrRddB9l7B/hI1GIaVYgFFBgKZp9O07yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf1n6j/btrRddB9l7B/hI1GIaVYgFFBgKZp9O07yK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf1n6j/btrRddB9l7B/hI1GIaVYgFFBgKZp9O07yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf1n6j%2FbtrRddB9l7B%2FhI1GIaVYgFFBgKZp9O07yK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;353&quot; height=&quot;377&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;377&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;&lt;span&gt;위의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조치로&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;안될경우&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;인텔리제이의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;경우&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;project structure&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;libraries&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;artifacts&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;jdbc jar&lt;/span&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;추가해줌&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;위의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조치에도&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;안될경우&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;톰캣과&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;연관이&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;있을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;있으니&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;jre&lt;/span&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;내부에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;jar&lt;/span&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;추가해줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;톰캣관련해서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;링크참고&lt;/span&gt;&lt;span&gt; -&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://aoeldn.tistory.com/entry/oracle-DB%EC%99%80-%EC%97%B0%EA%B2%B0-%EC%95%88%EB%90%A8No-suitable-driver-found-for-jdbcoraclethinlocalhost1521orcl&quot;&gt;http://aoeldn.tistory.com/entry/oracle-DB%EC%99%80-%EC%97%B0%EA%B2%B0-%EC%95%88%EB%90%A8No-suitable-driver-found-for-jdbcoraclethinlocalhost1521orcl&lt;/a&gt;&lt;span&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;번의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경우&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;상대경로형식&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;St&lt;/span&gt;&lt;span&gt;ring url = &quot;jdbc:sqlite:sqlite.db&quot;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;절대경로형식&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;String url = &quot;jdbc:sqlite:C:/dev/sqlite/sqlite.db&quot;;&lt;/span&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;span style=&quot;background-color: #f6e199;&quot;&gt;상대경로보다는 &lt;b&gt;절대경로&lt;/b&gt;로 바꿔주기&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;gt; jsp에서는 상대경로를 인식못할수있음&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfKYoo/btrRilxX7ew/5NbzEn1RYlxazUNDaTKemK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfKYoo/btrRilxX7ew/5NbzEn1RYlxazUNDaTKemK/img.png&quot; data-alt=&quot;참고이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfKYoo/btrRilxX7ew/5NbzEn1RYlxazUNDaTKemK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfKYoo%2FbtrRilxX7ew%2F5NbzEn1RYlxazUNDaTKemK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;469&quot; height=&quot;246&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;참고이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;현재&amp;nbsp;연결된&lt;b&gt;&amp;nbsp;db파일이&amp;nbsp;어떤경로에서&amp;nbsp;가져오는지&amp;nbsp;정확히&amp;nbsp;확인하기&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;951&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjlknb/btrRfJUlTHk/U1ThY2R3bjTJeAhFtFVlH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjlknb/btrRfJUlTHk/U1ThY2R3bjTJeAhFtFVlH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjlknb/btrRfJUlTHk/U1ThY2R3bjTJeAhFtFVlH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjlknb%2FbtrRfJUlTHk%2FU1ThY2R3bjTJeAhFtFVlH0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;951&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;951&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;</description>
      <category>Stack/대환장 오류 모음집</category>
      <category>JDBC</category>
      <category>jdbc연결안됨</category>
      <category>SQLite</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/152</guid>
      <comments>https://dev-emmababy.tistory.com/152#entry152comment</comments>
      <pubDate>Tue, 15 Nov 2022 15:35:41 +0900</pubDate>
    </item>
    <item>
      <title>[오류해결] npm ERR! Missing script: &amp;quot;start&amp;quot;   : npm start error</title>
      <link>https://dev-emmababy.tistory.com/148</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;size14&quot;&gt;&lt;b&gt;npm create-react-app test 명령어로 새폴더에 리액트 환경을 만들고 나서&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;IDE에서 npm start 명령어 입력하면 아래와 같은 오류가 뜸&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DhJdx/btrHidxfxD3/g8mrbFTO2vMZKGUOF13H9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DhJdx/btrHidxfxD3/g8mrbFTO2vMZKGUOF13H9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DhJdx/btrHidxfxD3/g8mrbFTO2vMZKGUOF13H9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDhJdx%2FbtrHidxfxD3%2Fg8mrbFTO2vMZKGUOF13H9k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;810&quot; height=&quot;273&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;npm&amp;nbsp;ERR!&amp;nbsp;Missing&amp;nbsp;script:&amp;nbsp;&quot;start&quot;&lt;br /&gt;npm&amp;nbsp;ERR!&lt;br /&gt;npm&amp;nbsp;ERR!&amp;nbsp;Did&amp;nbsp;you&amp;nbsp;mean&amp;nbsp;one&amp;nbsp;of&amp;nbsp;these?&lt;br /&gt;npm&amp;nbsp;ERR!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;npm&amp;nbsp;star&amp;nbsp;#&amp;nbsp;Mark&amp;nbsp;your&amp;nbsp;favorite&amp;nbsp;packages&lt;br /&gt;npm&amp;nbsp;ERR!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;npm&amp;nbsp;stars&amp;nbsp;#&amp;nbsp;View&amp;nbsp;packages&amp;nbsp;marked&amp;nbsp;as&amp;nbsp;favorites&lt;br /&gt;npm&amp;nbsp;ERR!&lt;br /&gt;npm&amp;nbsp;ERR!&amp;nbsp;To&amp;nbsp;see&amp;nbsp;a&amp;nbsp;list&amp;nbsp;of&amp;nbsp;scripts,&amp;nbsp;run:&lt;br /&gt;npm ERR!&amp;nbsp;&amp;nbsp;&amp;nbsp;npm run&lt;br /&gt;npm&amp;nbsp;ERR!&amp;nbsp;A&amp;nbsp;complete&amp;nbsp;log&amp;nbsp;of&amp;nbsp;this&amp;nbsp;run&amp;nbsp;can&amp;nbsp;be&amp;nbsp;found&amp;nbsp;in:&lt;br /&gt;npm&amp;nbsp;ERR!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C:\Users\emma\AppData\Local\npm-cache\_logs\2022-07-14T06_28_06_983Z-debug-0.log&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&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;size14&quot;&gt;&lt;u&gt;내 컴퓨터에 설치된 create-react-app의 버전이 낮으면 일어날 수 있는 오류&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그리고, 설치과정에서 내컴퓨터에 어느 경로에서라도 'npm create-react-app'명령어가 적용이되어야하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;무슨이유인지는 모르겠지만 일부 폴더에서만 저 명령어가 적용되었다. 그래서 다른경로에서는 저 명령어 적용이 안되었던 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;size14&quot;&gt;&lt;u&gt;create-react-app을 삭제하고, 재설치하고, 실행하면 된다&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;삭제 : npm uninstall -g create-react-app&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재설치: npm install -g create-react-app&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실행: npx create-react-app test(원하는이름작명)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;에러가 났던 프로젝트는 저 명령어를 실행해도 똑같이 에러난다&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그렇기 때문에 저 명령을 실행하고, 새로 프로젝트를 만들어야한다.&lt;/p&gt;</description>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/148</guid>
      <comments>https://dev-emmababy.tistory.com/148#entry148comment</comments>
      <pubDate>Thu, 14 Jul 2022 15:36:44 +0900</pubDate>
    </item>
    <item>
      <title>[Flexbox]</title>
      <link>https://dev-emmababy.tistory.com/142</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;float - 이미지 / 텍스트를 배치&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tDkgB/btrx18LK6xT/JXKNvspSjtyfYz27VpZukK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tDkgB/btrx18LK6xT/JXKNvspSjtyfYz27VpZukK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tDkgB/btrx18LK6xT/JXKNvspSjtyfYz27VpZukK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtDkgB%2Fbtrx18LK6xT%2FJXKNvspSjtyfYz27VpZukK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;593&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;593&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YrZdy/btrx0MbCTwI/UqG83UjmuUdm1HBloGiJBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YrZdy/btrx0MbCTwI/UqG83UjmuUdm1HBloGiJBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YrZdy/btrx0MbCTwI/UqG83UjmuUdm1HBloGiJBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYrZdy%2Fbtrx0MbCTwI%2FUqG83UjmuUdm1HBloGiJBk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;324&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 288px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;정렬방식&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 68px;&quot; rowspan=&quot;2&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mjofu/btrx5ABavCE/8D9jCXUzn1kLXAUhLa8RH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mjofu/btrx5ABavCE/8D9jCXUzn1kLXAUhLa8RH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mjofu/btrx5ABavCE/8D9jCXUzn1kLXAUhLa8RH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmjofu%2Fbtrx5ABavCE%2F8D9jCXUzn1kLXAUhLa8RH0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1180&quot; height=&quot;234&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 34px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;가로, 세로방향 중심축 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 34px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;flex-direction : row, column, row-reverse&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WtmFd/btrx3ZBqYyX/C9ANHKs8wnYNMbKFse1UmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WtmFd/btrx3ZBqYyX/C9ANHKs8wnYNMbKFse1UmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WtmFd/btrx3ZBqYyX/C9ANHKs8wnYNMbKFse1UmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWtmFd%2Fbtrx3ZBqYyX%2FC9ANHKs8wnYNMbKFse1UmK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;227&quot; height=&quot;101&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;컨텐츠가 가로범위를 넘어가면, 다음줄로 wrapping하는것&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;flex-wrap : nowrap, wrap-reverse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;이 둘을 합친거&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;  flex-flow : row nowrap;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;아이템 배치&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nxZ6P/btrx071wE3S/GxvGAkVllbnxEPHJ5Cv4f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nxZ6P/btrx071wE3S/GxvGAkVllbnxEPHJ5Cv4f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nxZ6P/btrx071wE3S/GxvGAkVllbnxEPHJ5Cv4f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnxZ6P%2Fbtrx071wE3S%2FGxvGAkVllbnxEPHJ5Cv4f1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1169&quot; height=&quot;228&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;배치를 가운데, 오른,왼쪽으로 하는것(중심축배치)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;justify-content&lt;/b&gt; : flex-start, center, space-around, space-between&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xOb91/btrx285YG65/L7AZqdXi23lP8RNGJ4HaO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xOb91/btrx285YG65/L7AZqdXi23lP8RNGJ4HaO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xOb91/btrx285YG65/L7AZqdXi23lP8RNGJ4HaO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxOb91%2Fbtrx285YG65%2FL7AZqdXi23lP8RNGJ4HaO1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;157&quot; height=&quot;73&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;중심축이아닌곳의 배치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;align-items&lt;/b&gt; : center , baseline(텍스트에맞춰 정렬)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1P8Mp/btrx1H2IiVm/9OvQKutNAAICZzyHLhvUv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1P8Mp/btrx1H2IiVm/9OvQKutNAAICZzyHLhvUv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1P8Mp/btrx1H2IiVm/9OvQKutNAAICZzyHLhvUv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1P8Mp%2Fbtrx1H2IiVm%2F9OvQKutNAAICZzyHLhvUv1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;214&quot; height=&quot;112&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;justify-content의 중심축아닌축의 &lt;b&gt;간격&lt;/b&gt; 및 위치&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;align-content&lt;/b&gt; : center, space-around, space-between&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUGv76/btrx0LDKy9y/QigCGGdoueZJ99FcImGKF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUGv76/btrx0LDKy9y/QigCGGdoueZJ99FcImGKF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUGv76/btrx0LDKy9y/QigCGGdoueZJ99FcImGKF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUGv76%2Fbtrx0LDKy9y%2FQigCGGdoueZJ99FcImGKF1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;577&quot; height=&quot;329&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 314px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot; colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgvm94/btrx6YIbyJm/92yZ6hcKAdS3TfmIDjuZF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgvm94/btrx6YIbyJm/92yZ6hcKAdS3TfmIDjuZF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgvm94/btrx6YIbyJm/92yZ6hcKAdS3TfmIDjuZF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdgvm94%2Fbtrx6YIbyJm%2F92yZ6hcKAdS3TfmIDjuZF1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;119&quot; height=&quot;61&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;컨테이너내부의 내용물의 순서를 바꿔준다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;order : 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 80px;&quot; rowspan=&quot;4&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcnogP/btrx6IFA7GI/ScnUoozOirRJQNoTwM9nS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcnogP/btrx6IFA7GI/ScnUoozOirRJQNoTwM9nS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcnogP/btrx6IFA7GI/ScnUoozOirRJQNoTwM9nS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcnogP%2Fbtrx6IFA7GI%2FScnUoozOirRJQNoTwM9nS0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;267&quot; height=&quot;130&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;컨테이너의 크기에따라 꽉차서 늘어나는 정도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;flex-grow : 1 (default : 0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;컨테이너가 작아졌을때 어떻게 행동하는가 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;flex-shrink: 1&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(default : 0)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 114px;&quot; rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIYxH0/btrx6IewUic/D3T6FyUxchjpJv4ZwkkGqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIYxH0/btrx6IewUic/D3T6FyUxchjpJv4ZwkkGqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIYxH0/btrx6IewUic/D3T6FyUxchjpJv4ZwkkGqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIYxH0%2Fbtrx6IewUic%2FD3T6FyUxchjpJv4ZwkkGqK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;268&quot; height=&quot;128&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;flex grow/shrink를 사용하지않았을때 설정된 %에 맞게 채움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 94px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 94px;&quot;&gt;flex-basis: auto(%로 표현)&lt;br /&gt;&amp;nbsp; &amp;nbsp; =&amp;gt; 각각의 item들 안에 %로 표시해준다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot; rowspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;align-self&lt;/b&gt; : 사이드축으로 배치를 옮길때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;center , baseline(텍스트에맞춰 정렬)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이템이 수평으로 나아가므로 main axis는 수평축임&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKIunb/btrx2RwgBkB/GgkaeLb7u2NX9ZPrisc1bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKIunb/btrx2RwgBkB/GgkaeLb7u2NX9ZPrisc1bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKIunb/btrx2RwgBkB/GgkaeLb7u2NX9ZPrisc1bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKIunb%2Fbtrx2RwgBkB%2FGgkaeLb7u2NX9ZPrisc1bk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;622&quot; height=&quot;331&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;585&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Stack/etc</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/142</guid>
      <comments>https://dev-emmababy.tistory.com/142#entry142comment</comments>
      <pubDate>Thu, 31 Mar 2022 14:39:34 +0900</pubDate>
    </item>
    <item>
      <title>git clone받아서 다른컴퓨터에서 react 작업시작하기</title>
      <link>https://dev-emmababy.tistory.com/141</link>
      <description>&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;회사에서 git clone받아서 수정하고 싶은상황&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;size16&quot;&gt;폴더만들어서 거기에 git clone받았더니 이런 에러가 뜬다&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 style=&quot;width: 100%;&quot;&gt;&lt;span&gt;PS&amp;nbsp;C:\Users\emma\Desktop\study\react\TOY1_dogfoodshoppingmall&amp;gt;&amp;nbsp;npm&amp;nbsp;start &lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;gt;&amp;nbsp;coding_apple@0.1.0&amp;nbsp;start &lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;gt;&amp;nbsp;react-scripts&amp;nbsp;start &lt;/span&gt;&lt;br /&gt;&lt;span&gt;node:internal/modules/cjs/loader:936 &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;err; &lt;br /&gt;&amp;nbsp;&amp;nbsp;^ &lt;br /&gt;&lt;br /&gt;Error:&amp;nbsp;Cannot&amp;nbsp;find&amp;nbsp;module&amp;nbsp;'react' &lt;br /&gt;Require&amp;nbsp;stack: &lt;br /&gt;-&amp;nbsp;C:\Users\emma\AppData\Roaming\npm\node_modules\react-scripts\scripts\start.js &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Function.Module._resolveFilename&amp;nbsp;(node:internal/modules/cjs/loader:933:15) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Object.&amp;lt;anonymous&amp;gt;&amp;nbsp;(C:\Users\emma\AppData\Roaming\npm\node_modules\react-scripts\scripts\start.js:43:31) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Module._compile&amp;nbsp;(node:internal/modules/cjs/loader:1103:14) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Object.Module._extensions..js&amp;nbsp;(node:internal/modules/cjs/loader:1155:10) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Module.load&amp;nbsp;(node:internal/modules/cjs/loader:981:32) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Function.Module._load&amp;nbsp;(node:internal/modules/cjs/loader:822:12) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;Function.executeUserEntryPoint&amp;nbsp;[as&amp;nbsp;runMain]&amp;nbsp;(node:internal/modules/run_main:77:12) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at&amp;nbsp;node:internal/main/run_main_module:17:47&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;code:&amp;nbsp;'MODULE_NOT_FOUND', &lt;br /&gt;&amp;nbsp;&amp;nbsp;requireStack:&amp;nbsp;[ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'C:\\Users\\emma\\AppData\\Roaming\\npm\\node_modules\\react-scripts\\scripts\\start.js' &lt;br /&gt;&amp;nbsp;&amp;nbsp;] &lt;br /&gt;}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;551&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4uF7H/btrx1HnmVvT/sFsqMRmz901wE2K4qV1Ykk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4uF7H/btrx1HnmVvT/sFsqMRmz901wE2K4qV1Ykk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4uF7H/btrx1HnmVvT/sFsqMRmz901wE2K4qV1Ykk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4uF7H%2Fbtrx1HnmVvT%2FsFsqMRmz901wE2K4qV1Ykk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;908&quot; height=&quot;551&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;551&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 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;clone을 다 받은상태에서 npm install 명령어를 실행해 줘야 package-json module이 업데이트 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런다음 npm start해보면 잘 실행됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1791&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4um85/btrx06OtuI3/ZKzgkjD83FL9y5QOgGJqiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4um85/btrx06OtuI3/ZKzgkjD83FL9y5QOgGJqiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4um85/btrx06OtuI3/ZKzgkjD83FL9y5QOgGJqiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4um85%2Fbtrx06OtuI3%2FZKzgkjD83FL9y5QOgGJqiK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1791&quot; height=&quot;265&quot; data-origin-width=&quot;1791&quot; data-origin-height=&quot;265&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 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>Stack/대환장 오류 모음집</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/141</guid>
      <comments>https://dev-emmababy.tistory.com/141#entry141comment</comments>
      <pubDate>Thu, 31 Mar 2022 10:31:19 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] JAVA 버전 바꾸는 방법(JDK버전)</title>
      <link>https://dev-emmababy.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 8버전을 쓰다가 11버전으로 변경해야 하는 프로젝트가 생겨서 기록해보는 &quot;버전변경방법&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;인텔리제이에서 6곳을 변경해주면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(5곳 - 버전변경선택 / 1곳 - 원하는 JDK선택)&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Project Structure&lt;/b&gt;창 (단축키 : SHIFT+CTRL+ALT+S)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;* Project&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1) SDK 변경&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2) Language Level 변경&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEMYqo/btrtrX2L7tJ/JLfwdB6AHwiNQuKyX3EAN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEMYqo/btrtrX2L7tJ/JLfwdB6AHwiNQuKyX3EAN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEMYqo/btrtrX2L7tJ/JLfwdB6AHwiNQuKyX3EAN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEMYqo%2FbtrtrX2L7tJ%2FJLfwdB6AHwiNQuKyX3EAN0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1029&quot; height=&quot;331&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;* Module&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 3) Language Level 변경&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XVrHb/btrtrXBIpHB/Uu5TObFcW8LpXmJQYKZytk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XVrHb/btrtrXBIpHB/Uu5TObFcW8LpXmJQYKZytk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XVrHb/btrtrXBIpHB/Uu5TObFcW8LpXmJQYKZytk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXVrHb%2FbtrtrXBIpHB%2FUu5TObFcW8LpXmJQYKZytk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1025&quot; height=&quot;319&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;* SDKs&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 4) 원하는 JDK를 선택한다(JDK는 한 폴더에 모아두는것을 추천!)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X8p3W/btrtwKHUrZq/ry8Bch0UskU1KfnGL5Wqik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X8p3W/btrtwKHUrZq/ry8Bch0UskU1KfnGL5Wqik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X8p3W/btrtwKHUrZq/ry8Bch0UskU1KfnGL5Wqik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX8p3W%2FbtrtwKHUrZq%2Fry8Bch0UskU1KfnGL5Wqik%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1018&quot; height=&quot;343&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;343&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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Project Setting (단축키 : CTRL+ALT+S)&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;* Build,Execution,Deployment&amp;nbsp; -&amp;gt; Build Tools -&amp;gt; Gradle&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;5) Gradle JVM 변경&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NigyC/btrtxppVLkg/xRq4QjXRzcCj2eekH7AOT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NigyC/btrtxppVLkg/xRq4QjXRzcCj2eekH7AOT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NigyC/btrtxppVLkg/xRq4QjXRzcCj2eekH7AOT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNigyC%2FbtrtxppVLkg%2FxRq4QjXRzcCj2eekH7AOT0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;986&quot; height=&quot;707&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;707&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; &amp;nbsp;* Build,Execution,Deployment&amp;nbsp; -&amp;gt; Compiler -&amp;gt; Java Compiler&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;6) Project bytecode version 변경&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg80Lv/btrtwLz0GxC/xUPXEuAPT9uQhTlIGssLrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg80Lv/btrtwLz0GxC/xUPXEuAPT9uQhTlIGssLrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg80Lv/btrtwLz0GxC/xUPXEuAPT9uQhTlIGssLrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg80Lv%2FbtrtwLz0GxC%2FxUPXEuAPT9uQhTlIGssLrk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;982&quot; height=&quot;711&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;711&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 구글링하는일 없게 이번에는 꼭 알아두겠다(다짐 )&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Stack/Java</category>
      <author>Emmababy</author>
      <guid isPermaLink="true">https://dev-emmababy.tistory.com/139</guid>
      <comments>https://dev-emmababy.tistory.com/139#entry139comment</comments>
      <pubDate>Wed, 16 Feb 2022 16:13:20 +0900</pubDate>
    </item>
  </channel>
</rss>