728x90
반응형

 

웹에서 자주 다루던 '아이디 기억하기' 를 해보려고 했던적이 있는데. 간단한 코드인데도 동작을 안하고.. 몇줄이나 따라서 썻지만 안되면 다 지우고 했던적이 한두번이 아닙니다.

 

찾다보니 간단하게 cookie를 사용할 수 있도록 jquery 에서 지원하는 plugin을 찾았습니다.

 

다운로드는 아래 url로 이동해서 받으면 됩니다.

 

https://plugins.jquery.com/cookie/

 

jQuery Cookie | jQuery Plugin Registry

jQuery Cookie by Klaus Hartl A simple, lightweight jQuery plugin for reading, writing and deleting cookies. Versions Version Date 1.4.1 Apr 27 2014 1.4.0 Oct 5 2013 1.3.1 Jan 25 2013 1.3.0 Jan 24 2013

plugins.jquery.com

 

 

 

 

요즘은 웹 cookie를 잘 사용하지 않고 기본적으로 javascript 에서 지원하기 때문에 version이 올라가지 않습니다.

 

Download now 를 클릭하여 다운로드를 받습니다.

 

 

Jquery 와 함께 load

다운로드를 받았다면 아래와같이 코드에 script를 불러옵니다.

<script type="text/javascript" src="https://code.jquery.com/jquery-x.x.x.min.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>

 

 

Cookie 생성

// 세션 쿠키 생성 - 브라우저를 종료하면 소멸
$.cookie('name', 'value'); 

// 7일 뒤에 만료되는 쿠키 생성 
$.cookie('name', 'value', { expires: 7 }); 

// 전체 사이트에 대해 7일 뒤에 만료되는 쿠키 생성 
$.cookie('name', 'value', { expires: 7, path: '/' });

 

 

Cookie 조회

// key로 cookie 조회
$.cookie('name'); 

// {key: value} 형태의 모든 쿠키 반환
$.cookie();

 

 

Cookie 제거

// 기본 cookie 제거 방법
// 성공여부에 따른 boolean 값을 반환
$.removeCookie('name'); 

// domain 설정
$.cookie('name', 'value', { path: '/' }); 

// domain을 설정시 cookie 제거방법
$.removeCookie('name', { path: '/' });

 

간단하게 사용하는 방법을 알아보았습니다.

 

728x90
반응형
728x90
반응형

 

HTML 에서 정식으로 날짜 입력폼을 지원하고 있습니다.

 

input 태그에 type 을 'date' 로 지정해주면 간단하게 만들어집니다.

 

 

 

 

이로 인해서 jquery에서 지원하던 datePicker를 사용하지 않고도 쉽고 빠르게 만들수 있게 되었습니다.

 

month 까지만 입력을 제한할 수도있고 시작날짜를 value 속성을 통해 지정할 수도 있습니다.

 

그리고 최소 입력 날짜와 최대 입력날짜도 제한할 수 있습니다.

 

 

 

 

input date를 사용하면서 문제는 기본 설정으로 연도입력이 6글자까지 입력이 된다는 문제가 있습니다.

 

아래와 같이 아무렇게나 입력해봐도 6글자까지 입력이 되고 있습니다.

 

 

 

JavaScript 에서나 Jquery 에서 입력한 값을 정규표현식으로 걸러내는 방식도 있지만 입력자체를 막아야 된다는 생각이 들었습니다.

 

정말 간단한 속성을 설정하여 년도 yyyy 즉 년도 입력을 4자리만 제한해 보겠습니다.

 

 

 

 

아래와 같이 max값을 주어 yyyy 년도값을 4자리로 제한을 주었습니다.

 

정말 간단하게 max 속성을 주는것만으로도 입력을 제한할 수 있습니다.

<input type="date" max="9999-12-31">

 

 

 

다양한 브라우저에서 쉽고 간편하게 input date를 사용해보세요.

 

728x90
반응형
728x90
반응형

 

다음 예제는 데이터가있는 테이블  렌더링하는 두 가지 다른 흥미로운 조각 사용법을 보여줍니다 . 

 

이것은 변경할 수있는 테이블 헤더와 데이터가 렌더링되는 본문의 두 가지 중요한 부분으로 구성된 재사용 가능한 테이블 조각입니다.

<table>
    <thead th:fragment="fields(theadFields)">
        <tr th:replace="${theadFields}">
        </tr>
    </thead>
    <tbody th:fragment="tableBody(tableData)">
        <tr th:each="row: ${tableData}">
            <td th:text="${row.id}">0</td>
            <td th:text="${row.name}">Name</td>
        </tr>
    </tbody>
    <tfoot>
    </tfoot>
</table>

 

 

 

 

이 테이블을 사용하려면 필드 함수를 사용하여 자체 테이블 헤더를 전달할 수 있습니다 . 

 

헤더는 myFields 클래스  참조됩니다 . 테이블 본문은 데이터를 매개 변수로 tableBody 함수 에 전달하여로드됩니다 .

<body>
    <header th:replace="fragments/general.html :: header"> </header>
    <table>
        <thead th:replace="fragments/tables.html
              :: fields(~{ :: .myFields})">
            <tr class="myFields">
 
                <th>Id</th>
                <th>Name</th>
            </tr>
        </thead>
        <div th:replace="fragments/tables.html
          :: tableBody(tableData=${data})">
        </div>
    </table>
    <div th:replace="fragments/general.html :: footer"></div>
</body>

 

 

 

이것이 최종 페이지의 모양입니다.

<body>
    <div>
        <h1>Thymeleaf Fragments sample</h1>
    </div>
    <div>Data received</div>
    <table>
        <thead>
            <tr class="myFields">
 
                <th>Id</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1001</td>
                <td>John Smith</td>
            </tr>
            <tr>
                <td>1002</td>
                <td>Jane Williams</td>
            </tr>
        </tbody>
    </table>
    <footer>
        <a href="/spring-thymeleaf/fragments">Fragments Index</a> |
        <a href="/spring-thymeleaf/markup">Markup inclussion</a> |
        <a href="/spring-thymeleaf/params">Fragment params</a> |
        <a href="/spring-thymeleaf/other">Other</a>
    </footer>
</body>

 

 

 

템플릿 관리를 쉽게 할 수있는 강력한 도구 인 Thymeleaf Fragments를 사용하여보기 구성 요소를 재사용하는 방법을 살펴 보았습니다.

 

728x90
반응형
728x90
반응형

사이트에 따라서 날짜를 Database에 저장하는 방법이 조금씩 다릅니다.

 

TimeStemp로 하거나 Date로 하거나 String으로 저장하기도 하죠.

 

때에 따라서 Client에서 보여주는 Thymeleaf 에서 Format을 해야합니다.

 

 

 

 

일반적인 LocalDateTime 형태의 객체를 변환하려면 아래와 같이 한다는것을 쉽게 찾아볼 수 있습니다.

<td th:text="${#temporals.format(user.crtDtm, 'yyyy-MM-dd HH:mm')}"></td>

 

 

 

하지만 String 문자로 저장된 날짜를 yyyy-MM-dd 형태로 출력하려는 방법을 찾아보니 잘 나오지 않았습니다.

 

이런 형태로 하라는 글도 있었는데 너무 길고 지저분해 보이죠..

<th:block th:with="sdf = ${new java.text.SimpleDateFormat('yyyy-MM-dd''T''HH:mm:ss')}">
    <p th:text="${#dates.format(sdf.parse(myData.mdProperties.get('completionDate')), 'dd-MM-yyyy')}" />
</th:block>

 

 

늘 그렇지만 레퍼런스를 봐야겠다고 생각하고 들어갔지만 Thymeleaf Doc 은 간단한것만 나와있고 코드를 찾아가면서 분석해야합니다.

 

그냥 IntelliJ 자동완성기능을 사용하여 찾았습니다..

 

 

 

이렇게 작성해주었고. 내용은 '20190516' 이렇게 저장이 되있는 값을 사용했습니다.

 

현재 형식대로 두번째 인자값으로 넣으주면 기본 format 형태인 yyyy-MM-dd 로 출력이 됩니다.

<td th:text="${#temporals.createDate(user.crtDtm, 'yyyyMMdd')}"></td>

 

어렵지 않는 내용은 검색보단 직접 찾아보는게 빠를때도 있다는것을 다시 느끼게 해주는 시간이었습니다.

 

728x90
반응형
728x90
반응형

 

Thymeleaf 를 구현하다보면 표현식을 꼭 사용하게 됩니다.

 

기본적으로 지원하는 Number Format 함수를 알아보겠습니다.

 

아래의 내용은 Thymeleaf3.0 버전 기준으로 작성되었습니다.

 

 

 

정수 최소값 설정

Array, List, Set또한 설정이 가능합니다.

 

ex) 100 or 001

 

${#numbers.formatInteger(num,3)}

${#numbers.arrayFormatInteger(numArray,3)}

${#numbers.listFormatInteger(numList,3)}

${#numbers.setFormatInteger(numSet,3)}

 

 

 

 

최소 정수 자릿수와 천단위 구분 기호 설정

Array, List, Set또한 설정이 가능합니다.

 

구분자로는 ‘POINT’, ‘COMMA’, ‘WHITESPACE’, ‘NONE’, ‘DEFAULT’  가 있습니다.

 

${#numbers.formatInteger(num,3,'POINT')}

${#numbers.arrayFormatInteger(numArray,3,'POINT')}

${#numbers.listFormatInteger(numList,3,'POINT')}

${#numbers.setFormatInteger(numSet,3,'POINT')}

 

 

 

 

정수, 소수의 최소값 과 자릿수 설정

Array, List, Set또한 설정이 가능합니다.

 

${#numbers.formatDecimal(num,3,2)}

${#numbers.arrayFormatDecimal(numArray,3,2)}

${#numbers.listFormatDecimal(numList,3,2)}

${#numbers.setFormatDecimal(numSet,3,2)}

 

 

 

 

정수, 소수 최소값과 천단위 구분기호 설정

Array, List, Set또한 설정이 가능합니다.

 

${#numbers.formatDecimal(num,3,2,'COMMA')}

${#numbers.arrayFormatDecimal(numArray,3,2,'COMMA')}

${#numbers.listFormatDecimal(numList,3,2,'COMMA')}

${#numbers.setFormatDecimal(numSet,3,2,'COMMA')}

 

 

 

 

정수, 소수 설정후 각각의 천단위 구분기호 설정

Array, List, Set또한 설정이 가능합니다.

 

${#numbers.formatDecimal(num,3,'POINT',2,'COMMA')}

${#numbers.arrayFormatDecimal(numArray,3,'POINT',2,'COMMA')} ${#numbers.listFormatDecimal(numList,3,'POINT',2,'COMMA')}

${#numbers.setFormatDecimal(numSet,3,'POINT',2,'COMMA')}

 

 

 

 

통화 환율 설정

${#numbers.formatCurrency(num)}

${#numbers.arrayFormatCurrency(numArray)}

${#numbers.listFormatCurrency(numList)}

${#numbers.setFormatCurrency(numSet)}

 

 

 

 

퍼센트 설정

${#numbers.formatPercent(num)}

${#numbers.arrayFormatPercent(numArray)}

${#numbers.listFormatPercent(numList)}

${#numbers.setFormatPercent(numSet)}

 

 

 

정수, 소수 최소값 설정 후 퍼센트 설정

${#numbers.formatPercent(num, 3, 2)}

${#numbers.arrayFormatPercent(numArray, 3, 2)}

${#numbers.listFormatPercent(numList, 3, 2)}

${#numbers.setFormatPercent(numSet, 3, 2)}

 

 

 

 

유틸리티 메서드

x 에서 y까지 정수의 시퀀스 생성

 

${#numbers.sequence(from,to)}

${#numbers.sequence(from,to,step)}

 

 

 

 

공식적으로 Thymeleaf에서 지원하는 Number Format 함수를 알아보았습니다.

 

728x90
반응형
728x90
반응형

 

Spring Boot 의 기본 템플릿 엔진은 Thymeleaf 로 사용되고 있습니다.

 

Jpa 의 저장 또한 LocalDateTime 으로 아래처럼 사용하고 있습니다.

 

 

 

일반적인 방법으로는 java.util.date 객체를 사용하고 있지만 Java8 에서는 LocalDateTime 을 사용하도록 권장하고 있기때문에 Format 방식도 조금 다르게 진행합니다.

 

그래서 간단하게 Thymeleaf 3.0에서 Format하는 방식을 설명하겠습니다.

 

백엔드에서 아래와같이 model로 넘기는 가정으로 진행하겠습니다.

 

model.addAttribute("standardDate", new Date());

model.addAttribute("localDateTime", LocalDateTime.now());

model.addAttribute("localDate", LocalDate.now());

model.addAttribute("timestamp", Instant.now());

 

 

 

 

날짜  어떻게 백엔드쪽에 설정 되었는지에 상관없이 , 그것은 선택된 표준에 따라 보여 질 것입니다. 

 

standardDate는 #에 의해 처리 될 것입니다 날짜 유틸리티입니다. 새로운 LocalDateTime, LocalDate  Instant 클래스는 # temporals 유틸리티에 의해 처리됩니다 . 

 

<h1>Format ISO</h1>

<p th:text="${#dates.formatISO(standardDate)}"></p>

<p th:text="${#temporals.formatISO(localDateTime)}"></p>

<p th:text="${#temporals.formatISO(localDate)}"></p>

<p th:text="${#temporals.formatISO(timestamp)}"></p>

 

 

 

자동으로 하지 않고 원하는 format을 설정하는 방식입니다.

 

<h1>Format manually</h1>

<p th:text="${#dates.format(standardDate, 'dd-MM-yyyy HH:mm')}"></p>

<p th:text="${#temporals.format(localDateTime, 'dd-MM-yyyy HH:mm')}"></p>

<p th:text="${#temporals.format(localDate, 'MM-yyyy')}"></p>

 

 

 

 

 

# temporals.format (...)을 사용 하여 Instant 클래스를 처리 할 수 ​​없습니다 . 

 

UnsupportedTemporalTypeException 이 발생 합니다. 또한 LocalDate의 서식 지정은 특정 날짜 필드 만 지정하고 시간 필드를 건너 뛰는 경우에만 가능합니다.

 

자세한 설명은 아래의 url을 통해 확인하실수 있습니다.

 

https://www.baeldung.com/dates-in-thymeleaf

 

How to Work with Dates in Thymeleaf | Baeldung

A quick and practical guide to working with dates in Thymeleaf

www.baeldung.com

728x90
반응형
728x90
반응형

 

새로운 Android Studio 버전을 설치 하였거나 포멧을 한 뒤에 기존에 NDK를 사용하던 프로젝트를 열고 빌드 했을때 아래와 같은 에러메시지가 출력됬습니다.

 

 

 

진짜 안드로이드 에러는 검색말고는 절대 혼자 해결할 수 없는것 같네요.

 

문제는 NDK 관련 SDK 설치가 되어있지 않아서 발생된 오류로 NDK 를 설치해서 처리해보도록 하겠습니다.

 

Android Studio 메뉴에서 Preferences 로 이동합니다.

 

 

 

Appearance & Behavior > System Settings > Android SDK 메뉴를 클릭합니다.

 

우측 화면에서 SDK Tools 탭을 클릭하면 아래와 같은 화면이 나옵니다.

 

 

CMake 와 NDK 가 설치되지 않아 설치를 진행하였습니다.

 

 

 

NDK 버전이 높으면 Gradle 버전도 높아져야 하기 때문에 상황에 맞게 대처를 해야될것같습니다.

 

위와 같은 방법으로도 처리가 안될 수 있으니 에러로그를 천천히 살펴 보시기 바랍니다.

728x90
반응형
728x90
반응형

 

Spring Boot 2.x 로 개발을 하다보면 어마어마한 문제들이 많이 발생합니다.

 

최근 보안정책을 준수하기 때문에 일반적으로 사용이 가능한 부분들도 보안취약점으로 구분되기도 하죠.

 

이번에도 VirtualKeypad 사용하는 프로젝트에서 Spring Security 를 적용하면서 생긴 문제를 해결했습니다.

 

https://gigas-blog.tistory.com/100

 

WebPonent Virtual Key - HTML 보안 키패드

웹과 하이브리드 앱에서 사용할 수 있는 보안키패드를 소개하겠습니다. HTML 기반으로 다양한 환경에서 사용이 가능하다는 장점이 있는 VirtualKey 입니다. 주민번호를 입력하는곳과 비밀번호 등 개인정보에 민감..

gigas-blog.tistory.com

 

 

 

VirtualKeypad 는 html 기반으로 iFrame 을 띄우는 방식으로 만들어진 솔루션입니다.

 

하지만 Security 적용을 하니 아래와 같은 오류들이 뿜어져나왔습니다.

 

 

Refused to display 'http://localhost:9050/keypad/keypad-core.html' in a frame because it set 'X-Frame-Options' to 'deny'.

 

Uncaught DOMException: Blocked a frame with origin "http://localhost:9050" from accessing a cross-origin frame.

 

X-Frame-Options'를 'deny'로 설정 했기때문에 keypad-core.html 프레임 표시를 거부했다고 나오고,

 

Uncaught DOMException : 원본 "http : // localhost : 9050"이 교차 출처 프레임에 액세스하지 못하도록 프레임을 차단했다고 나옵니다.

 

 

 

 

이런저런 에러를 보다보니 정말 많은 경험이 되는것 같습니다..

 

CrossOrigin 이라는것도 찾아보고. Cors설정도 찾아봤지만 어떤 문제인지 확인조차 어려워서 이설정은 아닌것같아 첫번째 오류메시지 기준으로 찾아보기 시작했습니다.

 

'X-Frame-Options' to 'deny'. 이 부분을 처리 해줘야하는데 DOMException 이 나와서 javascript 문제인줄 알고 VirtualKeypad 설정 js 파일을 찾아보았지만 없었습니다.

 

다시 원점으로 돌아가 Spring Security 적용전에는 문제 없이 되었으니 Spring Security 설정으로 가능할거라는 생각으로 다시 검색을 했습니다.

 

찾아보니 Spring Security 는 기본적으로  X-Frame-Options Click jacking 공격 막기 설정이 되어있습니다.

 

iFrame 을 사용하기 때문에 설정이 해주어야 합니다.

 

 

 

 

 

Xml 로 설정도 가능하지만 SpringBoot 에서는 Java로 구성하기 때문에 Java 로 작성합니다.

 

Spring Security 설정을 하는 WebSecurityConfigurerAdapter.configure(HttpSecurity http) 메서드에 작성을 하겠습니다.

 

X-Frame-Options 를 비활성화 하는 설정이지만 보안적인 이슈가 발생할 수 있습니다.

 

http.headers().frameOptions().disable();

 

 

 

동일 도메인에서는 iframe 접근이 가능하도록 X-Frame-Options를 sameOrigin() 으로 설정하면 됩니다.

 

http.headers().frameOptions().sameOrigin();

 

 

 

Java로 간단하게 설정이 가능하지만 Spring Boot 에서는 강력한 properties 파일로 설정이 가능합니다.

 

security.headers.frame = false

 

 

 

 

이 설정 하나로 iFrame 사용하는 프로젝트에서 문제없이 진행할 수 있습니다.

 

728x90
반응형
728x90
반응형

이 글은 Thymeleaf 3.0 버전 기준으로 작성되었습니다.

 

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html

 

Tutorial: Using Thymeleaf

1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text. The main goal of Thymeleaf is to provide a

www.thymeleaf.org

 

 

 

 

현재 회사 프로젝트에서 Thymeleaf 로 JSP 를 대신해 화면을 구현하고 있습니다.

 

Tiles 처럼 layout 을 만들어서 진행하려고 찾고 진행해보려고 찾아보니 thymeleaf-layout-dialect 를 사용하여 구현하는 글이 많았습니다.

 

gradle 기준 implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' 의존성 주입을 받아 진행하였습니다.

 

그런데 아무리 해봐도 실행되지 않았습니다.

 

찾아보니 3.0 버전에선 사용이 불가능하다고 하고. 그래도 기존에 돌아가던 코드를 깃헙에서 받아 실행해보았지만 역시 안되네요.

 

그래서 그냥 Thymeleaf 3.0 문서를 보고 구현해보았습니다.

 

 

 

 

 

layout 구현부 입니다.

 

th:fragment="layout(title, content)" 이 부분이 상속을 받을수 있게 해줍니다.

 

fragment 를 생성하면서 함수 인자로 title 과 content 를 받고 있습니다.

 

<title th:replace="${title}">Layout Title</title> 변수를 출력하는 코드로 동적 title 사용이 가능합니다.

 

<div th:replace="${content}"></div> 동적으로 content 를 출력하는 코드 입니다.

 

<!DOCTYPE html>
<html th:fragment="layout(title, content)" xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:replace="${title}">Layout Title</title>
</head>

<body>

    <h1>Layout H1</h1>

    <div th:replace="${content}">

        <p>Layout content</p>

    </div>

    <footer>
        Layout footer
    </footer>

</body>
</html>

 

 

 

 

 

 

content 에 들어갈 html 입니다.

 

html 태그에 th:replace="~{layoutFile :: layout(~{::title}, ~{::section})}" 이런식으로 layoutFile 파일을 선택하고 :: 구분자를 넣어주고 layout() 함수를 호출하는 방식입니다.

 

~{title} title 태그를 주입받습니다.

 

~{section} section 태그를 주입받습니다.

 

두개다 역시 head 나 body 어떤 태그를 사용할 수 있습니다.

 

<!DOCTYPE html>
<html th:replace="~{layoutFile :: layout(~{::title}, ~{::section})}">
<head>
    <title>Page Title</title>
</head>
<body>

<section>

    <p>Page content</p>

    <div>Included on page</div>

</section>
</body>

 

 

 

 

 

 

이대로 실행하면 layout 이 정해진 html 의 content 부분에 section 태그 내용들이 보일것 입니다.

 

툴에 따라 다르지만 IntelliJ 에서 빨간 밑줄이 나오지만 문제없이 돌아갑니다.

 

eclipse 는 빨간줄이 나오지는 않습니다.

 

이 layout 구현을 하려고 Thymeleaf 2.x 대로 내려가려고 했지만 더 가볍게 사용이 가능하니 Thymeleaf 3.x 를 그대로 사용하는걸 추천드립니다.

 

728x90
반응형
728x90
반응형

 

이전 글에서 Mac OS X 환경 Docker 설치를 진행했었습니다.

 

이번엔 Oracle Database 설치를 진행해보겠습니다.

 

https://gigas-blog.tistory.com/117

 

[Mac OS X] Docker 설치

가벼운 가상환경을 제공하는 Docker가 요즘 이슈 입니다. 쉽고 간편하게 컨테이너를 만든다는게 엄청난 이유인것 같습니다. Docker 에 대해서는 많은 자료가 있으니 따로 알아보셔야 될것 같습니다. Docker를 설치..

gigas-blog.tistory.com

 

 

 

1. 터미널 or GUI 에서 로그인

터미널에서 docker login 을 입력하여 로그인을 진행합니다.

 

 

 

또는 Mac 상단에서 Docker 아이콘을 클릭하여 Sign in / Create Docker ID 메뉴를 클릭합니다.

 

 

Download 할 때 가입했던 계정을 입력합니다.

 

 

2. Oracle 11g 버전 다운로드

docker search oracle-xe-11g 명령어로 많은 이미지를 볼 수 있습니다.

 

docker에서는 이 이미지를 사용하여 다운로드를 진행하게 됩니다.

 

저는 docker pull jaspeen/oracle-xe-11g 명령어를 실행했습니다.

 

 

 

 

 

3. 이미지 실행

이미지를 다운받는다고해서 바로 동작하지 않고, 다운받은 이미지를 실행해야 실제로 사용이 가능합니다.

 

docker images 명령어로 현재 등록된 docker 이미지를 확인할 수 있습니다.

 

 

등록된 이미지가 있으니 docker run -d -p 8080:8080 -p 1521:1521 jaspeen/oracle-xe-11g 명령어로 실행해보겠습니다.

 

 

옵션은 아래와 같습니다.

-d  백그라운드에서 실행

-p 플래그를 사용하여 호스트포트와 컨테이너포트를 매핑 (호스트포트:컨테이너포트)

 

 

 

이렇게 실행이 되면 SQL Developer나 sqlplus 로 접속해 확인해 볼 수 있습니다.

 

간단하게 Docker에서 원하는 이미지를 설치하고 실행까지 하는 방법을 알아보았습니다.

 

728x90
반응형

'프로그래밍 > Oracle' 카테고리의 다른 글

[Oracle] 오늘이 포함된 일주일 날짜 구하기  (0) 2019.04.12

+ Recent posts