<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Si__u.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sat, 06 Jul 2024 18:44:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Si__u.log</title>
            <url>https://velog.velcdn.com/images/si__u/profile/4632573c-9c1b-4a6a-af9c-b414d68508b4/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Si__u.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/si__u" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[톰켓 강제 종료]]></title>
            <link>https://velog.io/@si__u/%ED%86%B0%EC%BC%93-%EA%B0%95%EC%A0%9C-%EC%A2%85%EB%A3%8C</link>
            <guid>https://velog.io/@si__u/%ED%86%B0%EC%BC%93-%EA%B0%95%EC%A0%9C-%EC%A2%85%EB%A3%8C</guid>
            <pubDate>Sat, 06 Jul 2024 18:44:31 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/si__u/post/4a6fc345-797e-4f5b-ab2c-9df2db3b7eeb/image.png" alt="">
서버를 종료한 상태인데 작동 중이라고 뜬다.</p>
<h4 id="해결방안">해결방안</h4>
<ul>
<li>sudo lsof -i:8080 (톰켓 port 번호) 입력한다.</li>
<li>PC Password 입력한다.</li>
<li>리스트에 나오는 PID 확인하여 kill -9 [PID] 입력한다.
<img src="https://velog.velcdn.com/images/si__u/post/add1e8dd-6937-4a2d-9bc3-dee2cfb4b903/image.png" alt=""><hr>

</li>
</ul>
<h4 id="참고">참고</h4>
<p><a href="https://lemagnolia.tistory.com/4">https://lemagnolia.tistory.com/4</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[org.apache.el.parser.ParseException 오류해결방법]]></title>
            <link>https://velog.io/@si__u/org.apache.el.parser.ParseException-%EC%98%A4%EB%A5%98%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@si__u/org.apache.el.parser.ParseException-%EC%98%A4%EB%A5%98%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Fri, 28 Jun 2024 00:33:09 GMT</pubDate>
            <description><![CDATA[<h2 id="1-오류-메세지">1. 오류 메세지</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/ae4fa6cc-56b2-4687-820e-04ca214b7057/image.PNG" alt=""></p>
<h2 id="2-원인">2. 원인</h2>
<ul>
<li>JSTL로 코드 작성하면서 ${}을 사용할 때 &#39;}&#39;을 잘못 기입하였다. </li>
</ul>
<h2 id="3-문제-코드">3. 문제 코드</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/f26abb49-1996-43bf-8ba8-a4de1a05ca81/image.PNG" alt=""></p>
<h2 id="4-해결방법">4. 해결방법</h2>
<ul>
<li>올바르게 &#39;}&#39;를 작성하면 된다.</li>
</ul>
<pre><code>&lt;button id=&quot;deleteReply&quot; name=&quot;${qna.getQna_id()},${qna.getGroup_id()},${qna.getQora()}&quot; onclick=&quot;del(this)&quot;&gt;삭제&lt;/button&gt;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[procedure에서 같은 내용 두 번 저장하는 오류 발생 시]]></title>
            <link>https://velog.io/@si__u/procedure%EC%97%90%EC%84%9C-%EA%B0%99%EC%9D%80-%EB%82%B4%EC%9A%A9-%EB%91%90-%EB%B2%88-%EC%A0%80%EC%9E%A5%ED%95%98%EB%8A%94-%EC%98%A4%EB%A5%98-%EB%B0%9C%EC%83%9D-%EC%8B%9C</link>
            <guid>https://velog.io/@si__u/procedure%EC%97%90%EC%84%9C-%EA%B0%99%EC%9D%80-%EB%82%B4%EC%9A%A9-%EB%91%90-%EB%B2%88-%EC%A0%80%EC%9E%A5%ED%95%98%EB%8A%94-%EC%98%A4%EB%A5%98-%EB%B0%9C%EC%83%9D-%EC%8B%9C</guid>
            <pubDate>Tue, 18 Jun 2024 01:03:43 GMT</pubDate>
            <description><![CDATA[<h3 id="🚨결제-정보-저장-procedure에서-같은-내용-두-번-저장하는-오류-발생">🚨결제 정보 저장 procedure에서 같은 내용 두 번 저장하는 오류 발생!</h3>
<h4 id="♟️-문제-해결-전-procedure-코드">♟️ 문제 해결 전 procedure 코드</h4>
<blockquote>
<p> --결제정보 저장 프로시저
CREATE OR REPLACE PROCEDURE PAY_INSERT_PROC
    (NP_CUS_ID IN PAYMENT.userId%TYPE,
    NP_CART_ID IN NUMBER,
    NP_RECIP_NAME IN PAYMENT.RECIPIENT_NAME%TYPE,
    NP_RECIP_PHONE IN PAYMENT.RECIPIENT_PHONE%TYPE,
    NP_RECIP_POSTCODE IN PAYMENT.postCode%TYPE,
    NP_RECIP_ADDR IN PAYMENT.RECIPIENT_ADDRESS%TYPE,
    CNT OUT NUMBER)
IS<br>    VCART CART%ROWTYPE;
    CURSOR C1 IS SELECT * FROM CART WHERE CART_ID = NP_CART_ID;
BEGIN
<br>
    // open cursor
    OPEN C1;
    LOOP 
    FETCH C1 INTO VCART.CART_ID,VCART.USERID,VCART.PERFORMANCE_ID,
    VCART.PERFORMANCE_NAME,VCART.RESERVATION_SEATS, VCART.TOTAL_RESERVATION_SEATS,VCART.TOTAL_PAYMENT_AMOUNT;
    <br>
    // insert구문
    INSERT INTO PAYMENT 
    VALUES(PAYMENT_ID_SEQ.NEXTVAL, NP_CUS_ID, VCART.PERFORMANCE_ID,
    VCART.PERFORMANCE_NAME, SYSDATE, 
    NP_RECIP_NAME, NP_RECIP_PHONE,NP_RECIP_POSTCODE, NP_RECIP_ADDR,  VCART.RESERVATION_SEATS,VCART.TOTAL_RESERVATION_SEATS, VCART.TOTAL_PAYMENT_AMOUNT);
    <br>
     <span style="color: red">EXIT WHEN C1%NOTFOUND;</span>
    END LOOP;
    CLOSE C1;
    CNT:=1;
END;
/</p>
</blockquote>
<h4 id="♟️-문제-해결">♟️ 문제 해결</h4>
<ul>
<li><span style="color: red">C1%NOTFOUND</span>상태라면  insert 전에 Loop에서 나가야 한다. <br>
즉, <span style="color: red">EXIT WHEN C1%NOTFOUND;</span> insert문 전으로 옮기면 된다.</li>
</ul>
<h4 id="♟️-문제-해결-후-procedure-코드">♟️ 문제 해결 후 procedure 코드</h4>
<blockquote>
<p> --결제정보 저장 프로시저
CREATE OR REPLACE PROCEDURE PAY_INSERT_PROC
    (NP_CUS_ID IN PAYMENT.userId%TYPE,
    NP_CART_ID IN NUMBER,
    NP_RECIP_NAME IN PAYMENT.RECIPIENT_NAME%TYPE,
    NP_RECIP_PHONE IN PAYMENT.RECIPIENT_PHONE%TYPE,
    NP_RECIP_POSTCODE IN PAYMENT.postCode%TYPE,
    NP_RECIP_ADDR IN PAYMENT.RECIPIENT_ADDRESS%TYPE,
    CNT OUT NUMBER)
IS<br>    VCART CART%ROWTYPE;
    CURSOR C1 IS SELECT * FROM CART WHERE CART_ID = NP_CART_ID;
BEGIN
<br>
    // open cursor
    OPEN C1;
    LOOP 
    FETCH C1 INTO VCART.CART_ID,VCART.USERID,VCART.PERFORMANCE_ID,
    VCART.PERFORMANCE_NAME,VCART.RESERVATION_SEATS, VCART.TOTAL_RESERVATION_SEATS,VCART.TOTAL_PAYMENT_AMOUNT;
    <br><span style="color: red">EXIT WHEN C1%NOTFOUND;</span><br>
    // insert구문
    INSERT INTO PAYMENT 
    VALUES(PAYMENT_ID_SEQ.NEXTVAL, NP_CUS_ID, VCART.PERFORMANCE_ID,
    VCART.PERFORMANCE_NAME, SYSDATE, 
    NP_RECIP_NAME, NP_RECIP_PHONE,NP_RECIP_POSTCODE, NP_RECIP_ADDR,  VCART.RESERVATION_SEATS,VCART.TOTAL_RESERVATION_SEATS, VCART.TOTAL_PAYMENT_AMOUNT);
    <br>
    END LOOP;
    CLOSE C1;
    CNT:=1;
END;</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[이클립스 톰켓 버전 추가하기]]></title>
            <link>https://velog.io/@si__u/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-%ED%86%B0%EC%BC%93-%EB%B2%84%EC%A0%84-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-%ED%86%B0%EC%BC%93-%EB%B2%84%EC%A0%84-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 13 Jun 2024 12:24:23 GMT</pubDate>
            <description><![CDATA[<h2 id="♟️-runtime-environments에-새로운-톰켓-추가하기">♟️ Runtime Environments에 새로운 톰켓 추가하기</h2>
<h4 id="1-원하는-톰켓-다운로드-한-후에-압축파일을-풉니다">1. 원하는 톰켓 다운로드 한 후에 압축파일을 풉니다.</h4>
<h4 id="2-이클립스-설정-runtime-environments-add를-선택합니다저는-이미-9버전을-넣은-상태입니다">2. 이클립스 설정-Runtime Environments-Add를 선택합니다.(저는 이미 9버전을 넣은 상태입니다.)</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/8a412cd0-a2ca-454f-be7c-45fda5196145/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/419a527e-0afa-4d26-9b5b-f9f74060cc3e/image.png" alt=""></p>
<h4 id="3-추가하길-원하는-톰켓-버전을-선택합니다">3. 추가하길 원하는 톰켓 버전을 선택합니다.</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/ab9976d3-3b40-4f72-a3e3-57fbc6698647/image.png" alt=""></p>
<h4 id="4-browse을-클릭한-후-압축해제한-파일을-찾아서-선택합니다-jre를-선택합니다">4. Browse..을 클릭한 후 압축해제한 파일을 찾아서 선택합니다. JRE를 선택합니다.</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/ec85a354-2230-4b8d-9c32-1a2beb1de442/image.png" alt=""></p>
<h2 id="♟️-서버에-추가하기">♟️ 서버에 추가하기</h2>
<ul>
<li>방금 추가한 톰켓버전을 선택하여 추가하면 됩니다.
<img src="https://velog.velcdn.com/images/si__u/post/8ad23e24-2208-4490-a3be-d6a2b51fc533/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/84771b3f-6981-49ac-8bf4-7b254ce3ad37/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[e325: attention 해결법]]></title>
            <link>https://velog.io/@si__u/e325-attention-%ED%95%B4%EA%B2%B0%EB%B2%95-y0xt2vnk</link>
            <guid>https://velog.io/@si__u/e325-attention-%ED%95%B4%EA%B2%B0%EB%B2%95-y0xt2vnk</guid>
            <pubDate>Wed, 12 Jun 2024 05:12:33 GMT</pubDate>
            <description><![CDATA[<h2 id="e325-attention-해결하기">e325: attention 해결하기</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/c888781f-7096-4f12-954b-ecd3af96c4aa/image.png" alt=""></p>
<h4 id="1-r-키를-눌러-복구합니다">1. &#39;r&#39; 키를 눌러 복구합니다.</h4>
<h4 id="2-복구-후-wq-명령어를-사용하여-저장종료합니다">2. 복구 후 [:wq!] 명령어를 사용하여 저장종료합니다.</h4>
<h4 id="3-rm-파일명swp명령어를-입력하여-swp-파일을-삭제합니다">3. rm {파일명.swp}명령어를 입력하여 .swp 파일을 삭제합니다.</h4>
<blockquote>
<p>rm .../.bash_profile.swp</p>
</blockquote>
<h4 id="4-다시-들어가보면-오류가-뜨지-않는-것을-확인할-수-있습니다">4. 다시 들어가보면 오류가 뜨지 않는 것을 확인할 수 있습니다.</h4>
<hr>

<h4 id="참고">참고</h4>
<p><a href="https://namse0k.tistory.com/14">https://namse0k.tistory.com/14</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[인용부호가 요구됩니다.]]></title>
            <link>https://velog.io/@si__u/%EC%9D%B8%EC%9A%A9%EB%B6%80%ED%98%B8%EA%B0%80-%EC%9A%94%EA%B5%AC%EB%90%A9%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@si__u/%EC%9D%B8%EC%9A%A9%EB%B6%80%ED%98%B8%EA%B0%80-%EC%9A%94%EA%B5%AC%EB%90%A9%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Sat, 08 Jun 2024 17:49:22 GMT</pubDate>
            <description><![CDATA[<h2 id="인용부호가-요구됩니다-오류">&#39;인용부호가 요구됩니다&#39; 오류</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/158eefcb-23a0-4a79-9b11-0225aa0492a4/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/adacc096-4da3-4338-95aa-a1d49255ff92/image.PNG" alt=""></p>
<p>해결방법은 간단하다. 
인용부호를 붙이면 된다.</p>
<p>내 경우 jsp:useBean의 class 다음에 &quot;&quot;를 빠져있어서 넣으니 해결되었다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac) 이클립스에서 JSP 웹페이지 작성하기]]></title>
            <link>https://velog.io/@si__u/Mac-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%97%90%EC%84%9C-JSP-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/Mac-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%97%90%EC%84%9C-JSP-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 26 May 2024 02:37:46 GMT</pubDate>
            <description><![CDATA[<h2 id="1-서버-프로젝트-생성하기">1. 서버 프로젝트 생성하기</h2>
<h4 id="1-1-서버-runtime-environments-추가하기">1-1. 서버 Runtime Environments 추가하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/d7592296-9cda-41b5-82ed-630aeb32f167/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/110bf986-d757-4968-af66-2497c75235e3/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/a5116934-5c3e-4a91-bb62-725edd374ea7/image.png" alt="">
🚨JRE는 본인에게 맞는 버전을 선택하면 됩니다.</p>
<h4 id="1-2-서버-프로젝트-생성하기">1-2. 서버 프로젝트 생성하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/b1513e77-7909-4aa7-a44f-f1920fc5e41c/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/b993c8ec-264b-4354-9690-4fcb54338f36/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/cff160b6-5d41-41f9-84a3-d3e050700942/image.png" alt=""></p>
<h2 id="2-웹-프로젝트-생성하기">2. 웹 프로젝트 생성하기</h2>
<h4 id="2-1-웹-프로젝트-생성하기">2-1. 웹 프로젝트 생성하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/e2d1146d-7ba8-40af-b569-3620bf54a624/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/3fd2a1e5-ccd5-4e27-a580-0b15d917b24b/image.png" alt=""></p>
<h4 id="2-2-jsp-파일-생성하기">2-2. jsp 파일 생성하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/d501e8c0-8add-4878-a9b3-93692b035399/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/4912e764-cae7-47f7-858a-c990fe961db4/image.png" alt=""></p>
<h4 id="2-3-jsp-웹페이지-작성하기">2-3. jsp 웹페이지 작성하기</h4>
<pre><code>&lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;welcome&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;welcome jsp&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h4 id="2-4-톰캣-서버에-프로젝트-등록하기">2-4. 톰캣 서버에 프로젝트 등록하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/6c1e1e75-a14a-4bb5-84b1-e85a7eb39d39/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/682303e9-20da-4bfb-990c-758062fd1e7f/image.png" alt=""></p>
<h2 id="3-jsp-웹페이지-보기">3. JSP 웹페이지 보기</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/f2ec1069-93a6-44d0-a1ef-ea17e3d5067d/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/ff3ab0d2-64e7-4934-8911-f4fc4f89d043/image.png" alt=""></p>
<p>♟️결과
<img src="https://velog.velcdn.com/images/si__u/post/da0b7d69-ae86-4013-929a-532c758b0d5e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac) ORA-17002, ORA-12505]]></title>
            <link>https://velog.io/@si__u/Mac-ORA-17002-ORA-12505</link>
            <guid>https://velog.io/@si__u/Mac-ORA-17002-ORA-12505</guid>
            <pubDate>Sat, 25 May 2024 13:11:26 GMT</pubDate>
            <description><![CDATA[<h2 id="1-ora-17002">1. ORA-17002</h2>
<p>oracle sql developer 실행시 <span style="color:red">17002</span> 오류가 떠서 
터미널에서 docker ps --all를 했는데 
다음과 같이 뜬다.</p>
<blockquote>
<p>Cannot connect to the Docker daemon at unix:///Users/ansiu/.colima/default/docker.sock. Is the docker daemon running?</p>
</blockquote>
<h3 id="1-1-colima-실행">1-1. colima 실행</h3>
<p>colima start
🚨 생각보다 시간 오래걸림 주의!</p>
<h3 id="1-2-컨테이너-이름-확인-후-도커-재실행">1-2. 컨테이너 이름 확인 후 도커 재실행</h3>
<p>docker ps -a
docker restart {컨테이너 이름}</p>
<p><br><br></p>
<h2 id="2-ora-12505">2. ORA-12505</h2>
<p>이렇게 해결됐다고 생각한 후 sql developer를 실행하니 <span style="color:red">12505</span> 오류가 떴다! </p>
<p>해결방법은 간단하다.
다음과 같이 이름만 바꿔서 사용자 재접속을 하면 된다.
<img src="https://velog.velcdn.com/images/si__u/post/09491fb9-4890-478e-a64c-401bd1d2737b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac) 이클립스와 Tomcat 연동하기]]></title>
            <link>https://velog.io/@si__u/Mac-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%99%80-Tomcat-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/Mac-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%99%80-Tomcat-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 24 May 2024 00:09:08 GMT</pubDate>
            <description><![CDATA[<h2 id="1-tomcat-설치">1. Tomcat 설치</h2>
<ul>
<li>이전 게시물을 참고하세요.
<a href="https://velog.io/@si__u/Mac-OS-%ED%86%B0%EC%BC%93-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%ED%96%89">https://velog.io/@si__u/Mac-OS-%ED%86%B0%EC%BC%93-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%ED%96%89</a></li>
</ul>
<h2 id="2-이클립스-설치">2. 이클립스 설치</h2>
<ul>
<li>아래 링크로 들어가서 이클립스를 다운로드하세요. 
<a href="https://www.eclipse.org/downloads/packages/">https://www.eclipse.org/downloads/packages/</a>
<img src="https://velog.velcdn.com/images/si__u/post/e3d9e97a-66d2-4cb1-b315-0a05888ab50d/image.png" alt=""></li>
</ul>
<h2 id="3-이클립스-환경설정">3. 이클립스 환경설정</h2>
<h4 id="3-1-기본-웹-브라우저-설정하기">3-1. 기본 웹 브라우저 설정하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/338056f4-9fcf-454c-9683-dd75e0c3f687/image.png" alt=""></p>
<h4 id="3-2-텍스트-인코딩-설정하기">3-2. 텍스트 인코딩 설정하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/22e65cc3-9b8a-4f8d-b313-e9ed5fa6f037/image.png" alt=""></p>
<h4 id="3-3-캐릭터-인코딩-설정하기">3-3. 캐릭터 인코딩 설정하기</h4>
<p>CSS Files
<img src="https://velog.velcdn.com/images/si__u/post/87d6681c-68d9-4219-b970-a48ecf27db36/image.png" alt=""></p>
<p>HTML Files
<img src="https://velog.velcdn.com/images/si__u/post/4803fb33-01e7-4a23-a549-ff89fdccc8b8/image.png" alt=""></p>
<p>JSP Files
<img src="https://velog.velcdn.com/images/si__u/post/ce040131-3d4d-4387-8491-cd37b784554f/image.png" alt=""></p>
<h4 id="3-4-탭-간격-조절하기">3-4. 탭 간격 조절하기</h4>
<p><img src="https://velog.velcdn.com/images/si__u/post/9474141b-66be-4a8b-9ea3-5803670b37b1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Servlet이란]]></title>
            <link>https://velog.io/@si__u/Servlet%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@si__u/Servlet%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Wed, 22 May 2024 23:16:00 GMT</pubDate>
            <description><![CDATA[<h2 id="1-servlet의-jsp의-차이점">1. Servlet의 JSP의 차이점</h2>
<h4 id="♟️-servlet">♟️ Servlet</h4>
<blockquote>
<ul>
      <li>서버환경에서만 돌아간다.</li>
    <li>자바이지만, 그 안에 문자열 형태로 html이 있다.</li>
      <li>네트워크로 클라이언트에게 html을 전달한다.</li>
</blockquote>
</ul>

<h4 id="♟️-jsp">♟️ JSP</h4>
<blockquote>
 <ul>
    <li>Servlet의 단점을 보안한 프로그램이다.</li>
      <li>html로 보이지만 서블릿이다.<br>(내부에서 서블릿으로 변환해서 프로그램이 돌아간다.)</li>
      <li>그 안에 자바언어를 비슷하게 사용할 수 있다.</li>
</blockquote>
</ul>



<h2 id="2-servlet의-실행과정">2. Servlet의 실행과정</h2>
<blockquote>
<ul>
    <li>클라이언트가 페이지를 요청한다.<br>
      (get 또는 post 방식으로 요청한다.)</li>
      <li>요청한 페이지가 Html이면 WAS가 찾아서 보내준다. </li>
      <li>요청한 페이지가 Servlet이면 WAS는 이 페이지가 있는지 확인한다.</li>
      <li>있다면 HttpServletRequest와 HttpServletResponse 객체를 생성한다.</li>
      <li>해당 Servlet 객체를 생성하고, 사용자의 요청을 처리할 Thread를 생성한다.<br>
  (HttpServletRequest는 모든 요청 정보를,  HttpServletResponse는 모든 응답 정보를 가지고 있다.)</li>
      <li>Servlet의 service() 메소드를 호출하고, 요청방식(get,post)에 따라서 어떤 메소드를 호출할지 결정한다.</li>
  <li>요청방식에 따라 doGet() 또는 doPost()메소드를 호출할 때, 매개변수로 HttpServletRequest와 HttpServletResponse 두어
사용자의 요청을 처리하고, 응답을 작성한다.</li>
  <li>작성된 응답을 클라이언트에 전송한다.</li>
  <li>Thread는 소멸한다.</li>
</blockquote>
</ul>

<h2 id="3-get-방식과-post-방식">3. GET 방식과 POST 방식</h2>
<h4 id="♟️-get-방식url">♟️ GET 방식(url)</h4>
<blockquote>
<ul>
<li>서버에 있는 정보를 가져오기 위해 설계되었다.</li>
</ul>
</blockquote>
<ul>
<li>240바이트까지 전달할 수 있다.</li>
<li>QUERY_STRING 환경변수를 통해 전달된다.</li>
<li>형식 : <a href="http://xxx.xxx.co.kr/servlet/login?id=tom&amp;name=ari">http://xxx.xxx.co.kr/servlet/login?id=tom&amp;name=ari</a></li>
<li>URL노출로 보안성이 요구되는 경우에는 사용할 수 없다.</li>
<li>anchor안에 줄 수 있다.</li>
</ul>
<h4 id="♟️-post-방식">♟️ POST 방식</h4>
<blockquote>
<ul>
<li>서버로 정보를 올리기 위해 설계되었다.</li>
</ul>
</blockquote>
<ul>
<li>데이터크기가 무제한이다.</li>
<li>헤더에 데이터가 들어가서, 보안에 안전하다.</li>
<li>폼안에서만 넣을 수 있다는 제한이 있다. </li>
</ul>
<h2 id="4-servlet의-라이프-사이클-관련-메소드-정리">4. Servlet의 라이프 사이클 관련 메소드 정리</h2>
<h4 id="♟️-init-">♟️ init() :</h4>
<blockquote>
<ul>
<li>Servlet 객체를 디폴트 생성자를 이용해 생성할 때, 
init()메소드를 사용해서 서블릿 객체를 초기화한다.</li>
</ul>
</blockquote>
<ul>
<li>한 번만 호출된다.</li>
</ul>
<h4 id="♟️-service-">♟️ service() :</h4>
<blockquote>
<ul>
<li>HTTP 메소드를 참조하여 doGet()을 호출할지, doPost()를 호출할지 결정한다. </li>
</ul>
</blockquote>
<ul>
<li>요청이 있을 때마다 호출된다</li>
</ul>
<h4 id="♟️-destroy-">♟️ destroy() :</h4>
<blockquote>
<ul>
<li>Servlet이 소멸될 때 호출된다. </li>
</ul>
</blockquote>
<ul>
<li>자원해제와 관련된 작업을 한다. <ul>
<li>init() 메소드와 같이 한 번만 호출된다.</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac OS 톰켓 설치 및 실행]]></title>
            <link>https://velog.io/@si__u/Mac-OS-%ED%86%B0%EC%BC%93-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%ED%96%89</link>
            <guid>https://velog.io/@si__u/Mac-OS-%ED%86%B0%EC%BC%93-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%ED%96%89</guid>
            <pubDate>Wed, 22 May 2024 09:40:28 GMT</pubDate>
            <description><![CDATA[<h2 id="1-tomcat-설치하기">1. Tomcat 설치하기</h2>
<p><a href="https://tomcat.apache.org/download-10.cgi">https://tomcat.apache.org/download-10.cgi</a></p>
<ul>
    <li>url에 접속해서 최신버전으로 다운로드한다.</li>
    <li>리눅스와 맥의 경우 <span style="color:red">tar.gz</span>을 클릭한다.</li>
      <li>파일 압축을 푼다.</li>
</ul>

<p><img src="https://velog.velcdn.com/images/si__u/post/4bdc6024-e374-4041-b313-1d7c5df933b9/image.png" alt=""></p>
<h2 id="2-tomcat-실행하기">2. Tomcat 실행하기</h2>
<h4 id="2-1-터미널을-실행한다">2-1. 터미널을 실행한다.</h4>
<h4 id="2-2-아래와-같이-cd-압축해제한-폴더의-bin까지-경로를-입력한-명령어를-실행한다">2-2. 아래와 같이 &#39;cd 압축해제한 폴더의 bin까지 경로&#39;를 입력한 명령어를 실행한다.</h4>
<p>🚨cd 다음 spacebar <span style="color:red">한칸</span>이 존재한다.</p>
<blockquote>
<p>cd /.../Tomcat/apache-tomcat-10.1.24/bin</p>
</blockquote>
<h4 id="2-3-bin으로-들어왔다면-다음과-같은-명령어를-실행하여-tomcat-실행한다">2-3. bin으로 들어왔다면 다음과 같은 명령어를 실행하여 Tomcat 실행한다.</h4>
<p>🚨만약 이클립스에서도 서버를 실행하고 있다면 사이트 연결이 제대로 되지않는다. 기존 서버는 중지시키고, 다음 명령어를 실행해야 한다.</p>
<blockquote>
<p>./startup.sh</p>
</blockquote>
<p>그러면 터미널에 Tomcat started.라는 문구가 뜬다.</p>
<h4 id="2-4-웹브라우저에-다음과-같은-url을-입력한다tomcat의-포트는-8080이다">2-4. 웹브라우저에 다음과 같은 url을 입력한다.(tomcat의 포트는 8080이다.)</h4>
<blockquote>
<p><a href="http://localhost:8080/">http://localhost:8080/</a></p>
</blockquote>
<h4 id="2-5-tomcat을-종료하기-위해서는-다음과-같은-명령어-실행한다">2-5. Tomcat을 종료하기 위해서는 다음과 같은 명령어 실행한다.</h4>
<blockquote>
<p> ./shutdown.sh</p>
</blockquote>
<p>localhost 페이지를 새로고침하면 사이트 연결되지 않음을 볼 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[정수 내림차순으로 배치하기]]></title>
            <link>https://velog.io/@si__u/%EC%A0%95%EC%88%98-%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/%EC%A0%95%EC%88%98-%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 10 May 2024 01:59:17 GMT</pubDate>
            <description><![CDATA[<h2 id="1-문제설명">1. 문제설명</h2>
<p>함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.</p>
<h2 id="2-제한사항">2. 제한사항</h2>
<p>n은 1이상 8000000000 이하인 자연수입니다.</p>
<h2 id="3-입출력-예시">3. 입출력 예시</h2>
<table>
    <tr>
          <td>n</td>
          <td>return</td>
      </tr>
      <tr>
          <td>118372</td>
          <td>873211</td>
      </tr>
</table>

<h2 id="4-solution">4. solution</h2>
<pre><code>import java.util.*;
class Solution {
    public long solution(long n) {
        String num = &quot;&quot; + n;
        String[] arr = num.split(&quot;&quot;);
        StringBuffer sb = new StringBuffer();
        Arrays.sort(arr, Comparator.reverseOrder());
        for (String data : arr) {
            sb.append(data);
        }
        return Long.parseLong(sb.toString());
    }
}</code></pre><h2 id="5-풀이">5. 풀이</h2>
<ul>
    <li>Arrays.sort(arr, Comparator.reverseOrder()); <br>
      배열을 내림차순으로 정렬한다.
      </li>
      <li>
  StringBuffer sb = new StringBuffer();<br>
   for (String data : arr) sb.append(data);<br>
   StringBuffer를 사용해서 배열을 하나의 문자열로 만든다.
      </li>
      <li>
  Long.parseLong(sb.toString()); <br>
      문자열을 정수로 변환
  </li>
</ul>

<hr>

<h4 id="출처">출처</h4>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/12933">https://school.programmers.co.kr/learn/courses/30/lessons/12933</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[삼총사]]></title>
            <link>https://velog.io/@si__u/%EC%82%BC%EC%B4%9D%EC%82%AC</link>
            <guid>https://velog.io/@si__u/%EC%82%BC%EC%B4%9D%EC%82%AC</guid>
            <pubDate>Wed, 08 May 2024 14:18:35 GMT</pubDate>
            <description><![CDATA[<h2 id="1-문제설명">1. 문제설명</h2>
<p>한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.</p>
<h2 id="2-제한사항">2. 제한사항</h2>
<ul>
    <li>3 ≤ number의 길이 ≤ 13</li>
      <li>-1,000 ≤ number의 각 원소 ≤ 1,000</li>
     <li>서로 다른 학생의 정수 번호가 같을 수 있습니다.</li>
</ul>


<h2 id="3-입출력-예시">3. 입출력 예시</h2>
<table>
  <tr>
  <td>number</td>
  <td>result</td>
  </tr>
  <tr>
  <td>[-2,3,0,2,-5]</td>
  <td>2</td>
  </tr>
  <tr>
  <td>[-3,-2,-1,0,1,2,3]</td>
  <td>5</td>
  </tr>
  <tr>
  <td>[-1,1,-1,1]</td>
  <td>0</td>
  </tr>
</table>

<h2 id="4-solution">4. solution</h2>
<pre><code>class Solution {
        public int solution(int[] number) {
            int count = 0;
            //i,j,k가 겹치지 않도록 for문을 쓴다.
            for (int i = 0; i &lt; number.length-2; i++) {     
                for (int j = i + 1; j &lt; number.length-1; j++) {
                    for (int k = j + 1; k &lt; number.length; k++) {
                        if (number[i] + number[j] + number[k] == 0) {
                            count++;
                        }
                    }
                }
            }
            return count;
        }
    }</code></pre><h2 id="5-풀이">5. 풀이</h2>
<ul>
    <li>number 배열 안에서 3개의 숫자를 가져올 때, 가져오는 숫자가 중복되면 안된다.<br>
  따라서, int i=0,  int j=i+1, int k=j+1로 for문 초기값을 적는다.</li>
      <li>문제에 맞추어 가져온 3개의 숫자 합이 0일 때에 갯수를 1씩 더한다.<br>
  if (number[i] + number[j] + number[k] == 0) count++;
  </li>
</ul>

<hr>

<h4 id="출처">출처</h4>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/131705">https://school.programmers.co.kr/learn/courses/30/lessons/131705</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac Os에서 SQL developer 설치 및 연동하기]]></title>
            <link>https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-SQL-developer-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-SQL-developer-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 07 May 2024 12:19:17 GMT</pubDate>
            <description><![CDATA[<h2 id="1-전제조건">1. 전제조건</h2>
<ul>
    <li>docker와 colima 설치 완료</li>
      <li>docker 컨테이너 생성 완료<br>
      (SQL developer와 연동하기 위해서는 해당 docker 컨테이너가 실행 상태이어야 한다.)
  </li>
</ul>

<h2 id="2-docker와-colima-실행하기">2. docker와 colima 실행하기</h2>
<p>아래 명령어를 입력하여 docker와 colima 실행합니다.
colima 실행시 생각보다 시간이 오래 걸릴 수 있으므로 당황하지 마세요😅<br>
이후 명령어의 <span style="color:red">oraclexe</span>에는 자신의 컨테이너 이름을 넣으시면 됩니다. 이름이 기억나지 않는다면 <mark style="background-color:lightgreen"> docker ps -a </mark> 명령어를 입력하여 이름을 확인하시면 됩니다.</p>
<pre><code>colima start --memory 4 --arch x86_64
docker start oraclexe</code></pre><h2 id="3-sql-developer-설치하기">3. SQL developer 설치하기</h2>
<p><a href="https://www.oracle.com/database/sqldeveloper/technologies/download/">https://www.oracle.com/database/sqldeveloper/technologies/download/</a>
오라클 홈페이지에 방문하여 Mac ARM64 with JDK 11 included를 다운로드 및 설치한다.<br>
🚨이때 오라클 개정이 없다면, 만들어야 다운로드가 가능하다.</p>
<h2 id="4-sql-developer-실행하기">4. SQL developer 실행하기</h2>
<p>SQL developer을 실행한다.<br>
🚨SQL developer를 처음 실행하면, 환경설정 임포트 확인이라는 경고창이 뜨는데 <span style="color:red">아니오</span>를 선택한다.</p>
<h2 id="5-sql-developer에서-사용자-등록하기">5. SQL developer에서 사용자 등록하기</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/35176083-cdcf-4d5a-bc29-99a329cfb8b2/image.png" alt=""></p>
<p>왼쪽 상단에 초록색 &#39;+&#39;모양을 클릭하면 다음과 같은 창이 나타난다.</p>
<ul>
    <li>Name : 로컬-사용자이름</li>
      <li>사용자 이름 : 등록할 사용자 이름 </li>
      <li>비밀번호 : 컨테이너 만들 때 비밀번호를 입력한다.</li>
      <li>비밀번호 저장 : 비밀번호 저장에 체크하면 접속할 때마다 비밀번호를 입력하지 않아도 된다.</li>
      <li>1.테스트 2.저장 3. 접속 순서로 클릭한다.</li>
</ul>

<h2 id="6-사용자-접속접속해제하기">6. 사용자 접속/접속해제하기</h2>
<p>사용자 접속하기
<img src="https://velog.velcdn.com/images/si__u/post/23cb96d9-c939-4583-a478-dd72f77e32a3/image.png" alt="">
사용자 접속 해제하기
<img src="https://velog.velcdn.com/images/si__u/post/253583ba-6e9e-4ce0-bebb-fcb9ae54d597/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac Os에서 SQL plus를 이용하여 사용자 만들기]]></title>
            <link>https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-SQL-plus%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%82%AC%EC%9A%A9%EC%9E%90-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-SQL-plus%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%82%AC%EC%9A%A9%EC%9E%90-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sun, 05 May 2024 15:26:43 GMT</pubDate>
            <description><![CDATA[<p>이전 게시글에서 Mac Os에서 SQL plus를 실행하는 것까지 진행했는데요!
<a href="https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-Oracle-DB-sql-developer-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0">https://velog.io/@si__u/Mac-Os에서-Oracle-DB-sql-developer-사용하기</a></p>
<br>
오늘은 SQL plus를 이용하여 사용자를 만들어 보겠습니다.
<br>
## 1. docker와 colima 실행하기
아래 명령어를 입력하여 docker와 colima 실행합니다.
colima 실행시 생각보다 시간이 오래 걸릴 수 있으므로 당황하지 마세요😅<br>
이후 명령어의 <span style="color:red">oraclexe</span>에는 자신의 컨테이너 이름을 넣으시면 됩니다. 이름이 기억나지 않는다면 <mark style="background-color:lightgreen"> docker ps -a </mark> 명령어를 입력하여 이름을 확인하시면 됩니다.

<pre><code>colima start --memory 4 --arch x86_64
docker start oraclexe</code></pre><h2 id="2-sql-plus-실행하기">2. SQL plus 실행하기</h2>
<p>아래 명령어를 입력하여 SQL plus 실행합니다. 이후 user-name에는 <span style="color:red">system</span>, password에는 자신의 컨테이너 패스워드를 입력하시면 됩니다.</p>
<pre><code>docker exec -it oraclexe sqlplus</code></pre><h2 id="3-사용자-만들기">3. 사용자 만들기</h2>
<pre><code>create user c##scott identified by 123456;
grant connect, resource, dba to c##scott;
connect c##scott/123456;</code></pre><ul>
      <li>
      사용자 만들기 
      <ul>
      <li>create user c##scott identified by 123456;</li>
          <li>user-name이 <span style="color:red">c##scott</span>이고, 패스워드가 <span style="color:red">123456</span>인 사용자가 만들어 집니다. 원하는 user-name과 password를 입력하면 됩니다.</li>
        <li>sql문에서 <mark style="background-color:lightgreen">&nbsp;;&nbsp;</mark>는 문장의 끝을 의미합니다.</li>
        <li>"User created."뜨면 성공!</li>
      </ul>
      </li>

<pre><code>  &lt;li&gt;권한 부여하기  </code></pre>  <ul>
      <li>grant <span style="color:red">connect, resource, dba</span> to <span style="color:red">c##scott</span>;</li>
    <li>connect는 DBMS에 접속권한이다.</li>
    <li>resource는 table, view, index를 생성할 수 있는 권한이다.</li>
    <li>dba는 최고 권한이다.</li>
    <li>"Grant succeeded."뜨면 성공!</li>
  </ul>
  </li>

<pre><code>  &lt;li&gt;접속하기
 &lt;ul&gt;
  &lt;li&gt;connect &lt;span style=&quot;color:red&quot;&gt;c##scott&lt;/span&gt;/&lt;span style=&quot;color:red&quot;&gt;123456&lt;/span&gt;;&lt;/li&gt;
&lt;li&gt;사용자 이름이 c##scott인 사용자로 접속합니다.&lt;/li&gt;
&lt;li&gt;&quot;Connected.&quot;뜨면 성공!&lt;/li&gt;</code></pre>  </ul>
  </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mac Os에서 Oracle DB, SQL plus 사용하기]]></title>
            <link>https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-Oracle-DB-sql-developer-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/Mac-Os%EC%97%90%EC%84%9C-Oracle-DB-sql-developer-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sat, 04 May 2024 15:31:25 GMT</pubDate>
            <description><![CDATA[<h2 id="1-전제-조건">1. 전제 조건</h2>
<ul>
    <li>MacOs에서 Oracle database를 사용하기 위해서는 docker와 colima를 설치해야 해야합니다.(오라클에서는 mac os를 지원하지 않기 때문입니다.🥲)</li>
  <li>home brew가 설치되었다는 가정하에 진행하도록 하겠습니다.</li>
</ul>

<h2 id="2-docker와-colima-설치">2. docker와 colima 설치</h2>
<p>home brew가 설치되어 있다면 docker와 colima 설치는 간단합니다.
터미널을 실행하고 아래 명령어를 입력하면 됩니다.</p>
<pre><code>brew install docker
brew install colima</code></pre><h2 id="3-colima-실행하기">3. colima 실행하기</h2>
<p>터미널에 아래 명령어를 입력한 후 done이 뜨면 성공입니다. 생각보다 시간이 오래 걸리니 당황하지 마세요😅</p>
<pre><code>colima start --memory 4 --arch x86_64</code></pre><p>아래 명령어를 입력하면 현재 실행 중인 docker를 볼 수 있습니다. 아마 지금은 비어있을 것입니다.</p>
<pre><code>docker ps</code></pre><p>또는 아래 명령어를 입력하면 중지 상태인 docker도 조회할 수 있습니다.</p>
<pre><code>docker ps -a</code></pre><p>나중에 docker이름을 바꾸고 싶다면 아래 명령어를 입력하시면 됩니다.</p>
<pre><code>docker rename 이전이름 새로운이름</code></pre><h2 id="4-처음-docker-컨테이너-실행하기">4. 처음 docker 컨테이너 실행하기</h2>
<pre><code>docker run \
 --restart unless-stopped \
 --name oraclexe \
 -e ORACLE_PASSWORD=123456 \
 -p 1521:1521 \
 -d \
 gvenzl/oracle-xe</code></pre><blockquote>
<ul>
      <li>docker run : 컨테이너를 만들고 시작, 즉 create + start 와 같다.</li>
    <li><span style="color: red">--name</span> : <br>컨테이너 이름, 원하시는 이름 입력</li>
      <li><span style="color: red">-e ORACLE_PASSWORD</span> : <br>컨테이너의 패스워드, 역시 원하시는 패스워드 입력</li>
      <li>-p 1521:1521 : <br>오라클 포트번호, 그대로 둘 것 </li>
      <li>gvenzl/oracle-xe : 오라클 이미지 다운로드</li>
      <li>-d : 사용자가 직접 컨테이너 안으로 접근하지 않고 컨테이너의 COMMAND를 백그라운드로 실행할 수 있다.</li>
</blockquote>
</ul>

<p>명령어가 성공적으로 실행되었다면, 아래 명령어를 입력하였을 때 추가된 것을 확인할 수 있습니다.</p>
<pre><code>docker ps</code></pre><p>아래 명령어를 실행시 &quot;DATABASE IS READY TO USE!&quot;라는 내용이 나오는지 확인 후 <br>
<mark style="background-color:lightGreen">control + c</mark> 로 로그화면에서 나오면 됩니다.<br>
🚨앞으로 나올 명령어 중 <span style="color: red">oraclexe</span>는 위에서 자신이 설정한 컨테이너 이름을 입력하시면 됩니다.</p>
<pre><code>docker logs -f oraclexe</code></pre><h2 id="5-sql-plus-실행하기">5. SQL plus 실행하기</h2>
<p>아래 명령어를 실행하여 SQL plus를 실행합니다.</p>
<pre><code>docker exec -it oraclexe sqlplus</code></pre><p>이후 user-name에는 <span style="color: red">system</span>, password에는 위에서 자신이 설정했던 컨테이너의 패스워드를 입력하시면 됩니다. 패스워드 입력할 때 입력사항이 보이지 않는 것이 정상이니 당황하지 마세요.😅<br></p>
<p><mark style="background-color:lightGreen">SQL&gt;</mark>이 뜬다면 SQL plus 실행하기 성공입니다. <br></p>
<p>SQL plus를 종료하고 싶다면 <mark style="background-color:lightGreen">exit</mark> 명령어를 입력하면 됩니다.</p>
<h2 id="6-docker와-colima-끝내기">6. docker와 colima 끝내기</h2>
<p>아래 명령어를 입력하여 docker와 colima 끝낼 수 있습니다.</p>
<pre><code>docker stop oraclexe
colima stop</code></pre><hr>

<h4 id="참고">참고</h4>
<p><a href="https://velog.io/@devsaza/M1-M2-Mac-OS%EC%97%90%EC%84%9C-Oracle-DB-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0">https://velog.io/@devsaza/M1-M2-Mac-OS에서-Oracle-DB-사용하기</a>
<a href="https://www.youtube.com/watch?v=yCQD_rZEzZs">https://www.youtube.com/watch?v=yCQD_rZEzZs</a>
<a href="https://tech.cloudmt.co.kr/2022/06/29/%EB%8F%84%EC%BB%A4%EC%99%80-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%9D%98-%EC%9D%B4%ED%95%B4-1-3-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%82%AC%EC%9A%A9%EB%B2%95/">https://tech.cloudmt.co.kr/2022/06/29/도커와-컨테이너의-이해-1-3-컨테이너-사용법/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[check box를 사용해서 선택한  물품의 결제 금액 계산하기]]></title>
            <link>https://velog.io/@si__u/checkedbox</link>
            <guid>https://velog.io/@si__u/checkedbox</guid>
            <pubDate>Fri, 03 May 2024 14:56:30 GMT</pubDate>
            <description><![CDATA[<h2 id="1-설명">1. 설명</h2>
<ul>
    <li>input type="checkbox" : <br>
      사용시 check box가 생성되고, 각각 항목은 선택하거나 선택하지 않을 수 있다. 즉, 각 항목은 독립적이다.</li>
      <li>input value="80000" : <br>
          벨류 값은 서버에 보내지거나 현재 값을 가져와 처리한다.
      </li>
     <li>label : <br>
      <ul>
          <li>input의 id를 label의 for에 넣어주면, 글자를 선택하였을 때에도 check box가 선택된다. </li>
        <li>
         input type="checkbox" name="hat" <span style="color: red">id="hat"</span> value="10000" onclick="sumCalc(this)" <br>
  label <span style="color: red">for="hat"</span>
        </li>
      </ul>
      </li>
      <li>input readonly : <br>
      사용자는 입력할 수 없고, 보기만 가능하다.
      </li>
      <li>parseInt(sum.value) : <br>
          벨류 값은 문자열 타입이다. 따라서 계산하기 위해서 parseInt() 함수를 사용하여 숫자 타입으로 바꾸어 준다.
      </li>
  <li>obj.checked : <br>
    리턴 값이 boolean 타입이다. check box를 선택했다면 true, 선택하지 않았다면 false를 반환한다.
  </li>
  <li>onclick="sumCalc(this)" : <br>
     <ul>
        <li>onclick : check box 클릭했을 때</li>
          <li>this : this가 쓰여졌던 바로 그 테그 자신</li>
    </ul>
  </li>
  </ul>


<h2 id="2-코드">2. 코드</h2>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;물품을 선택하면 금액 자동계산&lt;/title&gt;
  &lt;script&gt;
    function sumCalc(obj){
      let sum = document.querySelector(&quot;#sum&quot;);
      if(obj.checked){
        sum.value = parseInt(sum.value) + parseInt(obj.value);
      }else{
        sum.value = parseInt(sum.value) - parseInt(obj.value);
      }
    }
  &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;물품을 선택하면 금액이 자동계산됩니다.&lt;/h1&gt;
  &lt;hr&gt;
  &lt;input type=&quot;checkbox&quot; name=&quot;hat&quot; id=&quot;hat&quot; value=&quot;10000&quot; onclick=&quot;sumCalc(this)&quot;&gt;
  &lt;label for=&quot;hat&quot;&gt;모자 1만원&lt;/label&gt;
  &lt;input type=&quot;checkbox&quot; name=&quot;bag&quot; id=&quot;bag&quot; value=&quot;80000&quot; onclick=&quot;sumCalc(this)&quot;&gt;
  &lt;label for=&quot;bag&quot;&gt;가방 8만원&lt;/label&gt;
  &lt;input type=&quot;checkbox&quot; name=&quot;shoes&quot; id=&quot;shoes&quot; value=&quot;30000&quot; onclick=&quot;sumCalc(this)&quot;&gt;
  &lt;label for=&quot;shoes&quot;&gt;구두 3만원&lt;/label&gt;
  &lt;label for=&quot;sum&quot;&gt;지불하실금액&lt;/label&gt;
  &lt;input type=&quot;number&quot; name=&quot;sum&quot; id=&quot;sum&quot; readonly value=&quot;0&quot;&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="3-결과">3. 결과</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/6226936f-3773-4450-ba6c-ea1940d17258/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/200117a7-f7ce-49c0-87cd-dbc15c7f1819/image.png" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/7da14cc0-0ca3-4347-86ac-2b688029c59b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[select, option 사용해서 이미지 바꾸기]]></title>
            <link>https://velog.io/@si__u/select-option-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B0%94%EA%BE%B8%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/select-option-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B0%94%EA%BE%B8%EA%B8%B0</guid>
            <pubDate>Thu, 02 May 2024 14:56:12 GMT</pubDate>
            <description><![CDATA[<h2 id="1-설명">1. 설명</h2>
<ul>
    <li>document.querySelector(); : <br>
      id, class, tag 등으로 해당하는 객체를 찾아주는 함수이다.</li>
      <li>onchange : <br>
  select box 안의 값이 변할 때를 나타낸다.</li>
      <li>onload : <br>
  img나 body가 로드될 때를 나타낸다.</li>
      <li>.selectedIndex : <br>
  현재 select box에서 선택한 option을 나타내는 index를 반환해준다.</li>
      <li>.options[index].value : <br>
  option 테그는 따로 객체를 찾지 않아도 select 객체를 찾아서     .options[index]를 하여 가져올 수 있다.
  </li>
      <li>innerHtml : <br>
  테그 안에 텍스트 뿐만아니라 html도 가져온다. 즉 컨텐츠를 가져온다.
  </li>
      <li>innerText : <br>
  테그 안에 텍스트만 가져온다.
  </li>
  <li>백틱 ` : <br> 
  백틱 사이에 ${}사용하여 변수를 넣을 수 있다.
  </li>
      <li>람다식으로 addEventListener 사용하기 :
      <ul>
          <li>
          작성순서 
          <ol>
              <li>.addEventListener("언제",그때 처리할 함수);</li>
            <li>언제 : onload, onchange 등 on을 빼고 나머지를 적는다.</li>
            <li>.addEventListener("load",()=>{};);</li>
            <li>함수를 구현한다.</li>
            <li>.addEventListener("load",()=>{
        imgSize.innerHTML = `${myImg.width}*${myImg.height}`;});</li>
          </ol>
        </li>
      </ul>
      </li>
</ul>

<h2 id="2-코드">2. 코드</h2>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;onload로 이미지 크기 출력&lt;/title&gt;
  &lt;script&gt;
    function changeImage(){
      let imgName = document.querySelector(&quot;#imgName&quot;);
      let imgSize = document.querySelector(&quot;#imgSize&quot;);
      let imgName2 = document.querySelector(&quot;#imgName2&quot;);
      let myImg = document.querySelector(&quot;#myImg&quot;);

      let index = imgName.selectedIndex;
      myImg.src = imgName.options[index].value;
      imgName2.innerHTML = imgName.options[index].innerHTML;
      myImg.addEventListener(&quot;load&quot;,()=&gt;{
        imgSize.innerHTML = `${myImg.width}*${myImg.height}`;
      });
    }
  &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;onload로 이미지 크기 출력&lt;/h1&gt;
  &lt;hr&gt;
  &lt;form action=&quot;#&quot; method=&quot;post&quot;&gt;
    &lt;select name=&quot;imgName&quot; id=&quot;imgName&quot; onchange=&quot;changeImage()&quot;&gt;
      &lt;option value=&quot;./images/apple.png&quot;&gt;사과&lt;/option&gt;
      &lt;option value=&quot;./images/banana.png&quot;&gt;바나나&lt;/option&gt;
      &lt;option value=&quot;./images/mango.png&quot;&gt;망고&lt;/option&gt;
      &lt;option value=&quot;./images/strawberry.png&quot;&gt;딸기&lt;/option&gt;
    &lt;/select&gt; 
    &lt;span id=&quot;imgSize&quot;&gt;&lt;/span&gt;
    &lt;span id=&quot;imgName2&quot;&gt;&lt;/span&gt;
    &lt;br&gt;&lt;br&gt;
    &lt;img id=&quot;myImg&quot; src=&quot;./images/apple.png&quot; alt=&quot;이미지&quot;&gt;
  &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="3-결과">3. 결과</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[초에 따라 배경색 바꾸기]]></title>
            <link>https://velog.io/@si__u/%EC%B4%88%EC%97%90-%EB%94%B0%EB%9D%BC-%EB%B0%B0%EA%B2%BD%EC%83%89-%EB%B0%94%EA%BE%B8%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/%EC%B4%88%EC%97%90-%EB%94%B0%EB%9D%BC-%EB%B0%B0%EA%B2%BD%EC%83%89-%EB%B0%94%EA%BE%B8%EA%B8%B0</guid>
            <pubDate>Tue, 30 Apr 2024 13:26:06 GMT</pubDate>
            <description><![CDATA[<h2 id="1-설명">1. 설명</h2>
<ul>
      <li>버튼을 클릭하면 현재시간을 보여주고,<br> 초가 짝수인지 홀수인지에 따라 배경색이 달라진다.</li>
    <li>Date 객체 이용하여 시, 분, 초 가져오기
          <ul>
              <li>Date 객체 생성 : <br>
              const date = new Date();</li>
              <li>시간 가져오기 : <br>
              let hour = date.getHours();</li>
              <li>분 가져오기 : <br> 
              let minute = date.getMinutes();</li>
              <li>초 가져오기: <br>
              let second = date.getSeconds();</li>
          </ul>
      </li>
      <li>document.querySelector("#spanTime")  : <br> id가 spanTime인 요소를 가져온다.
  </li>
      <li>innerHTML : 콘텐츠를 수정하고 싶을 때 사용한다.</li>
      <li>document.body : body를 찾는다. <br>
          (객체를 찾으면 style등등 값을 바꿔줄 수 있다.)
      </li>
</ul>

<h2 id="2-코드">2. 코드</h2>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;초에 따라 배경색 바꾸기&lt;/title&gt;
  &lt;script&gt;
      //버튼을 클릭할 때 변화
    function change(){
      const date = new Date();
      let hour = date.getHours();
      let minute = date.getMinutes();
      let second = date.getSeconds();
        //초가 짝수일때 홀수일때 배경색을 다르게 준다.
      second % 2 === 0 ? (document.body.style.backgroundColor = &quot;red&quot;) : (document.body.style.backgroundColor = &quot;lightblue&quot;); 
      let spanTime = document.querySelector(&quot;#spanTime&quot;);
      spanTime.innerHTML = `현재시간보이기 : ${hour}시 ${minute}분 ${second}초`;
    }
  &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;배경색 바꾸기 &lt;/h1&gt;
  &lt;hr&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;초에 따라 배경색 바꾸기&lt;/legend&gt;
    &lt;span id=&quot;spanTime&quot;&gt;현재시간보이기 : 14시 9분 56초&lt;/span&gt;
    &lt;button type=&quot;button&quot; onclick=&quot;change()&quot;&gt;배경색바꾸기, 시간보이기 이벤트&lt;/button&gt;
  &lt;/fieldset&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="3-결과">3. 결과</h2>
<p><img src="https://velog.velcdn.com/images/si__u/post/c25a94b8-ab55-4a59-9fbd-cc1a9971a038/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/cc19b00d-53e4-4704-abd0-dc10339a71a7/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/si__u/post/4e5cf133-de87-4b26-be72-62267cbd8372/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[배열을 이용해서 별찍기]]></title>
            <link>https://velog.io/@si__u/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%B3%84%EC%B0%8D%EA%B8%B0</link>
            <guid>https://velog.io/@si__u/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%B3%84%EC%B0%8D%EA%B8%B0</guid>
            <pubDate>Tue, 30 Apr 2024 13:06:43 GMT</pubDate>
            <description><![CDATA[<h2 id="1-설명">1. 설명</h2>
<ul>
    <li>배열 만들기 </li>
      <li></li>
      <li></li>
</ul>

<h2 id="2-코드">2. 코드</h2>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;배열로 만들어서 별표찍기&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;배열로 만들어서 별표찍기&lt;/h1&gt;
  &lt;hr&gt;
  &lt;script&gt;
      const NUMBER_COUNT = 6;
      //배열 만들기
    const numArray = Array();
    //배열에 무작위 숫자 넣기
    for(let i=0;i&lt;NUMBER_COUNT;i++){
      numArray[i] = parseInt(Math.random()*(30-5+1)+5);
    }
    //배열 출력하기
    document.write(`const numArray = [`);
    for(let i=0;i&lt;numArray.length;i++){
      i === numArray.length-1 ? (document.write(`${numArray[i]}`)) : (document.write(`${numArray[i]} , `));
    }
    document.write(`] &lt;br&gt;`);
    //배열에서 값을 불러와서 별 찍기
    for(let i=0;i&lt;numArray.length;i++){
      let value = numArray[i];
      for(let j=0;j&lt;value;j++){
        document.write(`*`);
      }
      document.write(` ${value} &lt;br&gt;`);
    }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="3-결과">3. 결과</h2>
]]></description>
        </item>
    </channel>
</rss>