다음지도 key 등록(kakao map)
2018-12-23 00:00:00 +0000다음 지도 API
어플리케이션 생성
- daum지도 사용 참고
- http://apis.map.daum.net/web/guide/#step3
- kakao developers 에서 회원가입
- map을 선택하고 어플리케이션 생성
- 내 계정에서 map 선택 후 설정-일반-플랫폼-플랫폼 추가 선택
- 도메인 추가(http://localhost:8080)
좌표로 지도 출력
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Daum 지도 시작하기</title>
</head>
<body>
<div id="map" style="width:500px;height:400px;"></div>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=인증키"></script>
<script>
var container = document.getElementById('map');
var options = {
center: new daum.maps.LatLng(33.450701, 126.570667),
level: 3
};
var map = new daum.maps.Map(container, options);
</script>
</body>
</html>
공공 데이터 open api
2018-12-22 00:00:00 +0000공공 데이터 포털 OpenAPI 사용법
API 신청
- https://www.data.go.kr
- 자신이 활용하고 싶은 데이터를 찾는다
- 활용신청 버튼을 누른다
- 활용신청이 끝나면 곧바로 사용할 수 있다
- 지역코드는 여기서 확인할 수 있다
개발계정 API키 받기
- 마이페이지-개발계정 메뉴에서 ‘일반 인증키 받기’ 선택
- 참고문서에서 API 사용법을 확인한다
- 내가 신청한 API 는 단독/다가구 전월세 자료이고 아래 url로 요청하면 결과를 받을 수 있다고 적혀있다
- http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcSHRent?LAWD_CD=11110&DEAL_YMD=201512&serviceKey=서비스키
- 위 url을 주소창에 입력하면 다음결과를 받을 수 있다
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<건축년도>1991</건축년도>
<계약면적>53.76</계약면적>
<년>2015</년>
<법정동> 청운동</법정동>
<보증금액> 25,000</보증금액>
<월>12</월>
<월세금액> 0</월세금액>
<일>11~20</일>
<지역코드>11110</지역코드>
</item>
<item>
<건축년도>1995</건축년도>
<계약면적>95.48</계약면적>
<년>2015</년>
<법정동> 청운동</법정동>
<보증금액> 30,000</보증금액>
<월>12</월>
<월세금액> 50</월세금액>
<일>21~31</일>
<지역코드>11110</지역코드>
</item>
....
Parsing
- 서버로 요청한 결과값은 글자 덩어리이므로 데이터 셋에 알맞게 Parsing해야함
- 아래는 XML 데이터를 파싱해서 출력하는 예제
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Main {
public static String getValue(String item, Element eElement) {
// 몇몇 태그가 없는 경우도 있기 때문에 체크한다
if(null == eElement) {
return null;
}
if(null == eElement.getElementsByTagName(item)) {
return null;
}
if(null == eElement.getElementsByTagName(item).item(0)) {
return null;
}
NodeList nlList = eElement.getElementsByTagName(item).item(0).getChildNodes();
Node nValue = (Node)nlList.item(0);
if(nValue == null)
return null;
return nValue.getNodeValue();
}
public static void ParsingXML(String result) {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
Document doc = (Document) dBuilder.parse(result);
doc.getDocumentElement().normalize();
System.out.println("Root element : "+doc.getDocumentElement().getNodeName());
// item 태그로 묶여진 데이터들을 전부 가져온다
NodeList nList = doc.getElementsByTagName("item");
System.out.println("개수:"+nList.getLength());
for(int temp = 0; temp < nList.getLength(); ++temp) {
Node nNode = nList.item(temp);
if(nNode.getNodeType() == Node.ELEMENT_NODE){
Element eElement = (Element) nNode;
System.out.println(temp+"번째");
System.out.println("건축년도:"+getValue("건축년도",eElement));
System.out.println("계약면적:"+getValue("계약면적",eElement));
System.out.println("년:"+getValue("년",eElement));
System.out.println("법정동:"+getValue("법정동",eElement));
System.out.println("보증금액:"+getValue("보증금액",eElement));
System.out.println("월:"+getValue("월",eElement));
System.out.println("월세금액:"+getValue("월세금액",eElement));
System.out.println("일:"+getValue("일",eElement));
System.out.println("지역코드:"+getValue("지역코드",eElement));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
BufferedReader br = null;
try {
String LAWD_CD = "11110";
String DEAL_YMD = "201512";
String myKey = "vH4iE0jHiRxyh0nHKQbGEDAnidosddWarT8ipF8KWpJMrP5%2FGURFpDIzy7xdXsfXYK8KX4zhqvm1EzYK7X%2FSvg%3D%3D";
String urlstr = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcSHRent?LAWD_CD="+LAWD_CD+"&DEAL_YMD="+DEAL_YMD+
"&serviceKey="+myKey;
URL url = new URL(urlstr);
HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();
urlconnection.setRequestMethod("GET");
br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(), "UTF-8"));
String result = "";
String line;
while((line = br.readLine()) != null) {
result = result + line + "\n";
}
//System.out.println(result);
ParsingXML(urlstr);
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
facebook login api
2018-12-22 00:00:00 +0000페이스북 로그인
인증과정과 Access token
- 사용자의 id, pass를 가지고 있는 것이 부담스럽다(보안적인 측면에서)
- 그래서 나온것이 Federated Identity(oAuth)
- 페이스북 로그인 문서 참고( https://developers.facebook.com/docs/facebook-login/web/ )
페이스북 앱 등록
- https://developers.facebook.com/
- 로그인 후 내앱에서 ‘새 앱 추가’ 클릭 ( fex라고 작성 )
- Display Name 작성 후 Create App
- 새창으로 이동하게 되면 메인 페이지에서 제품추가-‘Facebook 로그인’의 설정 클릭(새창 이동을 안한다면 product 클릭)
- Web 선택
- site URL 작성( 연습이므로 http://localhost:8080 ) 그리고 save
- 사이트 맨 위에 발급받은 앱 ID를 확인할 수 있다
페이스북 로그인 구현 계획
- developers.facebook 메인 화면에서 상단의 문서를 클릭
- facebook 로그인을 클릭한다
- 웹사이트 또는 모바일 웹사이트 클릭
- 필요한 기능 : sdk 로딩, sdk 초기화, login, logout, isLogined,api
테스트앱 만들기
- 도메인이 없으므로 테스트 앱을 만든다(본계정보다 가져오는 정보가 제한적임)
- 메인화면에서 내 앱 클릭
- 해당앱의 아래쪽 화살표를 누르고 ‘테스트앱을 만드세요’ 클릭
- 웹사이트 URL 작성(http://localhost:8080)
빠른시작
- 해당 앱의 설정의 기본설정 페이지 안에 ‘빠른시작’ 을 누르면 자신의 앱의 정보를 초기화해주는 코드를 얻을 수 있다
facebook API 사용
- 유저의 정보를 가져오는 api를 확인한다
- https://developers.facebook.com/docs/graph-api/reference/v3.2/profile
SourceCode
<!doctype html>
<html>
<head>
<title>WEB Welcome</title>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>
<script>
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
// 로그인이 되어있다면 connected 상태가 된다
if (response.status === 'connected') {
// Logged into your app and Facebook.
console.log('logined');
testAPI();
} else {
console.log('not logined');
// The person is not logged into your app or we are unable to tell.
document.getElementById('status').innerHTML = 'Please log ' +
'into this app.';
}
}
// This function is called when someone finishes with the Login
// Button. See the onlogin handler attached to it in the sample
// code below.
// 로그인이 되었는지 아닌지 상태를 체크한다
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
// 앱 초기화 init
window.fbAsyncInit = function() {
FB.init({
appId : '338796300298727',
xfbml : true,
version : 'v3.2'
});
// FB.AppEvents.logPageView();
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
};
// sdk를 다운받아서 페이지로 가져옴
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function testAPI() {
console.log('Welcome! Fetching your information.... ');
// 이름을 가져오기 위해 api 사용. /me는 로그인한 유저를 가르킨다
FB.api('/me', function(response) {
//console.log(response);
console.log('Successful login for: ' + response.name);
document.getElementById('status').innerHTML =
'Thanks for logging in, ' + response.name + '!';
});
}
</script>
</head>
<body>
<div
class="fb-like"
data-share="true"
data-width="450"
data-show-faces="true">
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/ko_KR/sdk.js#xfbml=1&version=v3.2&appId=2085645551760952&autoLogAppEvents=1';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-login-button" data-max-rows="1" data-size="large" data-button-type="continue_with" data-show-faces="false" data-auto-logout-link="true" data-use-continue-as="false"></div>
</div>
</body>
</html>
sourcetree 사용법
2018-12-17 00:00:00 +0000sourcetree 사용법
사용 저장소 및 프로그램
github
- 인터넷상에 소스코드를 올릴 수 있는 웹 저장소 제공(free면 공개프로젝트만 가능)
- 회원가입 필요
- https://github.com/
sourcetree
- git 관리 프로그램(git 이력, 소스 올리기, 내려받기 등.. 을 할 수 있는 gui 프로그램)
- sourcetree 다운로드
- https://www.sourcetreeapp.com/
- 중간에 Bitbucket 에 가입해야함
- 설치가 완료되었으면 메뉴 Tools-Options를 누르고 FullName, Email address를 적는다
저장소
Local git 저장소 생성
- Local git이란 웹이 아닌 자신의 컴퓨터에 git저장소를 만드는 것을 의미한다
- 내 컴퓨터에 git저장소를 생성한다
- 맨 위에 탭 +선택
- Create 선택
- Browse 버튼을 클릭해서 생성할 폴더 위치를 넣어준다
- 해당 폴더에 들어가면 .git 이라는 폴더가 생성된 것을 알 수있다
- .git 폴더가 생기면 git을 사용하고 있는 폴더라는 뜻
Local git 저장소 추가
- 생성과 달리 이미 만들어진 Local git 저장소를 sourcetree에 불러오는 것
- 맨 위에 탭 +선택
- Add 선택
- Browse 버튼을 클릭해서 가져올 폴더 위치를 넣어준다
- sourcetree로 버전관리가 가능해진다
Remote git 저장소 가져오기
- Remote git 저장소란 원격저장소로 웹에 있는 저장소를 뜻한다
- 웹에 있는 git내용을 내 local로 가져오고 싶을 때 사용
- 맨 위에 탭 +선택
- Clone 선택
- Source Path/URL에는 git 주소를 적는다(git주소는 git 저장소 메인페이지에서 Clone or download 버튼을 누르면 나온다)
- 두번째 텍스트 창에는 git 폴더를 지정한다
- Clone 버튼을 누른다
- Settings 를 누르고 git주소를 추가한다
Commit
Commit 설명
- git 프로젝트의 내용을 수정한 것을 Local에 저장하는 것
- Unstaged Files : 수정된 파일이 등록된다
- Staged Files : 수정된 파일을 ‘Stage Selected’버튼을 클릭하면 ‘Staged Files’창으로 이동한다
- Commit : Commit 버튼을 누르면 Local 저장소에 저장된다. 그리고 Push에 1이 추가된다
- Push : Push를 하면 원격 저장소에 내가 수정한 퍄일이 올라간다
- Pull : Push와 반대로 원격 저장소의 최신 소스를 받을 때 사용한다
Branch
Branch 설명
- branch는 나뭇가지 처럼 분기된 저장소(비슷한)를 만드는 것을 말한다
- master는 우리가 이때 까지 사용하던 기본 저장소(브런치)를 말한다
- 현재 버전에서 기능이 많이 변화된다면 브런치를 만들어야 한다.왜냐하면 A기능을 추가한다고 할 때 A기능을 계속 master 저장소에 커밋하게 되면 라이브 되고 있는 소스와 개발소스가 뒤엉켜서 장애가 날 확률이 높아진다. 그래서 A기능이 완성된 후 한번에 master 저장소에 넣어야 안전하다
- Branch는 ‘Branch’버튼을 눌러서 생성할 수 있다. 생성되었다면 옆에 BRANCHES 메뉴에 branch 메뉴가 생긴것을 확인할 수 있다
- a.txt 파일의 내용이 branch마다 다를 때 branch를 이동할 때마다 a.txt 내용이 바뀐다
Merge
- branch 끼리 소스코드 내용을 병합하는 것
- 내 소스를 원격 저장소에 올릴 때 사용
- master와 branch 병합 방법
- branch에서 commit 전 반드시 pull한다
- pull하고 충돌이 나면 수정하고 수정사항을 올린다
- master로 이동하고 branch 오른쪽 마우스클릭하여 ‘Merge work into current branch’ 메뉴를 누른다(가져올 branch로 이동하고 가져올 소스코드가 있는 branch를 선택해 ‘Merge work..’ 버튼을 누르면 된다
- master에서 충돌나면 수정하고 아니라면 수정사항을 push해서 원격 저장소에 올린다
충돌해결
- Merge를 하면 master, branch의 소스코드가 다른부분에서 충돌이 날 수 있다
- 소스코드 수정 후 수정파일을 오른쪽 클릭 Resolve conflicts-Mark Resolved 클릭
Discard,Remove,Reset, Revert
- Discard : Unstaged files에 있을 때 파일을 원래대로 되돌릴 수 있다
- Remove : Unstaged files에 있을 때 파일자체를 삭제하는 것
- Reset : 커밋이력에 내용을 아예 지워버리면서 특정 버전으로 되돌리는 것.원격 저장소에 올리기전에만 사용할 수 있다
- Revert : 커밋이력에 내용을 남기면서 특정 버전으로 되돌리는 것
프로젝트 eclipse로 가져오기
- 이클립스 프로젝트 창에서 오른쪽 클릭 후 ‘Import’ 선택
- General - Projects from Folder or Archive 선택
- clone 한 프로젝트 선택
- 가져오기 완료(이후 수정사항이 있으면 sourcetree에 자동으로 등록된다)
JavaScript event3
2018-12-15 00:00:00 +0000이벤트 추가
- on
- 이벤트를 연결
- 아래 이벤트는 해당 태그를 클릭 시 내용에 플러스 문자가 붙는다
$('h1').on('click', function(){
$(this).html(function(index, html){
return html + '+';
});
});
- hover
- mouseenter는 태그 위에 마우스가 놓여져있을 때 발생
- mouseleave는 태그 위에 마우스가 놓였다가 다른곳으로 가면 발생
- mouseenter 이벤트와 mouseleave 이벤트를 동시에 연결합니다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
.reverse{
background: black;
color:white;
}
</style>
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>
<script type="text/javascript">
$(function(){
$('h1').hover(function(){
$(this).addClass('reverse');
}, function(){
$(this).removeClass('reverse');
});
});
</script>
</head>
<body>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
</body>
</html>
이벤트 연결 제거
- off
- 이벤트 제거
- one()
- 이벤트를 한번만 실행
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
.reverse{
background: black;
color:white;
}
</style>
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>
<script type="text/javascript">
$(function(){
$('h1').click(function(){
$(this).html('CLICK');
alert('이벤트가 발생');
//이벤트 제거
$(this).off();
});
$('h1').off();
});
</script>
</head>
<body>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
</body>
</html>
매개변수 context
- 매개변수로 selector 외에 context도 사용할 수 있음
- 해당 선택한 태그의 자식을 선택하고 싶을 때 사용
- (자식태그명, 선택엘레먼트)로 사용
var header = $('h1', this).text();
var paragraph = $('p', this).text();
이벤트 강제 발생
- trigger()
- 이벤트를 강제로 발생시킵니다
- 아래 예제는 h1 태그의 첫번째 엘레먼트의 click이벤트가 발생하면 1초마다 골뱅이가 붙는 예제
$(function(){
$('h1').click(function(){
$(this).html(function(index, html){
return '@'+html;
});
// 1초마다 함수실행
setInterval(function(){
$('h1').first().trigger('click');
}, 1000);
});
});
- preventDefault
- 기본 이벤트를 제거한다
- stopPropagation
- 이벤트 전달 막기
- < h1 >안에 < a > 태그가 있어서 a 태그 실행 시 이벤트 버블링이 일어난다
- 이벤트 버블링을 끄려면 함수가 끝나기 전에 stopPropagation()을 호출하면 된다
- stopPropagation() 함수 호출 대신 return false를 해도 이벤트 전달이 일어나지 않는다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
*{
margin: 5px;
padding: 5px;
border: 3px solid black;
}
</style>
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>
<script type="text/javascript">
$(function(){
$('a').click(function(){
$(this).css('background-color','blue');
event.preventDefault();
event.stopPropagation();
});
$('h1').click(function(){
$(this).css('background-color', 'red');
});
});
</script>
</head>
<body>
<h1>
<a href = "html://hanbit.co.kr">Hanbit</a>
</h1>
</body>
</html>
이벤트 연결 범위 한정
- on() 메서드는 이벤트 범위를 한정할 수 있다(delegate)
- 아래 예제를 실행하면 Header를 누를 때마다 h1 태그가 늘어난다
- 하지만 새로생긴 h1 태그는 클릭해도 이벤트가 작동하지 않는다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
</style>
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>
<script type="text/javascript">
$(function(){
$('h1').on('click', function(){
var length = $('h1').length;
var targetHTML = $(this).html();
$('#wrap').append('<h1>'+length+'-'+targetHTML+'</h1>');
});
});
</script>
</head>
<body>
<div id='wrap'>
<h1>Header</h1>
</div>
</body>
</html>
- 상위태그에 이벤트를 연결하고, h1 태그를 연결했을 때를 찾아야 한다
- 함수안에서 this는 h1을 의미(wrap x)
- 수정후
$(function(){ $('#wrap').on('click','h1', function(){ var length = $('h1').length; var targetHTML = $(this).html(); $('#wrap').append('<h1>'+length+'-'+targetHTML+'</h1>'); }); });
마우스 이벤트
- mouseover
- 마우스가 해당 태그 안에 있고 움직일 때 마다 발생
- mouseenter
- 마우스가 해당 태그 밖에서 안으로 들어올 때만 발생
| method | 설명 |
|---|---|
| click | 마우스를 클릭할 때 발생 |
| dbclick | 더블클릭 할 때 발생 |
| mousedown | 마우스 버튼을 누를 때 발생 |
| mouseup | 마우스 버튼을 땔 때 발생 |
| mouseenter | 마우스가 요소의 경계 외부에서 내부로 이동할 때 발생 |
| mouseleave | 마우스가 요소의 경계 내부에서 외부로 이동할 때 발생 |
| mousemove | 마우스를 움직일 때 발생 |
| mouseout | 마우스가 요소를 벗어날 때 발생 |
| mouseover | 마우스를 요소 안에 들어올 때 발생 |
윈도우 이벤트
- 무한 스크롤 예제
- scrollTop : 스크롤의 위치
- (window).height() : 현재 웹브라우저의 보이는 길이 위치
- (document).height : 현재 웹프라우저의 문서길이(스크롤해야 보이는 위치까지 계산)
- 스크롤위치와 현재 웹브라우저가 보이는 위치길이를 더해서 문서길이와 같다면 Infinity Scoll 단어를 계속 body에 추가한다(화면을 끝까지 내리면서 무한스크롤이 된다)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
</style>
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>
<script type="text/javascript">
$(window).scroll(function(){
var scrollHeight = $(window).scrollTop() + $(window).height();
var documentHeight = $(document).height();
if(scrollHeight == documentHeight){
for(var i = 0; i < 10; ++i){
$('<h1>Infinity Scroll</h>').appendTo('body');
}
}
});
$(function(){
for(var i = 0; i <20 ;++i)
$('<h1>Infinity Scroll</h1>').appendTo('body');
});
</script>
</head>
<body>
</body>
</html>
Posts
-
Interceptor(인터셉터)
-
Android Studio Install
-
계층형 게시판
-
VirtualBox Ubuntu 18.04.2 LTS
-
TransactionAwareDataSourceProxy Error
-
Java Coding Conventions
-
Java Long과 long의 차이
-
Mybatis 객체 안에 객체 매핑
-
JavaConfig mariadb 연결
-
DataTable
-
관리자 페이지
-
MappingJackson2JsonView
-
Spring Javaconfig
-
게시판 만들기-제품 등록
-
게시판 만들기-제품 페이지 제작
-
게시판 만들기-회원탈퇴 및 게시판 삭제 플래그 추가
-
footer 하단에 고정시키기
-
bootstrap4 사용법
-
Spring 데이터 검증 @Valid, BindingResult
-
brackets 실시간 미리보기
-
Spring 기본설정(pom.xml, web.xml, encoding)
-
Vue.js computed, methods, watch
-
javascript onkeyup
-
Maria DB Incorrect string value Error
-
javascript 암호화(md5, base64)
-
Vue.js template
-
Vue.js 소개
-
Nexacro 설명
-
ControllerAdvice
-
Batch
-
html 페이지 로딩 순서
-
소수구하기(PrimeNumber)
-
최소공배수,최대공약수
-
Stream
-
Lambda(람다식)
-
inner class(내부 클래스)
-
final 키워드
-
file upload
-
파이썬 빅 데이터 K-평균(K-means)
-
아나콘다(Anaconda), 주피터 개발환경 세팅
-
텐서플로우(TensorFlow) 아키텍쳐 및 Session
-
텐서플로우(TensorFlow)상수, 변수, 함수
-
머신러닝 기초
-
한글 리스트 오름차순, 내림차순
-
연속된 글자의 갯수 출력
-
java spring5 프로젝트 설정
-
restController
-
spring 세팅 및 기본설정
-
mybatis trim
-
jquery datepicker
-
ajax로 데이터 전달/응답 받는법
-
mybatis error
-
mybatis 게시판 만들기 순서
-
Java Jsp Mybatis Dynamic Query
-
mybatis
-
git 소개
-
node.js 개발환경 구축
-
node.js 기본 내장 모듈
-
node.js의 전역 객체
-
node.js http module
-
node.js event
-
jdbc
-
자바빈
-
jsp, servlet 정리
-
java null object pattern
-
다음지도 key 등록(kakao map)
-
공공 데이터 open api
-
facebook login api
-
sourcetree 사용법
-
JavaScript event3
-
JavaScript jquery
-
JavaScript dom
-
JavaScript ajax
-
JavaScript 이벤트2
-
JavaScript 캡슐화
-
JavaScript Array,내장객체
-
JavaScript var
-
JavaScript 객체,생성자
-
JavaScript 함수,클로저
-
JavaScript Event
-
javascript eclipse 자동완성(with tern)
-
CSS position
-
HTML5,CSS 선택자
-
자바 시간 측정
-
git,eclipse 연동
-
HTML 기초 정리
-
Eclipse Web 환경세팅
-
피보나치의 수
-
Oracle 반복문,커서,예외,저장 서브프로그램
-
Oracle PL/SQL
-
Oracle 다중쿼리(Multiple row query)
-
Oracle 인덱스, 뷰, 시퀀스, 트랜잭션, 세션 정리
-
Oracle JOIN 정리
-
Oracle DDL, DML 정리
-
Oracle 문자열 함수 정리
-
Oracle 숫자,날짜,자료형 변환 함수 정리
-
Oracle 제약조건 정리
-
Oracle 기초 쿼리 정리
-
문제2775
-
DFS
-
junit
-
json
-
algorithmus basic
-
circular queue(원형큐)
-
binary search(이진탐색)
-
port forwarding(포트포워딩)
-
kakao chatbot(카카오 챗봇)
-
java io
-
sort comparable, comparator
-
Unresolved compilation problem
-
ArrayList, HashMap
-
Regular(정규표현식)
-
Enum Class
-
String Function
-
refactoring 이란(상수,제어플래그,assert)
-
reference,abstract 정리
-
FileNotFoundException Solve
-
static
-
Thread Synchronization(스레드동기화,원자성)
-
Java Exception(예외처리)
-
Java 생성자, this, super
-
roomnum
-
BeeHouse
-
Git Reset, Revert
-
Git Log
-
Array
-
stack
-
pyramid draw
-
Star Draw(별 그리기4)
-
Star Draw(별 그리기3)
-
Star Draw(별 그리기2)
-
Star Draw(별 그리기1)
-
Loop(While, For)
-
자바 데이터 타입, 데이터 연산
-
시계방향 달팽이 그리기
-
정수값의 짝수,홀수 갯수 구하기
-
java, Scanner 정리
-
draw dog
subscribe via RSS