<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>parkhesse7 님의 블로그</title>
    <link>https://parkhesse7.tistory.com/</link>
    <description>parkhesse7 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 19 Jul 2026 23:32:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>parkhesse7</managingEditor>
    <item>
      <title>[자바로 간단한 키오스크 시스템 구현해보기] 2편 모델링</title>
      <link>https://parkhesse7.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론적 기반도 함께 다지기 위해, 개념적 모델링, 논리적 모델링, 물리적 모델링 모두 그려보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대학교 데이터베이스 수업 때 교수님께서 엄청 어려운 모델링 과제를 내주신 적이 있어서 그때가 새록새록 떠올랐네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념적 모델링, 논리적 모델링은 이미지만 제시하고, 설명은 물리적 모델링 아래에서 하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개념적 모델링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;1573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BGtWv/btsN5eJLsz8/qcgDqQxS2VaVeEamdEAOaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BGtWv/btsN5eJLsz8/qcgDqQxS2VaVeEamdEAOaK/img.png&quot; data-alt=&quot;키오스크 개념적 모델링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BGtWv/btsN5eJLsz8/qcgDqQxS2VaVeEamdEAOaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBGtWv%2FbtsN5eJLsz8%2FqcgDqQxS2VaVeEamdEAOaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2260&quot; height=&quot;1573&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;1573&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키오스크 개념적 모델링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;논리적 모델링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2428&quot; data-origin-height=&quot;1100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wFPCD/btsN5sVhkoh/aQvK0iOxdemlnnu2My1uAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wFPCD/btsN5sVhkoh/aQvK0iOxdemlnnu2My1uAK/img.png&quot; data-alt=&quot;키오스크 논리적 모델링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wFPCD/btsN5sVhkoh/aQvK0iOxdemlnnu2My1uAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwFPCD%2FbtsN5sVhkoh%2FaQvK0iOxdemlnnu2My1uAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2428&quot; height=&quot;1100&quot; data-origin-width=&quot;2428&quot; data-origin-height=&quot;1100&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키오스크 논리적 모델링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;물리적 모델링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2546&quot; data-origin-height=&quot;1121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KMA5b/btsN6BcIQ91/Js3xXxuFU1vYPqUyZ8w5gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KMA5b/btsN6BcIQ91/Js3xXxuFU1vYPqUyZ8w5gK/img.png&quot; data-alt=&quot;키오스크 물리적 모델링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KMA5b/btsN6BcIQ91/Js3xXxuFU1vYPqUyZ8w5gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKMA5b%2FbtsN6BcIQ91%2FJs3xXxuFU1vYPqUyZ8w5gK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2546&quot; height=&quot;1121&quot; data-origin-width=&quot;2546&quot; data-origin-height=&quot;1121&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키오스크 물리적 모델링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Category는 카테고리를 나타내는 테이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카테고리 아이디, 카테고리 분류 필드를 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Food는 음식을 나타내는 테이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음식 아이디, 음식 이름, 음식 가격, 카테고리 아이디(어느 카테고리에 속하냐?) 필드를 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Order_item은 주문 상세를 나타내는 테이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주문 내역 아이디,주문시 금액, 주문 시 음식 이름, 주문 금액 합, 개수, 음식 id(어느 음식이랑 연관된 주문인가?), 주문 id (몇 번 주문에 속하냐?) 필드를 가집니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Order는 주문을 나타내는 테이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주문 아이디, 주문 시각, 총금액, 주문 형태, 결제 id, 전화번호 필드를 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Membership은 멤버십을 나타내는 테이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전화번호, 적립 포인트, 닉네임 필드를 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Payment는 결제 방식을 나타내는 테이블로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결제 id, 결제 방식 필드를 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Food &amp;lt;-&amp;gt; Category 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 카테고리 안에는 0개 이상의 음식이 있으면 된다. (0개 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Food &amp;lt;-&amp;gt; Order_item 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 음식은 0개 또는 1개의 Order_item과 연관이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Order_item &amp;lt;-&amp;gt; Order 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 주문에는 여러 개의 Order_item이 있으면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1910&quot; data-origin-height=&quot;806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IP3bI/btsN5WVQsoe/qmr7cePmT8ukcrgsG0fac0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IP3bI/btsN5WVQsoe/qmr7cePmT8ukcrgsG0fac0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IP3bI/btsN5WVQsoe/qmr7cePmT8ukcrgsG0fac0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIP3bI%2FbtsN5WVQsoe%2Fqmr7cePmT8ukcrgsG0fac0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;543&quot; height=&quot;229&quot; data-origin-width=&quot;1910&quot; data-origin-height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Order &amp;lt;-&amp;gt; Membership 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 사람이 가입 후 0개 이상의 주문을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Order&amp;lt;-&amp;gt; Payment 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 결제 방법으로 0개 이상의 주문을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) Order 테이블을 보니 네이버 페이 결제가 많음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바</category>
      <category>간단한 키오스크 모델링</category>
      <category>개념적 모델링</category>
      <category>논리적 모델링</category>
      <category>물리적 모델링</category>
      <category>자바 모델링</category>
      <category>키오스크 모델링</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/15</guid>
      <comments>https://parkhesse7.tistory.com/15#entry15comment</comments>
      <pubDate>Sat, 24 May 2025 02:57:37 +0900</pubDate>
    </item>
    <item>
      <title>JDBC 2편</title>
      <link>https://parkhesse7.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저번 JDBC 1편에 이어서 설명을 진행하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 정보들을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;properties 정보들로 연결 &amp;amp; CRUD Test&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resources 하위에 application.properties 파일을 만들어 담는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;application.properties&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747839992408&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;driver=com.mysql.cj.jdbc.Driver
 url=jdbc:mysql://127.0.0.1:3306/jdbc_ex
 id=scoula
 password=1234&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diHWSn/btsN78n9nbx/czpyob9ctcGTyrIrSgMZ3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diHWSn/btsN78n9nbx/czpyob9ctcGTyrIrSgMZ3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diHWSn/btsN78n9nbx/czpyob9ctcGTyrIrSgMZ3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiHWSn%2FbtsN78n9nbx%2Fczpyob9ctcGTyrIrSgMZ3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;608&quot; height=&quot;477&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 위 경로에 JDBCUtil.java를 만들어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;JDBCUtil.java&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747840926646&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtil {
    static Connection conn = null;

    static {
        try {
            Properties properties = new Properties();
            properties.load(JDBCUtil.class.getResourceAsStream(&quot;/application.properties&quot;));
            String driver = properties.getProperty(&quot;driver&quot;);
            String url = properties.getProperty(&quot;url&quot;);
            String id = properties.getProperty(&quot;id&quot;);
            String password = properties.getProperty(&quot;password&quot;);

            Class.forName(driver);
            conn = DriverManager.getConnection(url, id, password);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        return conn;
    }

    public static void close() {
        try {
            if (conn != null){
                conn.close();;
                conn=null;
            }
        } catch(SQLException e){
            e.printStackTrace();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ConnectionTest.java&lt;/p&gt;
&lt;pre id=&quot;code_1747841077549&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  @Test
    @DisplayName(&quot;jdbc_ex에 접속한다.(자동 닫기)&quot;)
    public void testConnection2() throws SQLException {
        try(Connection conn = JDBCUtil.getConnection()){
            System.out.println(&quot;DB 연결 성공&quot;);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CrudTest.java&lt;/p&gt;
&lt;pre id=&quot;code_1747842752945&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.test;

import org.junit.jupiter.api.*;
import org.scoula.jdbc_ex.common.JDBCUtil;

import java.sql.*;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class CrudTest {
    Connection conn = JDBCUtil.getConnection();

    @AfterAll
    static void tearDown() {
        JDBCUtil.close();
    }

    @Test
    @DisplayName(&quot;새로운 user를 등록한다.&quot;)
    @Order(1)
    public void insertUser() throws SQLException {
        String sql = &quot;insert into users(id, password, name, role) values(?, ?, ?, ?)&quot;;
        try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1,&quot;scoula&quot;);
            pstmt.setString(2,&quot;scoula3&quot;);
            pstmt.setString(3,&quot;스콜라&quot;);
            pstmt.setString(4,&quot;USER&quot;);

            int count = pstmt.executeUpdate();
            Assertions.assertEquals(1,count);
        }
    }

    @Test
    @DisplayName(&quot;user 목록을 추출한다.&quot;)
    @Order(2)
    public void selectUser() throws SQLException {
        String sql = &quot;select * from users&quot;;
        try(Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);) {
            while(rs.next()){
                System.out.println(rs.getString(&quot;name&quot;));
            }
        }
    }

    @Test
    @DisplayName(&quot;특정 user 검색한다.&quot;)
    @Order(3)
    public void selectUserById() throws SQLException {
        String userid = &quot;scoula&quot;;
        String sql = &quot;select * from users where id=?&quot;;
        try(PreparedStatement stmt = conn.prepareStatement(sql)){
            stmt.setString(1,userid);
            try(ResultSet rs = stmt.executeQuery()) {
                if(rs.next()) {
                    System.out.println(rs.getString(&quot;name&quot;));
                } else {
                    throw new SQLException(&quot;scoula not found&quot;);
                }
            }
        }
    }

    @Test
    @DisplayName(&quot;특정 user 수정한다.&quot;)
    @Order(4)
    public void updateUser() throws SQLException {
        String userid = &quot;scoula&quot;;
        String sql = &quot;update users set name= ? where id = ?&quot;;
        try(PreparedStatement stmt = conn.prepareStatement(sql)){
            stmt.setString(1,&quot;스콜라 수정&quot;);
            stmt.setString(2,userid);
            int count = stmt.executeUpdate();
            Assertions.assertEquals(1,count);
        }
    }

    @Test
    @DisplayName(&quot;지정한 사용자를 삭제한다&quot;)
    @Order(5)
    public void deleteUser() throws SQLException {
        String userid = &quot;scoula&quot;;
        String sql = &quot;delete from users where id = ?&quot;;
        try(PreparedStatement stmt = conn.prepareStatement(sql)){
            stmt.setString(1,userid);
            int count = stmt.executeUpdate();
            Assertions.assertEquals(1,count);
        }
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;VO 패턴&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Value Object&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 테이블의 한 행을 매핑하는 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 정의 -&amp;gt; 테이블&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필드들 -&amp;gt; 컬럼들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스 -&amp;gt; 한 행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747843634549&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserVO {
    private String id;
    private String password;
    private String name;
    private String role;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;DAO 패턴 적용&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data Access Object&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스에 접근하여 실질적인 데이터베이스 연동 작업을 담당하는 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스 정의 후 구현 클래스 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747844264077&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.dao;

import org.scoula.jdbc_ex.domain.UserVO;

import java.sql.SQLException;
import java.util.List;
import java.util.Optional;

public interface UserDao {
    // 회원 등록
    int create(UserVO user) throws SQLException;

    //회원 목록 조회
    List&amp;lt;UserVO&amp;gt; getList() throws SQLException;

    //회원 정보 조회
    Optional&amp;lt;UserVO&amp;gt; get(String id) throws SQLException;

    //회원 수정
    int update(UserVO user)throws SQLException;

    // 회원 삭제
    int delete(String id) throws SQLException;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;UserDaoImpl&lt;/u&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1747845358953&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.dao;

import org.scoula.jdbc_ex.common.JDBCUtil;
import org.scoula.jdbc_ex.domain.UserVO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class UserDaoImpl implements UserDao{

    Connection conn = JDBCUtil.getConnection();

    //USERS 테이블 관련 SQL 명령어
    private String USER_LIST = &quot;select * from users&quot;;
    private String USER_GET = &quot;select * from users where id = ?&quot;;
    private String USER_INSERT = &quot;insert into users values(?, ?, ?, ?)&quot;;
    private String USER_UPDATE = &quot;update users set name = ?, role = ? where id = ?&quot;;
    private String USER_DELETE = &quot;delete from users where id = ?&quot;;

    //회원 등록
    @Override
    public int create(UserVO user) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement(USER_INSERT)) {
            stmt.setString(1, user.getId());
            stmt.setString(2,user.getPassword());
            stmt.setString(3,user.getName());
            stmt.setString(4,user.getRole());
            return stmt.executeUpdate();
        }
    }

    private UserVO map(ResultSet rs) throws SQLException {
        UserVO user = new UserVO();
        user.setId(rs.getString(&quot;ID&quot;));
        user.setPassword(rs.getString(&quot;PASSWORD&quot;));
        user.setName(rs.getString(&quot;NAME&quot;));
        user.setRole(rs.getString(&quot;ROLE&quot;));
        return user;
    }

    //회원 목록 조회
    @Override
    public List&amp;lt;UserVO&amp;gt; getList() throws SQLException {
       List&amp;lt;UserVO&amp;gt; userList = new ArrayList&amp;lt;UserVO&amp;gt;();
       Connection conn = JDBCUtil.getConnection();
       try (PreparedStatement stmt = conn.prepareStatement(USER_LIST);
       ResultSet rs = stmt.executeQuery()){
           while(rs.next()) {
               UserVO user = map(rs);
               userList.add(user);
           }
       }
       return userList;
    }

    //회원 정보 조회
    @Override
    public Optional&amp;lt;UserVO&amp;gt; get(String id) throws SQLException {
        try(PreparedStatement stmt = conn.prepareStatement(USER_GET)) {
            stmt.setString(1,id);
            try(ResultSet rs = stmt.executeQuery()){
                if(rs.next()){
                    return Optional.of(map(rs));
                }
            }
        }
        return Optional.empty();
    }

    //회원 수정
    @Override
    public int update(UserVO user) throws SQLException {
        Connection conn = JDBCUtil.getConnection();
        try (PreparedStatement stmt = conn.prepareStatement(USER_UPDATE)) {
            stmt.setString(1,user.getName());
            stmt.setString(2,user.getRole());
            stmt.setString(3,user.getId());
            return stmt.executeUpdate();
        }
    }

    //회원 삭제
    @Override
    public int delete(String id) throws SQLException {
        try(PreparedStatement stmt = conn.prepareStatement(USER_DELETE)){
            stmt.setString(1,id);
            return stmt.executeUpdate();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;UserDaoTest&lt;/u&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1747845304467&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.dao;

import org.junit.jupiter.api.*;
import org.scoula.jdbc_ex.common.JDBCUtil;
import org.scoula.jdbc_ex.domain.UserVO;

import java.sql.SQLException;
import java.util.List;
import java.util.NoSuchElementException;

import static org.junit.jupiter.api.Assertions.*;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class UserDaoTest {
    UserDao dao = new UserDaoImpl();

    @AfterAll
    static void tearDown() {
        JDBCUtil.close();
    }

    @Test
    @DisplayName(&quot;user를 등록합니다.&quot;)
    @Order(1)
    void create() throws SQLException {
        UserVO user = new UserVO(&quot;ssamz3&quot;,&quot;ssamz123&quot;,&quot;쌤즈&quot;,&quot;ADMIN&quot;);
        int count =dao.create(user);
        Assertions.assertEquals(1,count);
    }

    @Test
    @DisplayName(&quot;UserDao User 목록 추출&quot;)
    @Order(2)
    void getList() throws SQLException {
        List&amp;lt;UserVO&amp;gt; list = dao.getList();
        for(UserVO vo:list){
            System.out.println(vo);
        }
    }

    @Test
    @DisplayName(&quot;특정 user 1건을 추출합니다.&quot;)
    @Order(3)
    void get() throws SQLException {
        UserVO user = dao.get(&quot;ssamz3&quot;).orElseThrow(NoSuchElementException::new);
        Assertions.assertNotNull(user);
    }

    @Test
    @DisplayName(&quot;user 정보 수정&quot;)
    @Order(4)
    void update() throws SQLException {
        UserVO user = dao.get(&quot;ssamz3&quot;).orElseThrow();
        user.setName(&quot;쌤즈3&quot;);
        int count = dao.update(user);
        Assertions.assertEquals(1,count);
    }

    @Test
    @DisplayName(&quot;user 정보 삭제&quot;)
    @Order(5)
    void delete() throws SQLException {
        int count = dao.delete(&quot;ssamz3&quot;);
        Assertions.assertEquals(1,count);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PreparedStatement pstmt = conn.prepareStatement(sql);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Statemen stmt = conn.createStatement();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. pstmt는 stmt에 비해 SQL Injection 방어 잘 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;1308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qzxqW/btsN6zUPomZ/LHRQjPwQJh3Wwhw3W2pjm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qzxqW/btsN6zUPomZ/LHRQjPwQJh3Wwhw3W2pjm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qzxqW/btsN6zUPomZ/LHRQjPwQJh3Wwhw3W2pjm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqzxqW%2FbtsN6zUPomZ%2FLHRQjPwQJh3Wwhw3W2pjm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;687&quot; height=&quot;752&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;1308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pstmt는 DBMS 쪽에서 SQL 구조를 미리 컴파일 해놓고 데이터만 바인딩 하는 형식이라 시간 효율적&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UserDAO에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int를 반환하는 것이 아니고, void로 반환하게 인터페이스를 구현했다면 어떤 Test 메서드로 확인을 했어야 했었을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바/JDBC</category>
      <category>jdbc crud</category>
      <category>jdbc crud 테스트</category>
      <category>jdbc preparedstatement</category>
      <category>jdbc statement</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/14</guid>
      <comments>https://parkhesse7.tistory.com/14#entry14comment</comments>
      <pubDate>Fri, 23 May 2025 03:23:02 +0900</pubDate>
    </item>
    <item>
      <title>JDBC 공부 1편</title>
      <link>https://parkhesse7.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용을 구현해 보려면 JDBC에 대한 선수 지식이 필요하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JDBC 개념에 대한 내용도 약 3편 정도로 나누어 진행해 볼 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 글은 MySQL을 기반으로 작성되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;JDBC란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JDBC는 Java Database Connectivity로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직역하면 자바 데이터베이스 연결이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바로 데이터 베이스를 연결할 수 있다는 거라고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 데이터베이스를 누구는 oracle, 누구는 mysql, mariaDB, SQLServer등에 연결하고 싶다면 어떻게 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wOAfy/btsN72haX5h/W0hKtMIKmTv2kQOYCvhQpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wOAfy/btsN72haX5h/W0hKtMIKmTv2kQOYCvhQpk/img.png&quot; data-alt=&quot;JDBC 인터페이스 출처: 이것이 자바다 (한빛 미디어)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wOAfy/btsN72haX5h/W0hKtMIKmTv2kQOYCvhQpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwOAfy%2FbtsN72haX5h%2FW0hKtMIKmTv2kQOYCvhQpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;253&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JDBC 인터페이스 출처: 이것이 자바다 (한빛 미디어)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리의 멋진 자바는 인터페이스를 만들어서 어떤 드라이버를 끼우냐에 따라 다른 DB와 통신할 수 있게 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞는 표현일진 모르겠지만 생각해 보면 우리 모두 c타입 충전기를 쓰지만, 충전이 되는 폰은 다 다르지 않은가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pvhCZ/btsN7X1pDPT/FEB8fWpBUI2KtOoamIzzx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pvhCZ/btsN7X1pDPT/FEB8fWpBUI2KtOoamIzzx1/img.png&quot; data-alt=&quot;JDBC 드라이버 이것이 자바다 (한빛 미디어)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pvhCZ/btsN7X1pDPT/FEB8fWpBUI2KtOoamIzzx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpvhCZ%2FbtsN7X1pDPT%2FFEB8fWpBUI2KtOoamIzzx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;171&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JDBC 드라이버 이것이 자바다 (한빛 미디어)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eGS4SB/btsN5zgIBr6/jSn4Z0hdfNo0eyHpuKGd80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eGS4SB/btsN5zgIBr6/jSn4Z0hdfNo0eyHpuKGd80/img.png&quot; data-alt=&quot;JDBC 통신 이것이 자바다 (한빛 미디어)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eGS4SB/btsN5zgIBr6/jSn4Z0hdfNo0eyHpuKGd80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeGS4SB%2FbtsN5zgIBr6%2FjSn4Z0hdfNo0eyHpuKGd80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;563&quot; height=&quot;288&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JDBC 통신 이것이 자바다 (한빛 미디어)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JDBC Interface 규격에만 맞추고, 원하는 DBMS(Database Management System)를 연결하면 그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS와 입출력이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1209&quot; data-origin-height=&quot;1342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRHYDh/btsN6lWVmls/nOWzDGve5KemMbJCNqbDN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRHYDh/btsN6lWVmls/nOWzDGve5KemMbJCNqbDN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRHYDh/btsN6lWVmls/nOWzDGve5KemMbJCNqbDN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRHYDh%2FbtsN6lWVmls%2FnOWzDGve5KemMbJCNqbDN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;578&quot; height=&quot;642&quot; data-origin-width=&quot;1209&quot; data-origin-height=&quot;1342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Class.forName 안에 매개변수로 원하는 드라이버를 등록하면, 우리의 멋진 자바는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747832937112&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Connection conn = new com.mysql.cj.jdbc.ConnectionImpl(...);&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1747832945765&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PreparedStatement pstmt = new ClientPreparedStatement(...);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부적으로 이런 MySQL 전용 객체들을 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;JDBC 데이터베이스 연결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;mysql workbench&lt;/u&gt;에서&lt;/p&gt;
&lt;pre id=&quot;code_1747833046081&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE jdbc_ex;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;데이터베이스 준비&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747833066283&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE USER 'scoula'@'%' IDENTIFIED BY '1234';
 GRANT ALL PRIVILEGES ON jdbc_ex.* TO 'scoula'@'%';
 FLUSH PRIVILEGES&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;사용자 준비&lt;/u&gt;를 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scoula라는 사용자 계정으로 % (어느 IP든) 접속하게 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호는 1234&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scoula에게 거의 모든 권한을 부여한다. jdbc_ex 테이블 모든 것에 대해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;인텔리제이 프로젝트 생성&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xC1m1/btsN704WwRL/uIe2bVHRcBGBchytLCgWG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xC1m1/btsN704WwRL/uIe2bVHRcBGBchytLCgWG0/img.png&quot; data-alt=&quot;프로젝트 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xC1m1/btsN704WwRL/uIe2bVHRcBGBchytLCgWG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxC1m1%2FbtsN704WwRL%2FuIe2bVHRcBGBchytLCgWG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;464&quot; height=&quot;350&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 라이브러리를 다운로드하기에는 Gradle이 편해서 Gradle을 Build system으로 선택했고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인 특화 언어로 Groovy 선택 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;build.gradle 파일을 Groovy라는 언어로 작성을 한다고 보면 될 것 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdA4A0/btsN5XhzecS/IzQr8da5PZKWRK5nknkbKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdA4A0/btsN5XhzecS/IzQr8da5PZKWRK5nknkbKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdA4A0/btsN5XhzecS/IzQr8da5PZKWRK5nknkbKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdA4A0%2FbtsN5XhzecS%2FIzQr8da5PZKWRK5nknkbKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;386&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Advanced Setting를 열어서 base pacakge를 Groud Id에 작성하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;artifact에는 산출 물명을 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;외부 라이브러리 다운로드&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;build.gradle&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747833555408&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    implementation 'com.mysql:mysql-connector-j:8.3.0'
    compileOnly 'org.projectlombok:lombok:1.18.30'
    annotationProcessor 'org.projectlombok:lombok:1.18.30'

    testCompileOnly 'org.projectlombok:lombok:1.18.30'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 mysql, lombok 라이브러리를 외부에서 다운로드해오는 코드를 작성하고 sync한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JUnit으로 test에서도 lombok을 쓸 거기 때문에 아래 두 개의 라이브러리도 설치했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;프로젝트 설정에서 Annotation Processing도 활성화해준다. &lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;DataSource&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;1359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfHQ29/btsN5wqQpDV/mCHOqauLVRCMlljG6w3ioK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfHQ29/btsN5wqQpDV/mCHOqauLVRCMlljG6w3ioK/img.png&quot; data-alt=&quot;인텔리제이 상용 버전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfHQ29/btsN5wqQpDV/mCHOqauLVRCMlljG6w3ioK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfHQ29%2FbtsN5wqQpDV%2FmCHOqauLVRCMlljG6w3ioK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;672&quot; height=&quot;777&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;1359&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인텔리제이 상용 버전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #444447; text-align: start;&quot;&gt;이후 DataSource를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;연결해 줘야 하는데&lt;span style=&quot;background-color: #ffffff; color: #444447; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;인텔리제이 상용 버전을 지원받고 있어서 편하게 작업할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 무료 버전을 쓰고 있다면, workbench, debeaver나 DB Brower(플러그인)을 설치해서 써보면 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL을 누르고 target database를 연결해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SSynR/btsN77Qfur7/2oJFXk1eFsuBhj5FYk5KM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SSynR/btsN77Qfur7/2oJFXk1eFsuBhj5FYk5KM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SSynR/btsN77Qfur7/2oJFXk1eFsuBhj5FYk5KM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSSynR%2FbtsN77Qfur7%2F2oJFXk1eFsuBhj5FYk5KM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;479&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비번은 1234를 넣으면 된다. Host에는 ip 주소인데 현재 내 컴퓨터에 깔려있기 때문에 localhost이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Database는 jdbc_ex로 되어있는데 use database jdbc_ex 쿼리와 같은 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제든지 바꿀 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 아래 Test Connection을 눌러 테스트해보고 ok 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;데이터 준비&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G0ig7/btsN6BE4X5v/IyfCiWz2p3xK9avnUEJ5SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G0ig7/btsN6BE4X5v/IyfCiWz2p3xK9avnUEJ5SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G0ig7/btsN6BE4X5v/IyfCiWz2p3xK9avnUEJ5SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG0ig7%2FbtsN6BE4X5v%2FIyfCiWz2p3xK9avnUEJ5SK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;82&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tx: Auto는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auto commit이 된다는 것을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리문 실행 시 자동 commit이 되고 있다는 것을 인지하자.&lt;/p&gt;
&lt;pre id=&quot;code_1747834662759&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; use jdbc_ex;

 CREATE TABLE USERS (
 ID VARCHAR(12) NOT NULL PRIMARY KEY,
 PASSWORD VARCHAR(12) NOT NULL,
 NAME VARCHAR(30) NOT NULL,
 ROLE VARCHAR(6) NOT NULL
 );
 
 INSERT INTO USERS(ID, PASSWORD, NAME, ROLE)
 VALUES('guest', 'guest123', '방문자', 'USER');
 
 INSERT INTO USERS(ID, PASSWORD, NAME, ROLE)
 VALUES('admin', 'admin123', '관리자', 'ADMIN');
 
 INSERT INTO USERS(ID, PASSWORD, NAME, ROLE)
 VALUES('member', 'member123', '일반회원', 'USER');
 
 SELECT * FROM USERS;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMu4ho/btsN674UaeG/ROPgkktA0gEqfnc0R798kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMu4ho/btsN674UaeG/ROPgkktA0gEqfnc0R798kK/img.png&quot; data-alt=&quot;출처: 이것이 자바다 (개정판)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMu4ho/btsN674UaeG/ROPgkktA0gEqfnc0R798kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMu4ho%2FbtsN674UaeG%2FROPgkktA0gEqfnc0R798kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;294&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 이것이 자바다 (개정판)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DriverManager가 MySQL과 Connection을 맺어주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;query를 실행할 수 있는 Statement나 PreparedStatement로 진행을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Select 문은&lt;span style=&quot;background-color: #ffffff; color: #444447; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;쿼리 테이블을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;반환하는 데&lt;span style=&quot;background-color: #ffffff; color: #444447; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이것을 ResultSet으로 받아서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이터 레이터로&lt;span style=&quot;background-color: #ffffff; color: #444447; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;처리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Update Insert Delete의 반환 값은 Integer이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHXDHP/btsN7UcCLPb/BtD3x4Clku3KBhkOJMx6T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHXDHP/btsN7UcCLPb/BtD3x4Clku3KBhkOJMx6T0/img.png&quot; data-alt=&quot;출처: 이것이 자바다 (개정판)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHXDHP/btsN7UcCLPb/BtD3x4Clku3KBhkOJMx6T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHXDHP%2FbtsN7UcCLPb%2FBtD3x4Clku3KBhkOJMx6T0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;782&quot; height=&quot;436&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 이것이 자바다 (개정판)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGYRDL/btsN6qjimaN/BB8UY4kEPAXDxRQFBgYbnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGYRDL/btsN6qjimaN/BB8UY4kEPAXDxRQFBgYbnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGYRDL/btsN6qjimaN/BB8UY4kEPAXDxRQFBgYbnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGYRDL%2FbtsN6qjimaN%2FBB8UY4kEPAXDxRQFBgYbnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;656&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;데이터베이스 연결 테스트&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747835215074&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.scoula.jdbc_ex.test;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionTest {

    @Test
    @DisplayName(&quot;jdbc_ex 데이터베이스에 접속한다.&quot;)
    public void testConnection() throws ClassNotFoundException, SQLException {
        Class.forName(&quot;com.mysql.cj.jdbc.Driver&quot;);
        String url = &quot;jdbc:mysql://127/0/0/1:3306/jdbc_ex&quot;;
        String id = &quot;scoula&quot;;
        String password = &quot;1234&quot;;
        Connection conn = DriverManager.getConnection(url,id,password);
        System.out.println(&quot;DB 연결 성공&quot;);
        conn.close();
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 연결이 되는지 Test를 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbktxk/btsN5WXlTrR/XxTUOls7BTHk86PyiBgf7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbktxk/btsN5WXlTrR/XxTUOls7BTHk86PyiBgf7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbktxk/btsN5WXlTrR/XxTUOls7BTHk86PyiBgf7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbktxk%2FbtsN5WXlTrR%2FXxTUOls7BTHk86PyiBgf7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;985&quot; height=&quot;741&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;741&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Run tests using을 Gradle, IntelliJ IDEA 선택에 따라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과가 다르게 출력되기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 이런 연결 속성들은 바뀔 수가 있기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 ip, user 아이디 및 비밀번호 등을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;properties 파일에서 따로 관리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에 같이 알아보자&lt;/p&gt;</description>
      <category>자바/JDBC</category>
      <category>jdbc</category>
      <category>JDBC 드라이버</category>
      <category>jdbc 드라이버 실습</category>
      <category>jdbc 연결</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/13</guid>
      <comments>https://parkhesse7.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 21 May 2025 23:58:27 +0900</pubDate>
    </item>
    <item>
      <title>[자바로 간단한 키오스크 시스템 구현해보기] 1편 UI 화면 구성</title>
      <link>https://parkhesse7.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키오스크 관련한 아이디어들이 떠오른 게 있어서 한 번 모델링을 해봐야겠다는 생각을 하고 있었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마침 진행하고 있는 부트캠프에서 자유 주제로 기회가 주어져 팀원들과 간단한 햄버거 키오스크 시스템 모델링을 해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql + 자바 콘솔 jdbc로 간단하게 구현해 볼 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1편에서는 UI 화면 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2편에서는 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3편에서는 JDBC 구현을 다루겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UI 화면 구성 툴은 Canva를 이용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;모델링과, JDBC 구현에 초점을 맞추었기 때문에&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;UI는 콘솔 흐름만 나타내서 예쁘진 않은 점 양해 부탁드립니다 (수정 예정)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 다 뷰나 리액트, 타임리프, 자바스크립트 등을 활용해서 화면을 나타내는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘솔도 해보려고 하니 과거로 돌아간 기분이어서 재밌네요&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5FSYZ/btsN5LzZj3q/CTPPSRurXJc5ynkXHjdKK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5FSYZ/btsN5LzZj3q/CTPPSRurXJc5ynkXHjdKK1/img.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;473&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.8242%; margin-right: 10px;&quot; data-widthpercent=&quot;49.4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5FSYZ/btsN5LzZj3q/CTPPSRurXJc5ynkXHjdKK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5FSYZ%2FbtsN5LzZj3q%2FCTPPSRurXJc5ynkXHjdKK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;616&quot; height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boBa4A/btsN46kla3C/EvKbewqokrTKPGM9XRS1KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boBa4A/btsN46kla3C/EvKbewqokrTKPGM9XRS1KK/img.png&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;473&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.0131%;&quot; data-widthpercent=&quot;50.6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boBa4A/btsN46kla3C/EvKbewqokrTKPGM9XRS1KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboBa4A%2FbtsN46kla3C%2FEvKbewqokrTKPGM9XRS1KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;메인화면 / 주문하기 진입 시 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;a href=&quot;https://www.text-image.com/convert/ascii.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.text-image.com/convert/ascii.html&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wepplication.github.io/tools/asciiArtGen/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wepplication.github.io/tools/asciiArtGen/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.ascii-art-generator.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.ascii-art-generator.org/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 나름 콘솔을 꾸미기 위해 ascii-art generator로 메인 화면을 꾸미기로 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인화면과, 주문하기 진입 시 화면입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m2BZW/btsN4Jpw0MO/daSG6KIIvLwkJmylM1MfC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m2BZW/btsN4Jpw0MO/daSG6KIIvLwkJmylM1MfC0/img.png&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;990&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4553%; margin-right: 10px;&quot; data-widthpercent=&quot;50.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m2BZW/btsN4Jpw0MO/daSG6KIIvLwkJmylM1MfC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2BZW%2FbtsN4Jpw0MO%2FdaSG6KIIvLwkJmylM1MfC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1296&quot; height=&quot;990&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPjmvf/btsN4vyzu85/3cAJ16aWDn3WXSRRalYZdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPjmvf/btsN4vyzu85/3cAJ16aWDn3WXSRRalYZdk/img.png&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;993&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3819%;&quot; data-widthpercent=&quot;49.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPjmvf/btsN4vyzu85/3cAJ16aWDn3WXSRRalYZdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPjmvf%2FbtsN4vyzu85%2F3cAJ16aWDn3WXSRRalYZdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1298&quot; height=&quot;993&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;먹고가기, 포장하기 진입 시 카테고리 선택 화면 / 카테고리 선택 진입 시 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이크아웃 여부를 결정하고 난 후의 화면과, 카테고리 화면입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 사진에서 괄호를 넣은 이유는 담은 상품이 없는, 처음 진입 시에는 해당 내용이 뜨지 않아도 되기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brgDAu/btsN45FVZ0T/i4MGLkrGHe45mIqa4l6yd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brgDAu/btsN45FVZ0T/i4MGLkrGHe45mIqa4l6yd1/img.png&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;998&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.6651%; margin-right: 10px;&quot; data-widthpercent=&quot;33.44&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brgDAu/btsN45FVZ0T/i4MGLkrGHe45mIqa4l6yd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrgDAu%2FbtsN45FVZ0T%2Fi4MGLkrGHe45mIqa4l6yd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1305&quot; height=&quot;998&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5dPPK/btsN5m1Gji4/IK6ib6TATfpWLF5Dkpl0KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5dPPK/btsN5m1Gji4/IK6ib6TATfpWLF5Dkpl0KK/img.png&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;994&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.696%; margin-right: 10px;&quot; data-widthpercent=&quot;33.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5dPPK/btsN5m1Gji4/IK6ib6TATfpWLF5Dkpl0KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5dPPK%2FbtsN5m1Gji4%2FIK6ib6TATfpWLF5Dkpl0KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HLAmi/btsN34VtvmO/wUfPPS4DgUtK7T1DiyulCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HLAmi/btsN34VtvmO/wUfPPS4DgUtK7T1DiyulCk/img.png&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;1005&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.3133%;&quot; data-widthpercent=&quot;33.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HLAmi/btsN34VtvmO/wUfPPS4DgUtK7T1DiyulCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHLAmi%2FbtsN34VtvmO%2FwUfPPS4DgUtK7T1DiyulCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1300&quot; height=&quot;1005&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;음식 선택 화면 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n38pt/btsN6Qt046U/UcBl0GprM58tCX5GDKwgrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n38pt/btsN6Qt046U/UcBl0GprM58tCX5GDKwgrK/img.png&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;1008&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.178%; margin-right: 10px;&quot; data-widthpercent=&quot;49.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n38pt/btsN6Qt046U/UcBl0GprM58tCX5GDKwgrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn38pt%2FbtsN6Qt046U%2FUcBl0GprM58tCX5GDKwgrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1299&quot; height=&quot;1008&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IFZg9/btsN31Es3GC/nNOEaji42tMlL8z7xk71d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IFZg9/btsN31Es3GC/nNOEaji42tMlL8z7xk71d1/img.png&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;999&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.6592%;&quot; data-widthpercent=&quot;50.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IFZg9/btsN31Es3GC/nNOEaji42tMlL8z7xk71d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIFZg9%2FbtsN31Es3GC%2FnNOEaji42tMlL8z7xk71d1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1300&quot; height=&quot;999&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;음식 선택 화면 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카테고리 별 상품 선택 화면입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;상품 선택 시에는 &quot;~~ 가 장바구니에 담겼습니다&quot;라는 메시지가 뜨고, 다른 음식 선택을 위해 다시 카테고리 선택 화면으로 이동합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;997&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhYDJ9/btsN4uGw5PJ/wIkGbW43ekh7tG4PCCPiNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhYDJ9/btsN4uGw5PJ/wIkGbW43ekh7tG4PCCPiNk/img.png&quot; data-alt=&quot;담은 상품 (장바구니) 결제 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhYDJ9/btsN4uGw5PJ/wIkGbW43ekh7tG4PCCPiNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhYDJ9%2FbtsN4uGw5PJ%2FwIkGbW43ekh7tG4PCCPiNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;371&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;997&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;담은 상품 (장바구니) 결제 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 화면에서 담은 상품이 없을 경우에는 괄호로 출력해 주지 않겠다는 &quot;담은 상품 결제&quot;가 화면에 있었죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;담은 상품 결제로 진입 시 나오는 화면입니다. 담은 상품을 취소할 수 있고, 담은 상품의 총액을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 취소를 해 장바구니가 빌 시에는 메인으로 이동하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;997&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5cd3N/btsN45eQGhB/ob8lfp9pNqK4YKRoh5csAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5cd3N/btsN45eQGhB/ob8lfp9pNqK4YKRoh5csAK/img.png&quot; data-alt=&quot;포인트 적립 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5cd3N/btsN45eQGhB/ob8lfp9pNqK4YKRoh5csAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5cd3N%2FbtsN45eQGhB%2Fob8lfp9pNqK4YKRoh5csAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;371&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;997&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포인트 적립 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;담은 상품을 확인하고 결제로 진입 시 포인트 적립 화면입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;997&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vaYEC/btsN4GGkCDD/4Mzc0yikpOtt8wF9pI1w5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vaYEC/btsN4GGkCDD/4Mzc0yikpOtt8wF9pI1w5K/img.png&quot; data-alt=&quot;결제수단 선택 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vaYEC/btsN4GGkCDD/4Mzc0yikpOtt8wF9pI1w5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvaYEC%2FbtsN4GGkCDD%2F4Mzc0yikpOtt8wF9pI1w5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;479&quot; height=&quot;367&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;997&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결제수단 선택 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결제수단 선택 화면입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카드나, 페이로 결제를 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7XcJB/btsN6vwMEaC/etfkSpWNXotXTyfZAbsc81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7XcJB/btsN6vwMEaC/etfkSpWNXotXTyfZAbsc81/img.png&quot; data-origin-width=&quot;1303&quot; data-origin-height=&quot;997&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.2765%; margin-right: 10px;&quot; data-widthpercent=&quot;49.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7XcJB/btsN6vwMEaC/etfkSpWNXotXTyfZAbsc81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7XcJB%2FbtsN6vwMEaC%2FetfkSpWNXotXTyfZAbsc81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1303&quot; height=&quot;997&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0c50S/btsN6rBaWFm/U2lDrKocYKOBQpMmsIffgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0c50S/btsN6rBaWFm/U2lDrKocYKOBQpMmsIffgk/img.png&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;989&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.5607%;&quot; data-widthpercent=&quot;50.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0c50S/btsN6rBaWFm/U2lDrKocYKOBQpMmsIffgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0c50S%2FbtsN6rBaWFm%2FU2lDrKocYKOBQpMmsIffgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1300&quot; height=&quot;989&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;결제 방법 선택 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;987&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXjQlW/btsN6YMfzmc/3EqAgDQa0rD3LEUtkUXiX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXjQlW/btsN6YMfzmc/3EqAgDQa0rD3LEUtkUXiX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXjQlW/btsN6YMfzmc/3EqAgDQa0rD3LEUtkUXiX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXjQlW%2FbtsN6YMfzmc%2F3EqAgDQa0rD3LEUtkUXiX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;554&quot; height=&quot;419&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;987&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트 확인 후, 사용할 금액을 100원 단위로 입력하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결제 화면으로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하지 않고 다시 0을 입력해 뒤로 갈 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tYhLB/btsN5U4Edks/KfhCpCsn7HiXpqBXouGKzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tYhLB/btsN5U4Edks/KfhCpCsn7HiXpqBXouGKzk/img.png&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;984&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.6948%; margin-right: 10px;&quot; data-widthpercent=&quot;50.28&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tYhLB/btsN5U4Edks/KfhCpCsn7HiXpqBXouGKzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtYhLB%2FbtsN5U4Edks%2FKfhCpCsn7HiXpqBXouGKzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;984&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgQs7v/btsN5L1inuT/yV9gF97M3xCLYk3WKeCYYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgQs7v/btsN5L1inuT/yV9gF97M3xCLYk3WKeCYYk/img.png&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;992&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.1424%;&quot; data-widthpercent=&quot;49.72&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgQs7v/btsN5L1inuT/yV9gF97M3xCLYk3WKeCYYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgQs7v%2FbtsN5L1inuT%2FyV9gF97M3xCLYk3WKeCYYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1297&quot; height=&quot;992&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;영수증 출력 선택 화면 / 주문내역 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영수증 출력 선택 화면과, 주문 내역 화면입니다.,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주문 내역 화면에서는 5초 뒤 자동으로 메인화면으로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 수정은 조금 더 필요할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 화면 구성에 대해 알아보았는데요, 다음 시간에는 이 화면을 바탕으로 모델링을 진행해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델링, JDBC 구현 방법에 대해서 알아보는 것이 목적이기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카드, 페이 등과 같은 내용에 대해서는 해당 API를 사용했다고 가정하고 진행할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 점은 키오스크 시스템은 쿠팡, 마켓 컬리와 같은 장바구니 시스템과 다른 점이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠팡과 마켓 컬리와 같은 시스템에서는 물건을 장바구니에 담게 되면, 물건 담았어. 기록해 돌라는 POST 요청이 서버로 전달되게 됩니다. 그래서 유저가 로그아웃을 하고 다시 접속하거나, 화면을 껐다 켜도 그대로 물건이 장바구니에 남아있게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 키오스크 시스템에서는 유저가 물건을 담고, 취소를 하는 일이 빈번하고, 물건을 담는 순간 그 자리에서 산다는 차이점이 있습니다. 그래서 담은 물건들을 리스트와 같은 형태로 프로그램 내에서 관리하다 &quot;결제 완료 시&quot;에 거의 모든 데이터를 서버로 전송을 하게 해야 할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 화면에서, 서버 DB에서 불러와야 하는 것은 카테고리, 음식 정보들이 있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포스팅 읽어주셔서 감사하고, 자바로 간단한 키오스크 시스템 구현해 보기 2편 모델링으로 찾아뵙겠습니다.&lt;/p&gt;</description>
      <category>자바</category>
      <category>자바 키오스크 시스템 구현</category>
      <category>키오스크 시스템</category>
      <category>키오스크 시스템 자바</category>
      <category>키오스크 화면 콘솔</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/12</guid>
      <comments>https://parkhesse7.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 20 May 2025 23:03:44 +0900</pubDate>
    </item>
    <item>
      <title>농림축산식품부의 길고양이 돌봄 지침(가이드라인)에 대해 알아보자</title>
      <link>https://parkhesse7.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://www.mafra.go.kr/home/5109/subview.do?enc=Zm5jdDF8QEB8JTJGYmJzJTJGaG9tZSUyRjc5MiUyRjU2ODkzOSUyRmFydGNsVmlldy5kbyUzRg%3D%3D&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.mafra.go.kr/home/5109/subview.do?enc=Zm5jdDF8QEB8JTJGYmJzJTJGaG9tZSUyRjc5MiUyRjU2ODkzOSUyRmFydGNsVmlldy5kbyUzRg%3D%3D&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;서론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서문에는 길고양이를 중성화해주세요, 올바른 돌봄을 실천해 주세요, 길고양이 학대는 범죄행위입니다 와 같은 내용이 나와있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 길고양이는 동물 보호법에 따라 보호받는 동물로 폭행하거나, 독극물 살포 등의 학대 행위를 했을 경우 법적 처벌을 받을 수 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;본론&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길고양이 돌봄 결정 과정 결정에 대해서 나오는데, 생명을 돌보는 일은 한두 번의 먹이를 주는 것으로 끝나지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 길고양이를 지속해서 책임진다는 마음으로 시작해야 한다고 적혀있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 말에 필자는 동의하는데, 단순히 귀엽다는 이유로 간식을 주게 되면 야생성을 잃어버릴 수 있기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 두 번 정도 아파트 화단에 있는 길고양이에게 밥을 주게 된다면, 고양이는 화단 앞에서 기다리고 사냥 등의 행위를 덜하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 고양이의 삶에 치명적인 영향을 줄 수 있다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길고양이의 중성화 중요성에 대해서도 언급하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일명 캣맘이라고 불리는 고양이들에게 밥을 주는 사람들에 대해 유의점도 많이 언급한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책임감: 적절한 돌봄 및 중성화를 통해 갈등을 최소화하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙성: 정해진 시간과 장소에 적당량의 먹이를 주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;청결성: 밥자리를 항상 깨끗하게 유지하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자도 동물을 좋아하는 사람으로서, 길고양이를 돌보는 것에 대해 관심을 가지고 있지만&lt;br /&gt;길고양이를 싫어하거나, 다른 환경을 더 중요하게 더 중요하게 생각하는 사람들도 많기 때문에 항상 조심해야 한다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 급여 빈도에 대해서도 나와있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밥그릇에 먹이가 항상 채워져있으면 돌보고 있는 개체 수를 확인하기 힘들고 고양이 상태 파악에도 어려움이 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 같은 시간에 급여하고, 일정 시간이 지난 후에는 먹이와 밥그릇을 바로 수거하자는 얘기가 적혀있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;급여 장소도 길고양이가 안정감을 느낄 수 있으면서, 사람들에게 피해가 가지 않는 장소를 택하라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf8DCp/btsN404v9FN/uKG0LRVqr1PUy1qxWYkgU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf8DCp/btsN404v9FN/uKG0LRVqr1PUy1qxWYkgU1/img.png&quot; data-alt=&quot;출처: 서을특별시 홈페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf8DCp/btsN404v9FN/uKG0LRVqr1PUy1qxWYkgU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf8DCp%2FbtsN404v9FN%2FuKG0LRVqr1PUy1qxWYkgU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;481&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 서을특별시 홈페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXnRl/btsN29u01nt/OPTa3KzLBs1Rau4RQSBqrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXnRl/btsN29u01nt/OPTa3KzLBs1Rau4RQSBqrK/img.png&quot; data-alt=&quot;출처: 서을특별시 홈페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXnRl/btsN29u01nt/OPTa3KzLBs1Rau4RQSBqrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXnRl%2FbtsN29u01nt%2FOPTa3KzLBs1Rau4RQSBqrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;714&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 서을특별시 홈페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;그리고 지하주차장과 차량 하부, 도로 주변, 어린이 놀이터 주변이나 감염 취약자가 있는 곳은 꼭 피하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;야생동물 보호를 위해 생태경관 보전 지역도 꼭 피하자&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;적정 급여량과, 고양이가 자주 걸리는 질병에 관해서도 적혀있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;본론&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;길고양이는 돌보는 일은 단순한 호의가 아닌 책임 있는 실천이어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;먹이를 주는 행위 하나만으로도 고양이의 생존 방식, 상태, 건강에 영향을 줄 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;그리고 이는 사람들의 생활 양식에도 영향을 준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;따라서 길고양이를 돌보려는 마음이 있다면 반드시 중성화, 규칙적인 급여, 청결한 관리가 함께 이루어져야 하며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;다른 사람들과의 갈등을 최소화하는 방식으로 접근해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;돌봄의 시작은 생명을 소중히 여기는 예쁜 마음이지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;그 지속은 이웃과의 이해와 조율 속에서 완성된다고 생각한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>길고양이 돌봄 가이드라인</category>
      <category>길고양이 돌봄 지침</category>
      <category>길고양이 돌봄 지침 가이드라인</category>
      <category>농림축산식품부</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/11</guid>
      <comments>https://parkhesse7.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 20 May 2025 03:06:09 +0900</pubDate>
    </item>
    <item>
      <title>길 고양이 TNR과 비교한 TNVR과 현재 시행 현황</title>
      <link>https://parkhesse7.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저번 시간에는 TNR에 대해서 알아보았는데요,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;TNR&quot; href=&quot;https://parkhesse7.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://parkhesse7.tistory.com/9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1747508527286&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;길 고양이 TNR에 대한 정보와 개인적 견해&quot; data-og-description=&quot;1. TNR의 정의TNR Trap(포획)-Neuter(중성화)-Return(방사)의 약자로, 길고양이 관리 시스템을 말합니다.말 그대로 안전하게 포획해서, 수술을 통해 번식을 불가능하게 하고, 원래의 삶의 터전으로 돌려&quot; data-og-host=&quot;hesse.co.kr&quot; data-og-source-url=&quot;https://parkhesse7.tistory.com/9&quot; data-og-url=&quot;https://hesse.co.kr/9&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kkx7c/hyYTgiThRf/KYuSC8evlP4nYXiknYgCg1/img.png?width=800&amp;amp;height=484&amp;amp;face=0_0_800_484,https://scrap.kakaocdn.net/dn/lhVly/hyYVabaJBj/ur9L7CZnf4oaXLEK6SXF4k/img.png?width=800&amp;amp;height=484&amp;amp;face=0_0_800_484,https://scrap.kakaocdn.net/dn/dVCI0U/hyYTnh2kyU/ZuDITctkfPpJRBhTaWDo00/img.png?width=1195&amp;amp;height=724&amp;amp;face=0_0_1195_724&quot;&gt;&lt;a href=&quot;https://parkhesse7.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://parkhesse7.tistory.com/9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kkx7c/hyYTgiThRf/KYuSC8evlP4nYXiknYgCg1/img.png?width=800&amp;amp;height=484&amp;amp;face=0_0_800_484,https://scrap.kakaocdn.net/dn/lhVly/hyYVabaJBj/ur9L7CZnf4oaXLEK6SXF4k/img.png?width=800&amp;amp;height=484&amp;amp;face=0_0_800_484,https://scrap.kakaocdn.net/dn/dVCI0U/hyYTnh2kyU/ZuDITctkfPpJRBhTaWDo00/img.png?width=1195&amp;amp;height=724&amp;amp;face=0_0_1195_724');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;길 고양이 TNR에 대한 정보와 개인적 견해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. TNR의 정의TNR Trap(포획)-Neuter(중성화)-Return(방사)의 약자로, 길고양이 관리 시스템을 말합니다.말 그대로 안전하게 포획해서, 수술을 통해 번식을 불가능하게 하고, 원래의 삶의 터전으로 돌려&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hesse.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. TNVR 이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TNVR은 Trap(포획)-Neuter(중성화)-&lt;u&gt;&lt;b&gt;Vaccinate(백신 접종)&lt;/b&gt;&lt;/u&gt;-Return(방사)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로, TNR에 Vaccinate(백신 접종) 단계가 추가된 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TNR 이란 용어는 자주 들어봤지만, TNVR 이란 단어는 생소해서 우리나라에서 시행 현황이 궁금해서 찾아보게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 해외의 TNVR 운영 사례&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미국&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대형동물보호단체 The Humane Society, Alley cat Allies와 같은 단체는 TNVR을 표준 프로토콜로 채택했다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광견병 백신 접종이 법적 의무인 경우가 많아서, TNVR이 현실적인 대안으로 자리 잡았다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 주(캘리포니아, 뉴욕)에서는 지자체 차원에서 TNVR을 제도화해서 예산까지 지원해 주고 있다는 정보를 보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호주&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광견병이 없는 국가지만, 톡소플라스마증과 같은 기생충 질병 문제로 백신 접종 포함한 TNVR이 확산 중이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 주에서는 야생 고양이에 대한 포획 후 안락사 정책과 함께, 도시 지역에서는 TNVR 허용 및 권장이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안락사 정책까지 시행되고 있다고 하니 찾아보면서 충격이었습니다. 약 1,400만에서 5,600만 마리의 야생 고양이가 서식해서 생태계에 큰 위협이 되고 있다는 정보도 보았는데, 어쩔 수 없다는 판단을 내린 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외에도 영국과 대만에서도 TNVR을 시행하고 있는데, 대만에서는 2017년 이후로 유기 동물 안락사 금지법이 시행됐다는 특이점이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 한국의 TNVR 운영 현황&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국에서는 예산과 전문 인력의 부족으로 인해 TNVR 프로그램 확대에 어려움을 겪고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고양이들이 안타깝다는 시선도 있지만, 그에 못지않게 길고양이에 대한 부정적인 인식을 가진 사람들도 많기 때문에 아직 확대가 어려울 것으로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리를 하면, TNVR은 TNR에 백신 접종이 추가된 것이고, 해외에서는 TNVR 사례가 많지만, 한국에서는 현실적인 문제로 인해 아직 시행을 못하고 있는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분들은 길 고양이 TNR에 대해 어떤 시선을 가지고 있는지도 궁금합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 윤리, 환경과 관련된 문제이다 보니 정답은 없는 것 같습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 정보를 한 번 모아봤는데 의견 자유롭게 달아주시면 감사하겠습니다.&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>tnr tnvr 비교</category>
      <category>tnr tnvr 차이</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/10</guid>
      <comments>https://parkhesse7.tistory.com/10#entry10comment</comments>
      <pubDate>Sun, 18 May 2025 04:16:55 +0900</pubDate>
    </item>
    <item>
      <title>길 고양이 TNR에 대한 정보와 개인적 견해</title>
      <link>https://parkhesse7.tistory.com/9</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nfBfm/btsN2Sr63gM/YDUOnBzyUY67ncNUnZx3p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nfBfm/btsN2Sr63gM/YDUOnBzyUY67ncNUnZx3p0/img.png&quot; data-alt=&quot;출처: image: Flaticon.com&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nfBfm/btsN2Sr63gM/YDUOnBzyUY67ncNUnZx3p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnfBfm%2FbtsN2Sr63gM%2FYDUOnBzyUY67ncNUnZx3p0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1195&quot; height=&quot;724&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: image: Flaticon.com&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. TNR의 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TNR Trap(포획)-Neuter(중성화)-Return(방사)의 약자로, 길고양이 관리 시스템을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말 그대로 안전하게 포획해서, 수술을 통해 번식을 불가능하게 하고, 원래의 삶의 터전으로 돌려보내는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초등학생 때 길에 있는 고양이 귀가 잘려있는 것을 보고, 인터넷으로 찾아봤던 기억이 나네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이 TNR 이란 것은 왜 필요할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. TNR의 필요성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고양이는 번식력이 매우 높아서, 1년에 20마리 이상을 낳을 수 있다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 TNR을 하지 않으면, 개체 수가 기하급수적으로 증가한다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 중성화된 고양이는 발정 소리를 내지 않고, 영역 싸움이 줄어들어 소음과 분뇨 문제도 완화된다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것도 귀가 왜 잘려있는지 찾아본 것과 마찬가지로, 초등학생 때 새벽에 밖에서 아기 울음소리가 계속 들려서 엄마한테 물어보니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고양이가 우는소리라고 했던 기억이 납니다. 그런 소음을 줄여주는 것에도 목적이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 수술을 하는 과정에서 수의사가 고양이의 상태 검진도 할 수 있는 장점이 있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 그렇다면 TNR은 누가 어떻게 할까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지자체와 동물보호 단체: 대부분의 지역에서는 보호단체나 지자체가 주기적으로 TNR을 시행한다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B6ak6/btsN1ZFtacI/40KejmErqKNW9E1GfKjeAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B6ak6/btsN1ZFtacI/40KejmErqKNW9E1GfKjeAk/img.png&quot; data-alt=&quot;출처: 서울시 동물복지 지원센터 홈페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B6ak6/btsN1ZFtacI/40KejmErqKNW9E1GfKjeAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB6ak6%2FbtsN1ZFtacI%2F40KejmErqKNW9E1GfKjeAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;586&quot; height=&quot;287&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 서울시 동물복지 지원센터 홈페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시민참여:&amp;nbsp; 캣맘, 봉사자들이 길고양이의 포획을 도와주는 시스템이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://animal.seoul.go.kr&quot;&gt;https://animal.seoul.go.kr&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 수술이 끝난 고양이는 한쪽 귀 끝을 잘라 표시합니다. 이를 귀를 커팅 한다고 주로 표현해서 커팅 귀라는 용어를 자주 본 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리를 하면, TNR은 포획-중성화-방사를 하는 시스템이다. TNR은 여러 가지 이유로 필요성을 느껴서 지자체에서 시행 중이다.&lt;br /&gt;TNR의 방법은 고양이의 귀 한쪽 끝을 자르는 것이다 정도인 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길 고양이의 귀가 많이 잘려있는 친구들도 종종 봐서, 개인적으로는 마음이 안 좋았던 경험도 있습니다. 개체에 따라 귀가 곪는 경우도 있다고 하네요. 물론 아직까지는 많은 전문가들이 판단한 최선의 선택이겠지만, 앞으로 다른 방안이 나오기를 바라며 저도 구상을 한 번 해보아야겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: 서울시 동물복지 지원센터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://animal.seoul.go.kr&quot;&gt;https://animal.seoul.go.kr&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;농림축산검역본부 - 동물보호관리시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.animal.go.kr&quot;&gt;https://www.animal.go.kr&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>TNR</category>
      <category>tnr 방법</category>
      <category>tnr 필요성</category>
      <category>길고양이</category>
      <category>길고양이TNR</category>
      <author>parkhesse7</author>
      <guid isPermaLink="true">https://parkhesse7.tistory.com/9</guid>
      <comments>https://parkhesse7.tistory.com/9#entry9comment</comments>
      <pubDate>Sun, 18 May 2025 04:01:21 +0900</pubDate>
    </item>
  </channel>
</rss>