<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>정보처리기사 실기</title>
    <link>https://jeongcheogi.tistory.com/</link>
    <description>jeongcheogi 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 1 Jun 2026 23:21:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>윤서입니다롱</managingEditor>
    <image>
      <title>정보처리기사 실기</title>
      <url>https://tistory1.daumcdn.net/tistory/8642152/attach/b92a67836bbd42a9b842ac36b52370d2</url>
      <link>https://jeongcheogi.tistory.com</link>
    </image>
    <item>
      <title> 8️⃣list.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/27</link>
      <description>&lt;h1&gt;list.jsp 작성하기&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제과현황 조회 화면 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 reg.jsp와 action.jsp를 작성하면서 판매정보를 등록하는 기능을 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 단계에서는 메뉴 중 하나인:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과현황
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면을 만들어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제과현황은 DB에 저장된 제과 정보를 조회해서 화면에 표로 보여주는 페이지입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 이번 문제에서 list.jsp가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 제과현황 화면에는 다음 항목이 출력되어야 합니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드
제과명
가격
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 데이터는 모두:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_bread
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 안에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이 화면은 JOIN이 필요하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_bread 테이블 하나만 조회
&lt;/code&gt;&lt;/pre&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;pre class=&quot;applescript&quot;&gt;&lt;code&gt;list.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. list.jsp가 해야 하는 일&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서 list.jsp는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. tbl_bread 테이블 조회
2. 제과코드 출력
3. 제과명 출력
4. 가격 출력
5. 가격을 1,000원 형식으로 출력
6. 표 형태로 화면에 보여주기
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 list.jsp는:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;DB 데이터를 조회해서 화면에 출력하는 페이지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. list.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;erb&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;title&amp;gt;제과현황&amp;lt;/title&amp;gt;
	&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;%
request.setCharacterEncoding(&quot;UTF-8&quot;);

Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();

String sql = &quot; SELECT pk_bread AS 제과코드 &quot; +
             &quot;      , name AS 제과명 &quot; +
             &quot;      , TO_CHAR(TO_NUMBER(price), '999,999') || '원' AS 가격 &quot; +
             &quot; FROM tbl_bread &quot; +
             &quot; ORDER BY pk_bread &quot;;

ResultSet rs = stmt.executeQuery(sql);
%&amp;gt;

&amp;lt;H4&amp;gt;제과현황&amp;lt;/H4&amp;gt;

&amp;lt;TABLE border=&quot;1&quot;&amp;gt;
	&amp;lt;TR&amp;gt;
		&amp;lt;TH width=&quot;100px&quot;&amp;gt;제과코드&amp;lt;/TH&amp;gt;
		&amp;lt;TH width=&quot;100px&quot;&amp;gt;제과명&amp;lt;/TH&amp;gt;
		&amp;lt;TH width=&quot;100px&quot;&amp;gt;가격&amp;lt;/TH&amp;gt;
	&amp;lt;/TR&amp;gt;

&amp;lt;% while(rs.next()){ %&amp;gt;
	&amp;lt;TR&amp;gt;
		&amp;lt;TD align=&quot;center&quot;&amp;gt;&amp;lt;%=rs.getString(&quot;제과코드&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
		&amp;lt;TD align=&quot;center&quot;&amp;gt;&amp;lt;%=rs.getString(&quot;제과명&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
		&amp;lt;TD align=&quot;right&quot;&amp;gt;&amp;lt;%=rs.getString(&quot;가격&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
	&amp;lt;/TR&amp;gt;
&amp;lt;% } %&amp;gt;

&amp;lt;/TABLE&amp;gt;

&amp;lt;%
rs.close();
stmt.close();
conn.close();
%&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. DB를 사용하는 페이지이므로 import가 필요합니다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;list.jsp는 DB에 저장된 제과 데이터를 조회해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 아래 코드가 필요합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;java.sql.*&lt;/td&gt;
&lt;td&gt;DB 연결, SQL 실행 기능 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DBPKG.Util&lt;/td&gt;
&lt;td&gt;우리가 만든 DB 연결 클래스 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. 현재 페이지는 조회 페이지입니다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 만든 action.jsp는 데이터를 저장하는 페이지였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 현재 list.jsp는 데이터를 입력하거나 저장하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 페이지는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bread에 저장된 데이터를 조회해서
사용자에게 보여주는 페이지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. DB 연결하기&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제과 데이터를 가져오기 위해 Oracle DB에 연결합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Connection conn&lt;/td&gt;
&lt;td&gt;DB 연결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statement stmt&lt;/td&gt;
&lt;td&gt;SQL 실행 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. 이번 문제에서 필요한 SQL 판단하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제과현황 화면에서 필요한 데이터는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드
제과명
가격
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 데이터들은 모두 tbl_bread 테이블에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 사용하는 테이블은 하나입니다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_bread
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 JOIN은 필요하지 않습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. SELECT 문 작성하기&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT pk_bread AS 제과코드,
       name AS 제과명,
       TO_CHAR(TO_NUMBER(price), '999,999') || '원' AS 가격
FROM tbl_bread
ORDER BY pk_bread
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 SQL문은:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_bread 테이블에서
제과코드, 제과명, 가격을 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하는 코드입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. AS 별칭 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;delphi&quot;&gt;&lt;code&gt;pk_bread AS 제과코드
name AS 제과명
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AS는 컬럼 이름을 보기 쉽게 바꾸는 역할입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 DB 컬럼명은:&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;pk_bread
name
price
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드
제과명
가격
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 보여주는 것이 더 자연스럽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 AS를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 JSP에서도 이 별칭을 기준으로 값을 꺼냅니다.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;rs.getString(&quot;제과코드&quot;)
rs.getString(&quot;제과명&quot;)
rs.getString(&quot;가격&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 SQL의 별칭과 JSP의 getString() 이름이 같아야 합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 가격을 보기 좋게 출력하기&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;TO_CHAR(TO_NUMBER(price), '999,999') || '원' AS 가격
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서는 가격을 그냥 1000처럼 출력하는 것이 아니라:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1,000원
1,500원
2,000원
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 보기 좋게 출력해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 TO_CHAR()를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TO_NUMBER(price)를 사용하는 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 tbl_bread에서 price가 문자형으로 만들어진 경우가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;'1000'
&lt;/code&gt;&lt;/pre&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;pre class=&quot;stylus&quot;&gt;&lt;code&gt;TO_NUMBER(price)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 숫자 형태로 바꿔줍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TO_CHAR()를 사용하는 이유&lt;/h2&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;TO_CHAR(TO_NUMBER(price), '999,999')
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자를 화면에 보여줄 문자 형식으로 바꿉니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 999,999 형식을 사용하면 천 단위 콤마가 붙습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;|| '원'을 붙이는 이유&lt;/h2&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;|| '원'
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle에서 ||는 문자열을 이어 붙이는 연산자입니다.&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1,000원
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 출력됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. ORDER BY를 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;ORDER BY pk_bread
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회 결과를 제과코드 기준으로 정렬합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 화면에서도 보통 코드 순서대로 출력하므로&lt;br /&gt;ORDER BY를 사용해 정렬해줍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. SQL 실행하기&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;ResultSet rs = stmt.executeQuery(sql);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL은 SELECT 조회문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;executeQuery()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회 결과는 ResultSet에 저장됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. ResultSet이 중요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL 조회 결과는 여러 줄로 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;B0001 대보름빵 1,000원
B0002 자라빵 1,500원
B0003 코끼리빵 2,000원
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 결과를 저장하는 객체가:&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;ResultSet
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 ResultSet은:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;조회 결과 저장 공간
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 생각하면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. table 태그로 화면 만들기&lt;/h1&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;TABLE border=&quot;1&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회 결과는 표 형태로 보여줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 TABLE 태그를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. TH 태그 : 제목칸 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;TH width=&quot;100px&quot;&amp;gt;제과코드&amp;lt;/TH&amp;gt;
&amp;lt;TH width=&quot;100px&quot;&amp;gt;제과명&amp;lt;/TH&amp;gt;
&amp;lt;TH width=&quot;100px&quot;&amp;gt;가격&amp;lt;/TH&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TH는 표 제목칸입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 문제에서 요구한 출력 항목인:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드
제과명
가격
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 제목으로 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;16. while(rs.next())로 여러 줄 출력하기&lt;/h1&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;&amp;lt;% while(rs.next()){ %&amp;gt;
&lt;/code&gt;&lt;/pre&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;while(rs.next())는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;조회 결과가 있는 동안 반복
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하라는 의미입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 제과 데이터가 7개라면 7번 반복해서 출력합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;17. ResultSet에서 값 꺼내기&lt;/h1&gt;
&lt;pre class=&quot;mel&quot;&gt;&lt;code&gt;&amp;lt;%=rs.getString(&quot;제과코드&quot;) %&amp;gt;
&amp;lt;%=rs.getString(&quot;제과명&quot;) %&amp;gt;
&amp;lt;%=rs.getString(&quot;가격&quot;) %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 현재 행의 값을 화면에 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용하는 이름은 SQL에서 지정한 별칭과 같아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 SQL에서:&lt;/p&gt;
&lt;pre class=&quot;cos&quot;&gt;&lt;code&gt;AS 제과코드
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 했기 때문에 JSP에서도:&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;rs.getString(&quot;제과코드&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;18. align으로 표 정렬하기&lt;/h1&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;TD align=&quot;center&quot;&amp;gt;
&amp;lt;TD align=&quot;right&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드 &amp;rarr; 가운데 정렬
제과명 &amp;rarr; 가운데 정렬
가격 &amp;rarr; 오른쪽 정렬
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;19. DB 연결 닫기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;rs.close();
stmt.close();
conn.close();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회가 끝났으므로 DB 연결을 닫아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 관련 객체는 사용 후 닫아주는 습관을 들이는 것이 좋습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;20. 현재 페이지 실행 흐름&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;list.jsp는 다음 순서로 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;list.jsp 실행
&amp;darr;
Oracle DB 연결
&amp;darr;
tbl_bread 조회
&amp;darr;
조회 결과를 ResultSet에 저장
&amp;darr;
while 반복문으로 한 줄씩 출력
&amp;darr;
제과현황 화면 완성
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;21. 현재까지 완성된 기능&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp
&amp;rarr; 프로그램 설명 화면

reg.jsp
&amp;rarr; 판매등록 입력 화면

action.jsp
&amp;rarr; DB 저장 처리

list.jsp
&amp;rarr; 제과현황 조회 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 이제:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;입력 + 저장 + 단순 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능까지 구현된 상태입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;22. 핵심 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 list.jsp에서 가장 중요한 것은:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_bread 테이블 하나만 조회해서
제과현황을 출력하는 흐름
&lt;/code&gt;&lt;/pre&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;pre class=&quot;gams&quot;&gt;&lt;code&gt;SELECT 실행
&amp;rarr; ResultSet 저장
&amp;rarr; while 반복
&amp;rarr; table 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조를 이해하는 것이 핵심입니다.&lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/27</guid>
      <comments>https://jeongcheogi.tistory.com/27#entry27comment</comments>
      <pubDate>Mon, 1 Jun 2026 14:55:48 +0900</pubDate>
    </item>
    <item>
      <title> 6️⃣reg.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/25</link>
      <description>&lt;h1&gt;05. reg.jsp 작성하기&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;판매등록 입력폼 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 main.jsp까지 작성하면서 프로그램의 기본 화면을 만들었습니다.&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;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reg.jsp는 판매등록 화면입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 사용자가 새로운 판매정보를 입력할 수 있도록:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매번호
판매일자
제과점
제과
판매수량
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 화면을 만들어주는 페이지입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 이번 문제에서 reg.jsp가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에는 다음 메뉴가 있습니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
&lt;/code&gt;&lt;/pre&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;따라서 우리는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;입력 화면
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. reg.jsp가 해야 하는 일&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서 reg.jsp는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. 판매번호 자동 생성
2. 판매일자 자동 생성
3. 제과점 선택 목록 만들기
4. 제과 선택 목록 만들기
5. 판매수량 입력칸 만들기
6. 입력값이 비어 있는지 검사
7. 등록 버튼을 누르면 action.jsp로 이동
8. 조회 버튼을 누르면 판매현황 화면으로 이동
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 점은 reg.jsp가 직접 DB에 저장하는 파일은 아니라는 것입니다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp &amp;rarr; 입력 화면
action.jsp &amp;rarr; DB 저장 처리
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 역할이 나누어져 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. reg.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;erb&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;java.util.Date&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;java.text.SimpleDateFormat&quot; %&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;title&amp;gt;판매등록&amp;lt;/title&amp;gt;
	&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
	&amp;lt;script&amp;gt;
		function check_val(){
			var fk_bakery = document.fm.fk_bakery.value;
			if(fk_bakery==&quot;&quot;){
				alert(&quot;제과점을 선택하지 않았습니다.&quot;);
				fm.fk_bakery.focus();
				return false;
			}

			var fk_bread = document.fm.fk_bread.value;
			if(fk_bread==&quot;&quot;){
				alert(&quot;제과를 선택하지 않았습니다.&quot;);
				fm.fk_bread.focus();
				return false;
			}

			var deal_count = document.fm.deal_count.value;
			if(deal_count==&quot;&quot;){
				alert(&quot;판매수량을 입력하지 않았습니다.&quot;);
				fm.deal_count.focus();
				return false;
			}

			return true;
		}
	&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;%
request.setCharacterEncoding(&quot;UTF-8&quot;);

Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();

String sql = &quot; SELECT TRIM(TO_CHAR(MAX(pk_sale)+1, '00000')) AS pk_sale &quot; +
             &quot; FROM tbl_sale &quot;;

ResultSet rs = stmt.executeQuery(sql);
rs.next();

String pk_sale = rs.getString(&quot;pk_sale&quot;);

Date date = new Date();
SimpleDateFormat deal_date = new SimpleDateFormat(&quot;yyyyMMdd&quot;);
%&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;H4&amp;gt;판매등록&amp;lt;/H4&amp;gt;

	&amp;lt;FORM name=&quot;fm&quot; action=&quot;action.jsp&quot; onsubmit=&quot;return check_val()&quot;&amp;gt;
		&amp;lt;TABLE border=&quot;1&quot;&amp;gt;
			&amp;lt;TR&amp;gt;
				&amp;lt;TH align=&quot;center&quot; width=&quot;300px&quot;&amp;gt;판매번호(자동발생)&amp;lt;/TH&amp;gt;
				&amp;lt;TD align=&quot;left&quot; width=&quot;400px&quot;&amp;gt;
					&amp;lt;INPUT type=&quot;text&quot; name=&quot;pk_sale&quot; value=&quot;&amp;lt;%=pk_sale %&amp;gt;&quot; readonly&amp;gt;
				&amp;lt;/TD&amp;gt;
			&amp;lt;/TR&amp;gt;

			&amp;lt;TR&amp;gt;
				&amp;lt;TH align=&quot;center&quot; width=&quot;300px&quot;&amp;gt;판매일자(자동발생)&amp;lt;/TH&amp;gt;
				&amp;lt;TD align=&quot;left&quot; width=&quot;400px&quot;&amp;gt;
					&amp;lt;INPUT type=&quot;text&quot; name=&quot;deal_date&quot; value=&quot;&amp;lt;%=deal_date.format(date) %&amp;gt;&quot; readonly&amp;gt;
				&amp;lt;/TD&amp;gt;
			&amp;lt;/TR&amp;gt;

			&amp;lt;TR&amp;gt;
				&amp;lt;TH align=&quot;center&quot;&amp;gt;제과점&amp;lt;/TH&amp;gt;
				&amp;lt;TD align=&quot;left&quot; width=&quot;400px&quot;&amp;gt;
					&amp;lt;SELECT name=&quot;fk_bakery&quot;&amp;gt;
						&amp;lt;OPTION value=&quot;&quot;&amp;gt;선택&amp;lt;/OPTION&amp;gt;
					&amp;lt;%
						sql = &quot; SELECT pk_bakery, name FROM tbl_bakery ORDER BY pk_bakery &quot;;
						rs = stmt.executeQuery(sql);

						while(rs.next()){
					%&amp;gt;
						&amp;lt;OPTION value=&quot;&amp;lt;%=rs.getString(&quot;pk_bakery&quot;) %&amp;gt;&quot;&amp;gt;
							&amp;lt;%=rs.getString(&quot;name&quot;) %&amp;gt;
						&amp;lt;/OPTION&amp;gt;
					&amp;lt;%
						}
					%&amp;gt;
					&amp;lt;/SELECT&amp;gt;
				&amp;lt;/TD&amp;gt;
			&amp;lt;/TR&amp;gt;

			&amp;lt;TR&amp;gt;
				&amp;lt;TH align=&quot;center&quot;&amp;gt;제과&amp;lt;/TH&amp;gt;
				&amp;lt;TD align=&quot;left&quot; width=&quot;400px&quot;&amp;gt;
					&amp;lt;SELECT name=&quot;fk_bread&quot;&amp;gt;
						&amp;lt;OPTION value=&quot;&quot;&amp;gt;선택&amp;lt;/OPTION&amp;gt;
					&amp;lt;%
						sql = &quot; SELECT pk_bread, name FROM tbl_bread ORDER BY pk_bread &quot;;
						rs = stmt.executeQuery(sql);

						while(rs.next()){
					%&amp;gt;
						&amp;lt;OPTION value=&quot;&amp;lt;%=rs.getString(&quot;pk_bread&quot;) %&amp;gt;&quot;&amp;gt;
							&amp;lt;%=rs.getString(&quot;name&quot;) %&amp;gt;
						&amp;lt;/OPTION&amp;gt;
					&amp;lt;%
						}
					%&amp;gt;
					&amp;lt;/SELECT&amp;gt;
				&amp;lt;/TD&amp;gt;
			&amp;lt;/TR&amp;gt;

			&amp;lt;TR&amp;gt;
				&amp;lt;TH align=&quot;center&quot;&amp;gt;판매수량&amp;lt;/TH&amp;gt;
				&amp;lt;TD align=&quot;left&quot; width=&quot;400px&quot;&amp;gt;
					&amp;lt;INPUT type=&quot;text&quot; name=&quot;deal_count&quot;&amp;gt;
				&amp;lt;/TD&amp;gt;
			&amp;lt;/TR&amp;gt;

			&amp;lt;TR&amp;gt;
				&amp;lt;TD align=&quot;center&quot; colspan=&quot;2&quot;&amp;gt;
					&amp;lt;INPUT type=&quot;submit&quot; value=&quot;등록&quot;&amp;gt;
					&amp;lt;INPUT type=&quot;button&quot; value=&quot;조회&quot; onclick=&quot;location.href='list_j.jsp'&quot;&amp;gt;
				&amp;lt;/TD&amp;gt;
			&amp;lt;/TR&amp;gt;
		&amp;lt;/TABLE&amp;gt;
	&amp;lt;/FORM&amp;gt;
&amp;lt;%
rs.close();
stmt.close();
conn.close();
%&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. DB를 사용하는 페이지이므로 import가 필요합니다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reg.jsp에서는 판매번호를 자동으로 가져오고,&lt;br /&gt;제과점 목록과 제과 목록을 DB에서 불러옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 아래 코드가 필요합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;java.sql.*&lt;/td&gt;
&lt;td&gt;DB 연결, SQL 실행 기능 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DBPKG.Util&lt;/td&gt;
&lt;td&gt;우리가 만든 DB 연결 클래스 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 현재 날짜를 자동으로 출력하기 위해 다음 import도 사용합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;%@ page import = &quot;java.util.Date&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;java.text.SimpleDateFormat&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;java.util.Date&lt;/td&gt;
&lt;td&gt;현재 날짜 가져오기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleDateFormat&lt;/td&gt;
&lt;td&gt;날짜 형식 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 이 페이지는 단순 입력폼만 있는 것이 아니라&lt;br /&gt;DB에서 자동번호와 선택 목록을 가져오는 작업도 합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. 입력값 검사 함수 만들기&lt;/h1&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;function check_val(){
&lt;/code&gt;&lt;/pre&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;이번 문제에서는 판매등록을 할 때 다음 값이 반드시 필요합니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과점
제과
판매수량
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이 값들이 비어 있으면 등록되지 않게 막아야 합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제과점 선택 검사&lt;/h2&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;var fk_bakery = document.fm.fk_bakery.value;
if(fk_bakery==&quot;&quot;){
	alert(&quot;제과점을 선택하지 않았습니다.&quot;);
	fm.fk_bakery.focus();
	return false;
}
&lt;/code&gt;&lt;/pre&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;pre class=&quot;erlang&quot;&gt;&lt;code&gt;제과점을 선택하지 않았습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 경고창을 띄우고, 해당 선택칸으로 커서를 이동시킵니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제과 선택 검사&lt;/h2&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;var fk_bread = document.fm.fk_bread.value;
if(fk_bread==&quot;&quot;){
	alert(&quot;제과를 선택하지 않았습니다.&quot;);
	fm.fk_bread.focus();
	return false;
}
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;판매수량 검사&lt;/h2&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;var deal_count = document.fm.deal_count.value;
if(deal_count==&quot;&quot;){
	alert(&quot;판매수량을 입력하지 않았습니다.&quot;);
	fm.deal_count.focus();
	return false;
}
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. 판매번호를 자동으로 가져와야 하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 화면에서는:&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;판매번호(자동발생)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 사용자가 직접 판매번호를 입력하는 것이 아니라,&lt;br /&gt;DB에서 다음 번호를 자동으로 계산해서 보여줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다음 SQL문을 사용합니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT TRIM(TO_CHAR(MAX(pk_sale)+1, '00000')) AS pk_sale
FROM tbl_sale
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. 자동번호 SQL 설명&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 tbl_sale에는 이미 판매번호가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 마지막 판매번호가:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;00015
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라면 다음 번호는:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;00016
&lt;/code&gt;&lt;/pre&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;pre class=&quot;stylus&quot;&gt;&lt;code&gt;MAX(pk_sale)+1
&lt;/code&gt;&lt;/pre&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;현재 가장 큰 판매번호를 찾고
거기에 1을 더한다
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TO_CHAR를 사용하는 이유&lt;/h2&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;TO_CHAR(MAX(pk_sale)+1, '00000')
&lt;/code&gt;&lt;/pre&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;16
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라는 숫자가 나오면:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;00016
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 출력되게 합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TRIM을 사용하는 이유&lt;/h2&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;TRIM(TO_CHAR(MAX(pk_sale)+1, '00000'))
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 판매일자를 자동으로 가져오는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 화면에서는:&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;판매일자(자동발생)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 사용자가 직접 날짜를 입력하는 것이 아니라&lt;br /&gt;현재 날짜가 자동으로 입력되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다음 코드를 사용합니다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;Date date = new Date();
SimpleDateFormat deal_date = new SimpleDateFormat(&quot;yyyyMMdd&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 input 값에 넣습니다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;value=&quot;&amp;lt;%=deal_date.format(date) %&amp;gt;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 날짜가 2025년 5월 9일이라면:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;20250509
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 출력됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. DB 연결 코드&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 Oracle DB와 연결하고 SQL 실행 준비를 하는 코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Connection conn&lt;/td&gt;
&lt;td&gt;DB 연결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statement stmt&lt;/td&gt;
&lt;td&gt;SQL 실행 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 판매번호 SELECT 실행하기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;ResultSet rs = stmt.executeQuery(sql);
rs.next();

String pk_sale = rs.getString(&quot;pk_sale&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동번호를 가져오는 SQL은 조회문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회문은:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;executeQuery()
&lt;/code&gt;&lt;/pre&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;pre class=&quot;abnf&quot;&gt;&lt;code&gt;rs.next();
&lt;/code&gt;&lt;/pre&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;pre class=&quot;abnf&quot;&gt;&lt;code&gt;String pk_sale = rs.getString(&quot;pk_sale&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. form 태그 만들기&lt;/h1&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;FORM name=&quot;fm&quot; action=&quot;action.jsp&quot; onsubmit=&quot;return check_val()&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;name=&quot;fm&quot;&lt;/td&gt;
&lt;td&gt;JavaScript에서 폼을 찾기 위한 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;action=&quot;action.jsp&quot;&lt;/td&gt;
&lt;td&gt;등록 버튼 클릭 시 이동할 페이지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onsubmit&lt;/td&gt;
&lt;td&gt;전송 전 검사 함수 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 등록 버튼을 누르면 먼저 check_val()이 실행되고,&lt;br /&gt;문제가 없으면 action.jsp로 이동합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. 판매번호 입력칸&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;INPUT type=&quot;text&quot; name=&quot;pk_sale&quot; value=&quot;&amp;lt;%=pk_sale %&amp;gt;&quot; readonly&amp;gt;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;gcode&quot;&gt;&lt;code&gt;&amp;lt;%=pk_sale %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 JSP 변수 값을 화면에 출력하는 코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 DB에서 가져온 다음 판매번호를 input에 넣어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;readonly는 사용자가 값을 수정하지 못하게 하는 속성입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. 판매일자 입력칸&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;INPUT type=&quot;text&quot; name=&quot;deal_date&quot; value=&quot;&amp;lt;%=deal_date.format(date) %&amp;gt;&quot; readonly&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 날짜를 자동으로 보여주는 입력칸입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판매일자는 자동발생 값이므로 사용자가 직접 수정하지 못하도록 readonly를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. 제과점 선택 목록 만들기&lt;/h1&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;sql = &quot; SELECT pk_bakery, name FROM tbl_bakery ORDER BY pk_bakery &quot;;
rs = stmt.executeQuery(sql);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제과점 목록은 사용자가 직접 입력하는 것이 아니라&lt;br /&gt;DB에 저장된 제과점 데이터를 가져와 선택하도록 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 tbl_bakery 테이블에서 제과점 코드와 이름을 조회합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SELECT 태그 사용&lt;/h2&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;SELECT name=&quot;fk_bakery&quot;&amp;gt;
	&amp;lt;OPTION value=&quot;&quot;&amp;gt;선택&amp;lt;/OPTION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SELECT는 드롭다운 목록을 만들 때 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 옵션은 아무것도 선택하지 않은 상태를 의미합니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;OPTION value=&quot;&quot;&amp;gt;선택&amp;lt;/OPTION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;while문으로 제과점 목록 출력&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;while(rs.next()){
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 저장된 제과점 수만큼 반복하여 option을 생성합니다.&lt;/p&gt;
&lt;pre class=&quot;erb&quot;&gt;&lt;code&gt;&amp;lt;OPTION value=&quot;&amp;lt;%=rs.getString(&quot;pk_bakery&quot;) %&amp;gt;&quot;&amp;gt;
	&amp;lt;%=rs.getString(&quot;name&quot;) %&amp;gt;
&amp;lt;/OPTION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점은:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;화면에는 제과점 이름이 보이고
실제로 전송되는 값은 제과점 코드
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;정심당
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 보이지만 실제 action.jsp로 전송되는 값은:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;A0001
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. 제과 선택 목록 만들기&lt;/h1&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;sql = &quot; SELECT pk_bread, name FROM tbl_bread ORDER BY pk_bread &quot;;
rs = stmt.executeQuery(sql);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제과 목록도 DB에서 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tbl_bread 테이블에서 제과 코드와 제과명을 조회합니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;SELECT name=&quot;fk_bread&quot;&amp;gt;
	&amp;lt;OPTION value=&quot;&quot;&amp;gt;선택&amp;lt;/OPTION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 while문으로 제과 목록을 option으로 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;대보름빵
자라빵
코끼리빵
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 보이고, 실제로 전송되는 값은:&lt;/p&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;B0001
B0002
B0003
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;16. 판매수량 입력칸&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;INPUT type=&quot;text&quot; name=&quot;deal_count&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;10
15
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 값은 action.jsp로 전달되어 tbl_sale 테이블에 저장됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;17. 등록 버튼&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;INPUT type=&quot;submit&quot; value=&quot;등록&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록 버튼입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 버튼을 누르면 form이 전송됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;check_val() 실행
&amp;rarr; 입력값 검사
&amp;rarr; action.jsp로 이동
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흐름으로 동작합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;18. 조회 버튼&lt;/h1&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;INPUT type=&quot;button&quot; value=&quot;조회&quot; onclick=&quot;location.href='list_j.jsp'&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회 버튼입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 버튼을 누르면 판매현황 화면인 list_j.jsp로 이동합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;19. DB 연결 닫기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;rs.close();
stmt.close();
conn.close();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 사용이 끝났기 때문에 연결을 닫아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습에서는 코드가 짧아도 DB 관련 객체는 사용 후 닫아주는 습관을 들이는 것이 좋습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;20. 현재까지의 작업 흐름&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;db.sql
&amp;rarr; 제과점, 제과, 판매정보 테이블 생성

Util.java
&amp;rarr; Oracle DB 연결

index.jsp
&amp;rarr; 전체 화면 틀 생성

style.css
&amp;rarr; 화면 디자인 적용

main.jsp
&amp;rarr; 프로그램 설명 화면

reg.jsp
&amp;rarr; 판매등록 입력폼 생성
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;21. 핵심 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 reg.jsp에서 중요한 것은 단순히 입력칸을 만드는 것이 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 요구한:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매번호 자동발생
판매일자 자동발생
제과점 선택
제과 선택
판매수량 입력
등록 전 빈칸 검사
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능을 화면에 구현하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 reg.jsp는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;사용자에게 판매정보를 입력받는 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이고, 실제 DB 저장은 다음 단계에서 작성할:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;action.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 담당하게 됩니다.&lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/25</guid>
      <comments>https://jeongcheogi.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 1 Jun 2026 14:46:22 +0900</pubDate>
    </item>
    <item>
      <title> 5️⃣main.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/24</link>
      <description>&lt;h1&gt;04. main.jsp 작성하기&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제과점 판매관리 프로그램 설명 화면 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 index.jsp와 style.css를 작성하면서 웹사이트의 전체 틀과 디자인을 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 index.jsp에는 다음 코드가 있었습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;iframe name=&quot;section_page&quot; src=&quot;main.jsp&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 현재 프로젝트는 처음 실행되면:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 section 영역에 자동으로 출력되는 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이번 단계에서는 프로그램 실행 시 가장 먼저 보여줄 안내 화면을 만들어보겠습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 왜 main.jsp가 필요한가?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 문제에서는 메뉴를 클릭하면 다음 화면으로 이동할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
제과현황
판매현황
매출현황
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;이 프로그램이 어떤 프로그램인지
어떤 순서로 작업하는지
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 현재 프로젝트에서 main.jsp 역할&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트에서 main.jsp는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;프로그램 소개 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 실제 DB 저장이나 조회 기능은 없고, 사용자에게 현재 프로그램 설명을 보여주는 페이지입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. main.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
	&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h4&amp;gt;제과점 판매관리 프로그램&amp;lt;/h4&amp;gt;
&amp;lt;pre&amp;gt;
제과점 판매관리를 위한 데이터베이스를 구축하고 제과점 판매관리 프로그램을 작성하는 프로그램이다.
프로그램 작성순서
1. 제과 테이블을 작성한다.
2. 제과점 테이블을 작성한다.
3. 판매정보 테이블에서 제시된 문제지의 참조데이터를 추가 생성한다.
4. 홈페이지 프로그램을 작성한다.
5. 판매등록 프로그램을 조건에 맞게 작성한다.
6. 제과현황, 판매현황, 매출현황 프로그램을 작성한다.
&amp;lt;/pre&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. main.jsp가 출력되는 위치&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 작성한 index.jsp에는 다음 코드가 있었습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;iframe name=&quot;section_page&quot; src=&quot;main.jsp&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 index.jsp가 실행되면:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;section 영역 안에
main.jsp가 자동 출력
&lt;/code&gt;&lt;/pre&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;pre class=&quot;stylus&quot;&gt;&lt;code&gt;header &amp;rarr; 유지
nav &amp;rarr; 유지
section &amp;rarr; main.jsp 출력
footer &amp;rarr; 유지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 main.jsp는 section 안에 들어가는 첫 화면입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. h4 태그 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;h4&amp;gt;제과점 판매관리 프로그램&amp;lt;/h4&amp;gt;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;apache&quot;&gt;&lt;code&gt;&amp;lt;h4&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index.jsp의 header에는 큰 프로그램 제목이 이미 있기 때문에,&lt;br /&gt;section 안에서는 너무 큰 제목보다는 h4 정도로 설명 제목을 넣어주는 것이 자연스럽습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. pre 태그를 사용하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 코드에서 중요한 부분은 다음 태그입니다.&lt;/p&gt;
&lt;pre class=&quot;apache&quot;&gt;&lt;code&gt;&amp;lt;pre&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pre 태그는 작성한 모양 그대로 화면에 출력해주는 태그입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. 왜 pre 태그를 사용할까?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 화면에서는 다음처럼 순서를 줄바꿈해서 보여줘야 합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. 제과 테이블을 작성한다.
2. 제과점 테이블을 작성한다.
3. 판매정보 테이블에서 제시된 문제지의 참조데이터를 추가 생성한다.
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 일반 HTML에서는 Enter를 쳐도 화면에서 줄바꿈이 그대로 유지되지 않을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 코드에:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;안녕하세요
반갑습니다
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 작성해도 실제 화면에서는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;안녕하세요 반갑습니다
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 한 줄로 붙어서 출력될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 작성한 줄바꿈과 띄어쓰기를 그대로 보여주기 위해 pre 태그를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. pre 태그 역할&lt;/h1&gt;
&lt;pre class=&quot;apache&quot;&gt;&lt;code&gt;&amp;lt;pre&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;줄바꿈 유지
띄어쓰기 유지
작성 형태 유지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 문제처럼:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;프로그램 설명
작업 순서
안내 문장
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 출력할 때 사용하면 편리합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 현재 main.jsp가 하는 역할&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 화면에서는 사용자가 처음 프로그램을 실행했을 때:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;이 프로그램이 무엇인지
어떤 순서로 작업되는지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 안내합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 main.jsp는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;프로그램 설명서 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 생각하면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 실제 실행 흐름&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트는 다음 순서로 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;index.jsp 실행
&amp;darr;
iframe 안에 main.jsp 출력
&amp;darr;
사용자가 메뉴 클릭
&amp;darr;
reg.jsp / list.jsp / list_j.jsp / list_jg.jsp 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 main.jsp는 프로그램 시작 시 가장 먼저 보여주는 기본 안내 화면입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. 현재까지 완성된 구조&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재까지 만든 파일은 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;db.sql
&amp;rarr; 데이터베이스 생성

Util.java
&amp;rarr; Oracle DB 연결

index.jsp
&amp;rarr; 전체 화면 구조 생성

style.css
&amp;rarr; 화면 디자인 적용

main.jsp
&amp;rarr; 프로그램 설명 화면 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다음 단계에서는:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 작성해서 실제로 판매정보를 입력하는 판매등록 화면을 만들어보겠습니다.&lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/24</guid>
      <comments>https://jeongcheogi.tistory.com/24#entry24comment</comments>
      <pubDate>Mon, 1 Jun 2026 14:42:18 +0900</pubDate>
    </item>
    <item>
      <title> 4️⃣style.css 작성하기</title>
      <link>https://jeongcheogi.tistory.com/23</link>
      <description>&lt;h1&gt;  제과점 매출관리 프로그램 화면 디자인 적용하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 index.jsp를 작성하면서 웹사이트의 전체 틀을 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index.jsp에서는 화면을 다음 4개 영역으로 나누었습니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;header  &amp;rarr; 제목 영역
nav     &amp;rarr; 메뉴 영역
section &amp;rarr; 실제 내용 출력 영역
footer  &amp;rarr; 하단 영역
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 HTML만 작성하면 화면이 단순하게 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이번 단계에서는 style.css를 작성하여&lt;br /&gt;제과점 매출관리 프로그램에 맞는 화면 디자인을 적용해보겠습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. style.css가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서는 다음과 같은 화면이 요구됩니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;상단 프로그램 제목
메뉴 영역
본문 출력 영역
하단 저작권 영역
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 문제 예시 화면을 보면&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;분홍색 제목 영역
연분홍색 메뉴 영역
흰색 본문 영역
분홍색 footer 영역
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;배경색
글자색
높이
정렬
여백
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;style.css
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. index.jsp와 style.css 연결 확인하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index.jsp에는 다음 코드가 있습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;index.jsp에 style.css 디자인을 적용하겠다
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;index.jsp &amp;rarr; 화면 구조
style.css &amp;rarr; 화면 디자인
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 역할을 분리하는 것입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. style.css 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;@charset &quot;UTF-8&quot;;

BODY, HTML {
	text-align: center;
}

HEADER, NAV, SECTION, IFRAME, FOOTER {
	width: 100%;
	padding: 15px;
	display: flex;
	align-items: center;
	justify-content: center;
}

HEADER{
	height: 30px;
	background: rgb(224, 158, 160);
	color: #ffffff;
}

FOOTER{
	height: 70px;
	background: rgb(255, 128, 192);
	color: #ffffff;
}

NAV{
	height: 30px;
	background: rgb(254, 201, 215);
}

NAV UL{
	margin: 0;
	padding: 0;
}

NAV LI{
	display: inline-block;
	width: 170px;
}

NAV A{
	color: #ffffff;
	text-decoration: none;
}

SECTION{
	background: #ffffff;
	border: 0;
}

SECTION IFRAME{
	height: 400px;
	border: 0;
}

TABLE {
	margin: auto;
}

PRE {
	text-align: LEFT;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. 한글 깨짐 방지 설정&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;@charset &quot;UTF-8&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS 파일에서도 UTF-8 인코딩을 사용하도록 설정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트는 한글 메뉴와 제목을 사용하므로&lt;br /&gt;인코딩을 맞춰주는 것이 좋습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. 전체 글자 가운데 정렬&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;BODY, HTML {
	text-align: center;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서는&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;프로그램 제목
메뉴
표
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등이 대부분 가운데 정렬되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 BODY와 HTML 전체를 가운데 정렬합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. 공통 영역 디자인 적용하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;HEADER, NAV, SECTION, IFRAME, FOOTER {
	width: 100%;
	padding: 15px;
	display: flex;
	align-items: center;
	justify-content: center;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 index.jsp에는&lt;/p&gt;
&lt;pre class=&quot;apache&quot;&gt;&lt;code&gt;HEADER
NAV
SECTION
IFRAME
FOOTER
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;가로 전체 사용
안쪽 여백
가운데 정렬
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. HEADER 디자인하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;HEADER{
	height: 30px;
	background: rgb(224, 158, 160);
	color: #ffffff;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HEADER는 프로그램 제목이 출력되는 영역입니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과점 매출관리 프로그램
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;분홍색 배경
흰색 글자
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 되도록 설정합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. NAV 디자인하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;NAV{
	height: 30px;
	background: rgb(254, 201, 215);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAV는 메뉴 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 메뉴는&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
제과현황
판매현황
매출현황
홈으로
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 메뉴 기본 여백 제거하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;NAV UL{
	margin: 0;
	padding: 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ul 태그는 기본적으로 여백을 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 여백 때문에 메뉴 위치가 어긋날 수 있으므로&lt;br /&gt;0으로 설정하여 제거합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 메뉴를 가로로 배치하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;NAV LI{
	display: inline-block;
	width: 170px;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;li 태그는 원래 세로로 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 현재 메뉴는&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록  제과현황  판매현황  매출현황  홈으로
&lt;/code&gt;&lt;/pre&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;pre class=&quot;arduino&quot;&gt;&lt;code&gt;display: inline-block;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;scss&quot;&gt;&lt;code&gt;width: 170px;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 지정합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. 메뉴 글자 꾸미기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;NAV A{
	color: #ffffff;
	text-decoration: none;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a 태그는 기본적으로&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;파란색 글자
밑줄
&lt;/code&gt;&lt;/pre&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;pre class=&quot;scss&quot;&gt;&lt;code&gt;color: #ffffff;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 흰색 글자로 변경하고&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;text-decoration: none;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 밑줄을 제거합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. SECTION 디자인하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;SECTION{
	background: #ffffff;
	border: 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SECTION은 실제 화면이 출력되는 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
제과현황
판매현황
매출현황
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면이 표시됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배경은 흰색으로 하고&lt;br /&gt;테두리는 제거합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. IFRAME 높이 설정하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;SECTION IFRAME{
	height: 400px;
	border: 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iframe은 다른 JSP 화면을 출력하는 공간입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;높이가 너무 작으면&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매현황 표
매출현황 표
&lt;/code&gt;&lt;/pre&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;pre class=&quot;scss&quot;&gt;&lt;code&gt;height: 400px;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 지정합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. FOOTER 디자인하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;FOOTER{
	height: 70px;
	background: rgb(255, 128, 192);
	color: #ffffff;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;footer는 화면 맨 아래 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에는&lt;/p&gt;
&lt;pre class=&quot;gams&quot;&gt;&lt;code&gt;Copyright (c) 2025 ...
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. TABLE 가운데 정렬하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;TABLE {
	margin: auto;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 만들&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과현황
판매현황
매출현황
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면은 모두 표(Table)를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표를 화면 가운데 정렬하기 위해&lt;/p&gt;
&lt;pre class=&quot;scss&quot;&gt;&lt;code&gt;margin: auto;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;16. PRE 태그 정렬하기&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;PRE {
	text-align: LEFT;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.jsp에서는 프로그램 설명을 작성할 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명 문장은 왼쪽 정렬이 읽기 편하므로&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;text-align: left;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 적용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;17. 현재까지의 작업 흐름&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;db.sql
&amp;rarr; 테이블 생성

Util.java
&amp;rarr; Oracle 연결

index.jsp
&amp;rarr; 전체 화면 틀

style.css
&amp;rarr; 화면 디자인 적용
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다음 단계에서는&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 작성하여 프로그램 설명 화면을 만들어 보겠습니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(다음 포스팅: &lt;b&gt;04. main.jsp 작성하기 - 제과점 매출관리 프로그램 설명 화면 만들기&lt;/b&gt;)&lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/23</guid>
      <comments>https://jeongcheogi.tistory.com/23#entry23comment</comments>
      <pubDate>Mon, 1 Jun 2026 14:38:00 +0900</pubDate>
    </item>
    <item>
      <title> 3️⃣index.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/22</link>
      <description>&lt;h1&gt;02. index.jsp 작성하기&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제과점 매출관리 프로그램의 전체 화면 틀 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 db.sql을 작성하면서 제과점 프로그램에 필요한 테이블을 만들었습니다.&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;pre class=&quot;axapta&quot;&gt;&lt;code&gt;index.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index.jsp는 프로그램의 시작 페이지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 판매등록이나 제과현황을 직접 처리하는 파일이 아니라&lt;br /&gt;전체 화면의 틀을 잡아주는 파일입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 이번 문제에서 index.jsp가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 요구하는 메뉴는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
제과현황
판매현황
매출현황
홈으로
&lt;/code&gt;&lt;/pre&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;그래서 index.jsp에서는 다음 영역을 만듭니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;header  &amp;rarr; 프로그램 제목
nav     &amp;rarr; 메뉴
section &amp;rarr; 실제 화면 출력
footer  &amp;rarr; 하단 정보
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. index.jsp가 해야 할 일&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서 index.jsp는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;1. 상단에 &amp;ldquo;제과점 매출관리 프로그램&amp;rdquo; 제목 출력
2. 메뉴 만들기
   - 판매등록
   - 제과현황
   - 판매현황
   - 매출현황
   - 홈으로
3. section 영역에 main.jsp 출력
4. footer 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, index.jsp는 기능 처리 파일이 아니라&lt;br /&gt;프로그램 전체 화면 구조를 만드는 파일입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. index.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;title&amp;gt;제과점 매출관리 프로그램&amp;lt;/title&amp;gt;
	&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;HEADER&amp;gt;&amp;lt;H2&amp;gt;제과점 매출관리 프로그램&amp;lt;/H2&amp;gt;&amp;lt;/HEADER&amp;gt;
	&amp;lt;NAV&amp;gt;
		&amp;lt;UL&amp;gt;
			&amp;lt;LI&amp;gt;&amp;lt;A href = &quot;reg.jsp&quot;			target = &quot;section_page&quot;&amp;gt;판매등록&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;
			&amp;lt;LI&amp;gt;&amp;lt;A href = &quot;list.jsp&quot;		target = &quot;section_page&quot;&amp;gt;제과현황&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;
			&amp;lt;LI&amp;gt;&amp;lt;A href = &quot;list_j.jsp&quot;		target = &quot;section_page&quot;&amp;gt;판매현황&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;
			&amp;lt;LI&amp;gt;&amp;lt;A href = &quot;list_jg.jsp&quot;		target = &quot;section_page&quot;&amp;gt;매출현황&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;
			&amp;lt;LI&amp;gt;&amp;lt;A href = &quot;main.jsp&quot;		target = &quot;section_page&quot;&amp;gt;홈으로&amp;lt;/A&amp;gt;&amp;lt;/LI&amp;gt;
		&amp;lt;/UL&amp;gt;
	&amp;lt;/NAV&amp;gt;
	&amp;lt;section&amp;gt;
		&amp;lt;iframe name=&quot;section_page&quot; src=&quot;main.jsp&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
	&amp;lt;/section&amp;gt;
	&amp;lt;footer&amp;gt;
		&amp;lt;H3&amp;gt;Copyright (c) 2025. 주식회사 OOOO Inc All Rights Reserved.&amp;lt;/H3&amp;gt;
	&amp;lt;/footer&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. JSP 기본 설정&lt;/h1&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 JSP 파일의 기본 설정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로그램은 한글을 사용하므로&lt;br /&gt;한글이 깨지지 않게 UTF-8 설정을 해줍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. CSS 파일 연결하기&lt;/h1&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 style.css 파일을 연결하는 코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면의 색상, 크기, 정렬은 style.css에서 처리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;index.jsp &amp;rarr; 화면 구조
style.css &amp;rarr; 화면 디자인
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 역할이 나뉩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. HEADER 영역 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;HEADER&amp;gt;&amp;lt;H2&amp;gt;제과점 매출관리 프로그램&amp;lt;/H2&amp;gt;&amp;lt;/HEADER&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HEADER는 화면 맨 위 제목 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 프로그램 이름이&lt;br /&gt;&amp;ldquo;제과점 매출관리 프로그램&amp;rdquo;이므로 이 제목을 출력합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. NAV 영역 만들기&lt;/h1&gt;
&lt;pre class=&quot;apache&quot;&gt;&lt;code&gt;&amp;lt;NAV&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAV는 메뉴 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서는 다음 메뉴가 필요합니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
제과현황
판매현황
매출현황
홈으로
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 NAV 안에 메뉴들을 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 메뉴를 목록으로 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;UL&amp;gt;
	&amp;lt;LI&amp;gt;메뉴&amp;lt;/LI&amp;gt;
&amp;lt;/UL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UL은 목록 전체를 의미하고,&lt;br /&gt;LI는 목록 안의 한 항목을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 메뉴 하나하나를 LI로 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 메뉴 클릭 시 이동할 파일 연결하기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;A href = &quot;reg.jsp&quot; target = &quot;section_page&quot;&amp;gt;판매등록&amp;lt;/A&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 태그는 클릭해서 다른 페이지로 이동할 때 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 href는 이동할 파일입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;판매등록 클릭 &amp;rarr; reg.jsp 실행
제과현황 클릭 &amp;rarr; list.jsp 실행
판매현황 클릭 &amp;rarr; list_j.jsp 실행
매출현황 클릭 &amp;rarr; list_jg.jsp 실행
홈으로 클릭 &amp;rarr; main.jsp 실행
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 메뉴별 파일 역할&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴연결 파일역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;판매등록&lt;/td&gt;
&lt;td&gt;reg.jsp&lt;/td&gt;
&lt;td&gt;판매 정보를 입력하는 화면&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;제과현황&lt;/td&gt;
&lt;td&gt;list.jsp&lt;/td&gt;
&lt;td&gt;제과 테이블 조회 화면&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;판매현황&lt;/td&gt;
&lt;td&gt;list_j.jsp&lt;/td&gt;
&lt;td&gt;판매정보와 제과 테이블 JOIN 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;매출현황&lt;/td&gt;
&lt;td&gt;list_jg.jsp&lt;/td&gt;
&lt;td&gt;제과점별 매출 GROUP BY 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;홈으로&lt;/td&gt;
&lt;td&gt;main.jsp&lt;/td&gt;
&lt;td&gt;프로그램 설명 화면&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 list_j.jsp의 j는 JOIN,&lt;br /&gt;list_jg.jsp의 jg는 JOIN + GROUP BY로 생각하면 이해하기 쉽습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. target=&quot;section_page&quot;가 중요한 이유&lt;/h1&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;target = &quot;section_page&quot;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;properties&quot;&gt;&lt;code&gt;header &amp;rarr; 그대로 유지
nav &amp;rarr; 그대로 유지
footer &amp;rarr; 그대로 유지
section &amp;rarr; 내용만 변경
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 메뉴를 클릭했을 때&lt;br /&gt;전체 페이지가 아니라 section 안의 iframe만 바뀌도록 설정합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. section과 iframe 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;section&amp;gt;
	&amp;lt;iframe name=&quot;section_page&quot; src=&quot;main.jsp&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/section&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;section은 실제 내용이 출력되는 본문 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iframe은 웹페이지 안에 다른 JSP 파일을 보여주는 공간입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 실행할 때는:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 메뉴를 누르면 target=&quot;section_page&quot;에 의해&lt;br /&gt;iframe 안의 내용만 바뀝니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. footer 만들기&lt;/h1&gt;
&lt;pre class=&quot;apache&quot;&gt;&lt;code&gt;&amp;lt;footer&amp;gt;
	&amp;lt;H3&amp;gt;Copyright (c) 2025. 주식회사 OOOO Inc All Rights Reserved.&amp;lt;/H3&amp;gt;
&amp;lt;/footer&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;footer는 화면 맨 아래 영역입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 저작권 문구나 회사 정보를 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. 실행 흐름 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 index.jsp는 다음과 같이 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;index.jsp 실행
&amp;darr;
header에 제목 출력
&amp;darr;
nav에 메뉴 출력
&amp;darr;
section 안 iframe에 main.jsp 출력
&amp;darr;
메뉴 클릭 시 iframe 안의 내용만 변경
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;판매등록 클릭
&amp;rarr; reg.jsp가 iframe 안에 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;매출현황 클릭
&amp;rarr; list_jg.jsp가 iframe 안에 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. 정리&lt;/h1&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;pre class=&quot;css&quot;&gt;&lt;code&gt;index.jsp &amp;rarr; 전체 구조 담당
style.css &amp;rarr; 디자인 담당
main.jsp &amp;rarr; 첫 화면 설명
reg.jsp &amp;rarr; 판매등록
list.jsp &amp;rarr; 제과현황
list_j.jsp &amp;rarr; 판매현황
list_jg.jsp &amp;rarr; 매출현황
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, index.jsp는 프로그램의 중심 화면이고,&lt;br /&gt;다른 JSP 파일들을 연결해주는 역할을 합니다.&lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/22</guid>
      <comments>https://jeongcheogi.tistory.com/22#entry22comment</comments>
      <pubDate>Mon, 1 Jun 2026 12:38:44 +0900</pubDate>
    </item>
    <item>
      <title> 2️⃣DB 생성 흐름</title>
      <link>https://jeongcheogi.tistory.com/21</link>
      <description>&lt;p data-end=&quot;162&quot; data-start=&quot;113&quot; data-ke-size=&quot;size16&quot;&gt;정보처리산업기사 실기에서는 화면을 만들기 전에 가장 먼저 데이터베이스를 설계해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;209&quot; data-start=&quot;164&quot; data-ke-size=&quot;size16&quot;&gt;왜냐하면 화면에서 출력하는 모든 정보는 결국 데이터베이스에서 가져오기 때문입니다.&lt;/p&gt;
&lt;p data-end=&quot;244&quot; data-start=&quot;211&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 이번 문제를 보면 다음과 같은 화면이 존재합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;273&quot; data-start=&quot;246&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;252&quot; data-start=&quot;246&quot; data-section-id=&quot;9jfs0g&quot;&gt;판매등록&lt;/li&gt;
&lt;li data-end=&quot;259&quot; data-start=&quot;253&quot; data-section-id=&quot;cgj2ud&quot;&gt;제과현황&lt;/li&gt;
&lt;li data-end=&quot;266&quot; data-start=&quot;260&quot; data-section-id=&quot;9jk6gh&quot;&gt;판매현황&lt;/li&gt;
&lt;li data-end=&quot;273&quot; data-start=&quot;267&quot; data-section-id=&quot;1svq119&quot;&gt;매출현황&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;275&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과점 정보
제과 정보
판매 정보&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;327&quot; data-start=&quot;311&quot; data-ke-size=&quot;size16&quot;&gt;를 저장할 공간이 필요합니다.&lt;/p&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;329&quot; data-ke-size=&quot;size16&quot;&gt;그래서 이번 문제에서는 총 3개의 테이블을 생성하게 됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;367&quot; data-start=&quot;364&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;397&quot; data-start=&quot;369&quot; data-section-id=&quot;1dm80ad&quot;&gt;  1. 어떤 테이블이 필요한지 먼저 확인하기&lt;/h1&gt;
&lt;p data-end=&quot;428&quot; data-start=&quot;399&quot; data-ke-size=&quot;size16&quot;&gt;문제를 보면 다음과 같은 테이블 명세서가 제공됩니다.&lt;/p&gt;
&lt;h3 data-end=&quot;441&quot; data-start=&quot;430&quot; data-section-id=&quot;1sh0l4q&quot; data-ke-size=&quot;size23&quot;&gt;제과점 테이블&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bakery&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;477&quot; data-start=&quot;467&quot; data-section-id=&quot;1c90iei&quot; data-ke-size=&quot;size23&quot;&gt;제과 테이블&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;514&quot; data-start=&quot;502&quot; data-section-id=&quot;prhzgf&quot; data-ke-size=&quot;size23&quot;&gt;판매정보 테이블&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_sale&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;548&quot; data-start=&quot;538&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 것은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과점 &amp;rarr; 빵 판매&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;584&quot; data-start=&quot;574&quot; data-ke-size=&quot;size16&quot;&gt;구조라는 점입니다.&lt;/p&gt;
&lt;p data-end=&quot;593&quot; data-start=&quot;586&quot; data-ke-size=&quot;size16&quot;&gt;즉 판매정보는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;어느 제과점이
어떤 빵을
몇 개 판매했는지&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;648&quot; data-start=&quot;632&quot; data-ke-size=&quot;size16&quot;&gt;저장하는 역할을 하게 됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;653&quot; data-start=&quot;650&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;679&quot; data-start=&quot;655&quot; data-section-id=&quot;1y7dt88&quot;&gt;  2. 제과점 테이블은 왜 필요한가?&lt;/h1&gt;
&lt;p data-end=&quot;700&quot; data-start=&quot;681&quot; data-ke-size=&quot;size16&quot;&gt;문제에는 제과현황 화면이 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;713&quot; data-start=&quot;702&quot; data-ke-size=&quot;size16&quot;&gt;제과현황 화면을 보면&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과점 코드
제과점 이름
지역
비고&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;758&quot; data-start=&quot;748&quot; data-ke-size=&quot;size16&quot;&gt;정보가 출력됩니다.&lt;/p&gt;
&lt;p data-end=&quot;783&quot; data-start=&quot;760&quot; data-ke-size=&quot;size16&quot;&gt;즉 이 데이터를 저장할 공간이 필요합니다.&lt;/p&gt;
&lt;p data-end=&quot;798&quot; data-start=&quot;785&quot; data-ke-size=&quot;size16&quot;&gt;그래서 생성하는 테이블이&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bakery&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;827&quot; data-start=&quot;823&quot; data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-end=&quot;832&quot; data-start=&quot;829&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;853&quot; data-start=&quot;834&quot; data-section-id=&quot;y40p95&quot; data-ke-size=&quot;size26&quot;&gt;제과점 테이블 명세서 해석하기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;컬럼의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;927&quot; data-start=&quot;855&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;927&quot; data-start=&quot;873&quot;&gt;
&lt;tr data-end=&quot;891&quot; data-start=&quot;873&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;883&quot; data-start=&quot;873&quot;&gt;pk_bakery&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;891&quot; data-start=&quot;883&quot;&gt;제과점 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;905&quot; data-start=&quot;892&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;897&quot; data-start=&quot;892&quot;&gt;name&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;905&quot; data-start=&quot;897&quot;&gt;제과점 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;918&quot; data-start=&quot;906&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;914&quot; data-start=&quot;906&quot;&gt;address&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;918&quot; data-start=&quot;914&quot;&gt;지역&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;927&quot; data-start=&quot;919&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;923&quot; data-start=&quot;919&quot;&gt;etc&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;927&quot; data-start=&quot;923&quot;&gt;비고&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;934&quot; data-start=&quot;929&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;A0001
정심당
대전
정성을 다한 마음으로 빵을 만드는 빵집&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1000&quot; data-start=&quot;984&quot; data-ke-size=&quot;size16&quot;&gt;같은 정보를 저장하게 됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;1005&quot; data-start=&quot;1002&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1027&quot; data-start=&quot;1007&quot; data-section-id=&quot;k9qh07&quot; data-ke-size=&quot;size26&quot;&gt;CREATE TABLE 작성하기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;CREATE TABLE tbl_bakery(
    pk_bakery VARCHAR2(5) PRIMARY KEY,
    name VARCHAR2(20) NOT NULL,
    address VARCHAR2(255),
    etc VARCHAR2(255)
);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1192&quot; data-start=&quot;1189&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1214&quot; data-start=&quot;1194&quot; data-section-id=&quot;1uut6sc&quot; data-ke-size=&quot;size26&quot;&gt;왜 VARCHAR2를 사용할까?&lt;/h2&gt;
&lt;p data-end=&quot;1226&quot; data-start=&quot;1216&quot; data-ke-size=&quot;size16&quot;&gt;제과점 코드를 보면&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;A0001
A0002
A0003&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1278&quot; data-start=&quot;1259&quot; data-ke-size=&quot;size16&quot;&gt;처럼 문자와 숫자가 섞여 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1283&quot; data-start=&quot;1280&quot; data-ke-size=&quot;size16&quot;&gt;따라서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;NUMBER&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1309&quot; data-start=&quot;1304&quot; data-ke-size=&quot;size16&quot;&gt;가 아니라&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;VARCHAR2&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1343&quot; data-start=&quot;1332&quot; data-ke-size=&quot;size16&quot;&gt;를 사용해야 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;1348&quot; data-start=&quot;1345&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1374&quot; data-start=&quot;1350&quot; data-section-id=&quot;13w5dhc&quot; data-ke-size=&quot;size26&quot;&gt;PRIMARY KEY는 왜 사용하는가?&lt;/h2&gt;
&lt;p data-end=&quot;1383&quot; data-start=&quot;1376&quot; data-ke-size=&quot;size16&quot;&gt;제과점 코드는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;A0001
A0002
A0003&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1430&quot; data-start=&quot;1416&quot; data-ke-size=&quot;size16&quot;&gt;처럼 중복되면 안 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1435&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;PRIMARY KEY&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1469&quot; data-start=&quot;1461&quot; data-ke-size=&quot;size16&quot;&gt;로 지정합니다.&lt;/p&gt;
&lt;hr data-end=&quot;1474&quot; data-start=&quot;1471&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1499&quot; data-start=&quot;1476&quot; data-section-id=&quot;ceg76x&quot;&gt;  3. 제과 테이블은 왜 필요한가?&lt;/h1&gt;
&lt;p data-end=&quot;1510&quot; data-start=&quot;1501&quot; data-ke-size=&quot;size16&quot;&gt;판매현황 화면에는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;대보름빵
자라빵
코끼리빵&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1554&quot; data-start=&quot;1539&quot; data-ke-size=&quot;size16&quot;&gt;같은 빵 이름이 출력됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1579&quot; data-start=&quot;1556&quot; data-ke-size=&quot;size16&quot;&gt;즉 빵 정보를 저장하는 공간도 필요합니다.&lt;/p&gt;
&lt;p data-end=&quot;1584&quot; data-start=&quot;1581&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1619&quot; data-start=&quot;1608&quot; data-ke-size=&quot;size16&quot;&gt;테이블을 생성합니다.&lt;/p&gt;
&lt;hr data-end=&quot;1624&quot; data-start=&quot;1621&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1644&quot; data-start=&quot;1626&quot; data-section-id=&quot;1ga0stl&quot; data-ke-size=&quot;size26&quot;&gt;제과 테이블 명세서 해석하기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;컬럼의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1707&quot; data-start=&quot;1646&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1707&quot; data-start=&quot;1664&quot;&gt;
&lt;tr data-end=&quot;1680&quot; data-start=&quot;1664&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1673&quot; data-start=&quot;1664&quot;&gt;pk_bread&lt;/td&gt;
&lt;td data-end=&quot;1680&quot; data-start=&quot;1673&quot; data-col-size=&quot;sm&quot;&gt;제과 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1693&quot; data-start=&quot;1681&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1686&quot; data-start=&quot;1681&quot;&gt;name&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1693&quot; data-start=&quot;1686&quot;&gt;제과 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1707&quot; data-start=&quot;1694&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1700&quot; data-start=&quot;1694&quot;&gt;price&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1707&quot; data-start=&quot;1700&quot;&gt;제과 가격&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1712&quot; data-start=&quot;1709&quot; data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;B0001 대보름빵 1000
B0002 자라빵 1500
B0003 코끼리빵 2000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1777&quot; data-start=&quot;1774&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1799&quot; data-start=&quot;1779&quot; data-section-id=&quot;k9qh07&quot; data-ke-size=&quot;size26&quot;&gt;CREATE TABLE 작성하기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;CREATE TABLE tbl_bread(
    pk_bread VARCHAR2(5) PRIMARY KEY,
    name VARCHAR2(20) NOT NULL,
    price NUMBER(10) NOT NULL
);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1943&quot; data-start=&quot;1940&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1967&quot; data-start=&quot;1945&quot; data-section-id=&quot;mm14d5&quot; data-ke-size=&quot;size26&quot;&gt;가격은 왜 NUMBER를 사용할까?&lt;/h2&gt;
&lt;p data-end=&quot;1972&quot; data-start=&quot;1969&quot; data-ke-size=&quot;size16&quot;&gt;가격은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1000
1500
2000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2011&quot; data-start=&quot;2002&quot; data-ke-size=&quot;size16&quot;&gt;처럼 숫자입니다.&lt;/p&gt;
&lt;p data-end=&quot;2016&quot; data-start=&quot;2013&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;NUMBER&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2055&quot; data-start=&quot;2037&quot; data-ke-size=&quot;size16&quot;&gt;를 사용하는 것이 더 적절합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2060&quot; data-start=&quot;2057&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2087&quot; data-start=&quot;2062&quot; data-section-id=&quot;8dw6nv&quot;&gt;  4. 판매정보 테이블은 왜 필요한가?&lt;/h1&gt;
&lt;p data-end=&quot;2106&quot; data-start=&quot;2089&quot; data-ke-size=&quot;size16&quot;&gt;이번 문제의 핵심 테이블입니다.&lt;/p&gt;
&lt;p data-end=&quot;2119&quot; data-start=&quot;2108&quot; data-ke-size=&quot;size16&quot;&gt;판매정보 화면을 보면&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매코드
판매일
판매수량
제과명&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2160&quot; data-start=&quot;2152&quot; data-ke-size=&quot;size16&quot;&gt;이 출력됩니다.&lt;/p&gt;
&lt;p data-end=&quot;2163&quot; data-start=&quot;2162&quot; data-ke-size=&quot;size16&quot;&gt;즉&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;언제
어떤 빵을
몇 개 판매했는지&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2206&quot; data-start=&quot;2197&quot; data-ke-size=&quot;size16&quot;&gt;기록해야 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2211&quot; data-start=&quot;2208&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2233&quot; data-start=&quot;2213&quot; data-section-id=&quot;1cn90m4&quot; data-ke-size=&quot;size26&quot;&gt;판매정보 테이블 명세서 해석하기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;컬럼의미
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2337&quot; data-start=&quot;2235&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2337&quot; data-start=&quot;2253&quot;&gt;
&lt;tr data-end=&quot;2267&quot; data-start=&quot;2253&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2261&quot; data-start=&quot;2253&quot;&gt;pk_sale&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2267&quot; data-start=&quot;2261&quot;&gt;판매코드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2283&quot; data-start=&quot;2268&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2278&quot; data-start=&quot;2268&quot;&gt;deal_date&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2283&quot; data-start=&quot;2278&quot;&gt;판매일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2301&quot; data-start=&quot;2284&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2295&quot; data-start=&quot;2284&quot;&gt;deal_count&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2301&quot; data-start=&quot;2295&quot;&gt;판매수량&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2320&quot; data-start=&quot;2302&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2312&quot; data-start=&quot;2302&quot;&gt;fk_bakery&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2320&quot; data-start=&quot;2312&quot;&gt;제과점 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2337&quot; data-start=&quot;2321&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2330&quot; data-start=&quot;2321&quot;&gt;fk_bread&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2337&quot; data-start=&quot;2330&quot;&gt;제과 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2342&quot; data-start=&quot;2339&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2364&quot; data-start=&quot;2344&quot; data-section-id=&quot;k9qh07&quot; data-ke-size=&quot;size26&quot;&gt;CREATE TABLE 작성하기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;CREATE TABLE tbl_sale(
    pk_sale VARCHAR2(5) PRIMARY KEY,
    deal_date DATE NOT NULL,
    deal_count NUMBER(10) NOT NULL,
    fk_bakery VARCHAR2(5) NOT NULL,
    fk_bread VARCHAR2(5) NOT NULL,

    CONSTRAINT fk_sale_bakery
        FOREIGN KEY(fk_bakery)
        REFERENCES tbl_bakery(pk_bakery),

    CONSTRAINT fk_sale_bread
        FOREIGN KEY(fk_bread)
        REFERENCES tbl_bread(pk_bread)
);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2783&quot; data-start=&quot;2780&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2814&quot; data-start=&quot;2785&quot; data-section-id=&quot;24aou3&quot;&gt;  5. FOREIGN KEY는 왜 사용하는가?&lt;/h1&gt;
&lt;p data-end=&quot;2822&quot; data-start=&quot;2816&quot; data-ke-size=&quot;size16&quot;&gt;판매정보에는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;A0001
B0001&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2862&quot; data-start=&quot;2849&quot; data-ke-size=&quot;size16&quot;&gt;같은 코드가 저장됩니다.&lt;/p&gt;
&lt;p data-end=&quot;2867&quot; data-start=&quot;2864&quot; data-ke-size=&quot;size16&quot;&gt;그런데&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;A9999&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2922&quot; data-start=&quot;2888&quot; data-ke-size=&quot;size16&quot;&gt;같은 존재하지 않는 제과점 코드가 들어가면 문제가 발생합니다.&lt;/p&gt;
&lt;p data-end=&quot;2927&quot; data-start=&quot;2924&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;FOREIGN KEY&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2961&quot; data-start=&quot;2953&quot; data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;p data-end=&quot;2964&quot; data-start=&quot;2963&quot; data-ke-size=&quot;size16&quot;&gt;즉&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매정보는 반드시 존재하는 제과점과
존재하는 빵만 선택 가능&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3026&quot; data-start=&quot;3013&quot; data-ke-size=&quot;size16&quot;&gt;하도록 만드는 것입니다.&lt;/p&gt;
&lt;hr data-end=&quot;3031&quot; data-start=&quot;3028&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3052&quot; data-start=&quot;3033&quot; data-section-id=&quot;t8mahm&quot;&gt;  6. 제공 데이터 입력하기&lt;/h1&gt;
&lt;p data-end=&quot;3078&quot; data-start=&quot;3054&quot; data-ke-size=&quot;size16&quot;&gt;문제에서는 테이블만 만들라고 하지 않습니다.&lt;/p&gt;
&lt;p data-end=&quot;3101&quot; data-start=&quot;3080&quot; data-ke-size=&quot;size16&quot;&gt;반드시 제공 데이터도 입력해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;3106&quot; data-start=&quot;3103&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;INSERT INTO tbl_bakery&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;INSERT INTO tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;INSERT INTO tbl_sale&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3233&quot; data-start=&quot;3210&quot; data-ke-size=&quot;size16&quot;&gt;를 이용해 제공 데이터를 모두 입력합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3238&quot; data-start=&quot;3235&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3265&quot; data-start=&quot;3240&quot; data-section-id=&quot;10ssz13&quot;&gt;  7. 데이터가 잘 들어갔는지 확인하기&lt;/h1&gt;
&lt;p data-end=&quot;3298&quot; data-start=&quot;3267&quot; data-ke-size=&quot;size16&quot;&gt;테이블 생성과 INSERT가 끝났다면 반드시 확인합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM tbl_bakery;
SELECT * FROM tbl_bread;
SELECT * FROM tbl_sale;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3392&quot; data-start=&quot;3387&quot; data-ke-size=&quot;size16&quot;&gt;확인 결과&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;제과점 4건
제과 7건
판매정보 15건&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3442&quot; data-start=&quot;3429&quot; data-ke-size=&quot;size16&quot;&gt;이 출력되면 성공입니다.&lt;/p&gt;
&lt;hr data-end=&quot;3447&quot; data-start=&quot;3444&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3456&quot; data-start=&quot;3449&quot; data-section-id=&quot;9k1a3y&quot;&gt;  정리&lt;/h1&gt;
&lt;p data-end=&quot;3485&quot; data-start=&quot;3458&quot; data-ke-size=&quot;size16&quot;&gt;이번 단계의 목표는 화면을 만드는 것이 아닙니다.&lt;/p&gt;
&lt;p data-end=&quot;3489&quot; data-start=&quot;3487&quot; data-ke-size=&quot;size16&quot;&gt;먼저&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과점 정보 저장
&amp;rarr; 제과 정보 저장
&amp;rarr; 판매정보 저장&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3548&quot; data-start=&quot;3535&quot; data-ke-size=&quot;size16&quot;&gt;구조를 만드는 것입니다.&lt;/p&gt;
&lt;p data-end=&quot;3558&quot; data-start=&quot;3550&quot; data-ke-size=&quot;size16&quot;&gt;즉 이번 문제는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. tbl_bakery 생성
2. tbl_bread 생성
3. tbl_sale 생성
4. INSERT 입력
5. SELECT 확인&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3660&quot; data-start=&quot;3647&quot; data-ke-size=&quot;size16&quot;&gt;순서로 진행하면 됩니다.&lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/21</guid>
      <comments>https://jeongcheogi.tistory.com/21#entry21comment</comments>
      <pubDate>Mon, 1 Jun 2026 12:31:01 +0900</pubDate>
    </item>
    <item>
      <title> 1️⃣ 제과점 프로그램 요구사항 분석</title>
      <link>https://jeongcheogi.tistory.com/20</link>
      <description>&lt;h1 data-end=&quot;189&quot; data-start=&quot;158&quot; data-section-id=&quot;1095gj0&quot;&gt;  제과점 매출관리 프로그램 화면 요구사항 분석하기&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ZtZy/dJMcafNCA0h/O4iMGkP6k0p9deoLyqemx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ZtZy/dJMcafNCA0h/O4iMGkP6k0p9deoLyqemx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ZtZy/dJMcafNCA0h/O4iMGkP6k0p9deoLyqemx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ZtZy%2FdJMcafNCA0h%2FO4iMGkP6k0p9deoLyqemx1%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;1048&quot; height=&quot;671&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;219&quot; data-start=&quot;191&quot; data-ke-size=&quot;size16&quot;&gt;이번 문제는 &lt;b&gt;제과점 매출관리 프로그램&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;244&quot; data-start=&quot;221&quot; data-ke-size=&quot;size16&quot;&gt;문제에서 요구하는 화면은 크게 5개입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. 시작화면
2. 판매등록 화면
3. 제과현황 조회 화면
4. 판매현황 조회 화면
5. 매출현황 조회 화면&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;348&quot; data-start=&quot;320&quot; data-ke-size=&quot;size16&quot;&gt;따라서 우리는 무작정 코드를 작성하는 것이 아니라,&lt;/p&gt;
&lt;p data-end=&quot;359&quot; data-start=&quot;350&quot; data-ke-size=&quot;size16&quot;&gt;먼저 문제를 보고&lt;/p&gt;
&lt;p data-end=&quot;392&quot; data-start=&quot;361&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;어떤 화면이 필요한지&lt;/b&gt;&lt;br /&gt;&lt;b&gt;어떤 파일이 필요한지&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;403&quot; data-start=&quot;394&quot; data-ke-size=&quot;size16&quot;&gt;정리해야 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;408&quot; data-start=&quot;405&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;427&quot; data-start=&quot;410&quot; data-section-id=&quot;1iix1wg&quot;&gt;1. 시작화면 요구사항 확인&lt;/h1&gt;
&lt;p data-end=&quot;460&quot; data-start=&quot;429&quot; data-ke-size=&quot;size16&quot;&gt;문제에서는 시작화면을 다음과 같이 구성하라고 제시합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;header  &amp;rarr; 제목 영역
nav     &amp;rarr; 메뉴 영역
section &amp;rarr; 본문 영역
footer  &amp;rarr; 하단 영역&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;541&quot; data-start=&quot;539&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-end=&quot;572&quot; data-start=&quot;543&quot; data-ke-size=&quot;size16&quot;&gt;이 화면은 프로그램 전체의 뼈대를 만드는 화면입니다.&lt;/p&gt;
&lt;p data-end=&quot;594&quot; data-start=&quot;574&quot; data-ke-size=&quot;size16&quot;&gt;그래서 가장 먼저 만들어야 할 파일은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;index.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;623&quot; data-start=&quot;619&quot; data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-end=&quot;628&quot; data-start=&quot;625&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;650&quot; data-start=&quot;630&quot; data-section-id=&quot;1u4l5ag&quot; data-ke-size=&quot;size26&quot;&gt;index.jsp가 해야 할 일&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RN09F/dJMcabYJuVR/jklmvQXbtA6F0MzNpNhwh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RN09F/dJMcabYJuVR/jklmvQXbtA6F0MzNpNhwh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RN09F/dJMcabYJuVR/jklmvQXbtA6F0MzNpNhwh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRN09F%2FdJMcabYJuVR%2FjklmvQXbtA6F0MzNpNhwh1%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;952&quot; height=&quot;672&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;790&quot; data-start=&quot;788&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-end=&quot;822&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;index.jsp는 데이터를 조회하는 파일이 아닙니다.&lt;/p&gt;
&lt;p data-end=&quot;845&quot; data-start=&quot;824&quot; data-ke-size=&quot;size16&quot;&gt;프로그램 전체 틀을 만드는 파일입니다.&lt;/p&gt;
&lt;hr data-end=&quot;850&quot; data-start=&quot;847&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;878&quot; data-start=&quot;852&quot; data-section-id=&quot;tm91fe&quot;&gt;2. 메뉴를 보고 필요한 JSP 파일 정하기&lt;/h1&gt;
&lt;p data-end=&quot;897&quot; data-start=&quot;880&quot; data-ke-size=&quot;size16&quot;&gt;문제의 메뉴는 다음과 같습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매등록
제과현황
판매현황
매출현황
홈으로&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;944&quot; data-start=&quot;936&quot; data-ke-size=&quot;size16&quot;&gt;이 메뉴를 보면&lt;/p&gt;
&lt;p data-end=&quot;970&quot; data-start=&quot;946&quot; data-ke-size=&quot;size16&quot;&gt;필요한 JSP 파일을 바로 알 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;메뉴필요한 파일역할
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1190&quot; data-start=&quot;972&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1190&quot; data-start=&quot;1022&quot;&gt;
&lt;tr data-end=&quot;1050&quot; data-start=&quot;1022&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1029&quot; data-start=&quot;1022&quot;&gt;판매등록&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1039&quot; data-start=&quot;1029&quot;&gt;reg.jsp&lt;/td&gt;
&lt;td data-end=&quot;1050&quot; data-start=&quot;1039&quot; data-col-size=&quot;sm&quot;&gt;판매정보 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1081&quot; data-start=&quot;1051&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1058&quot; data-start=&quot;1051&quot;&gt;제과현황&lt;/td&gt;
&lt;td data-end=&quot;1069&quot; data-start=&quot;1058&quot; data-col-size=&quot;sm&quot;&gt;list.jsp&lt;/td&gt;
&lt;td data-end=&quot;1081&quot; data-start=&quot;1069&quot; data-col-size=&quot;sm&quot;&gt;제과 목록 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1121&quot; data-start=&quot;1082&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1089&quot; data-start=&quot;1082&quot;&gt;판매현황&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1102&quot; data-start=&quot;1089&quot;&gt;list_j.jsp&lt;/td&gt;
&lt;td data-end=&quot;1121&quot; data-start=&quot;1102&quot; data-col-size=&quot;sm&quot;&gt;판매 + 제과 JOIN 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1161&quot; data-start=&quot;1122&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1129&quot; data-start=&quot;1122&quot;&gt;매출현황&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1143&quot; data-start=&quot;1129&quot;&gt;list_jg.jsp&lt;/td&gt;
&lt;td data-end=&quot;1161&quot; data-start=&quot;1143&quot; data-col-size=&quot;sm&quot;&gt;매출 GROUP BY 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1190&quot; data-start=&quot;1162&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1168&quot; data-start=&quot;1162&quot;&gt;홈으로&lt;/td&gt;
&lt;td data-end=&quot;1179&quot; data-start=&quot;1168&quot; data-col-size=&quot;sm&quot;&gt;main.jsp&lt;/td&gt;
&lt;td data-end=&quot;1190&quot; data-start=&quot;1179&quot; data-col-size=&quot;sm&quot;&gt;프로그램 설명&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1195&quot; data-start=&quot;1192&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;1225&quot; data-start=&quot;1197&quot; data-ke-size=&quot;size16&quot;&gt;따라서 이 문제에서 필요한 파일은 다음과 같습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;index.jsp   &amp;rarr; 전체 화면 틀

main.jsp    &amp;rarr; 프로그램 설명

reg.jsp     &amp;rarr; 판매등록 입력 화면

action.jsp  &amp;rarr; 판매등록 DB 저장

list.jsp    &amp;rarr; 제과현황 조회

list_j.jsp  &amp;rarr; 판매현황 JOIN 조회

list_jg.jsp &amp;rarr; 매출현황 GROUP BY 조회

style.css   &amp;rarr; 화면 디자인

Util.java   &amp;rarr; DB 연결&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1485&quot; data-start=&quot;1463&quot; data-ke-size=&quot;size16&quot;&gt;메뉴에 보이는 파일은 화면용 JSP이고,&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;action.jsp
Util.java&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1547&quot; data-start=&quot;1521&quot; data-ke-size=&quot;size16&quot;&gt;는 사용자가 보지 못하는 기능 처리 파일입니다.&lt;/p&gt;
&lt;hr data-end=&quot;1552&quot; data-start=&quot;1549&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1576&quot; data-start=&quot;1554&quot; data-section-id=&quot;hicm4q&quot;&gt;3. 판매등록 화면은 입력 화면입니다&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IcCHq/dJMcaftfQmA/qWauufarNsgntyDD0myV01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IcCHq/dJMcaftfQmA/qWauufarNsgntyDD0myV01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IcCHq/dJMcaftfQmA/qWauufarNsgntyDD0myV01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIcCHq%2FdJMcaftfQmA%2FqWauufarNsgntyDD0myV01%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;953&quot; height=&quot;671&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1614&quot; data-start=&quot;1578&quot; data-ke-size=&quot;size16&quot;&gt;문제에서 판매등록 메뉴를 클릭하면 다음 화면이 출력되어야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;1627&quot; data-start=&quot;1616&quot; data-ke-size=&quot;size16&quot;&gt;입력해야 하는 항목은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매번호
판매일자
제과점
제과
판매수량&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1668&quot; data-start=&quot;1664&quot; data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;1679&quot; data-start=&quot;1670&quot; data-ke-size=&quot;size16&quot;&gt;따라서 이 화면은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1711&quot; data-start=&quot;1702&quot; data-ke-size=&quot;size16&quot;&gt;에서 구현합니다.&lt;/p&gt;
&lt;hr data-end=&quot;1716&quot; data-start=&quot;1713&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1736&quot; data-start=&quot;1718&quot; data-section-id=&quot;qqe9s6&quot; data-ke-size=&quot;size26&quot;&gt;reg.jsp가 해야 할 일&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. 판매등록 입력폼 만들기

2. 판매번호 자동 생성

3. 판매일자 자동 생성

4. 제과점 선택

5. 제과 선택

6. 판매수량 입력

7. 등록 버튼

8. 조회 버튼&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1866&quot; data-start=&quot;1850&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점이 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1876&quot; data-start=&quot;1868&quot; data-ke-size=&quot;size16&quot;&gt;reg.jsp는&lt;/p&gt;
&lt;p data-end=&quot;1896&quot; data-start=&quot;1878&quot; data-ke-size=&quot;size16&quot;&gt;DB에 저장하는 파일이 아닙니다.&lt;/p&gt;
&lt;hr data-end=&quot;1901&quot; data-start=&quot;1898&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&amp;darr;
사용자 입력

action.jsp
&amp;darr;
DB 저장&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1963&quot; data-start=&quot;1953&quot; data-ke-size=&quot;size16&quot;&gt;역할이 분리됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;1968&quot; data-start=&quot;1965&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1992&quot; data-start=&quot;1970&quot; data-section-id=&quot;j76v68&quot;&gt;4. 제과현황 화면은 단순 조회입니다&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJqLXN/dJMb99Ni05O/1TEsfyzfvXxnKlBL1HlkZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJqLXN/dJMb99Ni05O/1TEsfyzfvXxnKlBL1HlkZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJqLXN/dJMb99Ni05O/1TEsfyzfvXxnKlBL1HlkZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJqLXN%2FdJMb99Ni05O%2F1TEsfyzfvXxnKlBL1HlkZk%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;950&quot; height=&quot;669&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2017&quot; data-start=&quot;1994&quot; data-ke-size=&quot;size16&quot;&gt;문제에서는 다음 항목을 출력하라고 합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드
제과명
가격&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2053&quot; data-start=&quot;2044&quot; data-ke-size=&quot;size16&quot;&gt;이 데이터는 모두&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2090&quot; data-start=&quot;2078&quot; data-ke-size=&quot;size16&quot;&gt;테이블 안에 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;2095&quot; data-start=&quot;2092&quot; data-ke-size=&quot;size16&quot;&gt;따라서&lt;/p&gt;
&lt;p data-end=&quot;2111&quot; data-start=&quot;2097&quot; data-ke-size=&quot;size16&quot;&gt;JOIN이 필요 없습니다.&lt;/p&gt;
&lt;hr data-end=&quot;2116&quot; data-start=&quot;2113&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;2134&quot; data-start=&quot;2118&quot; data-ke-size=&quot;size16&quot;&gt;사용되는 SQL도 단순합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT *
FROM tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2181&quot; data-start=&quot;2172&quot; data-ke-size=&quot;size16&quot;&gt;따라서 이 화면은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;list.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2214&quot; data-start=&quot;2205&quot; data-ke-size=&quot;size16&quot;&gt;에서 구현합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2219&quot; data-start=&quot;2216&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2240&quot; data-start=&quot;2221&quot; data-section-id=&quot;1phspp0&quot; data-ke-size=&quot;size26&quot;&gt;list.jsp가 해야 할 일&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. tbl_bread 조회

2. 제과코드 출력

3. 제과명 출력

4. 가격 출력

5. 가격을 화폐형식으로 출력

6. 제과코드 기준 정렬&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2340&quot; data-start=&quot;2337&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2366&quot; data-start=&quot;2342&quot; data-section-id=&quot;1a40gmr&quot;&gt;5. 판매현황 화면은 JOIN 조회입니다&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqfwTa/dJMcacQOMZm/9SvdsknkIKLI5kEUVL2MHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqfwTa/dJMcacQOMZm/9SvdsknkIKLI5kEUVL2MHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqfwTa/dJMcacQOMZm/9SvdsknkIKLI5kEUVL2MHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqfwTa%2FdJMcacQOMZm%2F9SvdsknkIKLI5kEUVL2MHK%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;952&quot; height=&quot;668&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2392&quot; data-start=&quot;2368&quot; data-ke-size=&quot;size16&quot;&gt;판매현황 화면에서는 다음 항목을 출력합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매코드
판매일
판매수량
제과명&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2441&quot; data-start=&quot;2425&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점이 있습니다.&lt;/p&gt;
&lt;hr data-end=&quot;2446&quot; data-start=&quot;2443&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;2466&quot; data-start=&quot;2448&quot; data-ke-size=&quot;size16&quot;&gt;판매 테이블(tbl_sale)에는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과코드&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2494&quot; data-start=&quot;2486&quot; data-ke-size=&quot;size16&quot;&gt;만 존재합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2499&quot; data-start=&quot;2496&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;제과명&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2519&quot; data-start=&quot;2518&quot; data-ke-size=&quot;size16&quot;&gt;은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2553&quot; data-start=&quot;2544&quot; data-ke-size=&quot;size16&quot;&gt;에 들어있습니다.&lt;/p&gt;
&lt;p data-end=&quot;2558&quot; data-start=&quot;2555&quot; data-ke-size=&quot;size16&quot;&gt;따라서&lt;/p&gt;
&lt;p data-end=&quot;2565&quot; data-start=&quot;2560&quot; data-ke-size=&quot;size16&quot;&gt;판매현황은&lt;/p&gt;
&lt;p data-end=&quot;2591&quot; data-start=&quot;2567&quot; data-ke-size=&quot;size16&quot;&gt;테이블 하나만 조회해서는 만들 수 없습니다.&lt;/p&gt;
&lt;hr data-end=&quot;2596&quot; data-start=&quot;2593&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;tbl_sale
+
tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2643&quot; data-start=&quot;2632&quot; data-ke-size=&quot;size16&quot;&gt;를 연결해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;2647&quot; data-start=&quot;2645&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-end=&quot;2661&quot; data-start=&quot;2649&quot; data-ke-size=&quot;size16&quot;&gt;JOIN이 필요합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2666&quot; data-start=&quot;2663&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT
    s.pk_sale,
    s.deal_date,
    s.deal_count,
    b.name
FROM tbl_sale s
JOIN tbl_bread b
ON s.fk_bread = b.pk_bread;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2818&quot; data-start=&quot;2809&quot; data-ke-size=&quot;size16&quot;&gt;따라서 이 파일은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;list_j.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2851&quot; data-start=&quot;2844&quot; data-ke-size=&quot;size16&quot;&gt;로 만듭니다.&lt;/p&gt;
&lt;hr data-end=&quot;2856&quot; data-start=&quot;2853&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;2861&quot; data-start=&quot;2858&quot; data-ke-size=&quot;size16&quot;&gt;여기서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;j = JOIN&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2904&quot; data-start=&quot;2885&quot; data-ke-size=&quot;size16&quot;&gt;이라고 생각하면 기억하기 쉽습니다.&lt;/p&gt;
&lt;hr data-end=&quot;2909&quot; data-start=&quot;2906&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2939&quot; data-start=&quot;2911&quot; data-section-id=&quot;1ajawii&quot;&gt;6. 매출현황 화면은 GROUP BY 조회입니다&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1VMwO/dJMcaaFxvB6/yfY3ecnjAelm6csIeI9fy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1VMwO/dJMcaaFxvB6/yfY3ecnjAelm6csIeI9fy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1VMwO/dJMcaaFxvB6/yfY3ecnjAelm6csIeI9fy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1VMwO%2FdJMcaaFxvB6%2FyfY3ecnjAelm6csIeI9fy1%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;946&quot; height=&quot;665&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2962&quot; data-start=&quot;2941&quot; data-ke-size=&quot;size16&quot;&gt;이번 문제에서 가장 중요한 화면입니다.&lt;/p&gt;
&lt;p data-end=&quot;2969&quot; data-start=&quot;2964&quot; data-ke-size=&quot;size16&quot;&gt;문제에서는&lt;/p&gt;
&lt;p data-end=&quot;2989&quot; data-start=&quot;2971&quot; data-ke-size=&quot;size16&quot;&gt;제과점별 매출을 구하라고 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2994&quot; data-start=&quot;2991&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3005&quot; data-start=&quot;2996&quot; data-ke-size=&quot;size16&quot;&gt;매출을 계산하려면&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;판매수량
&amp;times;
제과가격&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3040&quot; data-start=&quot;3032&quot; data-ke-size=&quot;size16&quot;&gt;이 필요합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3045&quot; data-start=&quot;3042&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3050&quot; data-start=&quot;3047&quot; data-ke-size=&quot;size16&quot;&gt;그런데&lt;/p&gt;
&lt;p data-end=&quot;3057&quot; data-start=&quot;3052&quot; data-ke-size=&quot;size16&quot;&gt;판매수량은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_sale&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3085&quot; data-start=&quot;3081&quot; data-ke-size=&quot;size16&quot;&gt;에 있고&lt;/p&gt;
&lt;hr data-end=&quot;3090&quot; data-start=&quot;3087&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3097&quot; data-start=&quot;3092&quot; data-ke-size=&quot;size16&quot;&gt;제과가격은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bread&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3129&quot; data-start=&quot;3122&quot; data-ke-size=&quot;size16&quot;&gt;에 있습니다.&lt;/p&gt;
&lt;hr data-end=&quot;3134&quot; data-start=&quot;3131&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3143&quot; data-start=&quot;3136&quot; data-ke-size=&quot;size16&quot;&gt;제과점 정보는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;tbl_bakery&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3176&quot; data-start=&quot;3169&quot; data-ke-size=&quot;size16&quot;&gt;에 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;3180&quot; data-start=&quot;3178&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-end=&quot;3203&quot; data-start=&quot;3182&quot; data-ke-size=&quot;size16&quot;&gt;3개의 테이블을 모두 사용해야 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3208&quot; data-start=&quot;3205&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;tbl_sale
+
tbl_bread
+
tbl_bakery&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;3260&quot; data-start=&quot;3257&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3265&quot; data-start=&quot;3262&quot; data-ke-size=&quot;size16&quot;&gt;그리고&lt;/p&gt;
&lt;p data-end=&quot;3280&quot; data-start=&quot;3267&quot; data-ke-size=&quot;size16&quot;&gt;제과점별로 묶어야 하므로&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;GROUP BY&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3311&quot; data-start=&quot;3303&quot; data-ke-size=&quot;size16&quot;&gt;가 필요합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3316&quot; data-start=&quot;3313&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3327&quot; data-start=&quot;3318&quot; data-ke-size=&quot;size16&quot;&gt;따라서 이 화면은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;list_jg.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3363&quot; data-start=&quot;3354&quot; data-ke-size=&quot;size16&quot;&gt;에서 구현합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3368&quot; data-start=&quot;3365&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3373&quot; data-start=&quot;3370&quot; data-ke-size=&quot;size16&quot;&gt;여기서&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;j = JOIN
g = GROUP BY&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3422&quot; data-start=&quot;3410&quot; data-ke-size=&quot;size16&quot;&gt;라고 생각하면 됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;3427&quot; data-start=&quot;3424&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3457&quot; data-start=&quot;3429&quot; data-section-id=&quot;1rjswor&quot;&gt;7. 홈으로 메뉴는 main.jsp로 이동합니다&lt;/h1&gt;
&lt;p data-end=&quot;3471&quot; data-start=&quot;3459&quot; data-ke-size=&quot;size16&quot;&gt;홈으로 메뉴를 클릭하면&lt;/p&gt;
&lt;p data-end=&quot;3498&quot; data-start=&quot;3473&quot; data-ke-size=&quot;size16&quot;&gt;처음 프로그램 설명 화면으로 돌아가야 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3503&quot; data-start=&quot;3500&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3533&quot; data-start=&quot;3505&quot; data-ke-size=&quot;size16&quot;&gt;이때 다시 index.jsp를 실행하는 것이 아니라&lt;/p&gt;
&lt;p data-end=&quot;3547&quot; data-start=&quot;3535&quot; data-ke-size=&quot;size16&quot;&gt;본문(section)에&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3582&quot; data-start=&quot;3571&quot; data-ke-size=&quot;size16&quot;&gt;를 보여주면 됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;3587&quot; data-start=&quot;3584&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;3592&quot; data-start=&quot;3589&quot; data-ke-size=&quot;size16&quot;&gt;따라서&lt;/p&gt;
&lt;p data-end=&quot;3605&quot; data-start=&quot;3594&quot; data-ke-size=&quot;size16&quot;&gt;프로그램 설명 화면은&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3638&quot; data-start=&quot;3629&quot; data-ke-size=&quot;size16&quot;&gt;에서 작성합니다.&lt;/p&gt;
&lt;hr data-end=&quot;3643&quot; data-start=&quot;3640&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3664&quot; data-start=&quot;3645&quot; data-section-id=&quot;12g9b2g&quot;&gt;8. 이 문제의 실제 구현 순서&lt;/h1&gt;
&lt;p data-end=&quot;3690&quot; data-start=&quot;3666&quot; data-ke-size=&quot;size16&quot;&gt;이번 문제는 아래 순서대로 진행하면 됩니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;0. 환경구성
   - Oracle 연결
   - Tomcat 연결
   - Util.java 생성

1. db.sql 작성
   - tbl_bakery 생성
   - tbl_bread 생성
   - tbl_sale 생성
   - 제공 데이터 INSERT

2. index.jsp 작성
   - 전체 화면 틀
   - 메뉴 연결
   - iframe 설정

3. style.css 작성
   - header
   - nav
   - section
   - footer 디자인

4. main.jsp 작성
   - 프로그램 설명

5. reg.jsp 작성
   - 판매등록 입력폼

6. action.jsp 작성
   - 판매등록 INSERT

7. list.jsp 작성
   - 제과현황 조회

8. list_j.jsp 작성
   - 판매현황 JOIN 조회

9. list_jg.jsp 작성
   - 매출현황 GROUP BY 조회

10. 최종 테스트&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;4185&quot; data-start=&quot;4182&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;4194&quot; data-start=&quot;4187&quot; data-section-id=&quot;1xrqn60&quot;&gt;9. 정리&lt;/h1&gt;
&lt;p data-end=&quot;4229&quot; data-start=&quot;4196&quot; data-ke-size=&quot;size16&quot;&gt;이 문제는 화면을 보고 필요한 파일을 먼저 판단해야 합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;시작화면 &amp;rarr; index.jsp

홈 화면 &amp;rarr; main.jsp

판매등록 &amp;rarr; reg.jsp

등록 처리 &amp;rarr; action.jsp

제과현황 &amp;rarr; list.jsp

판매현황 &amp;rarr; list_j.jsp

매출현황 &amp;rarr; list_jg.jsp

디자인 &amp;rarr; style.css

DB 연결 &amp;rarr; Util.java&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;4408&quot; data-start=&quot;4406&quot; data-ke-size=&quot;size16&quot;&gt;즉,&lt;/p&gt;
&lt;p data-end=&quot;4434&quot; data-start=&quot;4410&quot; data-ke-size=&quot;size16&quot;&gt;문제를 받자마자 코드를 작성하는 것이 아니라&lt;/p&gt;
&lt;p data-end=&quot;4460&quot; data-start=&quot;4436&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;이 화면은 어떤 파일이 필요하지?&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;4474&quot; data-start=&quot;4462&quot; data-ke-size=&quot;size16&quot;&gt;부터 판단해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;4500&quot; data-start=&quot;4476&quot; data-ke-size=&quot;size16&quot;&gt;정보처리산업기사 실기에서는 SQL 문법보다도&lt;/p&gt;
&lt;p data-end=&quot;4516&quot; data-start=&quot;4502&quot; data-ke-size=&quot;size16&quot;&gt;  어떤 화면이 필요한지&lt;/p&gt;
&lt;p data-end=&quot;4536&quot; data-start=&quot;4518&quot; data-ke-size=&quot;size16&quot;&gt;  어떤 JSP 파일이 필요한지&lt;/p&gt;
&lt;p data-end=&quot;4551&quot; data-start=&quot;4538&quot; data-ke-size=&quot;size16&quot;&gt;  JOIN이 필요한지&lt;/p&gt;
&lt;p data-end=&quot;4570&quot; data-start=&quot;4553&quot; data-ke-size=&quot;size16&quot;&gt;  GROUP BY가 필요한지&lt;/p&gt;
&lt;p data-end=&quot;4598&quot; data-start=&quot;4572&quot; data-ke-size=&quot;size16&quot;&gt;를 먼저 판단하는 습관이 훨씬 중요합니다.  &lt;/p&gt;</description>
      <category>  제과점 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/20</guid>
      <comments>https://jeongcheogi.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 1 Jun 2026 12:12:23 +0900</pubDate>
    </item>
    <item>
      <title> ️9️⃣list_j.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/19</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-size: 1.62em;&quot;&gt;일정현황 JOIN 조회 화면 만들기&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 list.jsp를 작성하면서 회원현황 화면을 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;list.jsp는 회원 테이블인 tbl_member 하나만 조회하면 되는 비교적 단순한 페이지였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;일정현황
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면을 만들어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정현황 화면은 단순 조회가 아니라,&lt;br /&gt;두 개의 테이블을 연결해서 보여줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이번 파일 이름은:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;list_j.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 j는 JOIN을 의미한다고 생각하면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 이번 문제에서 list_j.jsp가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 일정현황 화면에는 다음 정보가 출력되어야 합니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;일정코드
일정일자
일정메모
회원코드
회원명
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tbl_schedule 테이블에는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;일정코드
일정일자
일정메모
회원코드
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 있지만,&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;회원명
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;은 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원명은 tbl_member 테이블에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 일정현황 화면을 만들려면:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_schedule + tbl_member
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 테이블을 연결해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 사용하는 SQL 문법이:&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;JOIN
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 현재 list_j.jsp가 해야 하는 일&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서 list_j.jsp는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. tbl_schedule 테이블에서 일정 정보 조회
2. tbl_member 테이블에서 회원명 조회
3. 회원코드를 기준으로 두 테이블 연결
4. 일정코드, 일정일자, 일정메모, 회원코드, 회원명 출력
5. 표 형태로 화면에 보여주기
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;여러 테이블의 데이터를 합쳐서 보여주는 조회 페이지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. list_j.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;erb&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;title&amp;gt;일정 관리 프로그램&amp;lt;/title&amp;gt;
	&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;%
request.setCharacterEncoding(&quot;UTF-8&quot;);
Connection conn = Util.getConnection();
Statement stmt	= conn.createStatement();

String sql = 
&quot; SELECT	 	tbl_s.pk_schedule 								AS 	 일정코드		&quot;+
&quot; ,			 	to_char(tbl_s.do_date,'yyyy-MM-dd')				AS	 일정일자		&quot;+
&quot; ,			 	tbl_s.do_memo									AS	 일정메모		&quot;+
&quot; ,			 	tbl_m.pk_member 								AS 	 회원코드		&quot;+
&quot; ,			 	tbl_m.name 										AS 	 회원명		&quot;+
&quot; FROM	 	 	tbl_member 		tbl_m											&quot;+
&quot; LEFT JOIN 	tbl_schedule 	tbl_s	 ON 	tbl_s.fk_member=tbl_m.pk_member &quot;+
&quot; WHERE		 	tbl_s.pk_schedule IS NOT NULL									&quot;;

ResultSet rs = stmt.executeQuery(sql);
%&amp;gt;

&amp;lt;H4&amp;gt;일정현황&amp;lt;/H4&amp;gt;

&amp;lt;TABLE border='1'&amp;gt;
	&amp;lt;TR&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;일정코드&amp;lt;/TH&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;일정일자&amp;lt;/TH&amp;gt;
		&amp;lt;TH width='200px'&amp;gt;일정메모&amp;lt;/TH&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;회원코드&amp;lt;/TH&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;회원명&amp;lt;/TH&amp;gt;
	&amp;lt;/TR&amp;gt;

&amp;lt;% while(rs.next()){ %&amp;gt;
	&amp;lt;TR&amp;gt;
		&amp;lt;TD align='center'&amp;gt;&amp;lt;%=rs.getString(&quot;일정코드&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
		&amp;lt;TD align='center'&amp;gt;&amp;lt;%=rs.getString(&quot;일정일자&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
		&amp;lt;TD align='left'&amp;gt;&amp;lt;%=rs.getString(&quot;일정메모&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
		&amp;lt;TD align='center'&amp;gt;&amp;lt;%=rs.getString(&quot;회원코드&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
		&amp;lt;TD align='center'&amp;gt;&amp;lt;%=rs.getString(&quot;회원명&quot;) %&amp;gt;&amp;lt;/TD&amp;gt;
	&amp;lt;/TR&amp;gt;		
&amp;lt;% } %&amp;gt;

&amp;lt;%
rs.close();
conn.close();
stmt.close();
%&amp;gt;

&amp;lt;/TABLE&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. 현재 페이지는 JOIN 조회 페이지입니다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 만든 list.jsp는 회원 테이블 하나만 조회했습니다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_member
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이번 list_j.jsp는 일정현황을 보여줘야 합니다.&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;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_schedule
tbl_member
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 테이블을 연결해야 합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. DB 연결 준비하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에서 일정현황 데이터를 가져오기 위해 Oracle 연결이 필요합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 실제 연결은 다음 코드로 진행합니다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Connection conn = Util.getConnection();
Statement stmt	= conn.createStatement();
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. 이번 문제에서 필요한 SQL 판단하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정현황 화면에서 필요한 컬럼은 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;일정코드
일정일자
일정메모
회원코드
회원명
&lt;/code&gt;&lt;/pre&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;일정코드&lt;/td&gt;
&lt;td&gt;tbl_schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;일정일자&lt;/td&gt;
&lt;td&gt;tbl_schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;일정메모&lt;/td&gt;
&lt;td&gt;tbl_schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;회원코드&lt;/td&gt;
&lt;td&gt;tbl_member 또는 tbl_schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;회원명&lt;/td&gt;
&lt;td&gt;tbl_member&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 한 테이블만으로는 부족합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 JOIN을 사용해야 합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. SELECT 문 작성하기&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT
    tbl_s.pk_schedule AS 일정코드,
    to_char(tbl_s.do_date,'yyyy-MM-dd') AS 일정일자,
    tbl_s.do_memo AS 일정메모,
    tbl_m.pk_member AS 회원코드,
    tbl_m.name AS 회원명
FROM tbl_member tbl_m
LEFT JOIN tbl_schedule tbl_s
ON tbl_s.fk_member = tbl_m.pk_member
WHERE tbl_s.pk_schedule IS NOT NULL
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 SQL문은:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;회원 테이블과 일정 테이블을 연결해서
일정현황에 필요한 데이터를 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하는 코드입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 테이블 별칭을 사용하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL을 보면 테이블 이름 뒤에 다음과 같은 이름이 붙어 있습니다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;tbl_member tbl_m
tbl_schedule tbl_s
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_m
tbl_s
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 테이블 별칭입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 이름을 매번 길게 쓰면 코드가 길어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 짧은 별칭을 붙여 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;tbl_schedule.pk_schedule
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;tbl_s.pk_schedule
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 짧게 작성할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. LEFT JOIN을 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;vbscript&quot;&gt;&lt;code&gt;LEFT JOIN tbl_schedule tbl_s
ON tbl_s.fk_member = tbl_m.pk_member
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;회원코드
&lt;/code&gt;&lt;/pre&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;pre class=&quot;excel&quot;&gt;&lt;code&gt;tbl_schedule의 fk_member
=
tbl_member의 pk_member
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인 데이터끼리 연결합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 현재 문제에서 JOIN이 필요한 이유&lt;/h1&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;탐관오리 찾기&lt;/td&gt;
&lt;td&gt;M0001&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 상태만 보면 M0001이 누구인지 알 수 없습니다.&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;M0001&lt;/td&gt;
&lt;td&gt;홍길동&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JOIN을 하면 다음처럼 보여줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정코드일정메모회원코드회원명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;탐관오리 찾기&lt;/td&gt;
&lt;td&gt;M0001&lt;/td&gt;
&lt;td&gt;홍길동&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 JOIN을 사용하는 이유는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;코드만 있는 데이터를 사람이 이해할 수 있는 이름까지 연결해서 보여주기 위해
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. WHERE 조건을 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;WHERE tbl_s.pk_schedule IS NOT NULL
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL은 tbl_member를 기준으로 LEFT JOIN하고 있습니다.&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;pre class=&quot;yaml&quot;&gt;&lt;code&gt;일정코드가 NULL이 아닌 데이터만 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하도록 조건을 붙입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. 날짜 형식 바꾸기&lt;/h1&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;to_char(tbl_s.do_date,'yyyy-MM-dd') AS 일정일자
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 저장된 날짜는 그대로 출력하면 보기 불편할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 to_char()를 사용해서 날짜를 보기 좋은 형태로 바꿉니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;20250101
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형태의 날짜를:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;2025-01-01
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 출력하기 위해 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. AS 별칭 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;cos&quot;&gt;&lt;code&gt;AS 일정코드
AS 일정일자
AS 일정메모
AS 회원코드
AS 회원명
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AS는 출력 컬럼 이름을 보기 좋게 바꾸는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 별칭을 주면 JSP에서 다음처럼 사용할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;rs.getString(&quot;일정코드&quot;)
rs.getString(&quot;회원명&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 화면에 출력할 때 코드가 더 읽기 쉬워집니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. SQL 실행하기&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;ResultSet rs = stmt.executeQuery(sql);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL은 SELECT 조회문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 executeQuery()를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회 결과는 ResultSet에 저장됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. TABLE 제목 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;H4&amp;gt;일정현황&amp;lt;/H4&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 페이지가 일정현황 화면임을 보여줍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;16. 표 제목 작성하기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;TH&amp;gt;일정코드&amp;lt;/TH&amp;gt;
&amp;lt;TH&amp;gt;일정일자&amp;lt;/TH&amp;gt;
&amp;lt;TH&amp;gt;일정메모&amp;lt;/TH&amp;gt;
&amp;lt;TH&amp;gt;회원코드&amp;lt;/TH&amp;gt;
&amp;lt;TH&amp;gt;회원명&amp;lt;/TH&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 요구한 출력 항목과 동일하게 표 제목을 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;17. while(rs.next())로 여러 줄 출력하기&lt;/h1&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;pre class=&quot;gcode&quot;&gt;&lt;code&gt;&amp;lt;% while(rs.next()){ %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;조회 결과가 있는 동안 반복
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한다는 의미입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 일정이 4건이면 4번 반복해서 출력합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;18. ResultSet에서 값 꺼내기&lt;/h1&gt;
&lt;pre class=&quot;mel&quot;&gt;&lt;code&gt;&amp;lt;%=rs.getString(&quot;일정코드&quot;) %&amp;gt;
&amp;lt;%=rs.getString(&quot;일정일자&quot;) %&amp;gt;
&amp;lt;%=rs.getString(&quot;일정메모&quot;) %&amp;gt;
&amp;lt;%=rs.getString(&quot;회원코드&quot;) %&amp;gt;
&amp;lt;%=rs.getString(&quot;회원명&quot;) %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 현재 행의 값을 화면에 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용한 이름은 SQL에서 지정한 별칭과 같아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 SQL에서:&lt;/p&gt;
&lt;pre class=&quot;cos&quot;&gt;&lt;code&gt;AS 일정코드
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 했기 때문에 JSP에서도:&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;rs.getString(&quot;일정코드&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 작성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;19. DB 연결 닫기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;rs.close();
conn.close();
stmt.close();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회가 끝났으므로 DB 연결을 닫아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB를 사용하는 페이지에서는 마지막에 연결을 닫는 습관이 중요합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;20. 현재 페이지 실행 흐름&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;list_j.jsp는 다음 순서로 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;list_j.jsp 실행
&amp;darr;
Oracle DB 연결
&amp;darr;
tbl_member와 tbl_schedule JOIN 조회
&amp;darr;
조회 결과를 ResultSet에 저장
&amp;darr;
while 반복문으로 한 줄씩 출력
&amp;darr;
일정현황 화면 완성
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;21. 현재까지 완성된 기능&lt;/h1&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;main.jsp
&amp;rarr; 프로그램 설명 화면

reg.jsp
&amp;rarr; 일정 입력 화면

action.jsp
&amp;rarr; DB 저장 처리

list.jsp
&amp;rarr; 회원현황 조회

list_j.jsp
&amp;rarr; 일정현황 JOIN 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 현재 프로젝트의 핵심 기능은 거의 완성되었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;22. 핵심 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 list_j.jsp에서 가장 중요한 것은:&lt;/p&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;일정 테이블에는 회원명이 없기 때문에
회원 테이블과 JOIN해서 조회해야 한다
&lt;/code&gt;&lt;/pre&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;pre class=&quot;lasso&quot;&gt;&lt;code&gt;문제에서 회원명 출력 요구
&amp;rarr; tbl_schedule에는 회원명 없음
&amp;rarr; tbl_member와 연결 필요
&amp;rarr; JOIN 사용
&amp;rarr; ResultSet으로 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 흐름을 이해하면 됩니다.&lt;/p&gt;</description>
      <category> ️ 일정관리 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/19</guid>
      <comments>https://jeongcheogi.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 26 May 2026 12:46:28 +0900</pubDate>
    </item>
    <item>
      <title> ️8️⃣list.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/18</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-size: 1.62em;&quot;&gt;회원 테이블 데이터를 화면에 출력하기&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&amp;rarr; 사용자 입력 화면

action.jsp
&amp;rarr; DB 저장 처리
&lt;/code&gt;&lt;/pre&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;이번 단계에서는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;회원현황 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 만들어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 Oracle DB 안의:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_member
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 데이터를 조회해서&lt;br /&gt;웹페이지에 표 형태로 출력하는 작업입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 이번 문제에서 list.jsp가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 보면 메뉴에 다음 항목이 존재합니다.&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;회원현황
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;회원 데이터를 조회하는 화면
&lt;/code&gt;&lt;/pre&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;pre class=&quot;applescript&quot;&gt;&lt;code&gt;list.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 현재 list.jsp가 해야 하는 역할&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서 list.jsp는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. tbl_member 테이블 조회
2. 회원코드 출력
3. 회원명 출력
4. 등급 출력
5. 표(table) 형태로 화면 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;DB 데이터를 조회해서
화면에 보여주는 페이지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. list.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;erb&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;

&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;

&amp;lt;head&amp;gt;
	&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
	&amp;lt;title&amp;gt;일정 관리 프로그램&amp;lt;/title&amp;gt;
	&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;

&amp;lt;%
request.setCharacterEncoding(&quot;UTF-8&quot;);

Connection conn = Util.getConnection();
Statement stmt	= conn.createStatement();

String sql =
&quot;	SELECT	 pk_member 	AS 	 회원코드		&quot;+
&quot;	,		 name		AS	 회원명		&quot;+
&quot;	,		 grade		AS	 등급			&quot;+
&quot;	FROM	 tbl_member					&quot;;

ResultSet rs = stmt.executeQuery(sql);
%&amp;gt;

&amp;lt;H4&amp;gt;회원현황&amp;lt;/H4&amp;gt;

&amp;lt;TABLE border='1'&amp;gt;

	&amp;lt;TR&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;회원코드&amp;lt;/TH&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;회원명&amp;lt;/TH&amp;gt;
		&amp;lt;TH width='100px'&amp;gt;등급&amp;lt;/TH&amp;gt;
	&amp;lt;/TR&amp;gt;

&amp;lt;% while(rs.next()){ %&amp;gt;

	&amp;lt;TR&amp;gt;
		&amp;lt;TD align='left'&amp;gt;
			&amp;lt;%=rs.getString(&quot;회원코드&quot;) %&amp;gt;
		&amp;lt;/TD&amp;gt;

		&amp;lt;TD align='center'&amp;gt;
			&amp;lt;%=rs.getString(&quot;회원명&quot;) %&amp;gt;
		&amp;lt;/TD&amp;gt;

		&amp;lt;TD align='right'&amp;gt;
			&amp;lt;%=rs.getString(&quot;등급&quot;) %&amp;gt;
		&amp;lt;/TD&amp;gt;
	&amp;lt;/TR&amp;gt;

&amp;lt;% } %&amp;gt;

&amp;lt;%
rs.close();
conn.close();
stmt.close();
%&amp;gt;

&amp;lt;/TABLE&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. 현재 페이지는 &amp;ldquo;조회 페이지&amp;rdquo;입니다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 만든 action.jsp는:&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;INSERT 처리
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 데이터를 저장하는 페이지였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 현재 list.jsp는 조금 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 페이지는:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;DB 데이터를 조회해서
사용자에게 보여주는 페이지
&lt;/code&gt;&lt;/pre&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;pre class=&quot;sas&quot;&gt;&lt;code&gt;입력 X
조회 O
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. DB 연결 준비하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원 데이터를 가져오기 위해 Oracle DB 연결이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 아래 코드를 작성합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 실제 연결은 다음 코드로 진행합니다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Connection conn = Util.getConnection();
Statement stmt	= conn.createStatement();
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. 현재 문제에서 필요한 SQL문 판단하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 회원현황 화면에서는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;회원코드
회원명
등급
&lt;/code&gt;&lt;/pre&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;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_member
&lt;/code&gt;&lt;/pre&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;pre class=&quot;gradle&quot;&gt;&lt;code&gt;JOIN 필요 없음
단일 테이블 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다음 SQL문만으로 해결할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. SELECT 문 작성하기&lt;/h1&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT
    pk_member AS 회원코드,
    name      AS 회원명,
    grade     AS 등급
FROM tbl_member
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL문 의미는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_member 테이블에서
회원코드, 회원명, 등급 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. AS 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;cos&quot;&gt;&lt;code&gt;AS 회원코드
&lt;/code&gt;&lt;/pre&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;pre class=&quot;nginx&quot;&gt;&lt;code&gt;pk_member
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;회원코드
&lt;/code&gt;&lt;/pre&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;pre class=&quot;cos&quot;&gt;&lt;code&gt;AS
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. SQL 실행하기&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;ResultSet rs = stmt.executeQuery(sql);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL문은 조회문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;SELECT
&lt;/code&gt;&lt;/pre&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;pre class=&quot;stylus&quot;&gt;&lt;code&gt;executeQuery()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. ResultSet이 중요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL 결과는 여러 줄의 데이터가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;M0001 홍길동 의적
M0002 심청 효녀
M0003 세종 대왕
&lt;/code&gt;&lt;/pre&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;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;ResultSet
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;조회 결과 저장 공간
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 생각하면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. 테이블 제목 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;H4&amp;gt;회원현황&amp;lt;/H4&amp;gt;
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. TABLE 태그 사용하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원 데이터를 표 형태로 출력해야 하므로:&lt;/p&gt;
&lt;pre class=&quot;gams&quot;&gt;&lt;code&gt;&amp;lt;TABLE&amp;gt;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;gherkin&quot;&gt;&lt;code&gt;회원코드 | 회원명 | 등급
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. TH 태그 : 제목칸 만들기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;TH&amp;gt;회원코드&amp;lt;/TH&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TH는 표 제목칸입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 문제에서는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;회원코드
회원명
등급
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목줄이 필요하므로 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. width 속성 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;width='100px'
&lt;/code&gt;&lt;/pre&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. while(rs.next())가 중요한 이유&lt;/h1&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1명만 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 아니라:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;모든 회원 출력
&lt;/code&gt;&lt;/pre&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;pre class=&quot;lisp&quot;&gt;&lt;code&gt;while(rs.next())
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뜻은:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;조회 결과가 있는 동안 반복
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;16. rs.next() 역할&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ResultSet는 처음에는 첫 줄을 가리키지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서:&lt;/p&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;rs.next()
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;첫 번째 회원
두 번째 회원
세 번째 회원
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 반복하게 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;17. DB 데이터 출력하기&lt;/h1&gt;
&lt;pre class=&quot;mel&quot;&gt;&lt;code&gt;&amp;lt;%=rs.getString(&quot;회원코드&quot;) %&amp;gt;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;회원코드
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 출력합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;getString() 사용하는 이유&lt;/h2&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;pre class=&quot;gcode&quot;&gt;&lt;code&gt;M0001
홍길동
의적
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 값을 가져옵니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;18. align 사용하는 이유&lt;/h1&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;align='left'
align='center'
align='right'
&lt;/code&gt;&lt;/pre&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;left&lt;/td&gt;
&lt;td&gt;왼쪽 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;center&lt;/td&gt;
&lt;td&gt;가운데 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;right&lt;/td&gt;
&lt;td&gt;오른쪽 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 문제에서는 보기 좋게 각각 다르게 정렬했습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;19. DB 연결 닫기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;rs.close();
conn.close();
stmt.close();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회가 끝났으므로 DB 연결을 닫아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트 규모는 작지만&lt;br /&gt;실무에서도 매우 중요한 습관입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;20. 현재 페이지 실행 흐름&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 list.jsp는 다음 순서로 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;list.jsp 실행
&amp;darr;
Oracle DB 연결
&amp;darr;
tbl_member 조회
&amp;darr;
조회 결과를 ResultSet 저장
&amp;darr;
while 반복문으로 한 줄씩 출력
&amp;darr;
회원현황 화면 완성
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;21. 현재까지 완성된 기능&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;main.jsp
&amp;rarr; 프로그램 설명 화면

reg.jsp
&amp;rarr; 일정 입력 화면

action.jsp
&amp;rarr; DB 저장 처리

list.jsp
&amp;rarr; 회원현황 조회 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 이제:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;입력 + 저장 + 조회
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능까지 구현된 상태입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;22. 핵심 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 list.jsp에서 가장 중요한 것은:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;DB 데이터를 조회해서
반복문으로 화면에 출력하는 흐름
&lt;/code&gt;&lt;/pre&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;pre class=&quot;gams&quot;&gt;&lt;code&gt;SELECT 실행
&amp;rarr; ResultSet 저장
&amp;rarr; while 반복
&amp;rarr; table 출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조를 이해하는 것이 핵심입니다.&lt;/p&gt;</description>
      <category> ️ 일정관리 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/18</guid>
      <comments>https://jeongcheogi.tistory.com/18#entry18comment</comments>
      <pubDate>Tue, 26 May 2026 12:30:59 +0900</pubDate>
    </item>
    <item>
      <title> ️7️⃣action.jsp 작성하기</title>
      <link>https://jeongcheogi.tistory.com/17</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-size: 1.62em;&quot;&gt;입력받은 데이터를 실제 DB에 저장하기&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 reg.jsp를 작성하면서&lt;br /&gt;사용자가 일정 데이터를 입력할 수 있는 화면을 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 현재 상태에서는:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;입력만 가능
DB 저장은 안 됨
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;일정번호
일정일자
회원번호
일정메모
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 실제 Oracle DB의:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_schedule
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;action.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 이번 문제에서 action.jsp가 필요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트 흐름은 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&amp;rarr; 사용자 입력
&amp;rarr; 등록 버튼 클릭
&amp;rarr; action.jsp 이동
&amp;rarr; DB 저장
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp &amp;rarr; 입력 화면
action.jsp &amp;rarr; DB 처리 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 역할을 나누는 것입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. action.jsp가 하는 일&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 문제에서 action.jsp는 다음 역할을 합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. reg.jsp에서 전달된 값 받기
2. INSERT SQL문 작성하기
3. tbl_schedule 테이블에 저장하기
4. 저장 완료 메시지 출력하기
5. main.jsp로 이동하기
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;사용자가 입력한 데이터를
실제로 DB에 저장하는 페이지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. action.jsp 전체 코드&lt;/h1&gt;
&lt;pre class=&quot;vbscript-html&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;

&amp;lt;%@ page import = &quot;java.sql.*&quot; %&amp;gt;
&amp;lt;%@ page import = &quot;DBPKG.Util&quot; %&amp;gt;

&amp;lt;%
request.setCharacterEncoding(&quot;UTF-8&quot;);

Connection conn 	= Util.getConnection();
Statement stmt		= conn.createStatement();

String pk_schedule	= request.getParameter(&quot;pk_schedule&quot;);
String fk_member 	= request.getParameter(&quot;fk_member&quot;);
String do_memo 		= request.getParameter(&quot;do_memo&quot;);
String do_date 		= request.getParameter(&quot;do_date&quot;);

String sql = 
&quot; INSERT 	INTO	 tbl_schedule 	VALUES('&quot;	+ pk_schedule	+	&quot;'&quot;+
&quot;										 , '&quot;	+ do_date		+	&quot;'&quot;+
&quot;										 , '&quot;	+ do_memo		+	&quot;'&quot;+
&quot;										 , '&quot;	+ fk_member		+	&quot;')&quot;;

ResultSet rs = stmt.executeQuery(sql);

rs.close();
conn.close();
stmt.close();
%&amp;gt;

&amp;lt;script&amp;gt;
	alert(&quot;일정등록이 정상적으로 되었습니다.&quot;);
	window.location.href = &quot;main.jsp&quot;;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. action.jsp는 화면보다 DB 처리가 중심입니다&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 만든:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;index.jsp
main.jsp
reg.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 화면 출력이 중심이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 현재 action.jsp는 조금 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 페이지는:&lt;/p&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;사용자에게 보여주는 화면
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보다는:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;DB 작업 처리
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;데이터 저장 전용 페이지
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 생각하면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. UTF-8 설정하기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;request.setCharacterEncoding(&quot;UTF-8&quot;);
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;탐관오리 찾기
한글 창제
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 데이터를 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 UTF-8 설정이 없으면&lt;br /&gt;한글이 깨질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 입력값을 받기 전에 UTF-8 설정을 해줍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. DB 연결하기&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 페이지에서는 INSERT SQL문을 실행해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Oracle DB 연결이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Connection conn&lt;/td&gt;
&lt;td&gt;DB 연결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statement stmt&lt;/td&gt;
&lt;td&gt;SQL 실행 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. request.getParameter() 사용하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 사용자가 입력한 값은:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에서 넘어옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 action.jsp에서는&lt;br /&gt;사용자가 입력한 데이터를 받아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 사용하는 코드가:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;request.getParameter()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 전달받은 값 저장하기&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일정번호 받기&lt;/h2&gt;
&lt;pre class=&quot;vbscript&quot;&gt;&lt;code&gt;String pk_schedule = request.getParameter(&quot;pk_schedule&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reg.jsp에서 전달된 일정번호를 받습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 일정번호는 자동발생 값입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;회원번호 받기&lt;/h2&gt;
&lt;pre class=&quot;vbscript&quot;&gt;&lt;code&gt;String fk_member = request.getParameter(&quot;fk_member&quot;);
&lt;/code&gt;&lt;/pre&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;pre class=&quot;gcode&quot;&gt;&lt;code&gt;M0001
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일정메모 받기&lt;/h2&gt;
&lt;pre class=&quot;vbscript&quot;&gt;&lt;code&gt;String do_memo = request.getParameter(&quot;do_memo&quot;);
&lt;/code&gt;&lt;/pre&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;pre class=&quot;&quot;&gt;&lt;code&gt;탐관오리 찾기
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일정일자 받기&lt;/h2&gt;
&lt;pre class=&quot;vbscript&quot;&gt;&lt;code&gt;String do_date = request.getParameter(&quot;do_date&quot;);
&lt;/code&gt;&lt;/pre&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;20250101
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 현재 request.getParameter()가 중요한 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트에서:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp &amp;rarr; action.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 데이터가 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 action.jsp는 사용자가 입력한 값을 직접 알고 있는 것이 아니라:&lt;/p&gt;
&lt;pre class=&quot;fortran&quot;&gt;&lt;code&gt;form에서 전달된 값
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;request.getParameter()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. INSERT SQL문 작성하기&lt;/h1&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;pre class=&quot;nginx&quot;&gt;&lt;code&gt;tbl_schedule
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블에 저장해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 INSERT SQL문을 작성합니다.&lt;/p&gt;
&lt;pre class=&quot;scilab&quot;&gt;&lt;code&gt;String sql =
&quot; INSERT INTO tbl_schedule VALUES('&quot; + pk_schedule + &quot;'&quot;+
&quot;                                 , '&quot; + do_date + &quot;'&quot;+
&quot;                                 , '&quot; + do_memo + &quot;'&quot;+
&quot;                                 , '&quot; + fk_member + &quot;')&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;11. 현재 SQL문이 하는 일&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 코드의 의미는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;사용자가 입력한 값들을
tbl_schedule 테이블에 INSERT
&lt;/code&gt;&lt;/pre&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;5
20250501
소풍가기
M0001
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 입력했다면 실제 SQL은 다음처럼 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;INSERT INTO tbl_schedule
VALUES('5','20250501','소풍가기','M0001')
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;12. 문자열 연결(+) 사용하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 SQL문 안에는 변수값이 들어가야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;pk_schedule
do_date
do_memo
fk_member
&lt;/code&gt;&lt;/pre&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;pre class=&quot;markdown&quot;&gt;&lt;code&gt;+
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용해서 SQL문을 완성합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;13. SQL 실행하기&lt;/h1&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;ResultSet rs = stmt.executeQuery(sql);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 작성한 INSERT SQL문을 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 실제 Oracle DB에 데이터가 저장됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;14. 여기서 주의할 점&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 코드는 실습에서는 동작할 수 있지만,&lt;br /&gt;보통 INSERT/UPDATE/DELETE는:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;executeUpdate()
&lt;/code&gt;&lt;/pre&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;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;stmt.executeUpdate(sql);
&lt;/code&gt;&lt;/pre&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;executeQuery()&lt;/td&gt;
&lt;td&gt;SELECT 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;executeUpdate()&lt;/td&gt;
&lt;td&gt;INSERT / UPDATE / DELETE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 실습에서는 제공 코드 그대로 사용하는 경우도 많지만,&lt;br /&gt;개념적으로는 차이를 알고 있는 것이 좋습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;15. DB 연결 닫기&lt;/h1&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;rs.close();
conn.close();
stmt.close();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 사용이 끝났기 때문에 연결을 닫아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트 규모는 작지만,&lt;br /&gt;DB 연결을 닫는 습관은 매우 중요합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;16. 저장 완료 메시지 출력하기&lt;/h1&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
	alert(&quot;일정등록이 정상적으로 되었습니다.&quot;);
	window.location.href = &quot;main.jsp&quot;;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 DB 저장이 끝나면&lt;br /&gt;사용자에게 완료 메시지를 보여줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서:&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;alert()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;17. 저장 후 페이지 이동하기&lt;/h1&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;window.location.href = &quot;main.jsp&quot;;
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;사용자 입력
&amp;rarr; 등록 버튼 클릭
&amp;rarr; action.jsp 실행
&amp;rarr; DB 저장
&amp;rarr; 완료 메시지 출력
&amp;rarr; main.jsp 이동
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;18. 현재까지의 프로젝트 흐름&lt;/h1&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;db.sql
&amp;rarr; DB 생성

Util.java
&amp;rarr; Oracle 연결

index.jsp
&amp;rarr; 전체 화면 틀

style.css
&amp;rarr; 디자인 적용

main.jsp
&amp;rarr; 프로그램 설명 화면

reg.jsp
&amp;rarr; 사용자 입력 화면

action.jsp
&amp;rarr; 실제 DB 저장 처리
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;19. 핵심 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 action.jsp에서 가장 중요한 것은:&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;사용자 입력값을 받아서
실제 DB에 INSERT 하는 흐름
&lt;/code&gt;&lt;/pre&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;pre class=&quot;css&quot;&gt;&lt;code&gt;reg.jsp
&amp;rarr; 사용자 입력

action.jsp
&amp;rarr; DB 저장 처리
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 역할이 분리되어 있다는 점을 이해하는 것이 중요합니다.&lt;/p&gt;</description>
      <category> ️ 일정관리 프로그램</category>
      <author>윤서입니다롱</author>
      <guid isPermaLink="true">https://jeongcheogi.tistory.com/17</guid>
      <comments>https://jeongcheogi.tistory.com/17#entry17comment</comments>
      <pubDate>Tue, 26 May 2026 12:23:47 +0900</pubDate>
    </item>
  </channel>
</rss>