다음지도 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