<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>2024-11th.log</title>
        <link>https://velog.io/</link>
        <description>대충 뭐든 먹어요</description>
        <lastBuildDate>Mon, 24 Jun 2024 14:41:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>2024-11th.log</title>
            <url>https://velog.velcdn.com/images/2024-11th/profile/c8253eaf-fbe0-480e-b32e-6c5ac703e4ff/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 2024-11th.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/2024-11th" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[조금씩 발걸음을 찍는 중]]></title>
            <link>https://velog.io/@2024-11th/%EA%B0%84%EB%8B%A8%ED%9A%8C%EA%B3%A01</link>
            <guid>https://velog.io/@2024-11th/%EA%B0%84%EB%8B%A8%ED%9A%8C%EA%B3%A01</guid>
            <pubDate>Mon, 24 Jun 2024 14:41:04 GMT</pubDate>
            <description><![CDATA[<p>언제부턴가 블로그에 기록을 남기는 것에 시간을 너무 투자해버려서 배보다 배꼽이 더 큰 상황이 발생하길래 한동안 일부러 기록을 멈춰봤다. </p>
<p>생각보다는 블로그를 병행할 때나 잠시 멈출때나 결과적으로는 큰 변함이 없길래 다시 복귀했다는 것이 결론인데, 하루 단위보다는 주마다의 회고로 가져가고 중간에 정리하고 싶은 내용만 회고로 남기는게 맞을 것 같다.</p>
<p>제대로 기술블로그로 쓰려했던 Medium보다는 일상을 추가하는 블로그가 여기 벨로그인데, 너무 이벤트적 일상만 남기는 것 같아 지양하기로 마음 먹었음. <del>국토종주, 대전여행 기록도 바이바이</del></p>
<p></br></br></p>
<p>최근 나는 친구와 함께 주간목표를 올리고 주간 회고를 하는 방식으로 네이버카페를 운영하기로 했다. 오늘 업로드한 주간목표 내용은 아래와 같음. 참고로 이름은 거의 실명으로 하기로 했는데 자주 불리는 이름으로 쓰기로 했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/9b345ad2-341d-4a29-8a2f-624b2e2265b5/image.png" alt=""></p>
<p>크게 달라진 점이 있다면 운동시간을 이른 아침으로 바꿨다는 점이다. 오후에 운동시간을 맞추려다보니 생각보다 내 시간을 알차게 쓰질 못해서 오전에 헬스장을 가는 것으로 바꿨음.</p>
<p>혼자서 하면 며칠 하다가 무산될 것 같아서 인원을 모집했는데 생각보다 많이 모여서 나 포함 6명이서 진행하기로 했다. 헬스뿐만 아니라 수영, 러닝, 스트레칭 등 많이 다양했던 것도 신기했던 부분이다.</p>
</br>

<p>기존 목표는 6시 20분에 일어나 30분에 도착하는 것인데 아직까진 7시에 가까스로 도착하고만 있다.
<img src="https://velog.velcdn.com/images/2024-11th/post/86985f6f-1ed6-44e9-b05d-10c3338d14db/image.png" alt=""></p>
<p>오늘도 7시에 찍음 ㅎㅎ</p>
</br>

<p>아무튼 회고는 앞으로 계속 할 예정이고, 매주 주말이나 월요일에 슬쩍 글을 남기고 가지 않을까 싶다. 이번주도 힘내서 달려보자구!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[KPT_1] 2024.06.15.토요일]]></title>
            <link>https://velog.io/@2024-11th/kpt1-sfsrqt4h</link>
            <guid>https://velog.io/@2024-11th/kpt1-sfsrqt4h</guid>
            <pubDate>Fri, 14 Jun 2024 18:49:41 GMT</pubDate>
            <description><![CDATA[<p>오랜만에 돌아왔다!
휴식시간도 충분히 가졌고, 슬슬 다시 본업으로 복귀해야지</p>
</br>

<h3 id="0-플래너-작성">0. 플래너 작성</h3>
<p>기존 플래너는 꾸미지 않으면 정이 가지 않고, 그렇다고 꾸미기엔 배보다 배꼽이 커서 마루 플래너로 구매했었다. 잠깐 공백의 시간동안 이 플래너를 썼었지만 이를 모두 기록으로 남기기엔 미뤄둔걸 하다보면 하루하루를 놓칠 것 같아 현재에 집중해볼 생각이다. 과거의 투두는 언젠가 여유가 더 있을 때 아마 쓰지 않을까 싶음. </p>
<p></br></br></p>
<p>우선 오늘은 워밍업 단계로 백준 새 계정을 만들어 10문제 이상 푸는 것으로 목표를 잡았다. 이후 더 많은 계획을 세우고 실천해야지.</p>
<p></br></br></p>
<p>이렇게 계획을 세운 이유는.. 전에 회복에만 집중했던 내가 다시 공부에 제대로 손을 잡으니, 이전에 공부했던 내용을 꽤나 잃어버렸다는 것을 체감할 수 있었기 때문이었다. 특히 운영체제를 공부하겠다고 공룡책을 펼쳐서 60p까지 쭉 읽어보았을 때. </p>
<p>이해가 안되는 것도 아닌, 그렇다고 이걸 설명할 수준도 아닌 어색함과 익숙함 사이에서 내 머리가 이 이론들을 거부하는 것을 보고 꽤나 충격을 받았다. 그래서 동기들한테 이 얘기를 하며 하소연을 하고 어떻게 공부하면 좋을지에 대해 물어보았더니, 내가 너무 급하게 생각하고 있다 하더라.</p>
<p>늘 효율적인 루트를 밟길 원해서 유명한 혹은 잘 알려지지 않았지만 나에게 도움이 될 그런 정보들을 열심히 모으고 그 정석루트대로 나아가려는 식으로 큰 그림을 그리며 노력했었는데 늘 내가 목표한 기간안에 쉽게 끝낸 적은 거의 없었다. 그걸 나도 인식하고 있어서인지 그 말이 꽤나 와닿았고 좀 더 여유를 가진 채로 임해보고자 했다. 그렇게 나는 &#39;그걸 왜 해요&#39;, &#39;그걸 할 바엔 ~~ 하는게 나을텐데&#39; 라는 생각을 이젠 제쳐두고 가장 후순위로 미뤄두었던 기초자료부터 다시 공부해볼 생각이다.</p>
<p>조금 늦어질지라도 나를 위한 길을 위해 나에게 맞춰 나아가야지 응응</p>
</br>

<p>이런 나의 깨달음속에서 전에 많이 들었던 노래인 <a href="https://www.youtube.com/watch?v=o17P8nviGa0">연습 별로 안 했어요, 50시간 정도</a>를 들으며 초심을 찾아보려 했는데 역시 다시 들어도 공감도 성찰도 한단계 더 할 수 있게 된 것 같다.</p>
<blockquote>
<p>여전히 떨리고
여전히 또 서먹하고
여전히 무뎌지지 않고 처음 같은 조각
수없이 걸어도
낯선 길도 있더라고 (변함없이)
연습 별로 안 했어요, 50시간 정도</p>
</blockquote>
<blockquote>
<p>단단한 쪽도 나이기에
무른 쪽도 나이기에</p>
</blockquote>
<p></br></br></p>
<hr/>

<h3 id="1-ps-1문제-이상-풀기">1. PS 1문제 이상 풀기</h3>
<p>어제 백준 계정을 하나 새로 만들었다.
내 실력은 하찮을 정도로 내려갔는데 늘 플레 4가 적힌 랭크를 보며 내가 아직 그 수준이라는 착각(거의 합리화겠지만)을 끊임없이 하는 것을 보고 이 기회에 계정을 새로 파서 다시 처음부터 해보기로 했다.</p>
<p>근데 새 계정이다보니 솔브닥 배경이나 프로필이 마음에 들지 않아 아직 열려있는 이벤트 문제들을 본계 답을 옮겨 배경을 얻어두었다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/a6eb7852-ab5c-4845-8f8b-a8c693e9f0b6/image.png" alt=""></p>
<p>0문제 해결이 이렇게 반가운 순간이 있었던가. 오늘부터 차근차근 채워야지.
우선 솔브닥 class 문제들로 시작하고 막히는 순간 단계별로 넘어갈 생각이다. </p>
<p></br></br></p>
<p>그렇게 솔브닥 class 1 첫문제를 풀었는데 처음부터 틀렸다.
<img src="https://velog.velcdn.com/images/2024-11th/post/b100060a-3440-4743-b55a-1224366b722f/image.png" alt=""></p>
<p>Java8과 Java11을 잘 설정해두었는데 사이트 오류로 C99가 들어온채로 채점되어버렸다 흐우ㅜ
너무 아쉽긴하지만 그래도 간단한 문제니까 넘어가자..</p>
</br>

<p>1000번. A+B<br>1001번. A-B
1008번. A/B<br>1152번. 단어의 개수 =&gt; <code>st.hasMoreTokens()</code> 메소드를 쓰려면 <code>st.nextToken()</code>으로 빼는 부분이 있어야 한다.
2438번. 별 찍기 - 1
2439번. 별 찍기 - 2
2475번. 검증수
2557번. Hello World
2562번. 최댓값
2577번. 숫자의 개수
10699번. 오늘 날짜 =&gt; <code>Date</code>만 가능할까?    </p>
</br>

<table>
<thead>
<tr>
<th align="center">KPT</th>
<th align="center">내용</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><strong><em>Keep</em></strong></td>
<td align="center">1. 문제의 랭크를 숨긴 채로 문제에 접근했다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">2. IDE 툴을 사용하지 않고도 기본 스니펫을 작성할 수 있었다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><strong><em>Problem</em></strong></td>
<td align="center">1. 문제가 이해되지 않을 때 처음부터 다시 꼼꼼하게 읽지않고, 중간중간 넘기며 빠르게 키워드를 찾으려 했다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">2. 시간복잡도를 계산하지 않았다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">3. 실제 코딩테스트 시험처럼 접근하지 않았다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><strong><em>Try</em></strong></td>
<td align="center">1. 입출력 영역의 용어를 그대로 정리한 후 문제를 읽으며 전체적인 흐름을 잡아야겠다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">2. 시간복잡도를 계산해서 왜 통과할 수 있는지에 대해 명확히 하고 문제풀이로 들어가야겠다.</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">3. 잊어버리지 않도록 개념정리를 명확하게 해야겠다.</td>
</tr>
</tbody></table>
<p></br></br></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[앞으로 내가 해야할 일은]]></title>
            <link>https://velog.io/@2024-11th/kpt0</link>
            <guid>https://velog.io/@2024-11th/kpt0</guid>
            <pubDate>Tue, 28 May 2024 06:29:58 GMT</pubDate>
            <description><![CDATA[<p>꽤 오래 글을 안쓴 것 같은데.. 날짜를 보니 5월 12일까지 기록에 담아뒀다. 그동안 무엇을 하며 살았을까, 하고 커리큘럼을 살펴봤는데</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/7505e5a7-61c8-44bd-a81e-bbb83829dd82/image.png" alt=""></p>
<p>전부 다 1학기 마지막 프로젝트 기간이었다. 그렇게 열심히 만들었던 것 같지는 않은데, 그래도 한건 있으니 프로젝트 진행에 대한 자세한 기록은 나중에 블로그로 끄적일 생각이다.</p>
<p></br></br></p>
<p>뭐 그렇다해도 지금 나에게 온 가장 큰 이벤트는 1학기가 끝났다는 점이다! 비록 계절학기나 여러 이벤트들이 있어서 완전한 방학은 아니지만, 한동안은 그 길을 걷지않아도 된다고 생각하니 굉장히 마음이 편안하다~ 시간으로 따지면 걷기만했을 때 30분도 안되는 거리인데 그 아침에 일어나고 준비해서 가는게 얼마나 버거웠던지...</p>
<p>무엇보다 더 큰 이벤트는 내 건강이 1학기 시작 전과는 차원이 다르게 호전되고 있다는 점이다. 이건 내 출석 현황만 봐도 확인이 가능한데..</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/e22d474a-0c80-47ca-9b9f-2a8b0bd2dbc8/image.png" alt=""></p>
<p>매달 한번씩 병원으로 인한 사유조퇴와 함께 
집에서 나가기가 힘들어 임의지각이 상당하게 찍혀있던 1,2월에서부터 지각을 줄여나가려 이를갈고 어떻게든 몸을 끌고 나갔던 3월, 그리고 조금씩 호전되어 전보다 수월하게 갈 수 있었던 4,5월! 다시봐도 이번연도의 암흑기는 1,2월이었다는 부분이 보인다.</p>
</br>

<p>사실 1학기는 나중에 취업했다는 전제로 회사에 일원이 된다면 아파서 병가를 자주 쓰게 될 것 같아서 기업에 지원을 하지않았다. 물론 네이버는 꿈의 기업이라 서류만이라도 넣어봤지만.. 하여튼 그만큼 회복에만 애썼는데 이제 좀 사람구실?을 할 수 있게 된 것 같아 마음이 놓인다. 이제는.. 정말로 취준생이라는 포지션에 맞게 나의 역량을 제대로 끌어올릴 때가 된 것 같다.</p>
</br>

<p>그런 생각으로 오랜만에 벨로그를 들어와 나의 TIL을 살펴봤는데, 이렇게만 남기는 게 과연 의미가 있는 짓일까 싶었다. 이런 생각이 꽂혔던 가장 큰 계기는 최근 싸피 1학기 종료와 함께 나에게 쓰는 편지를 되돌려받을 때였다. 대부분은 뭐라고 썼는지 기억이 안난다는 말이 들려왔지만 나는 아주 명확하게 뭘 적었었는지를 기억하고 있었다. 대부분이 감성적인 글귀로 편지지를 채울 때 나는 나에게 가장 필요한 말을 남겨두는게 나를 가장 위한 길이라 생각했기에 내가 무엇을 해야했고 나중에 내가 얼마나 나아가 있었는지를 적어두기로 했었다. 그리고 그 편지 내용은 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/39a383c1-bbe0-4a47-aeac-400e1791780c/image.png" alt=""></p>
<p>글을 보면서 참 나답다라는 생각이 들면서도, 취준을 위해 생각했던 과정들은 그때나 지금이나 많이 비슷하다는 것을 더 깨달았던 것 같다.</p>
<p>이 편지(..라기보단 계획이지만)를 읽다보니 늘 같은 목표를 가지고 끝까지 난 달성하지 않는구나 라는 생각이 더 들었다.</p>
<p>그래서 하루하루 회고를 하면 뭐하나, 결국 사람은 어떤 루틴을 따라 타고타고 가다가 돌아올텐데 라는 생각이 들어 나의 회고 방식을 바꿔보기로 했다.</p>
</br>

<p>전에 싸피셜 블로그를 보다 발견한 회고방법이었는데 오랜만에 찾으려 하니 이름이 기억나지가 않았다. KMP, KNT 온갖 오답을 남발하다 KPT를 찾았다.</p>
<p>KPT는 Keep, Problem, Try 이렇게 3가지 관점을 지켜서 회고를 해야했다. 각 키워드에 대한 설명은 아래와 같은데</p>
<ul>
<li>Keep : 내가 잘하고 있어서 계속 했으면 하는 부분</li>
<li>Problem : 개선이 필요하다고 생각한 부분</li>
<li>Try : 그래서 어떻게 시도할 것인지</li>
</ul>
<p>회고의 정체성을 가장 잘 나타낸다고 느껴져서 채택했다.</p>
</br>

<p>방학 주는 일정을 다 잡아두어서 그때는 잠깐 멈칫하겠지만, 장기적으로 꾸준함을 가져가기 위해 제대로 노력해야지!</p>
<p>그리고 이번엔 나의 슬로건처럼 하나씩 바꿔야지
<img src="https://velog.velcdn.com/images/2024-11th/post/e46c9e64-9c33-422d-a268-a17401d5e336/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[10일부터 12일까지의 로그 (스터디/정처기/커트)]]></title>
            <link>https://velog.io/@2024-11th/daily3</link>
            <guid>https://velog.io/@2024-11th/daily3</guid>
            <pubDate>Mon, 13 May 2024 01:36:17 GMT</pubDate>
            <description><![CDATA[<p>저번주 금요일 프로젝트를 시작하면서부터 TIL을 하나도 올리지 못했다. B형특강 일정과 정처기 준비 기간이 겹치면서 다른걸 생각할 겨를이 없었다지..</p>
<p>그래서 TIL이란 이름을 붙이기엔 배운게 없는 듯해(?) 일상 기록으로 이야기나 풀어볼 생각이다.</p>
<p></br></br></p>
<h3 id="5월-10일-금요일">5월 10일 금요일</h3>
<p>이 날은 싸피에서 Vue적용 프로젝트를 하는 날이었다. 이 떄를 기점으로 이후 일주일간 관통 프로젝트를 끝내야하기 때문에 촉박할 듯 싶지만 사실 생각보다 머리를 싸맬 이유는 없었다.</p>
<p>이때까지 다른 언어나 문법을 썼을 뿐이지 틈틈히 같은 주제로 거의 같은 기능을 가진 프로젝트를 해오고 있었기 때문에 페어나 나나 그렇게 할게 없다고 생각했다. 그래서 오늘도 마찬가지로 Vue로 바꾸는건 이미 받은 샘플 프로젝트에서 큰 틀은 가져가고 나머지만 조금 수정해서 제출하기로 했다.</p>
<p>그러다 할게 없어서 로고도 만들고 레이아웃 조금 바꿔보면서 만들었는데, 그럼에도 불구하고 시간이 남았다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/3f2f9186-d969-4e08-87ce-068c3eb5990f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/c1680ffa-aae8-4e34-9275-bdd13537394f/image.png" alt=""></p>
<p>이게 만든 로고인데 생각보다 이상하진 않아서 결과가 나와서 꽤나 만족했었음.</p>
<p>무튼 그렇게 프젝은 빨리 끝내고 서로 정처기 공부를 하며 시간을 보내는 것 같다가 놀게 되긴 했음..</p>
<p>그러다 CS 스터디를 하자는 제안에 재밌을 것 같아 응하고, 스터디가 생각난 김에 다른 싸피생 하나 붙잡고 강의 스터디도 제안했다.</p>
<p>원래 스터디를 2인이서는 잘 하지 않는데, 서로 다른 2인, 2인으로 CS스터디와 강의스터디를 하게 되었음!</p>
<p>한동안 스터디를 안하고 살았는데, 다시 내 일상에 들어오는건가.. 흐으음</p>
<p></br></br></p>
<hr/>

<h3 id="5월-11일-토요일">5월 11일 토요일</h3>
<p>이 날은 B형 특강과 정처기 준비로 거의 하루가 끝났다.</p>
<p>아침에 일어나니 10시여서 가볍게 한시간정도 산책했다. 집에 돌아와서는 슬슬 배가 고파와서 한줄 남겨둔 삼겹살을 구워 쌈채소에 싸먹고 집안일을 좀 하니 12시 반쯤 되었던 것 같다.</p>
<p>시간이 왜이리 빨리지나가냐 툴툴대며 특강들을 세팅을 한 뒤, 시간이 지나 특강을 들었다. 2시간쯤 지났을까 슬슬 졸려서 게임 던전 몇판 좀 돌았고 다시 정신이 차려져서 특강 나머지를 무사히 들을 수 있었다.</p>
<p>그렇게 특강을 마치고 다시 게임 좀 하다가 산책하고 정처기 책을 펼쳐서 공부를 좀 하고 이정도면 된거겠지 생각하며 잠에 들었다.</p>
<p>그냥 무~난히 흘렀던 하루.</p>
<p></br></br></p>
<hr/>

<h3 id="5월-12일-일요일">5월 12일 일요일</h3>
<p>이 날은 이벤트가 많다. 드디어 정처기 공부를 안해도 되는 날이었기 때문!</p>
<p>아침에 좀 게으르게 빈둥거리다 일어났는데 오늘따라 머리가 너무 긴게 아닌가라는 생각이 들었다. 그래서 화장실 거울 앞에서 머리 길이를 봤는데 와.. 허리보다 더 내려가네 쓰읍</p>
<p>정처기 보고 돌아와서 커트나 할까</p>
<p>곱슬이라 레이어드컷이나 허쉬컷을 하면 관리가 어렵다는 것을 알면서도 아이유 허쉬컷을 보며 감상했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/955b0c22-46ca-428b-aeb6-cac159c93ce6/image.png" alt="아이유 허쉬컷"></p>
<p>와아아 진짜 너무 예쁘다ㅜ</p>
<p>검색하다보니 확실히 커트하는게 더 예쁘고 시원해보여서 제대로 자극받았고, 그 기세로 미용실에 2시 반쯤 예약했다. 그 후 준비를 마치고 정처기 응시장소로 향했다.</p>
<p></br></br></p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/71004a92-bc47-493c-a474-78059949349a/image.png" alt="정처기 접수내역"></p>
<p>내가 접수한 곳은 <code>한국IT직업전문학교 양재관(6실)</code> 이었다. 수업 때문에 접수시간을 놓쳐 집에서 가장 가까운 곳으로 하진 못했지만 이 정도 거리면 산책하기 나쁘진 않겠다는 생각이 들어 이곳으로 잡았다.</p>
<p>집에서 일찍 출발해 근처 카페에서 1~2시간 공부 좀 하다가 들어가려고 카페를 찾아봤는데 마땅한 곳을 찾기가 어려웠다. 개인카페여서 오늘 영업을 안하기도 했지만 무엇보다 카페가 생각보다 보이지 않아 당황스러웠던.. 근처가 유치원, 초등학교가 많아서인지 그 흔한 스터디카페 조차도 조금 멀었다.</p>
<p>그렇게 찾다가 발견한 곳이 무인카페 만월경!
무인카페임에도 불구하고 좌석이 넓고 디저트가 맛있다는 후기가 보여서 이 곳으로 가기로 했다.</p>
<p></br></br></p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/6ee9e973-2578-45c6-ab2b-1e79f1d0f30e/image.png" alt="숲길을 뚜벅뚜벅 걸어가요"></p>
<p>걷다보니 숲길이 너무 예뻐서 카메라를 들이밀었다. 그늘진 사이로 햇빛이 들어오는 길이 주는 분위기는 확실히 다르구나.</p>
<p>빛과 그림자로 얼룩덜룩한 길 사이로 발걸음을 옮기는 이 수수함이 좋았고, 괜히 걸어가는 모습도 한컷 찍었다.</p>
<p></br></br></p>
<p>이 길을 걸어가면서 내 뜻대로 다 될 것 같은 기분을 받았고 만월경이 있는 상가를 찾아 들어갔다. </p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/53da3b13-1cac-41dc-8866-aa8263e33d9e/image.PNG" alt="만월경"></p>
<p>크 고급 커피와 맛있는 디저트라니 어떻게 공부가 안되겠어 하며 들어갔는데, 뭐랄까.. 시간이 멈춘 듯한 느낌? 이상하리만치 고요한 공기?를 마주했다.</p>
<p>나와 같은 방향으로 걸어가던 한분이 계셨는데 보조가방에 책이 들은걸로 보아 저분도 카공하러 만월경에 가는구나 싶었다. 그런데 들어가다가 돌아 나가셔서 설마 영업을 안하는건가 하며 들어갔는데.. 5월 18일 영업종료라 그때까지 열지 않는다는 종이가 붙어있었다.</p>
<p>으아 안돼! 여기말곤 카페가... 너무 먼데ㅜ</p>
<p>상가에서 나와 다른 카페를 검색했는데 그나마 양재도서관 안의 카페가 가까웠다. 하지만 걸어서 10분.. 평소라면 가깝다고 생각했겠지만, 시험까지 1시간 반 정도 남은 시간 대였기 때문에 찰나의 시간도 아까웠다. 그렇지만 공부는 해야한다 싶어 도서관으로 향했다.</p>
<p></br></br></p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/dca88f47-2ced-49e7-b82d-e24187856389/image.PNG" alt="도서관 카페로 가요"></p>
<p>걷다보니 저 멀리 양재도서관이 보인다! 저 건물 안에 카페가 있다는 거겠지 생각하며 지나가는데 와.. 도서관인데 주차장이 만차야.. 심지어 3대정도가 앞에서 기다리고 있었다.</p>
<p>책읽으러 차를 타고, 그리고 만차여서 바로 들어가지도 못한 채 하염없이 기다리고.. 정말 대단한 사람들이라 생각했음.</p>
<p>그렇게 도서관 내의 카페로 들어가려했는데, 어라라? 저게 뭐다냐</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/b85c5edd-8826-4fc5-b7f7-ced5c1a1694c/image.png" alt="야외 도서관"></p>
<p>횡단보도를 건너면 있는 곳에 야외도서관이 보였다. 생각보다 햇빛에 아늑해보이고 사람들도 몇몇 보여서 감상에 젖은 채 차도를 건넜다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/bf8c461f-e22e-47ab-bd53-be09b040cf9b/image.png" alt="좋은 자리 발견"></p>
<p>오.. 테이블과 의자들이 큼직큼직하다! 거기다 가장 좋아보였던 자리가 비어있다. 이건 못참지 하며 바로 앉아 짐을 꺼냈다.</p>
<p>노트북과 마우스, 공책, 그리고 펜 몇자루 하나둘 꺼내는데 괜히 야외로 와서 와이파이를 못잡으려나 하는 생각이 앞섰다. 그래서 노트북의 전원을 켜고 화면이 밝아지자마자 와이파이를 확인하는데 뭔가 벌써 하나 잡혀있더라.</p>
<p>알고보니 이 야외 도서관도 와이파이가 잡히는 곳이었다! 덕분에 안심하고 편하게 남은 시간동안 공부한 내용 리마인드를 마칠 수 있었다. 중간중간에 참새가 내 발밑과 테이블 위에 왔었는데 그 순간을 못찍어서 아직까지도 너무나도 아쉽다.</p>
<p></br></br></p>
<p>정리를 끝내고 나니 슬슬 배가고파서 응시장 근처에 있는 GS25에 들르기로 했다. </p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d8a8efa9-6539-4991-a84e-5c1d97442051/image.png" alt="편의점"></p>
<p>편의점에 도착했는데 처음으로 춘식이가 그려진 맛별 우유 시리즈가 전부 있는 걸 봤다. 한번도 모든 맛이 있는건 못봤는데 이걸 이곳에서 보네 생각하며 신기해서 한컷 찍었다. 알록달록하니 예쁘네! 
그리고 아점을 해결해줄 음식들을 골랐는데 응원하는 마루가 그려진 삼각김밥과, 원조 오모리와 편의점 오모리 비교를 위해 김치찌개 라면을 담았다.</p>
<p>확실히 먹으면서 원조 오모리가 당황스러웠던 이유를 체감할 수 있었다. 편의점 오모리는 하나도 안셔! 그나마 김치를 아주 오래 씹으면 아아아주 약간의 새콤한 맛이 올라오긴 하지만 이건 원조 오모리의 신맛에 비하면 아무것도 아니지..</p>
<p>그때는 너무 셔서 한입한입이 힘들었는데, 편의점 오모리 때문인지 그 신맛을 다시 맛보고 싶다는 생각을 하며 먹고 나왔다.</p>
<p></br></br></p>
<p>그렇게 응시장에 들어가서 시험을 봤는데 IT학교라서 그런가 컴퓨터가 너무 붙어있었다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/7e733929-951c-4c82-bdff-18c3e115ea68/image.png" alt="이 배치도가 맞는건가요"></p>
<p>주황색이 책상, 초록색이 컴퓨터 본체, 검은색이 컴퓨터 였는데 정말.. 이렇게 시험장을 만들어도 허가가 나오는건지 의문이 들었던 곳이었음.</p>
<p>의자와 책상을 최대한 붙이지 않으면 뒤로 사람이 지나갈 수 없을 정도로 좁았고, 모니터는 옆사람것과 거의 붙을 정도로 가까웠다. 또한, 모니터가 상당히 낮아서 앞 책상의 사람들의 이름은 무엇인지, 응시종목은 무엇인지 확인하기도 쉬웠다.</p>
<p>그래도 다행히 내 앞의 분들은 나와 다른 시험을 응시하는 분이었고, 단 한분만이 같은 정처기였는데 시험장에 오지 않았다. 괜히 있었다면 신경쓰였을 것 같은..</p>
<p>아무튼 괜히 내쪽을 보는 것 같은 사람들의 시선을 겨우 무시한 채 시험을 치르게 되었는데, 문제를 보자마자 이상하리만치 마음이 편해졌다.</p>
<p></br></br></p>
<p>난이도가 이게 맞나..</p>
<p>싸피 문제풀다가 정처기 문제를 보니 함정도 없고 아얘 문항에서 나 틀렸네<del>~ 날 보게</del> 하고 있어서 100문항임에도 불구하고 꽤나 빠른 시간내에 풀 수 있었다. 그렇지만 전기관련 종목으로 시험을 보던 옆사람이 나보다 더 자신감있게 답을 선택하고 먼저 끝내서 난 제대로 공부한 수준은 아니구나 하고 있었는데 무슨 버튼을 누르니 화면중간에서 빨간 숫자가 깜빡깜빡하는게 살짝보였다. 대충 응시화면은 아니길래 종료해주세요 같은 문구인줄 알았는데 살짝의 욕을 섞은 54점이라는 소리가 들려서 어라 이거 바로 성적이 나오는건가? 그리고 이 사람 떨어진거야? 불안함이 약간 들었다.</p>
<p>그렇게 온갖 불평을 섞은 말을 한참하면서 그 화면을 나오지 못하길래 빨리 결과 본거면 나가줬으면 좋겠다는 생각을 했던 것 같다.</p>
<p>시험의 모든 문항들을 한번씩 더 훑고 응시완료를 누르려고 할 때쯤 나가셔서 좀 편안한 마음으로 클릭했는데, 아니나 다를까 깜빡이며 점수가 떴고 나는 푸른색이었다. 이번 시험이 쉬웠던게 맞는지 생각했던 점수보다 더 높았고 편안한 마음으로 퇴실할 수 있었다.</p>
<p></br></br></p>
<p>시험도 끝났겠다, 예약해둔 미용실로 발걸음을 옮겼다. 
간단하게 커트만 할 생각이어서 디자이너를 지정하지 않았는데, 막상 가니 수지 수석디자이너님이 담당해주셨다.</p>
<p>시원하게 거지존보다 살짝 아래 길이로 커트를 해볼까 했는데 곱슬이시니 머리가 말려올라갈 수 있어서 좀 더 긴 기장으로 자르는게 더 어울릴 것 같다는 제안을 해주셨고, 그렇게 하기로 결정했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/2235c685-871e-45ed-aaa0-8d9156de14b3/image.PNG" alt="커트"></p>
<p>한뼘 이상의 길이를 잘라내니 어색해서 한컷 찍었는데, 그 후에 층도 살짝 내주시고 컬도 만들어주셔서 한층 더 시원한 레이어드 컷을 할 수 있었다! </p>
</br>

<p>생각보다도 더 원했던 느낌이 나와서 만족해하며 이 기분을 한껏 표현하기위해 코노에 들러 몇곡 부른 후 집으로 돌아갔다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[git 자주쓰는 명령어 정리]]></title>
            <link>https://velog.io/@2024-11th/git1</link>
            <guid>https://velog.io/@2024-11th/git1</guid>
            <pubDate>Thu, 09 May 2024 06:58:06 GMT</pubDate>
            <description><![CDATA[<h3 id="이거-모르면-git-안써본거지">이거 모르면 git 안써본거지</h3>
<table>
<thead>
<tr>
<th align="center">명령어</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">git clone (레포주소)</td>
<td align="center">원격 git 저장소 복제</td>
</tr>
<tr>
<td align="center">git status</td>
<td align="center">git 상태확인</td>
</tr>
<tr>
<td align="center">git branch (브랜치이름)</td>
<td align="center">새로운 브랜치 생성</td>
</tr>
<tr>
<td align="center">git checkout (브랜치이름)</br>git switch (브랜치이름)</td>
<td align="center">브랜치 이동</td>
</tr>
<tr>
<td align="center">git pull</td>
<td align="center">원격 저장소(origin)에 있는 데이터를 받아옴</td>
</tr>
<tr>
<td align="center">git pull origin 브랜치명 --allow-unrelated-histories</td>
<td align="center">git에서는 서로 관련 기록이 없는 이질적인 두 프로젝트를 병합할 때 기본적으로 거부하는데, 이것을 허용해 주는 것</td>
</tr>
<tr>
<td align="center">git add (파일명)</td>
<td align="center">저장하고 싶은 파일을 지정해 stage에 올림</br> .을 쓰면 모든 파일이 추가됨</td>
</tr>
<tr>
<td align="center">git commit -m &quot;커밋기록내용&quot;</td>
<td align="center">커밋 내용 기록</td>
</tr>
<tr>
<td align="center">git push</td>
<td align="center">local branch를 원격 저장소에 보냄</td>
</tr>
<tr>
<td align="center">git merge</td>
<td align="center">다른 branch에서 만든 코드를 합침</td>
</tr>
<tr>
<td align="center">git log</td>
<td align="center">전에 기록한 커밋 내역들 확인</td>
</tr>
<tr>
<td align="center">git config --global user.name &quot;이름&quot;</br>git config --global user.email (이메일)</td>
<td align="center">현재 시스템의 모든 Git 작업에 사용할 사용자 이름과 이메일 설정</td>
</tr>
</tbody></table>
</br>

<h4 id="보통-쓰는-흐름">보통 쓰는 흐름</h4>
<pre><code>git init
git branch // 브랜치 확인
git branch -M main
git remote add origin (레포주소)
git remote -v
git add .
git commit -m &quot;initial commit&quot;
git push origin main</code></pre><p></br></br></p>
<hr/>

<h3 id="평소에-잘-실행되던데-왜-다른-컴퓨터로-하니-권한이-없다고-할까">평소에 잘 실행되던데 왜 다른 컴퓨터로 하니 권한이 없다고 할까</h3>
<p>이런 경우엔 PC에 저장된 계정정보가 본인의 정보와 달라서 발생한 문제일 수 있다.</p>
<p><code>Window 자격 증명</code> 메뉴를 찾아서 아래에 등록된 <code>일반 자격 증명</code>을 확인해보자!
<img src="https://velog.velcdn.com/images/2024-11th/post/bc94472d-9102-4a13-a536-159c7378c882/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="오늘-git-이슈">오늘 git 이슈</h3>
<p>오늘 레포를 만들고 기존 파일을 넣으려는데 계속 오류가 났다</p>
<blockquote>
<p>remote: Permission to &lt;나의 레포주소&gt; denied to Cutaku.
fatal: unable to access &#39;&lt;나의 레포주소&gt;&#39;: The requested URL returned error: 403</p>
</blockquote>
<p>오랜만에 레포를 만들어서 그런가 생각하면서 뭘 실수했겠지 생각하는데, 아무리 봐도 난 평소처럼 만들었고 실수할 부분이 없었다.</p>
</br>

<p>왜일까 하고 찾아보는데 </p>
<p><a href="https://syntaxsugar.tistory.com/entry/remote-Support-for-password-authentication-was-removed-on-August-13-2021-Please-use-a-personal-access-token-instead?category=1215958">[Git] remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.</a></p>
<p><a href="https://medium.com/elecle-bike/password-authentication-is-temporarily-disabled-as-part-of-a-brownout-c507835b87f5">Password authentication is temporarily disabled as part of a brownout. Please use a personal access token instead.</a></p>
<p>아 이게 보안 추가한다던 것 때문에 발생한 오류구나 </p>
<blockquote>
<h3 id="정리">정리</h3>
<p>git remote set-url origin https://(토큰)@github.com/(레포주소)
git push origin main</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.05.09.] 24번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL24</link>
            <guid>https://velog.io/@2024-11th/TIL24</guid>
            <pubDate>Thu, 09 May 2024 00:38:02 GMT</pubDate>
            <description><![CDATA[<h3 id="오늘의-플래너">오늘의 플래너</h3>
<p>요새 집에만 가면 플래너를 펼치질 못하고 있다. 이걸 어떻게 해결할지 고민하다가 처음 플래너에 사용에 익숙해지기 위해 스티커로 꾸몄으니 앞으로도 집에서 모든 활동을 끝낸 뒤에 스티커를 붙인다면 좀 더 손에 붙지 않을까라는 생각이 들었다.</p>
<p>앞으로 꾸미는 건 집에 있는 나에게 맡겨야지.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/42f29737-e559-4da1-8485-f3679b9e9bf6/image.png" alt=""></p>
<p>그리고 하나 더 평소와 다르게 해볼 것은 목차에 <code>depth</code>를 추가하는 것. </p>
<p>단순히 1,2,3... 배열은 아 오늘 몇개 했네 정도의 생각만 들어서 다 부숴보자 하고 시작하더라도 큰 목표의식이 들지 않았다.
왜일까 생각하다가 이 각각의 목표가 너무 독립적이라 했으면 ok 흐름으로 흘러가서 그럴 수도 있겠다고 생각했음.</p>
<p>그래서 오늘부터 목차에 <code>depth</code>를 추가함으로서 앞의 목표를 끝내야 올 수 있는 단계임을 나타내고자 했다.</p>
<p>좀 더 많이 달성할 수 있길 바라며, 오늘 하루도 알차게 갓생을 살아보쟈</p>
<p></br></br></p>
<hr/>


<h3 id="depth-1-pccp-대비-2문제-이상-풀기">depth 1) PCCP 대비 2문제 이상 풀기</h3>
<h4 id="문제-1-등굣길">문제 1) 등굣길</h4>
<p>많이 풀어본 유형의 문제였다.</p>
<p>가로와 세로가 100 길이 이하이므로 맵의 크기는 최대 1만이다.</p>
<p>모든 칸에 대해서 오른쪽과 아래로 이동 가능하므로 한칸 당 2번의 이동 결과가 발생할 수 있다. 그러면 간단하게만 생각해봐도 2^10000 이므로 엄청난 시간복잡도를 가짐을 확인 가능하다.</p>
<p>또한, 이 문제가 동적 계획법 문제임을 가장 빠르게 확인하려면 특정 수로 나눈 나머지를 구해야 한다는 조건이 있는지 살펴보는 것이 좋다. 그리고 이런 유형을 많이 풀었다면, 왔던 길을 되돌아가는 경우가 없으므로 dp로 구할 수 있다고도 생각할 수 있을 것이다.</p>
<p>무튼 나는 나머지 연산을 보고 dp겠다 싶었고 위의 언급한 부분들을 살펴본 뒤 바로 구현으로 들어갔다.</p>
</br>

<p>가지 못하는 부분이 있는데 굳이 <code>boolean</code> 2차원 배열을 또 선언해서 처리하는 것은 비효율적이다. 여기서 거리는 0 이상이어야 하니까 기존 dp 배열에 음수 값으로 못가는 곳을 전처리 해두면 된다. </p>
<p>그리고 위와 왼쪽에서 오는 값을 합산할 때 음수가 될 수도 있다. 이 경우엔 <code>if문</code>이나 <code>삼항연산자</code>, 그리고 <code>Math.max()</code> 등의 방법으로 간단하게 작성 할 수 있을 것이다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/a4c89696-50db-4e17-a30a-8a4af1b16718/image.png" alt=""></p>
</br>

<h4 id="문제-2-숫자-게임">문제 2) 숫자 게임</h4>
<p>문제를 처음부터 읽다가 팀이 여러개인줄 알고 약간 겁을 먹었는데 결과적으론 <code>A</code>와 <code>B</code>팀 간의 승부만 가지고 풀면 되는 문제였다.</p>
<p>입출력을 먼저 봤어야 했는데 늘 까먹는 것 같은..</p>
<p>아무튼 이 문제를 요약하면 A팀의 순서(입력으론 무작위로 받은 값)을 알고있을 때 B가 가장 높은 점수를 받는 경우의 승점을 return 하는 문제였다. </p>
<p>여기서 이미 숫자는 부여받은 상태이므로 모든 선수를 어떤 타이밍에 등장시켜도 기존에 가졌던 숫자와 같은 상태로 나오게 된다. 즉, 단순히 <code>A</code>가 가진 숫자들과 <code>B</code>가 가진 숫자들만 잘 비교한 뒤 <code>B</code>가 큰 경우로만 짝을 맺을 수 있는 최대 경우의 수를 구하면 된다. </p>
<p>큰 경우를 어떻게 알 수 있을까
모든 숫자의 대소관계를 계속 비교해서?</p>
<p>그렇게 풀 순 있겠지만 브루트포스이므로 시간복잡도가 꽤나 커질 것으로 예상할 수 있다. 따라서 앞과 뒤의 대소관계를 명확하게 정리할 수 있는 <code>정렬</code> 알고리즘을 통해서 전처리를 한 뒤 <code>투포인터</code>나 <code>이분탐색</code> 등으로 하나씩 비교해 나가면 된다고 생각했다.</p>
<p>그 중 나는 투포인터를 선택했음.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/5e972848-436a-47e0-8eb4-b6ebde4b203d/image.png" alt=""></p>
</br>

<h4 id="문제-3-단속카메라">문제 3) 단속카메라</h4>
<p>와 오랜만에 문제 하나 푸는데 40분정도 썼다.</p>
<p>이 문제 유형은 할 때마다 헷갈리는데, 이번에 문제를 풀면서 확실하게 정리를 했다. 이젠 제대로 기억해야지.</p>
<p>정리하면서 놀라웠던 점은 다른 알고리즘을 공부할 때 이런 식으로 정리한 부분이 있었는데 로직이 같았다는 점이다. 그리고 그 알고리즘은 세그먼트 트리. 우선 문제 접근부터 하고 차근차근 설명할 예정이다.</p>
<p>우선 문제부터 요약해보면 [-30000, 30000] 구간의 고속도로가 있고 이 도로 위를 달리는 차량들의 모든 구간이 주어졌을 때, 모든 차량을 단속하기 위해서 최소 몇 대의 카메라가 필요한지를 return 해야했던 문제이다.</p>
<p>빠른 이해를 위해 입출력 예제인 아래 routes를 손그림으로 풀어보자. </p>
</br>

<ul>
<li>routes : [[-20,-15], [-14,-5], [-18,-13], [-5,-3]]</li>
<li>답 : 2</li>
</ul>
<p>우선 간단하게 그려보면 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/2ec37545-a6e6-41a1-9daa-7062f6800849/image.png" alt=""></p>
<p>여기서 눈으로 어떻게 2가 답이 나오는지를 보면 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/def971c4-8680-45f7-b75e-38a92f6482e7/image.png" alt=""></p>
<p>가장 떨어진 [-5,-3] 구간과 [-14,-5] 구간을 주행하는 차량을 같이 단속하기 위해 [-5]에 단속 카메라를 설치해야 한다.</p>
<p>그리고 나머지는 겹치는 부분이 많은데, 온전하게 겹치는 [-18, -15]에 단속 카메라를 설치하면 나머지 두 차량을 단속할 수 있다.</p>
<p>여기까지 보았을 땐 차량의 출발 시작위치와 도착위치가 가장 이를 결정하는 요인이고, 비슷한 값일 수록 같이 단속할 수 있는 확률이 높아진다는 것을 알 수 있다.</p>
<p>그러면 어떨 때 같이 단속할 수 있고 못하는 것인지를 분기를 나눠 확인해 볼 필요가 있다.</p>
</br>

<p>경우는 크게 아래 3가지로 나눌 수 있다.
물론 각 경우는 위와 아래를 뒤집었을 때도 있으니 유의하자.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/72ac1a15-21d8-4e12-a3ef-51c82a4ad0b4/image.png" alt=""></p>
<p>쉬운 이해를 위해 각 경우에 대해서 위의 선분을 <code>prev</code>, 아래의 선분을 <code>cur</code>이라 하고 가장 왼쪽 좌표엔 <code>S</code>, 가장 오른쪽의 좌표엔 <code>E</code>를 넣어 표현하겠음.</p>
</br>

<p>우리는 아래의 노란 영역에 카메라를 설치하면 <code>prev</code>와 <code>cur</code>을 둘 다 단속할 수 있음을 잘 알고있다. </p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/6f3d00bd-d25a-4d7b-b57c-d5bdf44c4e94/image.png" alt=""></p>
<p>이 노란 영역을 결정하는 권한은 누가 가지고 있는지를 생각하며 하나하나 분석해보자.
그리고 이 권한은 <code>놓을 수 있는 영역인 [putS, putE]</code> 라 하겠음.</p>
</br>

<ol>
<li>두 선분 중 하나가 온전히 포함된다.</li>
</ol>
<p><strong><em>1) prevS &lt; curS &lt; curE &lt; prevE</em></strong>
<strong><em>2) curS &lt; prevS &lt; prevE &lt; curE</em></strong></p>
<blockquote>
<p>넓은 영역이 온전하게 좁은 영역을 포함한다면 좁은 영역의 선분에게 권한을 주어야한다. </p>
</blockquote>
<pre><code>1) prevS &lt; curS &lt; curE &lt; prevE
putS = curS
putE = curE

2) curS &lt; prevS &lt; prevE &lt; curE
putS = prevS
putE = prevE</code></pre></br>

<ol start="2">
<li>일부 겹치는 부분이 있다.</li>
</ol>
<p><strong><em>1) prevS &lt; curS &lt; prevE &lt; curE</em></strong>
<strong><em>2) curS &lt; prevS &lt; curE &lt; prevE</em></strong></p>
<blockquote>
<p>두 선분이 온전히 겹치진 않지만, 일부 영역이 겹친다면 겹치는 부분에 권한을 주어야 한다.</p>
</blockquote>
<pre><code>1) prevS &lt; curS &lt; prevE &lt; curE
putS = curS
putE = prevE

2) curS &lt; prevS &lt; curE &lt; prevE
putS = prevS
putE = curE</code></pre></br>

<ol start="3">
<li>두 선분에 겹치는 부분이 없다.</li>
</ol>
<p><strong><em>1) prevS &lt; prevE &lt; curS &lt; curE</em></strong>
<strong><em>2) curS &lt; curE &lt; prevS &lt; prevE</em></strong></p>
<blockquote>
<p>이 경우엔 무조건 카메라를 하나 더 설치해야함이 보장되므로 카메라 개수를 추가한 뒤 아래 영역에 권한을 위임한다. (다음 순서를 위해)</p>
</blockquote>
<pre><code>1) prevS &lt; prevE &lt; curS &lt; curE
putS = curS
putE = curE

2) curS &lt; curE &lt; prevS &lt; prevE
putS = prevS
putE = prevE</code></pre><p></br></br></p>
<p>위 경우를 생각하며 코드를 짜면 좀 더 쉽게 로직을 구현할 수 있을 것이다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d9eed152-bfe1-49fb-8e5f-8c62f20a503d/image.png" alt=""></p>
<p></br></br></p>
<p>그래서 왜 세그먼트 트리와 로직이 유사하다 했는지를 살펴보면, 세그 트리를 만든 후 값을 찾으러 갈 때도 거의 비슷한 그림을 그려보면 분기를 코드로 쉽게 풀어쓸 수 있기 때문이다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/3d4f2b1d-b457-4d5d-ac2e-36906110e149/image.png" alt=""></p>
<p>세그먼트 트리를 간단하게 설명하자면, 루트노드는 모든 값을 연산한 값이고 말단 노드는 원본 값 자체를 맡겨둔 노드라 생각하면 된다.
그러면 중간노드들은 말단노드로 부터 연산해서 올라온 값인 것.</p>
<p>그런 연산 값들로 먼저 세그트리를 채운 후에 값을 찾을 때 루트로 부터 내려가는데, 그 때 쓰는 것이 위의 그림이다.</p>
</br>

<p>저 형식을 이 문제에 대입시켜볼 줄 생각도 못했는데 여러모로 많은 아이디어를 줬던 문제인 것 같다.</p>
<p></br></br></p>
<hr/>

<h3 id="depth-2-정보처리기사-필기-대비">depth 2) 정보처리기사 필기 대비</h3>
<h4 id="-cs-스터디-가이드나-읽어볼까">+) CS 스터디 가이드나 읽어볼까</h4>
<p>정처기 공부를 하려했는데 생각보다 집중이 안되서 묵혀둔 CS 스터디 가이드를 펼쳤다. 예전엔 종류별로 스터디를 했었는데 언제부턴가 이상한 사람들이 너무 많아져서 운영이 너무 힘들어졌다. 그래서 근 4개월간 스터디를 안했는데 그 기간동안 덩달아 CS까지 놓아버렸음..</p>
<p>CS 공부는 자의로 하기엔 아직 내가 재미를 못붙였구나 생각해서 강제성을 가져가고자 스터디 가이드를 펼쳤다. 어라 그런데 이거 싸피 들어오기 전에 공부하라 했던 그 내용인걸까 상당히 유사하다.</p>
<p>이걸로 비전공자 친구들은 스터디 진도를 많이 뺐던데 나도 이걸 해볼까 하는 사이 <code>gitlab</code>에 템플릿 있는걸 발견했다.</p>
<p><code>self-study</code>라.. 상당히 마음에 드는 이름이네.</p>
<p>그래서 내 깃에 그대로 올려두었다. 조금씩 진도를 빼야지!</p>
<p></br></br></p>
<hr/>

<h3 id="depth-3-vuejs-강의-복습-및-정리">depth 3) Vue.js 강의 복습 및 정리</h3>
<p></br></br></p>
<hr/>

<h3 id="depth-4-spring">depth 4) Spring</h3>
<p></br></br></p>
<hr/>

<h3 id="depth-5-til-작성-마무리">depth 5) TIL 작성 마무리</h3>
<p></br></br></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.05.08.] 23번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL23</link>
            <guid>https://velog.io/@2024-11th/TIL23</guid>
            <pubDate>Wed, 08 May 2024 01:03:59 GMT</pubDate>
            <description><![CDATA[<p>어제 병원을 다녀왔는데 상태가 많이 호전되고 있어 한 약의 용량을 200mg에서 150mg으로 줄이기로 했다! 또한, 피검사로 몸 상태를 볼 때가 되어서 체혈도 하고 왔지.</p>
<p>으으 너무 좋다ㅜㅜ 호전이라니.. 이게 얼마나 오랜만에 듣는 소식인가😆</p>
<p>건강식으로 더 빠르게 나아지고 싶어 집에 남은 재료가 있는지 생각해봤는데 오늘 아침에 다 썼네. 그래서 근처 이마트에서 한번 장을 보면서 생야채들을 건졌다.</p>
<p>요새 애용하는 고등어도 더 사고 벌집 삼겹살에 쌈 채소, 그리고  ABC쥬스의 해독효과도 보고자 당근과 비트도 골라준 뒤 나머지 채소들은 990원의 행복 코너에서 여러 종류를 골라담았다.</p>
<p>그러곤 집으로 돌아와 만들어둔 김치전 반죽을 굽고 삼겹살도 알맞은 마이야르 반응이 되도록 구워준 뒤 쌈채소 함께 저녁으로 먹었다.</p>
<p>앞으로도 건강식으로 꾸준히 챙겨먹어야지 응응</p>
<p></br></br></p>
<hr/>

<h3 id="오늘의-할-일은">오늘의 할 일은</h3>
<p>다이소에 짱구 마스킹 테이프가 있어서 바로 샀다!</p>
<p>꾸며보니 뽀짝하네~
가위같은 반듯하게 자를 수 있는걸 들고오지 않아서 약간 후회하긴했지만, 그래도 짱구라서 다 커버가 되네 흐흐</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/5dac6fd9-28a7-4bc4-9d23-f18e797a52bd/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="pccp-대비-ps-2문제-이상-풀기">PCCP 대비 PS 2문제 이상 풀기</h3>
<p><a href="https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&amp;levels=3&amp;languages=java">문제집</a>에서 풀어보려고 한다.</p>
</br>

<h4 id="문제-1-야근-지수">문제 1) 야근 지수</h4>
<p>음 처음에 문제 이해가 좀 어려웠는데, 아무래도 너무 빨리 읽고 이해하려고 했던 것 같다는 생각이 들었다.</p>
<p>그래서 여러줄 주석을 열어두고 하나하나 키워드를 빼서 정리해보니 더 빠르게 이해할 수 있었음.</p>
<p>문제를 요약하면,<br><code>works</code>원소들을 선택해서 뺀 값들이 최소 <code>n</code>이상은 되어야 함.<br>그랬을 때 제곱해서 더한 값이 최소인 경우를 구하라.  </p>
<p>숫자를 제곱하면 크기가 1차이더라도 급격하게 증가하므로 
너무 큰 숫자가 없도록 하는 것이 이 문제의 솔루션이라 생각했다.</p>
<p>그래서, 가장 큰 숫자를 뽑은 뒤 그걸 1 감소시켜 다시 넣어두고, 다시 가장 큰 숫자를 뽑고 1을 빼고 넣고... 를 반복하면 되므로 <code>PriorityQueue</code>를 사용하는 것이 최적이라 생각했다.</p>
<p>물론, <code>Java</code>에서는 <code>PQ</code>가 최소힙으로 구현되어 있으므로 
<code>Collections.reverseOrder()</code>를 넣어주어야 함을 기억하자.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/7653a990-1a26-40fe-ad18-77c13047ad51/image.png" alt=""></p>
</br>

<h4 id="문제-2-단어-변환">문제 2) 단어 변환</h4>
<p>완탐으로 <code>BFS</code>를 선택해서 풀었다.
깊이를 가져가야 하므로 사용자 정의 클래스인 <code>Node</code>를 선언해서 <code>String</code> 값과 <code>depth</code>값을 담았음.</p>
<p>으아아 IDE 환경이 아니므로 어느 부분에서 실행이 불가한지 바로 찾을 수가 없어 어디서 잘못 적은 것인지 찾느라 시간이 좀 걸렸다.</p>
<p>구현 자체는 10분 내에 다 했는데</p>
<p>실수 했던 부분은 아래 두가지.</p>
<ol>
<li><code>begin</code>이 <code>words</code>에 있다면 방문 체크를 했는데, 없는 경우도 있으니 있을 때만 방문체크를 했어야 했다는 점.</li>
<li>문자열의 길이와 <code>words</code> 배열의 크기를 담은 변수를 혼용.</li>
</ol>
<p>이걸 빠른 시간 내에 풀 수 없었다니.. 아쉬움이 남는 문제다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/3d01e748-d64f-409b-b379-ef14216ce2ed/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="문제-3-최고의-집합">문제 3) 최고의 집합</h3>
<p>오늘 푼 두 문제가 생각보다 빨리 끝나서 한 문제 더 풀어보기로 했다. 근데 내가 접근을 이상하게 돌아간건지, 좀 생각해봐야 하는 문제가 맞는건지 30분이 지났음에도 안풀린다!</p>
<p>문제는 간단하다.
<code>n</code>개의 숫자를 이용해서 합이 <code>s</code>인 배열을 만드는데, 만들 수 있는 배열들 중 각 원소의 곱이 가장 큰 경우를 오름차순으로 정렬하여 return 하는 것.</p>
</br>

<p>생각한 솔루션은 아래와 같다.</p>
<blockquote>
<ol>
<li><code>s</code>가 <code>n</code>으로 나누어 떨어진다면 무조건 <code>s</code>를 <code>n</code>으로 나눈 수로만 구성된 배열을 리턴할 것.</li>
<li><code>s</code>가 <code>n</code>보다 작다면 <code>n</code>개의 숫자로 합이 <code>s</code>인 배열을 만들 수 없다. 그러므로 -1만 넣어서 return.</li>
</ol>
</blockquote>
<p>위 둘은 틀렸다고 생각하지 않았고, <code>s</code>가 <code>n</code>으로 나누어 떨어지지 않는 경우에 대해 계산을 잘못한 것 같다 추측했음.</p>
</br>

<p>이런 경우엔.. 직감으로 이럴 것 같다? 가 오지않는다면 손수 완탐을 돌리는 것이 차라리 낫다.</p>
<p>그래서 새로운 테케를 임의로 설정해서 규칙을 파악해보고자 했음.</p>
</br>

<p>ex 1) n=4, s=10</p>
<table>
<thead>
<tr>
<th align="center">result 배열</th>
<th align="center">원소들을 곱한 값</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1,2,3,4</td>
<td align="center">24</td>
</tr>
<tr>
<td align="center">2,2,2,4</td>
<td align="center">32</td>
</tr>
<tr>
<td align="center">2,2,3,3</td>
<td align="center">36</td>
</tr>
</tbody></table>
<p>즉, 숫자가 널리 분포되어 있지 않다면 곱했을 때 상대적으로 큰 값이 나옴을 확인할 수 있었다. 물론 언제나 이럴 것임을 증명한 것은 아니고, dp처럼 규칙을 찾아보는 과정이라 생각하면 된다.</p>
</br>

<p>ex 2) n=6, s=21</p>
<table>
<thead>
<tr>
<th align="center">result 배열</th>
<th align="center">원소들을 곱한 값</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1,2,3,4,5,6</td>
<td align="center">720</td>
</tr>
<tr>
<td align="center">2,2,3,4,5,5</td>
<td align="center">1200</td>
</tr>
<tr>
<td align="center">2,3,3,3,5,5</td>
<td align="center">1350</td>
</tr>
<tr>
<td align="center">2,3,3,4,4,5</td>
<td align="center">1440</td>
</tr>
<tr>
<td align="center">3,3,3,4,4,4</td>
<td align="center">1728</td>
</tr>
</tbody></table>
</br>

<p>나는 이정도 구해보고 숫자 2개만 있었을 때 가장 큰 수가 나온다고 생각했다. 그리고 나온 두 숫자 중 작은 수가 <code>s/n</code> 값의 정수부 라고 결론지었음.</p>
</br>

<p>그걸 구현했는데 틀렸음을 얻었던 것..</p>
<p>그런데 방금 실수를 하나 발견해서 풀었다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/56473a1d-be2e-400c-b59a-c02b0c52b27c/image.png" alt=""></p>
<p>프로그래머스에 테케 추가해서 테스트 해볼껄..
답이 [2,2,2,3,3,3]이 나와야 하는데 [2,3,3,3]만 나오고 있던 것.</p>
<p>알고보니 <code>else</code> 분기 점에선 값을 안넣고 <code>cur</code>값을 빼기만 했었다.
그걸 고쳐주니 Accept 흐으</p>
<p>다음부턴 테케 꼭 구한 거 추가하기.. 잊지말기..😢</p>
<p></br></br></p>
<hr/>

<h3 id="이번주-일요일-정처기-시험-대비">이번주 일요일 정처기 시험 대비</h3>
<p></br></br></p>
<hr/>

<h3 id="이것이-자바다">이것이 자바다;</h3>
<p></br></br></p>
<hr/>

<h3 id="스프링-자바편">스프링 자바편;</h3>
<p></br></br></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.05.07.] 22번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL22</link>
            <guid>https://velog.io/@2024-11th/TIL22</guid>
            <pubDate>Tue, 07 May 2024 01:03:38 GMT</pubDate>
            <description><![CDATA[<p>결국 저번주에 커피를 걸고했던 챌린지는 제대로 패배...
게임에 하나 꽂혔더니 주말동안 70렙까지 키웠고, 현실에선 으음</p>
<p>월요일도 대체공휴일임을 몰랐다가 늦은 줄 알고 20분정도 빠른걸음으로 갔는데, 가는 길에 학생도 없고 학교도 닫아있어서 혹시나 하는 마음으로 달력을 열었지.</p>
<p>아니나 다를까 공휴일이네 😇
덕분에 돌아와서 잠을 꽤 깊이자고 밥먹고 조미료때문에 잠드니 하루가 또 끝나있었다 </p>
<p>오늘은 그래도 4개 이상은 달성해야지..
비록 병원가는 날이라 조퇴지만 😅</p>
<p></br></br></p>
<hr/>

<h3 id="일정-정리부터">일정 정리부터..</h3>
<p>플래너를 쓰지만 달력형식인 페이지는 기록을 안했더니 어떤 일정들이 있었는지 자꾸 까먹는다.</p>
<p>그래서 이번기회에 정리를 했는데...</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/623d349b-65ba-451b-b4ca-7a113ba9207c/image.png" alt=""></p>
<p>와 정처기가 이번주야? 생각하고 있는데
PT 날짜가 정처기 응시날짜랑 겹치네 🤣</p>
<p>당장 트레이너님께 연락했음... 다행히 시간 조정에 성공!</p>
</br>

<p>그리고 내일 어버이날이니까 거금 좀 써주고...</p>
<p>이제서야 오늘을 보낼 준비가 된 것 같다.</p>
<p></br></br></p>
<hr/>

<h3 id="할일-끄적이기">할일 끄적이기</h3>
<ul>
<li>PS</li>
<li>CS를 곁들인 정처기 필기 대비</li>
<li>이것이 자바다</li>
<li>스프링 자바편</li>
</ul>
<p>이 4개 위주로 달려야지</p>
<p></br></br></p>
<hr/>

<h3 id="ps-문제풀기">PS 문제풀기</h3>
<p>한달 뒤 시험이라 생각하고 대비하는 느낌으로 해보려 한다.
실제로 PCCP가 6월 16일에 있길래 바로 예약해뒀음</p>
</br>

<h4 id="문제-1-정수-삼각형">문제 1) 정수 삼각형</h4>
<p>보통 문제를 풀 때 유형을 보지않고 풀려는 편인데 문제집에서 <code>Lv3</code>중 정답률 높은 순으로 고르다보니 <code>동적계획법</code>이라는 유형을 보고 말았다...</p>
<p>그래도 dp라면 워낙 솔루션이 정형화 되어있지 않으니 상관없겠다 싶어서 그대로 풀어보려 했는데 문제를 보자마자 이게 왜 dp인건지에 대해 고민에 빠졌음.</p>
<p>위의 값 그대로 받아서 <code>Math.max(값1,값2)</code> 연산으로 전체에 대해 계산하면 불가능한가?? 왜?? 라는 생각만 맴돌았다.</p>
</br>

<p>우선 문제를 보고 높이가 500이하, 숫자가 최대 9999인것을 보고 자료형을 <code>long</code>으로 잡아야 할지 계산하기 위해 구해봤는데 </p>
<p>500 * 9999 = 4,999,500   </p>
<p>이므로 int로도 충분하다고 생각했다.</p>
</br>

<p>그러곤 앞서 말했던 왜 dp여야하는 가를 생각했는데,
위의 값을 모두 받아서 계산에 포함시키면 중복이 많은 것처럼 느껴질 수도 있겠다 라는 생각을 해봤다.</p>
</br>

<p>시간복잡도를 계산하기 위해 특징을 찾아보면 아래와 같다.
<img src="https://velog.velcdn.com/images/2024-11th/post/42bf07c1-0949-4672-b172-7eb83678b63f/image.png" alt=""></p>
<p>양 끝은 바로 내려오고 중간은 위의 2개 중 큰값을 선택해서 내려온다.</p>
<p>위의 개수가 <code>n</code>개, 아래 개수가 <code>n+1</code>개라 하면,
<code>2 + 2 * (n-2) = 2n-2</code>번의 연산을 하게 된다.</p>
<p>여기서 <code>n</code>은 1부터 최대 <code>N = 500</code>까지 가능하므로
<code>2 * (1+2+3...+N) - 2 * N  = N(N+1) - 2N = 500 * 501 - 1000 = 249,500</code>이다.</p>
<p>결국 그대로 완탐해도 풀리는데 이게 왜 <code>DP</code>냐구우...</p>
</br>

<p>그래서 에라모르겠다를 외치며 좀더 효율적인 <code>Math.max()</code> 메서드를 이용해서 구현했다.</p>
<p>처음엔 이전값 배열 <code>dp</code>와 함께 현재값을 배열 <code>cur</code>로 받아 <code>dp</code>배열에 누적시키는 방법을 이용했는데, 불필요한 값이 누적되는 듯 했다.</p>
<p>알고보니 이미 합산된 값이 <code>dp</code>에 들어가버리면 다음 값 계산할 때 합산된 값과 비교를 하고 더하게 되니.. 안되던 것.</p>
<p>그래서 <code>dp</code>를 2차원 배열로 잡아서 돌렸고 맞았습니다를 얻었다.</p>
</br>

<p><img src="https://velog.velcdn.com/images/2024-11th/post/51883531-f74a-40c4-bef2-14c8d8af3112/image.png" alt=""></p>
</br>

<h4 id="문제-2-네트워크">문제 2) 네트워크</h4>
<p>음 네트워크가 몇개냐.. 문제는 이젠 <code>Union-Find</code>밖에 떠오르지 않아서, 오늘도 크루스칼 알고리즘으로 유니온 파인드를 구현했다.</p>
</br>

<p>UF를 구현할 때는 현재 구해둔 부모들의 모음인 <code>parents</code> 배열을 너무 믿으면 안된다는 것을 간과해선 안된다.</p>
<p><code>parents</code>에 들어가 있으니 부모임은 확실하지만, 오류가 있을 수 있기 때문.</p>
</br>

<p>이해를 돕기위해 예시를 들어보면,
<code>A</code> 노드의 부모는 <code>B,C,D,E</code> 처럼 여러개 일 수 있다. 하지만, 단 하나의 값을 저장해야 한다.
즉, <code>A</code>의 부모는 <code>B</code>이다 라고 했을 때 <code>B,C,D,E</code>를 다 포함할 수 있어야한다.</p>
<p>그래서 <code>union-find</code>의 대표 함수인 <code>union</code>과 <code>find</code>는 아래처럼 구현될 수 있다.</p>
</br>

<p><strong><em>find 함수 정의</em></strong></p>
<pre><code class="language-java">public static int find(int node){
    if(parents[node] == node)
        return node;
    return parents[node] = find(parents[node]);
}</code></pre>
</br>

<p><strong><em>union 함수 정의</em></strong></p>
<pre><code class="language-java">public static void union(int a, int b){
    int na = find(a);
    int nb = find(b);

    if(na &lt;= nb){
        parents[na] = nb;
    }else{
        parents[nb] = na;
    }
}</code></pre>
<p>이 스니펫을 그대로 가져가는 것보다 이해가 먼저임을, 그리고 나만의 방식대로 구현해보는 것이 중요함을 잊지말자.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/2adcf584-c2a7-485d-8b63-81e853803728/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="cs를-곁들인-정처기-필기-대비">CS를 곁들인 정처기 필기 대비</h3>
<p>정처기를 이번엔 좀 대비하고자 책을 샀었는데 이번주라니...</p>
<p>다행히 실기책을 샀기 때문에 개념 요약집으로 빠르게 대비는 가능할 듯 하다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d9c4134a-2f18-4419-ab8a-6ef19f061432/image.png" alt=""></p>
<p>그렇지만 CS 공부 겸 병행 목적으로 보는거니까 허투루 보진 말아야지</p>
</br>

<p>우선 핵심요약 부분 전체 1회독 후 양을 가늠해보고 목표를 잡아야겠다.</p>
<p><strong><em>1회독 중</em></strong></p>
<p>우선 병원가기 전에 58까지 읽었다.</p>
<p></br></br></p>
<hr/>

<h3 id="이것이-자바다">이것이 자바다;</h3>
<p></br></br></p>
<hr/>

<h3 id="스프링-자바편">스프링 자바편;</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.05.03.] 21번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL21</link>
            <guid>https://velog.io/@2024-11th/TIL21</guid>
            <pubDate>Fri, 03 May 2024 01:37:35 GMT</pubDate>
            <description><![CDATA[<p>오늘 아침에 속이 좋지 않아서 오전 라이브 한시간동안 밖에서 워터젤리를 조금씩 먹으며 산책했다. 어제 먹은 냉면이 문제였나, 같이 있던 회가 이상했나 온갖 생각을 하다보니 살짝 회가 쿰쿰했던 기억이 떠올랐다.</p>
<p>으으 회만 빼고 먹을 걸..</p>
<p>그래도 1시간이 지나니 다시 돌아와서 다행이다!</p>
<h2 id="오늘의-플래너">오늘의 플래너</h2>
<p>산책을 끝낸 10시 10분쯤 플래너를 작성했다.</p>
<p>친구랑 매일 계획을 공유하고 매주 일요일 또는 월요일에 누가 더 많이 달성했는지를 합산해서 갓생 week를 보낸 친구에게 커피쿠폰을 보내는 챌린지를 하고있다.</p>
<p>이전엔 대부분 내가 받는 입장이었는데 이번주는 벌써부터 질 위기가오고 있다... 이 친구가 분발하더니 하루에 5개이상은 찍고 있음</p>
<p>질수없지!
오늘은 집의 독서실 책상에서 모든 일을 끝내고 말리라</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/0f89aef7-015c-4e41-a44b-6bae2a885e78/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h2 id="계획-실행하기">계획 실행하기</h2>
<h3 id="1-ps-2문제-이상-풀기">1. PS 2문제 이상 풀기</h3>
<p>꽤 오랜만에 <a href="https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&amp;page=1&amp;partIds=56389%2C58464%2C37527%2C31236%2C25448%2C21366%2C20069%2C17214%2C12286%2C9317%2C22586%2C18498%2C17931%2C300%2C301%2C23708%2C21163%2C18952%2C17615%2C6174&amp;levels=2%2C3%2C4%2C5">이 페이지</a>를 들어온 듯 싶은데 생각보단 많이 풀어져 있다!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/244954e8-4da1-4708-9b0a-10916223b616/image.png" alt="프로그래머스 - 푼 문제"></p>
<p>오늘은 <code>[3차] 압축</code>과 <code>[3차] n진수 게임</code>차례네.</p>
<p></br></br></p>
<h4 id="3차-압축">[3차] 압축</h4>
<pre><code class="language-java"></code></pre>
<p></br></br></p>
<h4 id="3차-n진수-게임">[3차] n진수 게임</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[국토종주 인증] 아라자전거길 (아라서해갑문, 아라한강갑문)]]></title>
            <link>https://velog.io/@2024-11th/bicycle2</link>
            <guid>https://velog.io/@2024-11th/bicycle2</guid>
            <pubDate>Thu, 02 May 2024 00:44:13 GMT</pubDate>
            <description><![CDATA[<h4 id="5월-1일-근로자의-날로-쉬는-날이-있다">5월 1일 근로자의 날로 쉬는 날이 있다?</h4>
<p>늘 바라고 바라던 쉬는 수요일이 도래했다! 늘 월,화,목,금,토 일하고 수,일 쉬었으면 더 좋았을텐데 라는 생각을 하고 살았는데 드디어 수,토,일 3일을 쉬는 주가 드디어 온 것~</p>
<p>열심히 늦잠을 자고 11시에 일어나 누운 채로 열심히 게임 출석과 유튜브를 시청했는데 약 1시쯤이었을까, 이 휴일을 집에서만 보내기엔 아깝다는 생각이 들어버렸다. 그래서 미루고 미뤄왔던 택배 박스의 송장을 떼고 차곡차곡 정리를 하는데 그 속에 동생이 받아둔 캐링백을 발견했다. </p>
<blockquote>
<p>그래 자전거나 타볼까?</p>
</blockquote>
<p>생각이 슬그머니 올라왔고 바로 날씨가 괜찮은지 확인을 위해 가볍게 산책을 떠났다. 하늘은 맑고 미세먼지도 심하지 않으며 평소에 비해 사람이 많이 보이지 않아서인지 모든 것들이 예뻐보였고 이 휴일과 멋진 날을 잠으로 놓치기엔 아깝다는 생각이 들었다. 그래서 동생한테 <code>오늘 인천 찍을래?</code> 제안했지만 오늘은 집에서 쉬고싶다는 답이 돌아와 혼자서라도 가봐야지 싶었다. 그래도 밥은 든든하게 먹어야하니까 아점으로 국밥을 같이 먹으러 가려했다.</p>
<p>밥먹고 다이소 갔다가 서로 집이나 자전거길 가기로하고, 열심히 준비물 리스트를 적은 뒤 바리바리 챙겼고, 친구들한테도 자전거 오늘 인증 찍으러간다고 전했다. 아니나 다를까 대학생 때 내 국토종주 제안을 넘기던 동기가 왜 안데려가냐고 난리가 났음..</p>
<p></br></br></p>
<p>최근 자전거를 사고 수첩을 구매하고 친구들한테 자전거에 진심임을 어필했다가, 친구가 자기랑 같이 가야한다고... 난리났다.</p>
<p>잠시 뜬구름이겠지 싶어 잠잠해지길 바라며 톡을 늦게봤는데   </p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/1804b423-c151-4f37-8150-8901917b8eaf/image.png" alt="톡 내역"></p>
<p>다시봐도 얘도 참 대단하다라는 생각밖에 들지 않음.. </p>
<p></br></br></p>
<h4 id="아무튼-준비물을-챙겨보자">아무튼 준비물을 챙겨보자</h4>
<p>처음엔 목표가 인증센터 4개 찍고 집으로 돌아오기였고, 무엇을 챙겨야할지 리스트를 나열해보았다.</p>
<p>그 중에서도 <code>인주</code>는 인증 도장을 찍으려고 할 때 잘 나오지 않는 경우가 있어서 챙기는 것을 추천한다는 글을 봐서 넣었고, 수건은 땀 흘릴 때나 안장의 충격을 완화하고자 챙겼다. 그리고 캐링백은 지하철 등의 대중교통을 탈 때 자전거를 접어서 넣어야하니까 챙겼지.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/2bd168d0-05a5-4ea9-aa61-fe8bd344d3e9/image.png" alt="국토종주 계획 플래너와 준비물"></p>
<p>저 지도는 아직 열어보지 않았는데 후기들을보면 국토종주 꿀팁들을 담아놓았다고 했다. 오늘은 아라자전거기만 갈테니 굳이 열어볼 필요가 없다고 생각했음.</p>
<p></br></br></p>
<h4 id="밥부터-든든하게">밥부터 든든하게</h4>
<p>그렇게 자전거는 분해해서 캐링백에 넣고, 배낭에 다른 준비물들을 챙겨 국밥집으로 향했다. 의도치 않게 2층에서 주문하고 먹어야하는 형태여서 열심히 팔운동 했음.</p>
<p>그렇게 테이블에 앉아서 나는 선지해장국, 동생은 육개장을 주문했다.</p>
<p>그러곤 친구들한테 캐링백을 찍은 뒤 <code>이게 뭐게</code> 라 보냈는데, 최근에 가방 계속 안챙기더니 드디어 챙긴거냐며 칭찬을 들음(??)</p>
<p>이 사이즈가 어떻게 내 가방처럼 보일 수가 있지 싶어 자전거 가방이라 말하니, 저 크기에 어떻게 자전거가 들어가냐 라고 답하더라. </p>
<p>내가 사진을 좀 잘못찍었나 싶어 크기 비교하라고 손이랑 같이 찍어보냈더니 바로 납득함</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/7312ae8a-91d7-4743-8550-54eb967ec600/image.png" alt=""></p>
<p>잘못 찍은건 맞는 것 같다 ㅋㅋ</p>
</br>

<p>그러다보니 음식이 나왔고 든든하게 한그릇 했다! 라고 말하고 싶지만, 배가 줄은건지 밥 3분의 1 공기에 국 3분의 2 정도 먹었다.</p>
<p>충분히 든든한데 동생이 왜 이렇게 못먹냐고 이상하게 쳐다보다가 내꺼 좀 더 먹어줬다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/7d1ab9f1-d9f9-4239-b770-7362c966d29d/image.jpg" alt=""></p>
<p><del>이때까지만 해도 이 국밥이 밖에서의 마지막 끼니일 줄 몰랐지</del></p>
<p></br></br></p>
<h4 id="다시-준비물-챙기기">다시 준비물 챙기기!</h4>
<p>도장 인주는 집에 없어서 동생과 함께 다이소를 들러서 샀다! 파란색이 좋아서 파란 인주로 사고, 입이 심심할까봐 아이스쿨을 샀는데 자기도 파란색샀다고 들이밀길래 또 찍었음. 근데 확실히 파란색이라서 예쁘다(?)</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/b623c440-707c-449d-9056-0264d971e9a7/image.png" alt="도장 인주와 아이스볼 구매"></p>
<p></br></br></p>
<h4 id="슬슬-출발해야지">슬슬 출발해야지</h4>
<p>자전거가 있으니 가능한 대중교통은 지하철을 애용하는 것이 정답이라고 생각했다. 그래서 루트를 검색해보니 집에서 <code>신논현역</code>까지만 가면 9호선 급행에 공항철도 타고 도착할 수 있었다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/77438eeb-b562-452e-81a0-5fc8e4b63e44/image.png" alt="신논현역 - 청라국제도시역"></p>
<p>그래서 우선 <code>신논현역</code>까지는 자전거로 타고 갔고 자전거를 분해해서 캐링백에 담은 뒤 지하철에 오르려 했는데...</p>
<p>왜 여긴 로비나 광장이 없는가
의자 하나가 없어서 어쩔수없이 교보문고 앞에서 분해하고 담았다.</p>
<p>아무튼 이제 출발할 수 있다!</p>
</br>

<p>사람이 생각보다 많아서 캐링백을 들고 탈 수 있을까 고민을 좀 했는데, 다행히 문쪽에 자리가 비어서 캐링백을 다리사이에 끼운 채로 탔다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/abcc67f2-4152-4f9e-b614-11d1102db47f/image.png" alt="김포 공항역에서 환승하는데 바로 맞은편이다!?"></p>
<p>원래는 지하철의 벽쪽에서 있는게 맞지만, 사람들이 너무 많아서 이 쇳덩어리를 들고 가는건 오히려 다른 사람들이 다칠 것 같았다. 그래서 입구에서 조신하게 있기로 했지.</p>
<p>급행이라 빠르게 갈 수 있었고 <code>가양역</code>이 되니 사람들이 우르르 내려서 한숨돌리고 드디어 앉을 수 있었다!</p>
<p>그렇게 김포공항까지 가서 환승하려면 어디로 가야할지 눈으로 열심히 스캔하고 있었는데, 급행의 종점이라서인지 내리자마자 앞으로 걸어가기만 하면 인천 국제공항 방면으로 바로 탈 수 있었다!</p>
<p>교통 너무 좋자나~</p>
<p>여기도 종점은 아닌 것 같은데, 사람이 많이 타지 않아서 의자에 앉은 채로 <code>청라국제도시역</code>으로 향했다.</p>
</br>

<p>그렇게 도착을 했는데, 아뉘 여기 개찰구까지 왜이리 먼거야ㅜㅜ</p>
<p>계단으로 올라갔다가 평지 에스컬레이터 2개를 만나고 다시 내려오는 에스컬레이터를 타면 개찰구인데 거의 수서역 같았다.. </p>
<p>이때부터 슬슬 물이 간절했는데 개찰구 바로앞에 파리바게트와 GS25가 있었음! 그래서 바로 1+1 토레타를 사고 거의 한통을 비울듯이 마신 뒤에 자전거를 다시 조립했다.</p>
<p>집에서 아르기닌 한 알 삼키고 물에다가 BCAA를 타왔었는데 역시 수분 채우는 건 토레타가 갑이다 라는걸 다시 느꼈음. </p>
<p></br></br></p>
<h4 id="드디어-자전거를-탄다">드디어 자전거를 탄다..!</h4>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/9ac2b402-7269-4c6a-bf75-546516c8624c/image.png" alt="청라국제도시역에서 아라서해갑문까지"></p>
<p>와 자전거로 11분 밖에 안걸려!
너무 신나서 폰에 지도를 켜두고 나아가고 있었는데</p>
<blockquote>
<p>철커덩...탕!</p>
</blockquote>
<p>왜지 뭐지?
왜 자전거가 앞으로 나가질 않지.. 마치 뭐에 걸린 것 처럼..</p>
</br>

<p>정말 이 때 순간적으로 멘붕이 왔음.</p>
<blockquote>
<p>이제 출발인데 자전거가 왜 말썽이지?
캐링백 안에서 자전거가 있다가 어디에 치여서 뭐가 빠졌나?
아... 설마 나 여기서 돌아가야하나...</p>
</blockquote>
<p>온갖 생각이 다 들었다.</p>
</br>

<p>자전거 수리점을 검색해봤는데 가장 가까운게 자전거로 17분, 도보로 1시간 7분...</p>
<p>그런데 참 어이없게도 정처기 공부하다가 봤던 요구사항 분석 키워드가 떠올랐다.</p>
<p>결은 다르지만.. 이것도 원인을 뜯고 분석해보면 잘 굴러가게 되지 않을까 생각했고, 이때부터 자전거의 동작원리를 하나씩 만져보며 파악하려 애썼다.</p>
<p>그러다, 내 자전거의 체인이 큰 기어 중 가장 안쪽에 걸려있는 것처럼 보였다. 
<del>이게맞나..</del></p>
</br>

<p>내 자전거가 7단까지 조절 가능한데, 기어도 7개가 맞나? 싶어 세어봤고 정확하게 7개였다!</p>
<p>그래서 체인을 잡고 옮겨야겠다 싶어 만졌는데 기름같은 검고 미끌한 것이 묻어나왔다. 역에서 출발하기 전에 휴지를 좀 챙겨가고 싶었는데, 이게 여기서 쓰이네 하며 힘을줘서 체인을 분리했고 가장 큰 톱니에 체인을 끼우려 애썼음.</p>
<p>하지만 큰 체인에 걸기엔 밑에있는 작은 톱니의 방향이 맞질않았는데, 저 작은 톱니가 기어로 직접 제어하는 부분이라 생각해 기어를 조절해보니 정말로 그 아이가 앞과 뒤로 움직이는게 보였다!</p>
<p>그래서 가장 안쪽으로 위치시킨 후 다시 체인을 걸어보니 예쁘게 들어갔고 그제서야 페달이 앞으로 돌아가는 것을 확인할 수 있었다.</p>
<p>짐을 내려놓았던 그 기둥을 기점으로 테스트를 위해 빙글빙글 돌아다니고, 페달에 세게 힘도 줘보고 브레이크도 잡아보는데 잘 돌아갔다!</p>
<p>그제서야 한숨 돌리고 다시 아라서해갑문으로 떠날 수 있었음</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/88b67a5a-ce00-4a40-b87a-338c76a5c3e7/image.png" alt="청라국제도시역에서 아라 서해갑문 가는길"></p>
<p>인천이고, 도로 공사때문에 도로에 차가 단 하나도 없었다. 높은 건물도 없고 드넓은 평지에 차도조차 한적하니 이건 못놓친다 싶어 횡단보도 한 중간에서 사진도 찍어보고 풍경을 열심히 남겼다.</p>
<p>그러다 어느 기점을 넘어가니 차와 자전거가 한두대씩 보이기 시작했고, 자전거 도로라 부를 수 있는 붉은도로가 보이기 시작했다!</p>
<p></br></br></p>
<h4 id="아라-서해갑문-도착">아라 서해갑문 도착!</h4>
<p>그렇게 붉은 자전거길을 따라 직진하다보니 멀리서 빨간 전화국 부스가 보였다.</p>
<blockquote>
<p>드디어 첫 인증인가!</p>
</blockquote>
<p>신나게 페달을 밟으며 올라가는데 제대로 온몸을 자전거 용품으로 세팅하고, 좋은 로드바이크를 탄 채로 나아가는 사람들도 보였다.</p>
<p>저 사람들도 이 좋은 휴일에 좋은 풍경을 보러 나왔구나~</p>
<p>나와 같은 마음인 것 같아 한겹 마음이 더 붕뜨며 터널 입구같은 문을 넘었다!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/861e1b37-be7c-4f60-a652-b61935abe394/image.png" alt="아라 서해갑문 풍경 1"></p>
</br>

<p>확실히 인천이다.
바닷내음이 향긋하게 나고, 가족들끼리의 산책이 자주 보이는.. 그리고 바다와 풍경 그 하나도 놓치지 않은 아름다운 이곳.</p>
<p>그래서 예전부터 나의 첫 자취는 인천으로 하고 싶었는데
현실은 <code>SSAFY</code>로 인해 강남에 살고있네... 쩝</p>
<p></br></br></p>
<p>아무튼 자전거를 빌미로라도 이곳에 다시 발을 들여놓을 수 있어 기분좋은 설렘이 가득 차올랐다.</p>
<p>특히나 노을진 이 풍경 속 내 자전거와 인증부스라니...
오히려 이 시간대에 온 것이 감사할 정도였다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/61c08adb-af5b-44e0-8bba-113da1554690/image.jpg" alt="아라 서해갑문 풍경 2"></p>
<p>그렇게 인증센터로 들어가 도장을 쾅 찍는데, 
사람들이 많이 다녀갔는지 도장이 많이 헤져있다.</p>
<p>무슨 모양인지 조차 감이 잡히지 않았는데, 사이버 인증으로도 찍어보니 배였음을 알게되었음.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/9756e90a-6a8d-46b6-9f18-d2b9c4bb1ff0/image.png" alt="아라 서해갑문 인증"></p>
<p><del>도장 교체좀 해주지.. 이렇게 이쁜 도장인데 힝</del>
</br></p>
<blockquote>
<p><strong>*2024년 05월 01일 수요일 (근로자의 날)
오후 6시 27분
첫 인증센터 &quot;아라서해갑문&quot; 인증 *</strong></p>
</blockquote>
<p></br></br></p>
<h4 id="이제-다음-아라-한강갑문으로-가보자고">이제 다음 아라 한강갑문으로 가보자고</h4>
<p>출발선의 웅장함과 풍력발전기의 우아한 회전에 빠져들며 한동안 경치를 감상했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/b1b24fd8-2172-4caf-9013-10f7e1cced6b/image.jpg" alt=""></p>
<p>풍력발전기가 돌아가는 모습을 담아 <code>gif</code>로 간직하고 싶어 집에와서 편집했는데, 용량이 자꾸 커 업로드가 불가하다는 alert를 보아 여러 방법들을 동원해 낮춰놨더니 칙칙한 하늘이 되었다..</p>
<p><del>gif 너무 깨지네..</del>
<img src="https://velog.velcdn.com/images/2024-11th/post/4b937651-86c9-4746-bbb0-38d47e0c3149/image.gif" alt=""></p>
<p>그치만 이 자체로도 예쁘고, 내 눈엔 원본을 담았으니까 난 만족한다</p>
</br>

<p>그렇게 길을 따라가다보면 정말 다양한 풍경들이 보인다.
<img src="https://velog.velcdn.com/images/2024-11th/post/224da0d1-abe5-4a12-b498-752e259c9f2e/image.png" alt="가는길에 한컷씩"></p>
<p>조금 더 갔을까 
바다에서 파도가 잔잔하게 치는 소리가 들리고, 노을도 예쁜 곳이 있어 자전거를 내려놓고 셀카봉을 쥐어들었다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/65b4930f-df46-495f-bbd0-60685a64f2ca/image.png" alt="갑분싸피"></p>
<p>이 셀카봉은 싸피 웰컴키트 때 받아놓고 이제서야 쓰는 것..
생각보다 나오는 화면이 괜찮다!</p>
<p>덕분에 감성샷도 찍고 맘에 들었으~</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/8fbee8d3-4b48-4888-833b-3e13ae63ec4d/image.png" alt="해잡기"></p>
<p>오늘도 해를 잡아보려 애쓰지만, 흘려보내고 조금 더 발걸음을 재촉했다.</p>
</br>

<p>잉 가다보니 봉수대가 있다?
너 왜 여기있냐 </p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/423d02d4-75b5-4b0b-aac8-4ad6a4b8164b/image.png" alt="봉하"></p>
<p>봉수대를 보니 역사를 좋아하고 잘 기억하던 친구가 생각났다.
공무원 화이팅이라구!</p>
<p></br></br></p>
<h4 id="왜-여기만-사람이-많지">왜 여기만 사람이 많지?</h4>
<p>그렇게 고요하고 자연의 소리만 들리던 구역을 지나가다 갑자기 한둘씩 걷는 사람들이 보이고 시끌벅적한 소리가 들려왔다.</p>
<p>술을 놓고 떠드는 소리인 것 같기도 하다 라는 생각을 할 즈음.. 정말로 그런 곳을 발견했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/299d6186-0f66-4d96-875c-063aafa4cfbb/image.png" alt="서해5도 수산물복합문화센터"></p>
<p>여기 왔을 때는 조금 어두워서 건물이름을 못봤는데 다시 검색해보니 <a href="https://blog.naver.com/incheontogi/221035996160">서해5도 수산물복합문화센터</a>였다.</p>
</br>

<p>여기가 신기했던 이유는 사람들이 많아서도 아니고, 테이블에서 다들 밥을 먹고있어서도 아니었다.</p>
<p>왜 수산시장이 있냐고 ㅋㅋ</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d6e13611-3500-4971-aaba-72f350f21eb4/image.png" alt="여긴 뭔가싶은데 일단 회임. 이건 못참잖아?"></p>
<p>인천 앞바다에서 경치를 구경하며 먹는 회라... 낭만있네</p>
<p>화장실만 들르러 내렸는데 생각보다 본격적으로 팔고 있었다. 구경하러 들어가니 바로 앞에있던 사장님이 방금 썰어 나온 모둠회를 권했다. 그런데 모둠회에 연어가 왜 3피스 뿐인 것 같지..</p>
<p>개불과 해삼 더 넣어주겠다는 말 뒤로 동생이 연어를 좋아하는데 모둠회에 연어가 더 들어간 구성은 없어서 아쉽다고 말씀드렸는데</p>
<p>그러자.. 사장님이 잠시만! 을 외치며 방금 썰어 랩으로 싼 회 접시를 다시 벗겨내고 연어의 뱃살 부위 방금 썰어서 나온건데 이걸로 더 넣어주겠다며 한주먹 정도를 다시 썰어서 담아주셨다!</p>
<p>오.. 이건 사야지를 외치며 2만원을 결제했는데 사장님이 서비스로 뭘 더 넣어주셨다고 하셨다.
그냥 회 짜투리 몇점이겠지 싶었는데 집으로 돌아가서 보니 좀 더 뭔가 많았던...!</p>
<p>못 믿어서 죄송했습니다 ㅎㅎ</p>
<p></br></br></p>
<h4 id="다시-마음잡고-출발">다시 마음잡고 출발</h4>
<p>사온 회 접시를 그대로 들고갈 수가 없어서 어쩔수 없이 배낭에 세로로 넣어 두었다. 랩이 있으니 덜 흐르지 않을까, 흐르더라도 랩 안에 머물러 있지 않을까 생각하며 가방 속에 넣었지. 하지만 넣을 때 토레타 두 통이 있어 회접시가 예쁘게 들어가질 못해서 남았던 한병을 비우고 다른 한병은 챙겨왔던 텀블러에 담은 뒤 서둘러 발걸음을 옮겼다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d572aa1c-e03a-4af4-bd3a-07caea3c9dcc/image.png" alt="반짝반짝"></p>
<p>노을이 순식간에 졌구나.. 어느샌가 깜깜해진 하늘을 보며 시간과 함께 나아가는 듯한 느낌을 받았다.</p>
<p>사실 이 때 빛 축제처럼 조명으로 예쁘게 꾸며놓은 것들이 많았는데 너무 어두워지면 나의 조명없는 자전거로 운전하기가 힘들 것 같아 서둘러서 이동했다.</p>
<p>그러다.. 으스러질듯한 안장통에 점점 버거워져서 혹시몰라 가져왔던 수건을 안장에 얹어두었다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/119b0bcd-08bb-48a7-8f9a-8d87343f7886/image.png" alt="안장에 수건얹기 ㅎㅎ"></p>
<p>수건 안들고 왔으면 이 길 못지나갔다 진짜..</p>
<p></br></br></p>
<h4 id="길을-잃었다-ver-1">길을 잃었다? ver 1</h4>
<p>그렇게 열심히 표지판이 알려주는 곳으로 따라가다가 당황스러운 길을 발견했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/529ff4e1-8f6a-4bd5-bc99-fffd98a95e0d/image.png" alt="이보시오. 그래서 어디로 가라는 것인지"></p>
<p>이때까진 거의 직진과 약간의 커브길이어서 잘 왔는데 이 길 어떻게 가란 소릴까..?</p>
<p>붉은 자전거길을 그대로 따라가던 다른 자전거들을 뒤로한 채 우회전을 했는데 여긴 자전거길이 없었다.</p>
<p>약간 당황스러웠는데, 생각해보니 앞으로 더 갔다가 오른쪽으로 꺾으라는 말 같아서 그렇게 해보기로 하고 더 나아갔는데 다행히 다른 표지판들이 이 길이 맞다는 듯 인사해주고 있었다.</p>
<p>그렇게 오른쪽으로 꺾으니 물류센터가 상당히 많다.
<img src="https://velog.velcdn.com/images/2024-11th/post/f091e55d-fb52-4dc7-b1ad-8aa8dd39f795/image.png" alt="쿠팡, 마켓컬리 등의 물류센터"></p>
<p>쿠팡부터 마켓컬리, 대한통운 등 정말 많고 큰 규모의 건물들이 보였고, 다니는 차량들도 하나같이 짐을 실을 수 있는 차량들이었다. </p>
<p>물류센터가 많은 곳에 오니 차도 다 물류 차량들로만 보이는 것을 보고 속으로 신기하다고 생각하며 열심히 페달을 돌렸다.</p>
<p></br></br></p>
<h4 id="길을-잃었다-ver-2">길을 잃었다? ver 2</h4>
<p>길을 가다가 자전거를 한두번 타본 사람이 아닌 자전거 무리를 보았다. 네분이서 다 풀세팅으로 갖춘 채 나아가고 있었는데 국토종주 자전거 길과 겹치는 것 같아 길 잃을 일은 없겠다! 하는 마음으로 살짝 거리를 유지한 채 졸졸 따라갔다.</p>
<p>물론 미니벨로는 굉장히 느리기에...
페달을 세게, 그리고 빠르게 여러번 밟아도 그분들의 페달 한바퀴는 따라잡을 수 없었다.</p>
<p>그래도 눈으로 그분들이 지나간 자취는 기억했으니 그 길로 열심히 따라갔다.</p>
<p>그런데 지형이 자꾸 높아지는지 허벅지와 종아리에 드는 힘이 배가되었다. 아라자전거길이 이렇게 다와서 힘들어진다고?? 싶었는데 알고보니 이게 전호대교렸다..</p>
<p>사람이 찍은 사진은 없고 <a href="https://blog.naver.com/bi1he2s3/110148593306">어떤 블로그</a>에서 가설 현황을 담은 사진을 가져왔다. 실제로도 다리옆에 다리가 있는 형태였음.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/59e16665-2838-46af-9346-ed4b6193f18b/image.png" alt="전호대교 가설현황"></p>
<p>그렇게 열심히 앞만보면서 달려가는데 반이 오르막길이고 반이 내리막길이라, 온힘을 다해 겨우겨우 페달을 밟으며 오르막길을 올라와 시원하게 내려갔다.</p>
<p>이후에 표지판이 딱히 없어서
여기선 표시가 안되어있나보네 하고 어플을 켰는데...</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/b0ac1656-45bb-4e10-9650-5b045aec386f/image.png" alt="아니 이건 너무한거 아니냐고"></p>
<p>나 왜 한참 지나와있지...?
그리고 배터리 15%는 무슨말이야...!!</p>
<p>그래서 다시 오르막길을 올라가며 중간에 옆으로 빠지는 곳이 있나보다 하며 왼쪽을 쳐다보는데 
없다.
없어.</p>
<p>옆으로 갈 곳이 없어!!</p>
<p>와 이 날 가장 멘붕온 지점을 꼽으라면 여기였다.</p>
<blockquote>
<p>도대체 어디서부터 잘못온거지
다시 물류센터로 돌아가서 찾아야하나..?
그러다 폰 배터리가 없어지면 나 집으로 어떻게 가지</p>
</blockquote>
<p>이때부터 심장이 뛰는 소리가 더 크게 느껴졌고, 고민할 시간은 지금 없다는게 느껴졌다.</p>
<p>일단 이 대교에 옆으로 갈 수 있는 곳은 없다. 그러니까 고민말고 내려가야한다 라는 생각으로 내리막길을 다시 내려가는데</p>
<p>오른쪽 작은 차도도 아닌 자전거 도로도 아닌 짧은 도로에서 한 사람이 자전거를 옆에 둔 채로 핸드폰을 보고있었다.</p>
</br>

<p>아 이 길인가!?
하고 내려가려했는데 <code>자전거 출입금지</code> 라는 글씨가 내가 보는 방향이 아닌 반대 방향으로 바닥에 흰글씨로 쓰여있는게 보였다.</p>
<p>조금 실망한 채로 돌아가는데 표지판이 하나 보인다?
그래 아라자전거길 북측은 여기 맞잖아 생각하며 모든 표지판을 찬찬히 읽어보는데
와... 안쪽길이네 거기가 국토종주 길이네ㅠㅠㅠㅠ</p>
<p>표지판이 다 벗겨질대로 벗겨져 보이지도 않는데 어떻게 자전거 타고가면서 보라는거야ㅠㅠ</p>
</br>

<p>그래도 일단 길을 찾았다 싶어서 다시 힘을내어 자전거를 몰았다.</p>
<p>그렇게 빠르게 페달을 밟는데!?
와 드디어 이 자전거 길이 맞다고 표시해주네ㅠ</p>
<p>그렇게 우측으로 꺾는 곳이 나왔고 이제 직진만 남았다를 외치며 안간힘을 다해 나아갔다.</p>
<p></br></br></p>
<h4 id="아라한강갑문-도착">아라한강갑문 도착!</h4>
<p>와 와 드디어ㅠ 저 집갈 수 있는건가요..</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/4858f810-bf8d-4c65-9004-a824c06370a9/image.png" alt="드디어 아라한강갑문!"></p>
<p>이게 사진으로는 밝아보이지만 실제로는 굉장히 어두웠다. 가로등이 없으면 암흑 그 자체였던 시간대..</p>
<p>그렇게 도장을 찍으러 가방에서 인주를 꺼내는데 가방속에 있던 회가 반겨주며 오늘 집으로 돌아가야 동생이랑 먹을 수 있다? 라는 말을 건네는 듯 했다.</p>
<p>서둘러 인주와 인증수첩을 꺼내고 도장을 찍어보는데
잉 여기는 사람들이 잘 안왔나..? 왜 도장이 예쁘게 살아있지</p>
<p>다들 시작은 거창하고 끝은 마무리를 짖지 않는 것일까 싶은 생각이 들었다.
나는 그 고비를 넘겼다고 생각하니 한층 더 뿌듯했지.</p>
<blockquote>
<p>그래 집가서 신선한 회를 같이 먹으려면 서둘러야지! 빨리 가보자</p>
</blockquote>
<p>그런 마음으로 어떻게 집을 갈지에 대해 검색했다.</p>
</br>

<blockquote>
<p><strong>*2024년 05월 01일 수요일 (근로자의 날)
오후 9시 17분
두번째 인증센터 &quot;아라한강갑문&quot; 인증 *</strong></p>
</blockquote>
<p></br></br></p>
<h4 id="당장-지하철을-못타면-난-집을-못갈수도">당장 지하철을 못타면 난 집을 못갈수도...</h4>
<p>어떻게 가야할까... 가장 가까운 역을 찾기위해 지도를 축소해봤는데, 서울에 그렇게 많은 지하철이 있음에도 다 멀리있었다..</p>
<p>그 중에서도 방화는 그나마 가까워 보였는데 거리를 계산하니 약 20분 정도만 밟으면 갈 수 있었다!</p>
<p>물론 미니벨로 기준 최소 30분 아닐까 싶지만 ㅎㅎ</p>
<p>고민할 시간도 없다. 일단 달렸음.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/1cc4ec86-139b-4016-9f19-41cc11b07c05/image.png" alt="방화야..ㅜㅜ"></p>
<p>처음엔 한적한 평원, 그 뒤엔 공사중인 도로, 그 뒤엔 도보?!
그러다 따릉이까지 만나니 서울에 다시 돌아온 것을 체감했다.</p>
<p>조금만 더 직진하다가 오른쪽으로 꺾기만 하면 방화역이 보이겠지</p>
<p>돌아가지 않는 다리를 달래며 세게 밟았다.</p>
<p>그러다 발견한 방화역!!</p>
<p>진짜 누가 불질렀나 왜이리 밝고 예쁘지ㅠㅠ
바로 자전거를 들고 에스컬레이터를 탄 채로 여기는 의자가 있기를 빌었다.</p>
</br>

<p>내려가니까 와 의자가 있다!
기둥을 기점으로 둥글게 배치한 듯한 의자를 발견하고 앉은채로 가방에 있던 캐링백을 꺼내 바닥에 펼쳐두었다.</p>
<p>오늘만 최소 3번은 조립하고 분해했는데 이정도는 빨리 할 수 있지를 외치며 분해하는데, 평소에는 잘 접혔던 몸체가 유난히 단단하게 꽂혀있는지 펜을 찔러 올려도 뻑뻑했다.</p>
<p>서울이라 막차는 꽤 늦겠지만, 혹시모를 상황에 펜을 힘으로 누르다가 평소와는 다른 모양으로 꽂혀있다는 걸 알게되었다.</p>
<p>비틀려있는건가
펜으로 가장자리를 살짝 눌러보니 그제서야 딸깍 이라는 소리와 함께 분해가 되었다.</p>
<p>서둘러서 다 넣고 캐링백을 잠근 뒤 빠진게 없겠지 외치며 앉았던 자리를 다시한번 보고 개찰구를 통과해 내려갔다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/29ad9c80-8dab-42b6-a01c-1325e3823c04/image.jpg" alt=""></p>
<p>와 나이스 타이밍!</p>
<p>바로 온 지하철과 함께 집으로 돌아갈 수 있었다.</p>
<p></br></br></p>
<h4 id="집-도착">집 도착!!</h4>
<p>캐링백을 남은 힘으로 집에다 넣어놓으니 온 힘이 다 빠졌다. 그러고 고개를 들었는데 집의 구조가 묘하게 바뀌어있었음.</p>
<p>알고보니.. 최근에 독서실 책상이랑 의자를 구매했는데 그게 오늘 도착해서, 책장을 옆으로 옮기고 그 자리에서 부품을 조립하고 있었던 것. 그 와중에도 걸레질을 했는지 바닥은 평소보다 더 매끄러워 보였다.</p>
<p>완전하게 조립되지 않은 상태였지만, 동생 덕분에 빛을 보고 제 역할을 할 수 있게된 책상과 의자를 보니 한층 더 인생의 동기부여가 되는 듯 했다. </p>
<p>열심히 살아야지 앞으로도 무엇이든.</p>
<p>그렇게 일하고 있던 동생을 불러 회를 꺼냈다. 동생은 고민하다 집에 있던 사케를 들고왔고, 나는 운동도 했겠다 단쉐 한잔을 들이켰다. 그렇게 서로 한 테이블에 앉아 회를 한점한점 맛보았는데, 역시 바로 뜬 회라 그런가 식감이 오독오독했고 연어는 부드러웠으며 개불도 아주 달디 달았다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d16c0d29-ccd1-46a5-a363-1ccc017380fa/image.png" alt="회가 다 쏠렸지만 2만원에다가 인천앞바다에서 바로 썬 회! 미친 가성비네 흐흐"></p>
<p>이게 어떻게 2만원일 수 있지 싶은 생각과 함께 굉장히 뜻 깊었던 하루였다.</p>
<p></br></br></p>
<h4 id="다음날">다음날?</h4>
<p>다음날 다시 싸피 가야지 뭐.
잠자리에서 일어나는데 허벅지가 묘하게 뻐근함이 느껴졌다. 그렇지만 신기하게도 살짝 무겁다는 느낌만 있을 뿐 걷거나 뛰는 것이 힘들진 않았다.</p>
<p>오히려 그것보단 핸들을 잡고 돌렸던 손바닥이 물만 닿아도 따가웠던게 더 힘들었다.
그리고 의자에 앉을 때 묘하게 욱씬거렸던 것 정도?
그정도만 힘들었던 것 같은데, 심하지 않아서 일상 생활엔 지장이 딱히 없었다.</p>
<p>다음엔 장갑을 꼭 끼고 가야지.
그리고 핸드폰 충전도 해야하니까 보빼랑 충전기도 챙기고.</p>
<p></br></br></p>
<p>그 와중에 조립 다했다는 카톡을 받음!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/14b95bbb-fb7c-4d1d-baf6-acd64d175f75/image.png" alt="독서실 책상과 의자"></p>
<p>집가서 마저 해보려했는데.. 와 미쳤다ㅜㅜ</p>
<p></br></br> </p>
<hr/>

<h4 id="플래너에-따로-찍은-도장들">플래너에 따로 찍은 도장들</h4>
<p>퀄리티 차이 다시봐도 극과 극이다
<img src="https://velog.velcdn.com/images/2024-11th/post/4b6044db-09a8-4d5f-bc5f-08f2a94fbeae/image.jpg" alt="도장"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[포켓몬 타운 2024 - 라프라스&피카츄]]></title>
            <link>https://velog.io/@2024-11th/pokemon</link>
            <guid>https://velog.io/@2024-11th/pokemon</guid>
            <pubDate>Tue, 30 Apr 2024 09:00:25 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/2024-11th/post/ea448c3c-33e4-4a6a-ae56-c9b4b634096b/image.png" alt=""></p>
<p>저번주 일요일 잠실에 라프라스랑 피카츄 보러 다녀왔음!</p>
<p>잠실에 도착하자마자 바로 석촌호수로 갔는데, 생각보다 크다는 후기에 비해 안보여!</p>
<p>그래도 호수가 참 예쁘고 날씨도 화창해서 좋네 라는 생각을 하며 호수를 사진으로 남기는데</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/78ff63f8-9a72-41b1-84f7-e3e76a4ff66d/image.png" alt=""></p>
<p>어라 왼쪽에 라프라스 아닌가??
그렇게 생각하고 신나게 걸어가는데 파란색이 점점 나무의 잎들 사이로 보였음!</p>
<p></br></br></p>
<p>조금 더 걸으니 라프라스 몸체가 잘 보였는데, 사진을 찍기엔 나무가 너무 많이 가려서 가장 수풀이 덜 가리는 좋은 스팟을 찾아 더 나아갔음.</p>
<p>아니나 다를까 거기서부터 안내원들이 있더라
그곳에서 사진을 잔뜩 남겼음</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/223f9684-bdfa-43a7-804d-0c60a6cdb4b1/image.png" alt=""></p>
<p>스팟 찾아 열심히 뛰어다니고, 손과 라프라스 그 어딘가의 초점과 싸우고~
저 손이랑 나오는 사진을 열장은 남긴 것 같은데 초점이 제대로 맞은게 없다 ㅎㅎㅎ</p>
<p>뭐 괜찮아 이미 라프라스는 내 폰에 고스란히 잘 담겼으니~~</p>
<p></br></br></br></p>
<p>그렇게 원하던 아이들을 보고 롯데타워로 들어갔다. 라프라스와 피카츄 말고도 많은 부스나 구경할 거리가 많았는데 1층 안쪽에 있던 스토어나 바깥에 있던 광장 그 모든 곳에 사람들이 너무 길게 줄을 섰더라.. 사람이 많이 없으면 한번 해볼까 싶었던 정도라 딱히 아쉽진 않아서 그냥 지나갔음</p>
<p>그러다가 메타몽들이 모인 벽을 발견했는데 너무 귀여워서 이건 못참지하고 바로 카메라를 들이밀었는데 동생이 그걸 또 찍음;;</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/d3fe5a61-d252-403f-a9a9-024b14a2d2c8/image.png" alt=""></p>
<p>근데 왜 사진이 괜찮지? 오히려 좋아</p>
<p></br></br></p>
<p>그렇게 생각보다 볼거리가 없어서 뭐하지 돌아다니다가 성지순례나 해볼까 하고 아쿠아가든에 다시 들렀다! 전에 같이 SDS 특강을 들었던 친구랑 여기서 내 합격결과를 봤었으니 올해도 기운을 좀 받아야지~</p>
<p>확실히 정말 넓은 곳이구나.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/b7083905-eda9-472d-ba17-f20fa33d2fe1/image.png" alt=""></p>
<p>음료와 케잌 값으로 약 3만원을 태우고 들어갔지만, 넓기도 하고 물멍하기 좋아서 힐링했음! 그렇지만.. 저 스무디와 케잌때문에 혈당 스파이크로 잠이 솔솔오더라 하핳</p>
<p>그래서 여러 자리로 많이 옮겨다니면서 하나하나 물멍하고 거북이 자는거, 올라오다가 미끄러지는 거 구경하고 물이 보글보글 올라오는 소리와 그 일렁임이 좋아서 한참 보다가 사진찍고, 그렇게 한 6시쯤 되었던 것 같음</p>
<p></br></br></p>
<p>나오고 좀 걸어가다가 러쉬가 보여서 한번 들렀는데, 핸드워시랑 손에 거품내서 바르고 물에 헹구기만 해도 되는 로션, 립 스크럽, 그리고 머리에 뿌리는 미스트, 바르는 오일 등 여러 제품들을 소개받고 써보면서 열심히 테스트해봤음!</p>
<p>확실히 립 스크럽 민트향이랑 바디 컨디셔너 팅글 이 제품들이 가장 매력적이었음!</p>
<p>그렇지만, 이 민트향보다도 먼저 산 제품이 있었으니...
바로 슈퍼밀크!</p>
<p>이건 사진을 못찍었음.
하지만 오늘도 뿌리고 나올만큼 아직도 만족하는 제품이다 히히</p>
<p></br></br></p>
<p>그러고 배고파서 오모리의 원조집에 들러 아주 새콤했던 김치찌개를 뇸뇸하고, 2만원 이상 구매해서 돌리게 해주는 포켓몬 돌림판 이벤트도 하고 집으로 돌아왔음</p>
<p>늦은 시간에 가서 경품은 피카츄 풍선밖에 없었지만 그래도 만족했던 하루였다!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/4d150df7-b478-4fe9-b80d-d4546543a998/image.jpg" alt=""></p>
<p><del>그래도 솔직히 팔이랑 꼬리는 입체적으로 만들어주지 그랬냐아..</del></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.04.30.] 20번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL20</link>
            <guid>https://velog.io/@2024-11th/TIL20</guid>
            <pubDate>Tue, 30 Apr 2024 00:18:52 GMT</pubDate>
            <description><![CDATA[<p>어제나 오늘이나 계속 가방을 못챙기고 있다. 헤드셋을 끼고 지갑과 핸드폰을 든 채 걸어오다보니 플래너를 계속 못챙겨옴 으으
오늘도 이번 달 지각 한번도 안했는데 월말이니까 1시에 가볼까 하는 생각을 억누르고 어떻게든 왔으니 그래도 산은 하나 넘었다고 생각해야지 </p>
<p></br></br></p>
<h2 id="오늘의-계획">오늘의 계획</h2>
<p>무튼 그런이유로 지금은 체크리스트로 쓰고 집가서 옮겨적을거임</p>
<ul>
<li><input checked="" disabled="" type="checkbox"> PS 2문제 풀기</li>
<li><input checked="" disabled="" type="checkbox"> 강의 다시보기</li>
<li><input disabled="" type="checkbox"> B형 특강 저번주꺼 복습</li>
<li><input disabled="" type="checkbox"> TIL 작성 마무리</li>
<li><input disabled="" type="checkbox"> CS - 요약집 </li>
<li><input disabled="" type="checkbox"> 정처기 - Git 정리 </li>
<li><input disabled="" type="checkbox"> Spring - 강의 들으며 공책에 정리 </li>
<li><input disabled="" type="checkbox"> 인사이트 정리 (멘토링, 취업특강, ...)</li>
</ul>
<p>음 오늘도 큰 꿈이네</p>
<p></br></br></p>
<h2 id="ps-2문제-풀기">PS 2문제 풀기</h2>
<h3 id="괄호-회전하기">괄호 회전하기</h3>
<p>입력으로 받은 괄호를 회전했을 때 올바른 괄호가 되는 경우의 수를 출력하는 문제. </p>
<p>입출력 예 2개로 판단해보면 아래와 같이 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/402e3c6c-935e-4c72-bbdb-441faf8a85d3/image.png" alt=""></p>
<p>이렇게 보았을 때 특징을 뽑아낼 수 있는데,</p>
<blockquote>
<p>괄호의 분리는 {닫힌괄호} 뒤에 {열린괄호}가 올 때 가능하다</p>
</blockquote>
<p>라는 점이다.</p>
</br>

<p>이 기준만을 가지고 코딩하면 위의 두 경우는 해결이 가능한데, 올바른 괄호가 큰 괄호 안에 포함되어 있다면 생각이 어려워진다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/0ae50a97-113c-48f5-acd4-7701858d556d/image.png" alt=""></p>
<p>회전을 가능한 만큼 해본다 한들, 가장 큰 괄호가 이를 묶고 있어서 사실상 단 한번의 경우인 <code>[[](){}]</code> 만 가능하다.</p>
</br>

<p>그러면 올바른 괄호를 다 찾아서 특정 문자 <code>C</code> 로 스택에 넣어둔 다음 대칭이 되는가를 찾을 수도 있을 것.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/6744ddd9-2d22-4f69-8226-52ab7bec75d2/image.png" alt=""></p>
<p>만약 올바른 괄호가 붙어있지 않더라도 각자 쌍이 생길 것임.</p>
<p>우선 이정도 생각이 드는데 이를 손코딩으로 써보자</p>
<pre><code class="language-java">
/*
{열린괄호}를 만나면
    일단 스택에 넣기

{닫힌괄호}를 만나면
    스택에서 {열린괄호}를 찾기
    {열린괄호}를 찾으면
        특정문자 `C`로 치환 후 pointer 감소
*/</code></pre>
<p>생각으로는 구현이 간단한데 이를 코드로 풀어쓰려니 어떻게 잡아야할지 고민이됨.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/132e1742-67de-4a8f-bdde-b268ef37af32/image.png" alt=""></p>
<p><code>C</code>를 기점으로 감싸는 올바른 괄호가 있다면 더 큰 범위를 C로 취급해야 올바른 결과를 얻을 터.. 이를 코드로 어떻게 표현해야할지 도통 모르겠음.</p>
<p>그냥 간단하게 <code>stack</code>에 <code>C</code>이면 지나가고 <code>괄호</code>면 맞는걸 봐도 괜찮은가 흠</p>
</br>

<p>우선 다시 정리해보면,</p>
<ol>
<li>같은 종류의 괄호가 열리고 닫히는데 안에 아무것도 없거나 <code>C</code>만 있다면 올바른 괄호이므로 <code>C</code>로 묶는다. </li>
<li><code>{닫힌}-{열린}</code> 구성은 다른 괄호이니 분리한다.</li>
<li>단, 올바른 괄호를 <code>C</code>로 묶었다는 전제하에 다른 괄호에서 C만 포함한다면 그 경우는 분리가 불가능한 괄호라는 의미이므로 다시<code>C</code>로 묶는다.</li>
</ol>
<p>인듯하다.</p>
<p>구현이 아직 머리가 아파서 점심먹고 다시 코드로 풀어봐야겠음.</p>
</br>

<p>... </p>
</br>

<p>구현이 어려워서 간단한 로직(이지만 효율성은 좀 버린..)으로 풀어봤음.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/164217b3-0329-4389-abed-d34ce52e37ea/image.png" alt=""></p>
<p>그런데 이 문제를 나같은 생각을 한 사람이 없었다..</p>
<p>왜 그대로 구현한거지 싶긴한데,
하긴 s의 길이가 1000이하이면 가능하겠네</p>
<p></br></br></p>
<h3 id="n2-배열-자르기">n^2 배열 자르기</h3>
<p>가장 쉽게 구현하려면 2차원 배열에 다 전처리 해둔다음 <code>left</code>와 <code>right</code>를 <code>나누기연산</code>과 <code>나머지연산</code>으로 반복문만 돌리면 풀수 있겠지만... </p>
<p>실제 코테가 아니다보니 가장 효율적으로 구현하고 싶은 생각이 샘솟기도 하고, 무엇보다 입력값에서부터 <code>N^2</code>을 할 수 없다는게 보임.</p>
<p>효율적으로 하려면 전처리를 하지 않고 구하는건데, 아니나 다를까 벌써머리가 어지러움 ㅎㅎㅎㅎ</p>
</br>

<p>... </p>
</br>

<p>생각보다 쉽게 구현이 가능했다.</p>
<p>문제를 행 기준으로 보지말고 표 기준으로 보면 한 칸에 들어간 값은 행과 열 인덱스 중 <code>큰값+1</code>과 같았다.</p>
<p>이를 활용해서 풀어보면 아래와 같음.
<img src="https://velog.velcdn.com/images/2024-11th/post/5ee01a26-0faa-4435-bbf9-5db3d47eb0db/image.png" alt=""></p>
<p>오늘 풀어본 두 문제 다 삽질을 했는데, 좀 더 시간복잡도 분석을 하고 가능한 범위이면 바로 구현하는 것도 연습을 해봐야할 듯 싶다. 효율적으로 구현하려다 못하는 것보단 덜 효율적으로 구현하는게 더 낫지.</p>
<p></br></br></p>
<hr/>

<h2 id="강의-다시보기">강의 다시보기</h2>
<p>Spring을 할까 하다가 Vue.js를 복습하고 <a href="https://github.com/fsm12/Dev-Story/tree/main/Frontend">git에 정리</a>를 진행했음. </p>
<p>low level 프론트만 하다가 프레임워크를 다루니 재밌긴하지만 아직은 다소 어렵다.
모던자바스크립트인액션을 결국 읽어야하나..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[주접 가득 담긴 마루 굿즈 개봉기]]></title>
            <link>https://velog.io/@2024-11th/daily1</link>
            <guid>https://velog.io/@2024-11th/daily1</guid>
            <pubDate>Fri, 26 Apr 2024 02:41:29 GMT</pubDate>
            <description><![CDATA[<p>어느 때와 다르지 않은 평일 아침
오늘도 음료를 마실지 말지를 한참 고민하고 있었다.</p>
<p>보통 바나프레소가 가장 가까워서 자주 주문하는데 오늘도 하염없이 먹지 못하는 음료를 구경하며 다 그림의 떡이구나 하고 있었음. 
최근 몸상태 때문에 당류가 낮고 나트륨이 낮은 음료를 주문하려 애쓰고 있기 때문에...</p>
<p></br></br></p>
<p>그러다가 메가박스 어플도 열어봤다.
그런데? 메인에 왜 우리 마루님이 있지??
왜 마루님께서 여기에 보이는걸까!?? 하고 자세히 봤는데</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/8781acba-2e53-4a82-ae48-76567beabae2/image.png" alt=""></p>
<p>와아 아니 메가커피는 왜 나한테 숨기고 출시한거야!!!</p>
<p>수업중이었는데 도파민이 돌더라🤩</p>
</br>

<p>아 이건 못참지 하고 가장 가까운 메가박스에 주문을 눌렀는데</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/f7fb4df3-0bef-4f66-9240-a1fa36967bd7/image.jpg" alt=""></p>
<p>아니 벌써 품절이라고😱?????</p>
<p></br></br></p>
<p>그래서 차례차례로 품절아닌 곳을 찾는데,
좀 걷긴해야 하지만 재고가 남은 곳을 발견했다!
<img src="https://velog.velcdn.com/images/2024-11th/post/52e89ae2-9cdf-41b9-8536-7ed2b8800dc0/image.jpg" alt=""></p>
<p>마루를 바로 받을 수 있다는데 거리가 문제랴
바로 메가커피 어플로 주문넣고 수업도중에 뛰쳐나감 ㅋㅋㅋㅋ</p>
<p></br></br></p>
<p>그 어떤 굿즈 중에서도 코스터가 가장 탐났는데, 
아니 귀엽고 피규어도 있고 6천원 이하인 것도 미쳤는데 코스터에다가 핸드폰 거치대 겸용??
아 이걸 어떻게 참아!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/5c153ac8-b239-4383-9791-4e48eb72562d/image.png" alt=""> </p>
<p>바로 이건 2개 지름~~</p>
<p>그리고 친환경 빨대를 들고다닐 수 있게 해둔게 있어서 유용하겠다 싶어 하나를 주문했다.</p>
<p>그렇게 받은 아이들!!</p>
<p></br></br></p>
<h4 id="우선-음료와-함께-테이크아웃한-포장지부터">우선 음료와 함께 테이크아웃한 포장지부터!</h4>
<p>참고로 음료는 스노우 샹그리아 에이드임
최근에 파스쿠찌에서 뱅쇼를 처음 맛봤는데 생각보다 너무 맛있어서 비슷한 음료를 주문해봤다.
근데 맛은... 풍선껌맛..</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/a6ad1b13-09c6-49dc-8ce3-ea84ec28da6a/image.png" alt=""></p>
<p>으으 내 손을 마루가 지켜주다니 꺄아아ㅏㅏ</p>
<p></br></br></p>
<h4 id="구매한-굿즈들">구매한 굿즈들!!</h4>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/869611de-77be-4f58-a29b-95ab9da205d5/image.png" alt=""></p>
<p>으윽 포장지 마저 소중해ㅠㅠㅠ
너무 뽀짝하고 어떻게 저렇게 나와아아ㅠㅠㅠㅠ</p>
<p>그중에서 코스터는 꼭 한번보고 두번봐야해!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/e6f2f6ad-776f-4dd0-a19c-9c9f16e962bb/image.png" alt=""></p>
<p>그래 마루야 너가 이 세상 다 가져ㅜㅠ 다 보호하고 깨부수고(?) 다 너꺼해!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.04.25.] 19번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL19</link>
            <guid>https://velog.io/@2024-11th/TIL19</guid>
            <pubDate>Thu, 25 Apr 2024 00:39:36 GMT</pubDate>
            <description><![CDATA[<h2 id="⌚-오늘의-플래너">⌚ 오늘의 플래너</h2>
<p>열심히 수업을 안들어서 내일 프로젝트를 대비하기 위해 오늘 공부를 마쳐야한다..! 심지어 오늘은 퇴근 후에도 멘토링이 있어서 끝나고 헬스장을 가면 하루가 끝날 것 같다.
그마저도 너무 바쁘면 헬스장 못감 ㅎㅎㅎㅎㅎ 😢
<img src="https://velog.velcdn.com/images/2024-11th/post/92d12f9e-8353-4060-850b-2054743ef37b/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="1-spring-프로젝트-대비-강의-다시보기">1) Spring 프로젝트 대비 강의 다시보기</h3>
<p>내일은 두명이서 프로젝트를 하는 날이기 때문에, 팀원에게 피해를 주지 않으려면 내 몫은 할 수 있어야겠지!</p>
<p>스프링이 생 처음인건 아니지만, 내가 쓰는 환경과 프젝에서 쓰는 환경은 꽤나 다르기 때문에 <del><em>(eclipse STS와 IntelliJ는 많이 다르더라..)</em></del>
강의 다시보기를 들어갔는데 역시나 엄청나게 쌓여있다;;
주제만 67개 🧊🧊</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/dfb947c5-f887-4ef9-8a0c-e4ba84aedf99/image.png" alt="와 길이봐...">
Java 강의부터 어제 배웠던 부분까지 들어가 있는건데, 그 중 스프링은 아래의 강의들과 오늘 강의이다.
<img src="https://velog.velcdn.com/images/2024-11th/post/1de3c057-4455-4b49-9ccb-a0c7e85ad58e/image.png" alt=""></p>
<p>이야... 장난아니네</p>
<p>그래도 한 주제당 <code>2시간</code> 짜리니까 오늘까지 합치면 <code>18시간</code>이니 2배속을 최대한 하면 <code>9시간</code>만에 끝낼 수 있고? 그건 <code>9to6</code>이니까 가능할지도..? 라는 생각이 들어버림...
지금 벌써 9시반인데 😇</p>
<p>아냐 일단 고민보다 고!!</p>
</br>
. . .
</br></br>

<p>9to6의 시간동안 거의 이것만 했는데 이틀치밖에 못끝냈다.</p>
<p>정리하면서 하느라 느려졌나 쩝</p>
<p>그래도 일단 큰 개념들은 <a href="https://github.com/fsm12/Dev-Story/tree/main/Backend/Spring">깃허브</a>에 열심히 정리해놓았으니 마음은 편하다!</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/a3019ae7-5193-44a3-b939-a3e9eb47ba71/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="2-spring-강의-듣기-10개-프로젝트">2) Spring 강의 듣기 (10개 프로젝트)</h3>
<p></br></br></p>
<hr/>]]></description>
        </item>
        <item>
            <title><![CDATA[[국토종주 인증] 사전 준비물 정보 찾아보기 ]]></title>
            <link>https://velog.io/@2024-11th/bicycle1</link>
            <guid>https://velog.io/@2024-11th/bicycle1</guid>
            <pubDate>Wed, 24 Apr 2024 04:21:32 GMT</pubDate>
            <description><![CDATA[<h4 id="갑자기-국토종주">갑자기 국토종주?</h4>
<p>자전거에 대해 관심이 커진 것은 <code>따릉이</code>가 한몫했다.
어느 때와 다름없이 도로에 배치된 따릉이들과 여러 자전거들을 지나치며 길을 걸어가는게 일상이었는데, 고요한 새벽 강남에서 집으로 걸어가려다 한적한 길을 보고 따릉이가 생각났다. &#39;한번 따릉이 타고 집에 가볼까?&#39; 라는 나의 뜬 제안을 좋아하던 동생과 함께 따릉이를 타고 간다는 것이 선뜻 실감났다.</p>
<p>한번도 길가의 자전거나 킥보드를 타지 않았는데 덕분에 전용 어플도 깔고 1시간 이용권 1000원을 결제했다. 자전거 안장 밑에 있는 QR인식을 하고 탁 소리와 함께 자전거 잠금을 해제했다. 그렇게 정류장에서 끌고나온 자전거는 생각보다 묵직했고, 제멋대로였다.</p>
<p>전에 한번 쯤은 나도 자전거로 세계여행이나 해보고 싶다는 생각을 했었는데, 어떻게든 움켜잡은 나의 자전거는 생각보다 안장이 높아서 까치발을 들어야 했고 무거웠던 따릉이를 세게 잡은채로 자전거를 제어해야했다.</p>
<p>앞쪽을 향하도록 쥐는 것 조차 힘이 들었고, 두 발을 뗀 채로 자전거에 올려놓고 나아가는 것도 어색했다. 그때였을까, 내 체력을 길러 국토종주 한번은 해야겠다 라고 다짐했지. 그렇게 국토종주에 관심을 가지게 되었다.</p>
</br>

<p>원래부터 국토 종주를 해보고 싶다 생각했던 이유는 크게 두가지이다. </p>
<h4 id="1-내가-이끄는-삶을-살기위해">1) 내가 이끄는 삶을 살기위해</h4>
<p>나는 아직도 대학에 진학하고 한번도 하지 못했던 배낭 여행에 한이 맺혀있다. 1학년 때 바로 해보고 싶었던 배낭여행은 친구와 함께 떠나 그 모든 힘든 순간들을 같이 극복하고 서로 응원하며 멋진 가치를 이루어내는 경험으로 간직하고 싶었는데, 공대생들이어서 그런지 생각보다 친구들은 운동을 좋아하지 않았고 30분도 안걸리는 거리를 걷기 싫어하는 친구들이었다. 혼자 떠날 용기도 없던 나는 그렇게 부산에서 서울을 기차로 오갔던 여행을 제외하곤 먼 여행을 떠나보지 못했다. </p>
<h4 id="2-앞으로도-지치지-않을-나의-용기를-얻고자">2) 앞으로도 지치지 않을 나의 용기를 얻고자</h4>
<p>20대를 취준만이 아닌 기억에 남을 특별한 경험으로 남기고 싶었다. 정확히는 앞으로 무엇이든 헤쳐나갈 용기를 얻고자 한다.</p>
<blockquote>
<p>아~ 국토종주도 했는데 이게 뭐라고~ 금방 하지!</p>
</blockquote>
<p>처럼 매사에 긍정적인 마인드를 얻어가보고 싶었다. 
꾸준함이 무엇이든 이길 수 있다는 것을, 하루 하루들을 반복해서 보내는 것이 아닌 나의 가치를 더하는 날로 만들고 있다는 사실을 이 자전거를 통해서 좀 더 체감하고 싶다.</p>
</br>

<p>그렇게 국토종주를 계획하게 되었고, 이렇게 블로그까지 쓰게 되었다. 내 안에 담은 말은 내가 없앨 수 있지만, 공개적으로 보인 말은 이뤄낼 수 있도록 동기를 좀 더 가져다 주니까!</p>
<p></br></br></p>
<h4 id="그래서-국토종주길은-어디에-있는데">그래서 국토종주길은 어디에 있는데?</h4>
<p>우리나라의 자전거길은 크게 12개가 있다.
<img src="https://velog.velcdn.com/images/2024-11th/post/f03f386d-c0e3-4d5f-8b14-26df0185f01a/image.png" alt=""></p>
<p>사진으로 보면 더욱 예쁜데, 각 특징이 더 뚜렷하게 잘 보인다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/625cd4fa-491e-44cf-83a9-c727260e9a62/image.png" alt=""></p>
<p></br></br></p>
<h4 id="종주하면-뭐가좋지">종주하면 뭐가좋지?</h4>
<p>가장 좋은 것은 무엇이든 해낼 수 있다는 동기를 준다는 것이지만, 부가적인 이벤트 목표가 있으면 더욱 해내고자 하는 의지를 주기도 한다.</p>
<p>자전거에도 이런 이벤트 요소가 있는데 이 자전거길을 잘 이용할 수 있도록 동기를 부여하는 <code>종주인증제</code>라는 것이 있다. <code>행정안전부</code>와 <code>환경부</code>에서 공식적으로 공식적으로 인정해 주는 것으로 위 강들을 종주하며 인증스탬프를 찍으면 스티커와 인증서, 그리고 메달을 준다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/59811446-0256-4316-bd25-3d9d753d70fd/image.png" alt="종주 인증 분류"></p>
<p>처음에는 강 하나하나 정복하는 것보단 <code>국토종주</code>나 <code>4대강 종주</code>부터 시작하는게 훨씬 나을 것이라 생각했다. 하지만 이 글을 쓰다가 생각이 바뀌었는데, 가장 큰 이유는 사전 준비물이었다.</p>
<p></br></br></p>
<h4 id="사전-준비물이-얼마나-많길래">사전 준비물이 얼마나 많길래?</h4>
<p>나는 가장 먼저 지출이 세다고 생각했던 부분들은 <code>자전거</code>, <code>숙박비</code>, <code>식비</code>였다. </p>
<p>6일 기준으로 봤을 때 아래와 같다.</p>
<ul>
<li><code>자전거</code> : 최소 20만원</li>
<li><code>숙박비</code> : 모텔기준 하루 5만원이면 최소 30만원</li>
<li><code>식비</code> : 한끼 만원이라 생각하면 18만원</li>
</ul>
<p>우선 여기까지만 해도 약 60만원 정도 나온다.
최솟값으로 산정한 것이므로 더 크게 나올 수 있을텐데 문제는 여기서 끝나지 않는다.</p>
</br>

<h4 id="잠깐-자전거가-아직-없다고">잠깐, 자전거가 아직 없다고?</h4>
<p>그렇다, 나는 아직 자전거를 사지 않았다. 자전거를 타고 출퇴근할 일이 없는 SSAFY생이기도 하고, 면허가 없기 때문에 자전거로 대중교통을 이용해야할 날이 많을텐데 지하철이나 고속버스 등 어떻게 들고 나를 수 있을지에 대해 고민이 많았기 때문에 후에 종주 할 날이 있으면 사는게 좋겠다고 생각했다.</p>
<p>그리고 이게 아주 좋은 생각이었음을 깨달았음.</p>
<p><a href="https://www.youtube.com/watch?v=YNJvs6ybXso">한번만 봐주시면 안될까요? 자전거 국토종주 정말 하고 싶단말이에요</a> 라는 Youtube 영상에서 접이식자전거와 캐링백은 가능하지만, 접이식이 아닌 경우 분해하고 캐링백에 담아야한다는 사실이었다.
그마저도.. 작지 않으면 불가능한 경우가 있다는 것.</p>
<p>그래서 추천하는 자전거가 <code>접이식 미니벨로</code>!</p>
<p>그렇게 찾아보는데 아니 이 자전거들 뭐야
봄이라고 세일을 많이 하네.
<img src="https://velog.velcdn.com/images/2024-11th/post/9a6a46ba-d607-4129-a1f3-e963cc956e20/image.png" alt="">
20만원 안으로 자전거를 구할 수 있는 기회인가 싶어서 198,000 모델들을 살펴봤는데 생각보다 괜찮다!</p>
</br>

<p>나는 자전거를 고를 때 크게 3가지의 기준을 잡았다.</p>
<ol start="0">
<li>저렴해야 한다! 20만원보다 크면 아까워서 못타고 다닐 것 같음.</li>
<li>캐링백에 담고 운반할 수 있어야한다 (접이식, 미니벨로, 20인치 이하)</li>
<li>자전거 고정대는 포함되어야 한다.</li>
</ol>
<p>이 조건들에 부합하는 자전거로 결국 골라보았음.
<img src="https://velog.velcdn.com/images/2024-11th/post/26767d08-1fdf-4dc1-938b-ee617599dc31/image.png" alt=""></p>
<p>와 드디어 국토종주에 한걸음 다가선걸까?</p>
<p></br></br></p>
<h4 id="국토종주에-임하는-각오는-뭐야">국토종주에 임하는 각오는 뭐야?</h4>
<p>여러 깨달음을 얻기위해 국토종주 글과 영상들을 찾아보았고, 그 중에서도 <a href="https://m.blog.naver.com/mingworking/222141005555?referrerCode=1">가장 나에게 동기부여를 줬던 글</a>이 있어서 가져왔다.</p>
<p>아직 5일차 글이 올라오지 않은 상태지만 분량만 보아도 이미 많은 내용들을 글에 써내린 것을 알 수 있었다. 어떻게 저런 힘든 상황속에서도 기록을 위해 많은 사진을 찍고 경험들을 고스란히 포스팅으로 남길 수 있었을까</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.04.23.] 18번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL18</link>
            <guid>https://velog.io/@2024-11th/TIL18</guid>
            <pubDate>Tue, 23 Apr 2024 02:20:07 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-플래너">오늘의 플래너</h2>
<p><code>내가 갓생을 산다면 무엇을 하고 보낸 하루였을까</code>를 생각하며 적어본 모든 리스트이다.
다 끝내야만 한다 라는 생각보단 하나라도 더 하자 라는 마인드로 진행해보려고 한다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/c1b314bc-4d95-451a-8fd1-f6afb7ebabde/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h3 id="1-pjt-ui-디자인">1) [PJT] UI 디자인</h3>
<p>PJT 기록은 <a href="https://velog.io/@2024-11th/Codelution4">블로그</a>에 상세하게 기술하고 있어서 여기에 전반적인 내용을 기록할 생각이다.</p>
<p></br></br></p>
<hr/>

<h3 id="2-b형-특강-복습--ps-2문제-이상-풀기">2) B형 특강 복습 + PS 2문제 이상 풀기</h3>
<p><a href="https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&amp;page=1&amp;partIds=56389%2C58464%2C37527%2C31236%2C25448%2C21366%2C20069%2C17214%2C12286%2C9317%2C22586%2C18498%2C17931%2C300%2C301%2C23708%2C21163%2C18952%2C17615%2C6174&amp;levels=2%2C3%2C4%2C5">코딩테스트 기출문제</a>에서 풀어볼 생각인데, 다시 침체기인가 슬슬 재미가 없다.</p>
<p>그래서 이번엔 <code>SSAFY B형 특강</code>을 복습하고 관련 개념을 정리한 뒤 문제를 풀어보려고 한다.</p>
<p>B형 특강 내용을 정리하다가 모르던 사실을 알게되어 <a href="https://medium.com/@fsm12/arraylist%EC%9D%98-add%EC%97%B0%EC%82%B0-%EC%8B%9C%EA%B0%84%EB%B3%B5%EC%9E%A1%EB%8F%84%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-o-1-%EB%A1%9C-%EB%B3%BC-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C-0379b29e8757">medium</a> 블로그에 업로드했음.</p>
<p></br></br></p>
<hr/>




]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL_2024.04.19.] 17번째 기록]]></title>
            <link>https://velog.io/@2024-11th/TIL17</link>
            <guid>https://velog.io/@2024-11th/TIL17</guid>
            <pubDate>Fri, 19 Apr 2024 07:23:06 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-목표">오늘의 목표</h2>
<p>오늘은 불금이라 오후 8시에 동생이랑 강남에서 저녁을 먹기로 했다!
그래서 9to6은 싸피에서 지내고, 8시까지는 카공하다가 강남으로 이동할 생각임~</p>
<p>그래서 오늘 계획은 중요한 것들만 추렸다.
<img src="https://velog.velcdn.com/images/2024-11th/post/415107d8-ddd2-4afb-8069-4c60b437a236/image.png" alt=""></p>
<p></br></br></p>
<hr/>

<h2 id="1-헬스루틴---나만의-루틴-만들기">1. 헬스루틴 - 나만의 루틴 만들기</h2>
<p>처음인 것 같긴한데 오늘은 PS보다 헬스에 꽂혀버린 나를 위해서 루틴을 먼저 만들어보고자 한다.</p>
</br>

<p>최근 양재에 헬스장 5개월을 끊어서 다니고 있는데 너무 재밌어서 운동이 끌리지 않는 날에는 1시간, 많이 재밌는 날은 2~3시간 정도 하고있다.</p>
<p>그런데, 자세를 제대로 숙지하지 못했는지 아무리 못해도 기구 8개에 대해 15회씩 3세트는 하는데 다음날 근육통이 안와...😔</p>
<p>그래서 자세도 숙지할 겸 운동을 잘하는 사람의 루틴대로 해보면 좋은 자극이 올 것 같아서 계획했다!</p>
</br>

<p><a href="https://www.youtube.com/watch?v=l4THcKL-sPM">한혜진의 운동루틴</a> 소개 영상을 봤고 이를 공책에 정리했다.</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/5f94bbe0-9b7a-4149-8d12-1866536c9c55/image.png" alt=""></p>
<p>혜진님은 헬린이 루틴으로 모든 운동을 다 경험하되 1세트씩 먼저 하고 그 이후 3세트를 하라고 하셨다.</p>
<p>하지만, 1세트씩 하러 다니기엔 인기많은 헬스장이라 자리확보가 쉽지않을 것 같아 <code>Warm Up</code> 유산소 제외 15회씩 2~3세트로 해보려고 한다.</p>
</br>

<p>확실히 기구에 그려져 있는 그림만 보고 하는 것과 실제 설명을 듣는 것 과는 많이 다름을 느꼈는데, 무엇보다 파워 레그프레스에 안전바를 풀어야 한다는 사실이 가장 충격이었다.</p>
<p>양쪽에 플레이트를 10kg 끼웠음에도 30회씩 4세트를 할 때쯤에서야 힘들다 느꼈는데 잘못 이용하고 있었음을 깨달았음. 어쩐지 너무 깔짝깔짝이더라 😢</p>
</br>

<p>오늘은 하필 주기가 돌아와 통증이 쎈 날이라 가지 못하지만.. 내일가서 한번 근육펌핑을 제대로 느껴보리라 </p>
<p></br></br></p>
<hr/>

<h2 id="2-ps-2문제-이상-풀기">2. PS 2문제 이상 풀기</h2>
<p>오늘도 <a href="https://school.programmers.co.kr/learn/challenges?order=recent&amp;page=1&amp;partIds=56389%2C58464%2C37527%2C31236%2C25448%2C21366%2C20069%2C17214%2C12286%2C9317%2C22586%2C18498%2C17931%2C300%2C301%2C23708%2C21163%2C18952%2C17615%2C6174%2C49441%2C49442">기출문제 모음</a>에서 풀어보려고 한다.</p>
<p>그런데 다음문제가 <code>Lv5</code>인데... 저걸 어떻게 풀지 </p>
<p>그래서 난이도별로 올라가는게 낫겠다 생각해서 <code>Lv1</code>을 눌러봤는데 어라라 5문제만 더 풀면 끝나네~
그런 의미로 오늘은 Lv1 문제 중 한번도 풀어보지 않은 문제들만 모두 풀어보는 걸로 하려고 한다!</p>
<h3 id="1-약수의-개수와-덧셈">1) 약수의 개수와 덧셈</h3>
<p>생각보다 시간이 걸렸는데 그 이유는 문제를 제대로 보지 않아서...</p>
<blockquote>
<p>약수의 개수가 홀수이기 위해선 <code>14</code>, <code>36</code> 처럼 <code>N^2</code> 형태로 만들어 질 수 있는 수이면 홀수이다.</p>
</blockquote>
<p>라는 사실은 바로 깨달았지만, 
약수의 개수가 짝수이면 더하고, 홀수이면 뺀다는 것은 결국 누적합을 구했을 땐 2번 빼줘야한다는 것인데 이 점을 간과해서 이 쉬운 문제에 12분을 썼다..</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/68928acc-a71b-4a1d-8085-bc9a03fc2079/image.png" alt=""></p>
</br>

<h3 id="2-음양-더하기">2) 음양 더하기</h3>
<p>Lv1 안에서도 난이도 차이가 있긴하구나를 느낀 문제
이게 왜 Lv0이 아니라 1인걸까..</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/ab3371ed-82d9-4776-92a6-e070e603e75d/image.png" alt=""></p>
<p>2분 30초만에 품!</p>
</br>

<h3 id="3-내적">3) 내적</h3>
<p>오... 이게 더 심한데 왜 Lv1일까</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/fc832f38-93a2-49f0-9a3a-84a426876b98/image.png" alt=""></p>
<p>50초만에 품!</p>
</br>

<h3 id="4-3진법-뒤집기">4) 3진법 뒤집기</h3>
<p>분명 논리는 맞는데... 왜 자꾸 틀렸다고 하는건지 이해를 못했음</p>
<p>그렇게 오류를 찾느라 15분정도 썼는데, 아니 for문 에서 <code>++</code>을 해야하는데 <code>--</code>을 했더라...
그러니 당연히 범위를 벗어나지 😓</p>
<p><img src="https://velog.velcdn.com/images/2024-11th/post/09fb20fd-d0cd-426a-b8a5-5ecad82c4d8d/image.png" alt=""></p>
<p>풀었는데 씁쓸한 문제다...</p>
</br>

<h3 id="5-예산">5) 예산</h3>
<p><img src="https://velog.velcdn.com/images/fsm12/post/fbce4bcf-5b7b-40c3-a131-ff154aa3aa29/image.png" alt=""></p>
<blockquote>
<p>그리디 : 한정된 자원으로 각기 다른 금액을 원하는 부서들에게 신청한 금액만큼 지원하려 할 때, 가장 많은 부서에게 줄 수 있는 방법은 적은 금액을 원하는 부서에게 주는 것이다.</p>
</blockquote>
<p>라는 사실을 알고있었는데,
사실 그리디가 정말 명확해야 쓸 수 있는 방법이기 때문에 엣지케이스를 간과하는 경우가 몇몇 생긴다.</p>
<p>따라서... 구현을 해보기로 했는데
정렬한 뒤에 <code>투포인터</code>로 하나하나 찾아보면 가장 긴 답을 얻을 수 있을 것이라 생각했다.
그랬는데 계속 틀렸다고 나왔음</p>
<p>아무리 생각해봐도 이유를 잘 모르겠어서 첫번째 해법으로 다시 풀어보았고 훨씬 적은 코드로도 맞을 수 있었다.</p>
</br>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring] 스프링 부트 핵심 가이드 (Chap05)]]></title>
            <link>https://velog.io/@2024-11th/SpringbootCoreGuide5</link>
            <guid>https://velog.io/@2024-11th/SpringbootCoreGuide5</guid>
            <pubDate>Tue, 16 Apr 2024 01:44:04 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>참고 : 밑의 코드에서 MemberDto는 postId, title, content, createTime를 가지는 PostDto로 실행하였음</p>
</blockquote>
<p></br></br></p>
<h2 id="1-get-api">1. GET API</h2>
<ul>
<li>CRUD의 R (Read)</li>
<li>URL의 경로나 파라미터에 변수를 넣어 요청을 보냄
</br></br><h4 id="1-requestmapping을-이용">(1) RequestMapping을 이용</h4>
<pre><code class="language-java">@RequestMapping(value = &quot;/hello&quot;, method = RequestMethod.GET)
public String hello() {
  return &quot;Hello World&quot;;
}</code></pre>
<img src="https://velog.velcdn.com/images/fsm12/post/399e168a-f92f-4c49-9cf6-bd50acfbc82f/image.png" alt=""></li>
</ul>
<p></br></br></p>
<h4 id="2-getmapping을-이용">(2) GetMapping을 이용</h4>
<pre><code class="language-java">@GetMapping(value = &quot;/hello&quot;)
public String hello() {
    return &quot;Hello World&quot;;
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/641b2970-25a3-47f2-9c26-e97442cfab4e/image.png" alt="">
</br></br></p>
<h4 id="3-getmapping을-이용--url에-매개변수를-받기">(3) GetMapping을 이용 + URL에 매개변수를 받기</h4>
<pre><code class="language-java">// 1. 같은 변수명
@GetMapping(value = &quot;/variable1/{variable}&quot;)
public String getVariable1(@PathVariable String variable) {
    return variable;
}

// 2. 다른 변수명
@GetMapping(value = &quot;/variable2/{variable}&quot;)
public String getVariable2(@PathVariable(value = &quot;variable&quot;) String value) {
    return value;
}</code></pre>
<ul>
<li>두 코드는 아래의 동일한 결과를 출력
<img src="https://velog.velcdn.com/images/fsm12/post/ba4ca0da-632b-45a8-8e16-2cbd6433fd50/image.png" alt=""></li>
</ul>
<p></br></br></p>
<h4 id="4-getmapping을-이용--requestparam으로-uri뒤에-추가해서-매개변수-받기">(4) GetMapping을 이용 + @RequestParam으로 URI뒤에 추가해서 매개변수 받기</h4>
<ul>
<li><p><a href="http://localhost:8080/request1?name=value1&amp;email=value2">http://localhost:8080/request1?name=value1&amp;email=value2</a> 방식으로 호출</p>
<pre><code class="language-java">@GetMapping(value = &quot;/request1&quot;)
public String getRequestParam1(@RequestParam String name, @RequestParam String email) {
  return name+&quot; &quot;+email;
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/abc86e61-ecd5-4ea5-a470-c7a5d9a3e7e7/image.png" alt="">
</br></br></p>
<h4 id="5-getmapping을-이용--map객체로-받기">(5) GetMapping을 이용 + Map객체로 받기</h4>
</li>
<li><p>매개변수의 항목이 일정하지 않을 때도 받을 수 있음</p>
<pre><code class="language-java">@GetMapping(value = &quot;/request2&quot;)
public String getRequestParam2(@RequestParam Map&lt;String, String&gt; param) {
      StringBuilder sb = new StringBuilder();

      param.entrySet().forEach(map -&gt; { 
              sb.append(map.getKey() + &quot; : &quot; + map.getValue() + &quot;\n&quot;); 
      });
      // param.forEach((key, value) -&gt; sb.append(key).append(&quot; : &quot;).append(value).append(&quot;\n&quot;));

      return sb.toString();
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/684e6c2e-cc74-4ba6-b633-a1055b84363f/image.png" alt="">
</br></br></p>
<h4 id="6-getmapping을-이용--dto-객체">(6) GetMapping을 이용 + DTO 객체</h4>
<pre><code class="language-java">@GetMapping(value = &quot;/request3&quot;)
public String getRequestParam3(MemberDto memberDto){
      return memberDto.toString();
}</code></pre>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fsm12/post/4acfaa93-532d-4b55-934b-3bcf4175ef5f/image.png" alt=""></p>
<p></br></br></p>
<hr>
<p></br></br></p>
<h2 id="2-post-api">2. POST API</h2>
<ul>
<li><p>CRUD의 C (Create)</p>
</li>
<li><p>저장하고자 하는 리소스나 값을 HTTP body에 담아 서버에 전달함
</br></br></p>
<h4 id="1-requestmapping을-이용-1">(1) RequestMapping을 이용</h4>
<pre><code class="language-java">@RequestMapping(value = &quot;/hello&quot;, method = RequestMethod.POST)
public String hello() {
  return &quot;Hello World&quot;;
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/f2c3565d-53cd-4b03-9d3b-db7b9774f0fe/image.png" alt="">
</br></br></p>
<h4 id="2-postmapping을-이용--매개변수의-항목이-일정하지-않을-때를-대비한-map객체로-받기">(2) PostMapping을 이용 + 매개변수의 항목이 일정하지 않을 때를 대비한 Map객체로 받기</h4>
<pre><code class="language-java">@PostMapping(value = &quot;/request1&quot;)
public String postRequestBody1(@RequestBody Map&lt;String, String&gt; body) {
  StringBuilder sb = new StringBuilder();

      body.entrySet().forEach(map -&gt; { 
              sb.append(map.getKey() + &quot; : &quot; + map.getValue() + &quot;\n&quot;); 
      });
      // body.forEach((key, value) -&gt; sb.append(key).append(&quot; : &quot;).append(value).append(&quot;\n&quot;));

      return sb.toString();
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/d58f6be1-5447-410a-9856-665b15cace63/image.png" alt="">
</br></br></p>
<h4 id="3-postmapping을-이용--dto-객체">(3) PostMapping을 이용 + DTO 객체</h4>
<pre><code class="language-java">@PostMapping(value = &quot;/request2&quot;)
public String postRequestBody2(@RequestBody MemberDto memberDto){
      return memberDto.toString();
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/94f20586-08b7-43f4-88db-5ca25eb6d136/image.png" alt="">
</br></br></p>
</li>
</ul>
<hr>
<p></br></br></p>
<h2 id="3-put-api">3. PUT API</h2>
<ul>
<li><p>CRUD의 U (Update) - put/patch
</br></br></p>
<h4 id="1-requestmapping을-이용-2">(1) RequestMapping을 이용</h4>
<pre><code class="language-java">@RequestMapping(value = &quot;/hello&quot;, method = RequestMethod.PUT)
public String hello() {
  return &quot;Hello World&quot;;
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/b216463c-cee7-43d6-ab10-63d49f479341/image.png" alt="">
</br></br></p>
<h4 id="2-putmapping을-이용--매개변수의-항목이-일정하지-않을-때를-대비한-map객체로-받기">(2) PutMapping을 이용 + 매개변수의 항목이 일정하지 않을 때를 대비한 Map객체로 받기</h4>
<pre><code class="language-java">@PutMapping(value = &quot;/request1&quot;)
public String postMember(@RequestBody Map&lt;String, String&gt; body) {
  StringBuilder sb = new StringBuilder();

      body.entrySet().forEach(map -&gt; { 
              sb.append(map.getKey() + &quot; : &quot; + map.getValue() + &quot;\n&quot;); 
      });
      // body.forEach((key, value) -&gt; sb.append(key).append(&quot; : &quot;).append(value).append(&quot;\n&quot;));

      return sb.toString();
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/44e21717-c542-45cc-8ca6-4ad12f57ead2/image.png" alt="">
</br></br></p>
<h4 id="3-putmapping을-이용--dto-객체">(3) PutMapping을 이용 + DTO 객체</h4>
<p><em><strong>1. memberDto.toString() =&gt; content-type : text/plain 으로 일반 문자열</strong></em></p>
<pre><code class="language-java">@PutMapping(value = &quot;/request2&quot;)
public String postMemberDto1(@RequestBody MemberDto memberDto){
      return memberDto.toString();
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/a45c25ea-0fac-4de8-a7b1-9443bef9bcfa/image.png" alt=""></p>
</li>
</ul>
<p><em><strong>2. memberDto =&gt; content-type : application/json 형식</strong></em></p>
<pre><code class="language-java">@PutMapping(value = &quot;/request3&quot;)
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto){
        return memberDto;
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/001ebfff-eec2-496d-8fbe-67d0b2142fea/image.png" alt="">
</br></br></p>
<h4 id="4-putmapping을-이용--responseentity">(4) PutMapping을 이용 + ResponseEntity</h4>
<pre><code class="language-java">@PutMapping(value = &quot;/request4&quot;)
public ResponseEntity&lt;MemberDto&gt; postMemberDto3(@RequestBody MemberDto memberDto) {
        return ResponseEntity
            .status(HttpStatus.ACCEPTED) // 202
            .body(memberDto);
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/2c9a4829-f79a-4159-a9fe-0790bb42e87d/image.png" alt="">
</br></br></p>
<hr>
<p></br></br></p>
<h2 id="4-delete-api">4. DELETE API</h2>
<ul>
<li>CRUD의 D (Delete) - delete
</br></br><h4 id="1-requestmapping을-이용-3">(1) RequestMapping을 이용</h4>
<pre><code class="language-java">@RequestMapping(value = &quot;/hello&quot;, method = RequestMethod.DELETE)
public String hello() {
  return &quot;Hello World&quot;;
}</code></pre>
<img src="https://velog.velcdn.com/images/fsm12/post/b8109141-6ce9-4c90-b914-971f9721dfda/image.png" alt="">
</br></br><h4 id="2-deletemapping을-이용--pathvariable을-활용">(2) DeleteMapping을 이용 + @PathVariable을 활용</h4>
<pre><code class="language-java">@DeleteMapping(value = &quot;/{variable}&quot;)
public String DeleteVariable(@PathVariable String variable){
      return variable;
}</code></pre>
<img src="https://velog.velcdn.com/images/fsm12/post/7dac68c7-0adb-45fa-9e0d-41b1a90a81bd/image.png" alt="">
</br></br><h4 id="3-deletemapping을-이용--requestparam으로-uri뒤에-추가해서-매개변수-받기">(3) DeleteMapping을 이용 + @RequestParam으로 URI뒤에 추가해서 매개변수 받기</h4>
<pre><code class="language-java">@DeleteMapping(value = &quot;/request1&quot;)
public String getRequestParam1(@RequestParam String variable){
      return variable;
}</code></pre>
<img src="https://velog.velcdn.com/images/fsm12/post/b338f48e-95d7-4aa5-bee9-6d2b8f0d6042/image.png" alt="">
</br></br></li>
</ul>
<hr>
<p></br></br></p>
<h2 id="5-api-문서-작성---swagger-이용">5. API 문서 작성 - Swagger 이용</h2>
<ul>
<li>Swagger 경로 : localhost:8080/swagger-ui.html
</br></br><h4 id="🗨️-buildgradle">🗨️ build.gradle</h4>
</li>
<li>지원 중단된 springfox가 아닌 springdoc-openapi-ui 를 사용해야 함</li>
<li><a href="https://swagger.io/docs/specification/about/">Swagger 공식문서</a></li>
<li><a href="https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui/1.7.0">Maven Repository : Gradle 추가 방법 확인하기</a></li>
</ul>
<pre><code class="language-java">implementation &#39;org.springdoc:springdoc-openapi-ui:1.7.0&#39;</code></pre>
<p></br></br></p>
<h4 id="🗨️-swaggerconfigjava--기본-틀">🗨️ SwaggerConfig.java : 기본 틀</h4>
<pre><code class="language-java">import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI springShopOpenAPI() {
        return new OpenAPI()
                .info(new Info().title(&quot;익명 게시판 API Document&quot;)
                        .description(&quot;익명 게시판 API 명세서입니다.&quot;)
                        .version(&quot;1.0.0&quot;));
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/d39cfa2d-630c-454e-a9f2-11dda8901acb/image.png" alt="">
=&gt; 책에선 springfox로 다루고 있어서 여러 변형 방법에 대해서는 공식문서로 공부해야겠음
</br></br></p>
<hr>
<p></br></br></p>
<h2 id="6-로깅-라이브러리---logback">6. 로깅 라이브러리 - Logback</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[[입문] Section 01~02 정리]]></title>
            <link>https://velog.io/@2024-11th/spring-intro-01</link>
            <guid>https://velog.io/@2024-11th/spring-intro-01</guid>
            <pubDate>Tue, 16 Apr 2024 01:42:10 GMT</pubDate>
            <description><![CDATA[<h1 id="🐢-section-01-프로젝트-환경-설정">🐢 Section 01. 프로젝트 환경 설정</h1>
<p></br></br></p>
<h2 id="✨-01-프로젝트-생성">✨ 01. 프로젝트 생성</h2>
<h3 id="1-spring-initializr를-통해-프로젝트-생성">1. spring Initializr를 통해 프로젝트 생성</h3>
<ul>
<li><p><a href="https://start.spring.io/">spring Initializr 페이지</a>
<img src="https://velog.velcdn.com/images/fsm12/post/93c2635f-5c82-47be-8048-54cc74f0a908/image.png" alt=""></p>
<pre><code>  - 프로젝트 선택
      - 프로젝트 : Gradle - Groovy
      - Gradle, Maven 이란 : 빌드 관리 도구

  - Spring Boot : 2.7.12
      - SNAPSHOT, M1같은 미정식 버전을 제외한 최근 버전으로 선택
      - 3.0 주의
          1. Java 17 이상
          2. javax 패키지 이름을 jakarta로 변경 ( https://bit.ly/springboot3 )

  - Language : Java

  - Project Metadata        
      - Group : hello
      - Artifact : hello-spring (필자는 전에 만든적 있어서 spring-intro로 변경)
          - build되어 나온 결과물
      - Packaging : Jar
      - Java : 11 (가장 오류 안 나는 버전)

  - Dependencies : Spring Web, Thymeleaf</code></pre><p></br></br></p>
<h3 id="2--generate해서-받은-zip파일을-원하는-폴더-밑에-풀기">2.  Generate해서 받은 .zip파일을 원하는 폴더 밑에 풀기</h3>
</li>
<li><p>sync 전
<img src="https://velog.velcdn.com/images/fsm12/post/f34b6942-bd3c-49af-bf29-9dcceb7a5eab/image.png" alt=""></p>
</li>
<li><p>sync 후
<img src="https://velog.velcdn.com/images/fsm12/post/1224e5a8-ce61-4560-bada-493923a1fb32/image.png" alt=""></p>
</li>
</ul>
<p></br></br></p>
<h3 id="3--intellij에서-파일-열고-실행">3.  IntelliJ에서 파일 열고 실행</h3>
<ul>
<li><p>파일을 열면 자동 sync 과정을 진행
<img src="https://velog.velcdn.com/images/fsm12/post/6a188fc2-a576-4f33-8a3b-23146a020f7e/image.png" alt=""></p>
</li>
<li><p>아래 버튼을 눌러 실행
<img src="https://velog.velcdn.com/images/fsm12/post/900537dc-c958-49c1-a25b-28dbf42e490e/image.png" alt=""></p>
</li>
<li><p><em><strong>Tomcat started on port(s): 8080 (http) with context path &#39;&#39;</strong></em> 이 떠야 성공적으로 실행된 것임
<img src="https://velog.velcdn.com/images/fsm12/post/09a7b664-c584-4371-812a-8fa8fabfb70e/image.png" alt=""></p>
</li>
<li><p>_<strong>localhost:8080</strong>_을 주소창에 입력하면 아래와 같은 페이지가 나타남
<img src="https://velog.velcdn.com/images/fsm12/post/7ecf71a6-76ff-40b5-a12c-990f5e0a5f1e/image.png" alt=""></p>
</li>
<li><p>만약 Gradle 환경에서 실행했다면, 종료할 때 아래와 같이 오류 문구가 뜸.
<img src="https://velog.velcdn.com/images/fsm12/post/8e046d7a-a699-4e17-b3fb-26a97554a7c4/image.png" alt=""></p>
</li>
</ul>
<p></br></br></p>
<h2 id="✨-02-라이브러리-살펴보기">✨ 02. 라이브러리 살펴보기</h2>
<ul>
<li><p>Gradle은 <strong>의존 관계가 있는 라이브러리를 함께 다운로드</strong> 하므로, External Libraries에 보면 수많은 라이브러리들이 존재</p>
</li>
<li><p>아래 화면의 빨간 원 부분을 클릭하면 주황 영역을 없애거나 나타나게 할 수 있음 ( alt 두 번 )
<img src="https://velog.velcdn.com/images/fsm12/post/480c0432-ef9d-4336-95b1-80b9e4ef6467/image.png" alt=""></p>
</li>
<li><p><strong><em>Gradle → Dependencies → compileClassPath → starter-web → starter-tomcat 내장</em></strong>
⇒ 소스 라이브러리에서 웹 서버를 내장하고 있음 </p>
</li>
<li><p>중복되는 의존성이 있는 아이들은 하나만 나타남 (하위에 없다고 해서 의존성 없는 게 X)
</br></br></p>
<h3 id="📚-핵심-라이브러리">📚 핵심 라이브러리</h3>
<h4 id="dependencies-구성">Dependencies 구성</h4>
<p><img src="https://velog.velcdn.com/images/fsm12/post/f7165d8b-5a9c-4fef-b812-2f9915f90e2c/image.png" alt=""></p>
</li>
<li><p>compileClasspath</p>
</li>
<li><p>runtimeClasspath</p>
</li>
<li><p>testCompileClasspath</p>
</li>
<li><p>testRuntimeClasspath</p>
</li>
</ul>
<p></br></br></p>
<h4 id="스프링-부트-라이브러리">스프링 부트 라이브러리</h4>
<p><img src="https://velog.velcdn.com/images/fsm12/post/87ee5ef3-e60f-49aa-8caa-a21190ae809d/image.png" alt=""></p>
<pre><code>ㄴ spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View)
    ㄴ spring-boot-starter(공통) : 스프링 부트 + 스프링 코어 + 로깅
        ㄴ starter-logging
            ㄴ logback
            ㄴ slf4j
        ㄴ spring-boot
            ㄴ spring-core

ㄴ starter-web
    ㄴ spring-boot-starter-tomcat : 톰캣 (웹서버)
    ㄴ spring-webmvc : 스프링 웹 MVC</code></pre><p></br></br></p>
<h4 id="테스트-라이브러리">테스트 라이브러리</h4>
<p><img src="https://velog.velcdn.com/images/fsm12/post/f493788d-5a70-4458-9c17-a05360b66ca7/image.png" alt=""></p>
<pre><code>ㄴ spring-boot-starter-test
    ㄴ assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    ㄴ junit 5 : 테스트 프레임워크
    ㄴ mockito : Mock 라이브러리
    ㄴ spring-test : 스프링 통합 테스트 지원</code></pre><p></br></br></p>
<h2 id="✨-03-view-환경설정">✨ 03. View 환경설정</h2>
<ul>
<li>static/index.html 을 올려두면 Welcome page 기능을 제공한다.</li>
<li><a href="https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.welcome-page">[spring 공식문서] 1.1.5. Welcome Page</a></li>
<li><strong>버전에 맞는 공식문서로 보는 방법</strong>
  <a href="https://spring.io/">spring.io</a> &gt; Projects &gt; Spring Boot &gt; LEARN &gt; 원하는 버전 Reference Doc.
</br></br><h3 id="💻-정적-화면">💻 정적 화면</h3>
<h4 id="💬-indexhtml">💬 index.html</h4>
<pre><code class="language-html">&lt;!-- 경로 : hello-spring.src.main.resources.static --&gt;
&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Hello&lt;/title&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
Hello
&lt;a href=&quot;/hello&quot;&gt;hello&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<img src="https://velog.velcdn.com/images/fsm12/post/2023badc-1ade-4c5c-9a6c-077ed82b8044/image.png" alt="">
</br></br><h3 id="💻-동적-화면">💻 동적 화면</h3>
</li>
<li><strong>thymeleaf 템플릿 엔진</strong><ul>
<li>thymeleaf 공식 사이트: <a href="https://www.thymeleaf.org/">https://www.thymeleaf.org/</a></li>
<li>스프링 공식 튜토리얼: <a href="https://spring.io/guides/gs/serving-web-content/">https://spring.io/guides/gs/serving-web-content/</a></li>
<li>스프링 부트 메뉴얼: <a href="https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.template-engines">https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.template-engines</a></li>
</ul>
</li>
</ul>
<h4 id="💬-hellocontrollerjava">💬 HelloController.java</h4>
<pre><code class="language-java">package hello.springintro.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello&quot;);
        return &quot;hello&quot;;
    }
}</code></pre>
<h4 id="💬-hellohtml">💬 hello.html</h4>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;head&gt;
    &lt;title&gt;Hello&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;안녕하세요. &#39; + ${data}&quot; &gt;안녕하세요. 손님&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><a href="http://localhost:8080/hello">http://localhost:8080/hello</a>
<img src="https://velog.velcdn.com/images/fsm12/post/7ad58b65-2c0f-4458-8512-73cc5bdce551/image.png" alt="">
</br></br></p>
<ul>
<li>동작 원리
<img src="https://velog.velcdn.com/images/fsm12/post/05bd43a3-4cf3-47f5-9afd-67a8b505f40a/image.png" alt=""></li>
<li>컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리<ul>
<li>스프링 부트 템플릿엔진 기본 viewName 매핑</li>
<li>resources:templates/ +{ViewName}+ .html
</br></br><h2 id="✨-04-빌드하고-실행하기">✨ 04. 빌드하고 실행하기</h2>
<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>*1. gradlew.bat이 존재하는 폴더로 이동</li>
</ul>
<ol start="2">
<li>gradlew build</li>
<li>cd build/libs</li>
<li>java -jar hello-spring-0.0.1-SNAPSHOT.jar</li>
<li>실행 확인**</li>
</ol>
<p><img src="https://velog.velcdn.com/images/fsm12/post/93826d1f-4549-485f-9cf8-8f03d09d7e5f/image.png" alt="">
<img src="https://velog.velcdn.com/images/fsm12/post/2705e1a9-73bb-468c-8187-f50bf4089a5d/image.png" alt=""></p>
<p></br></br></p>
<hr>
<p></br></br></p>
<h1 id="🐢-section-02-스프링-웹-개발-기초">🐢 Section 02. 스프링 웹 개발 기초</h1>
<p></br></br></p>
<h2 id="✨-01-정적-컨텐츠">✨ 01. 정적 컨텐츠</h2>
<ul>
<li><p><a href="https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.static-content">[spring 공식문서] 1.1.4. Static Content</a></p>
<h4 id="💬-hello-statichtml">💬 hello-static.html</h4>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;head&gt;
  &lt;title&gt;Hello&lt;/title&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;안녕하세요. &#39; + ${data}&quot; &gt;안녕하세요. 손님&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/d5d59412-6566-457b-bd06-b560c7691b26/image.png" alt=""></p>
</li>
<li><p>동작 원리 (Simple)
<img src="https://velog.velcdn.com/images/fsm12/post/304b20bf-298e-4678-8661-dc101ea888f5/image.png" alt=""></p>
</li>
</ul>
<p></br></br></p>
<h2 id="✨-02-mvc와-템플릿-엔진">✨ 02. MVC와 템플릿 엔진</h2>
<h4 id="💬-hellocontrollerjava-1">💬 HelloController.java</h4>
<pre><code class="language-java">package hello.springintro.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello&quot;);
        return &quot;hello&quot;;
    }

    @GetMapping(&quot;hello-mvc&quot;)
    public String helloMvc(@RequestParam(&quot;name&quot;) String name, Model model){
        model.addAttribute(&quot;name&quot;, name);
        return &quot;hello-template&quot;;
    }
}</code></pre>
<h4 id="💬-hello-templatehtml">💬 hello-template.html</h4>
<pre><code class="language-html">&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;hello &#39; + ${name}&quot;&gt;hello! empty&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/ddac9ad9-71e9-4c82-9a69-ae09610d25f0/image.png" alt=""></p>
<ul>
<li>동작원리
<img src="https://velog.velcdn.com/images/fsm12/post/3b7ddba2-316b-42be-9468-c3904d1a2dc1/image.png" alt=""></li>
</ul>
<p></br></br></p>
<h2 id="✨-03-api">✨ 03. API</h2>
<h4 id="💬-hellocontrollerjava-2">💬 HelloController.java</h4>
<pre><code class="language-java">package hello.springintro.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello&quot;);
        return &quot;hello&quot;;
    }
    @GetMapping(&quot;hello-mvc&quot;)
    public String helloMvc(@RequestParam(&quot;name&quot;) String name, Model model){
        model.addAttribute(&quot;name&quot;, name);
        return &quot;hello-template&quot;;
    }

    @GetMapping(&quot;hello-string&quot;)
    @ResponseBody
    public String helloString(@RequestParam(&quot;name&quot;) String name){
        return &quot;hello&quot;+name;
    }

    @GetMapping(&quot;hello-api&quot;)
    @ResponseBody
    public Hello helloApi(@RequestParam(&quot;name&quot;) String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello{
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/03621a8d-ae83-4276-9b5a-2c6802a3a93f/image.png" alt=""></p>
<ul>
<li><p>동작원리
<img src="https://velog.velcdn.com/images/fsm12/post/e424efb2-f87a-42bc-a858-d621d2405607/image.png" alt=""></p>
</li>
<li><p>@ResponseBody 를 사용</p>
<ul>
<li>HTTP의 BODY에 문자 내용을 직접 반환</li>
<li>viewResolver 대신에 HttpMessageConverter 가 동작</li>
<li>기본 문자처리: StringHttpMessageConverter</li>
<li>기본 객체처리: MappingJackson2HttpMessageConverter</li>
<li>byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[기본] Section 01~05 정리]]></title>
            <link>https://velog.io/@2024-11th/spring-core-01</link>
            <guid>https://velog.io/@2024-11th/spring-core-01</guid>
            <pubDate>Tue, 16 Apr 2024 01:41:29 GMT</pubDate>
            <description><![CDATA[<h1 id="🐢-section-01-프로젝트-환경-설정">🐢 Section 01. 프로젝트 환경 설정</h1>
<p></br></br></p>
<h2 id="✨-01-프로젝트-생성">✨ 01. 프로젝트 생성</h2>
<h3 id="1-spring-initializr를-통해-프로젝트-생성">1. spring Initializr를 통해 프로젝트 생성</h3>
<ul>
<li><p><a href="https://start.spring.io/">spring Initializr 페이지</a>
<img src="https://velog.velcdn.com/images/fsm12/post/93c2635f-5c82-47be-8048-54cc74f0a908/image.png" alt=""></p>
<pre><code>  - 프로젝트 선택
      - 프로젝트 : Gradle - Groovy
      - Gradle, Maven 이란 : 빌드 관리 도구

  - Spring Boot : 2.7.12
      - SNAPSHOT, M1같은 미정식 버전을 제외한 최근 버전으로 선택
      - 3.0 주의
          1. Java 17 이상
          2. javax 패키지 이름을 jakarta로 변경 ( https://bit.ly/springboot3 )

  - Language : Java

  - Project Metadata        
      - Group : hello
      - Artifact : hello-spring (필자는 전에 만든적 있어서 spring-intro로 변경)
          - build되어 나온 결과물
      - Packaging : Jar
      - Java : 11 (가장 오류 안 나는 버전)

  - Dependencies : Spring Web, Thymeleaf</code></pre><p></br></br></p>
<h3 id="2--generate해서-받은-zip파일을-원하는-폴더-밑에-풀기">2.  Generate해서 받은 .zip파일을 원하는 폴더 밑에 풀기</h3>
</li>
<li><p>sync 전
<img src="https://velog.velcdn.com/images/fsm12/post/f34b6942-bd3c-49af-bf29-9dcceb7a5eab/image.png" alt=""></p>
</li>
<li><p>sync 후
<img src="https://velog.velcdn.com/images/fsm12/post/1224e5a8-ce61-4560-bada-493923a1fb32/image.png" alt=""></p>
</li>
</ul>
<p></br></br></p>
<h3 id="3--intellij에서-파일-열고-실행">3.  IntelliJ에서 파일 열고 실행</h3>
<ul>
<li><p>파일을 열면 자동 sync 과정을 진행
<img src="https://velog.velcdn.com/images/fsm12/post/6a188fc2-a576-4f33-8a3b-23146a020f7e/image.png" alt=""></p>
</li>
<li><p>아래 버튼을 눌러 실행
<img src="https://velog.velcdn.com/images/fsm12/post/900537dc-c958-49c1-a25b-28dbf42e490e/image.png" alt=""></p>
</li>
<li><p><em><strong>Tomcat started on port(s): 8080 (http) with context path &#39;&#39;</strong></em> 이 떠야 성공적으로 실행된 것임
<img src="https://velog.velcdn.com/images/fsm12/post/09a7b664-c584-4371-812a-8fa8fabfb70e/image.png" alt=""></p>
</li>
<li><p>_<strong>localhost:8080</strong>_을 주소창에 입력하면 아래와 같은 페이지가 나타남
<img src="https://velog.velcdn.com/images/fsm12/post/7ecf71a6-76ff-40b5-a12c-990f5e0a5f1e/image.png" alt=""></p>
</li>
<li><p>만약 Gradle 환경에서 실행했다면, 종료할 때 아래와 같이 오류 문구가 뜸.
<img src="https://velog.velcdn.com/images/fsm12/post/8e046d7a-a699-4e17-b3fb-26a97554a7c4/image.png" alt=""></p>
</li>
</ul>
<p></br></br></p>
<h2 id="✨-02-라이브러리-살펴보기">✨ 02. 라이브러리 살펴보기</h2>
<ul>
<li><p>Gradle은 <strong>의존 관계가 있는 라이브러리를 함께 다운로드</strong> 하므로, External Libraries에 보면 수많은 라이브러리들이 존재</p>
</li>
<li><p>아래 화면의 빨간 원 부분을 클릭하면 주황 영역을 없애거나 나타나게 할 수 있음 ( alt 두 번 )
<img src="https://velog.velcdn.com/images/fsm12/post/480c0432-ef9d-4336-95b1-80b9e4ef6467/image.png" alt=""></p>
</li>
<li><p><strong><em>Gradle → Dependencies → compileClassPath → starter-web → starter-tomcat 내장</em></strong>
⇒ 소스 라이브러리에서 웹 서버를 내장하고 있음 </p>
</li>
<li><p>중복되는 의존성이 있는 아이들은 하나만 나타남 (하위에 없다고 해서 의존성 없는 게 X)
</br></br></p>
<h3 id="📚-핵심-라이브러리">📚 핵심 라이브러리</h3>
<h4 id="dependencies-구성">Dependencies 구성</h4>
<p><img src="https://velog.velcdn.com/images/fsm12/post/f7165d8b-5a9c-4fef-b812-2f9915f90e2c/image.png" alt=""></p>
</li>
<li><p>compileClasspath</p>
</li>
<li><p>runtimeClasspath</p>
</li>
<li><p>testCompileClasspath</p>
</li>
<li><p>testRuntimeClasspath</p>
</li>
</ul>
<p></br></br></p>
<h4 id="스프링-부트-라이브러리">스프링 부트 라이브러리</h4>
<p><img src="https://velog.velcdn.com/images/fsm12/post/87ee5ef3-e60f-49aa-8caa-a21190ae809d/image.png" alt=""></p>
<pre><code>ㄴ spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View)
    ㄴ spring-boot-starter(공통) : 스프링 부트 + 스프링 코어 + 로깅
        ㄴ starter-logging
            ㄴ logback
            ㄴ slf4j
        ㄴ spring-boot
            ㄴ spring-core

ㄴ starter-web
    ㄴ spring-boot-starter-tomcat : 톰캣 (웹서버)
    ㄴ spring-webmvc : 스프링 웹 MVC</code></pre><p></br></br></p>
<h4 id="테스트-라이브러리">테스트 라이브러리</h4>
<p><img src="https://velog.velcdn.com/images/fsm12/post/f493788d-5a70-4458-9c17-a05360b66ca7/image.png" alt=""></p>
<pre><code>ㄴ spring-boot-starter-test
    ㄴ assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    ㄴ junit 5 : 테스트 프레임워크
    ㄴ mockito : Mock 라이브러리
    ㄴ spring-test : 스프링 통합 테스트 지원</code></pre><p></br></br></p>
<h2 id="✨-03-view-환경설정">✨ 03. View 환경설정</h2>
<ul>
<li>static/index.html 을 올려두면 Welcome page 기능을 제공한다.</li>
<li><a href="https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.welcome-page">[spring 공식문서] 1.1.5. Welcome Page</a></li>
<li><strong>버전에 맞는 공식문서로 보는 방법</strong>
  <a href="https://spring.io/">spring.io</a> &gt; Projects &gt; Spring Boot &gt; LEARN &gt; 원하는 버전 Reference Doc.
</br></br><h3 id="💻-정적-화면">💻 정적 화면</h3>
<h4 id="💬-indexhtml">💬 index.html</h4>
<pre><code class="language-html">&lt;!-- 경로 : hello-spring.src.main.resources.static --&gt;
&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Hello&lt;/title&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
Hello
&lt;a href=&quot;/hello&quot;&gt;hello&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<img src="https://velog.velcdn.com/images/fsm12/post/2023badc-1ade-4c5c-9a6c-077ed82b8044/image.png" alt="">
</br></br><h3 id="💻-동적-화면">💻 동적 화면</h3>
</li>
<li><strong>thymeleaf 템플릿 엔진</strong><ul>
<li>thymeleaf 공식 사이트: <a href="https://www.thymeleaf.org/">https://www.thymeleaf.org/</a></li>
<li>스프링 공식 튜토리얼: <a href="https://spring.io/guides/gs/serving-web-content/">https://spring.io/guides/gs/serving-web-content/</a></li>
<li>스프링 부트 메뉴얼: <a href="https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.template-engines">https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.template-engines</a></li>
</ul>
</li>
</ul>
<h4 id="💬-hellocontrollerjava">💬 HelloController.java</h4>
<pre><code class="language-java">package hello.springintro.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello&quot;);
        return &quot;hello&quot;;
    }
}</code></pre>
<h4 id="💬-hellohtml">💬 hello.html</h4>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;head&gt;
    &lt;title&gt;Hello&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;안녕하세요. &#39; + ${data}&quot; &gt;안녕하세요. 손님&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><a href="http://localhost:8080/hello">http://localhost:8080/hello</a>
<img src="https://velog.velcdn.com/images/fsm12/post/7ad58b65-2c0f-4458-8512-73cc5bdce551/image.png" alt="">
</br></br></p>
<ul>
<li>동작 원리
<img src="https://velog.velcdn.com/images/fsm12/post/05bd43a3-4cf3-47f5-9afd-67a8b505f40a/image.png" alt=""></li>
<li>컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리<ul>
<li>스프링 부트 템플릿엔진 기본 viewName 매핑</li>
<li>resources:templates/ +{ViewName}+ .html
</br></br><h2 id="✨-04-빌드하고-실행하기">✨ 04. 빌드하고 실행하기</h2>
<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>*1. gradlew.bat이 존재하는 폴더로 이동</li>
</ul>
<ol start="2">
<li>gradlew build</li>
<li>cd build/libs</li>
<li>java -jar hello-spring-0.0.1-SNAPSHOT.jar</li>
<li>실행 확인**</li>
</ol>
<p><img src="https://velog.velcdn.com/images/fsm12/post/93826d1f-4549-485f-9cf8-8f03d09d7e5f/image.png" alt="">
<img src="https://velog.velcdn.com/images/fsm12/post/2705e1a9-73bb-468c-8187-f50bf4089a5d/image.png" alt=""></p>
<p></br></br></p>
<hr>
<p></br></br></p>
<h1 id="🐢-section-02-스프링-웹-개발-기초">🐢 Section 02. 스프링 웹 개발 기초</h1>
<p></br></br></p>
<h2 id="✨-01-정적-컨텐츠">✨ 01. 정적 컨텐츠</h2>
<ul>
<li><p><a href="https://docs.spring.io/spring-boot/docs/2.7.12/reference/html/web.html#web.servlet.spring-mvc.static-content">[spring 공식문서] 1.1.4. Static Content</a></p>
<h4 id="💬-hello-statichtml">💬 hello-static.html</h4>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;head&gt;
  &lt;title&gt;Hello&lt;/title&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;안녕하세요. &#39; + ${data}&quot; &gt;안녕하세요. 손님&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/d5d59412-6566-457b-bd06-b560c7691b26/image.png" alt=""></p>
</li>
<li><p>동작 원리 (Simple)
<img src="https://velog.velcdn.com/images/fsm12/post/304b20bf-298e-4678-8661-dc101ea888f5/image.png" alt=""></p>
</li>
</ul>
<p></br></br></p>
<h2 id="✨-02-mvc와-템플릿-엔진">✨ 02. MVC와 템플릿 엔진</h2>
<h4 id="💬-hellocontrollerjava-1">💬 HelloController.java</h4>
<pre><code class="language-java">package hello.springintro.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello&quot;);
        return &quot;hello&quot;;
    }

    @GetMapping(&quot;hello-mvc&quot;)
    public String helloMvc(@RequestParam(&quot;name&quot;) String name, Model model){
        model.addAttribute(&quot;name&quot;, name);
        return &quot;hello-template&quot;;
    }
}</code></pre>
<h4 id="💬-hello-templatehtml">💬 hello-template.html</h4>
<pre><code class="language-html">&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;hello &#39; + ${name}&quot;&gt;hello! empty&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/ddac9ad9-71e9-4c82-9a69-ae09610d25f0/image.png" alt=""></p>
<ul>
<li>동작원리
<img src="https://velog.velcdn.com/images/fsm12/post/3b7ddba2-316b-42be-9468-c3904d1a2dc1/image.png" alt=""></li>
</ul>
<p></br></br></p>
<h2 id="✨-03-api">✨ 03. API</h2>
<h4 id="💬-hellocontrollerjava-2">💬 HelloController.java</h4>
<pre><code class="language-java">package hello.springintro.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello&quot;);
        return &quot;hello&quot;;
    }
    @GetMapping(&quot;hello-mvc&quot;)
    public String helloMvc(@RequestParam(&quot;name&quot;) String name, Model model){
        model.addAttribute(&quot;name&quot;, name);
        return &quot;hello-template&quot;;
    }

    @GetMapping(&quot;hello-string&quot;)
    @ResponseBody
    public String helloString(@RequestParam(&quot;name&quot;) String name){
        return &quot;hello&quot;+name;
    }

    @GetMapping(&quot;hello-api&quot;)
    @ResponseBody
    public Hello helloApi(@RequestParam(&quot;name&quot;) String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello{
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/fsm12/post/03621a8d-ae83-4276-9b5a-2c6802a3a93f/image.png" alt=""></p>
<ul>
<li><p>동작원리
<img src="https://velog.velcdn.com/images/fsm12/post/e424efb2-f87a-42bc-a858-d621d2405607/image.png" alt=""></p>
</li>
<li><p>@ResponseBody 를 사용</p>
<ul>
<li>HTTP의 BODY에 문자 내용을 직접 반환</li>
<li>viewResolver 대신에 HttpMessageConverter 가 동작</li>
<li>기본 문자처리: StringHttpMessageConverter</li>
<li>기본 객체처리: MappingJackson2HttpMessageConverter</li>
<li>byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음</li>
</ul>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>