자바에서 유용하게 쓰던 문자열 메소드와 수학 메소드를 소개한다.


- String 메소드 -




toUpperCase : 해당 문자열을 전부 대문자로 치환


toLowerCase : 해당 문자열을 전부 소문자로 치환


length : 문자열의 길이를 반환


indexOf : 어떤 문자를 받아 그 문자가 문자열의 앞에서 몇번째에 위치 하는 문자인지 검색


lastIndexOf : 어떤 문자를 받아 그 문자가 문자열의 뒤에서 몇번째에 위치 하는 문자인지 검색


charAt : 문자열의 n번째 문자를 리턴하는 메소드


substring : 문자열을 n1번째 부터 n2 -1 번째 까지 잘라서 보여주는 메소드


split : 문자열을 특정 기준을 잡아 잘라서 배열로 반환 (ex   가, 나, 다, 라,    ", " 기준으로 split ->  배열[가, 나, 다, 라])





- Math 메소드 -




abs : 해당 값을 절대값으로 반환


random : 랜덤값 발생


round : 소수 반올림


floor : 소수 버림


ceil : 소수 올림





예제를 직접 하나하나씩 써보고 결과를 확인해보자




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	.area1{
		border: 1px solid red;
		height:450px;
	}
	.area2 {
		border:1px solid red;
		height:150px;
		
	}
</style>
</head>
<body>
	<h1>String과 Math</h1>
	<h3>String</h3>
	<p>"" 혹은 ''로 묶여 있는 리터럴이다.<br>
	자바스크립트의 내장객체로 String 객체의 기본적인 메소드가 있다.</p>
	<button onclick="showStringMethod();">문자열 처리 메소드</button>
	<div id="area1" class="area1"></div>
	<script type="text/javascript">
		function showStringMethod() {
			var str1 = "Apple Iphone";
			
			var area1 = document.getElementById("area1");
			
			// 대문자, 소문자로 변경해주는 메소드
			area1.innerHTML += "toUpperCase() : " + str1.toUpperCase() + "<br>";
			area1.innerHTML += "toLowerCase() : " + str1.toLowerCase() + "<br>";
			
			// 문자열의 길이를 리턴하는 속성
			area1.innerHTML += "length : " + str1.length + "<br>";
			
			// 문자열에 n번째 위치 찾는 메소드 (0번부터 시작하므로 1을 더하면 편함)
			area1.innerHTML += "문자열에서 e의 위치 : " + (str1.indexOf('e') + 1) + "<br>";
			area1.innerHTML += "뒤에서부터 e의 위치 : " + (str1.lastIndexOf('e') + 1) + "<br>";
			
			// 문자열에서 n번째 인덱스에 해당하는 문자를 리턴하는 메소드
			for(var i = 0; i < str1.length; i++){
				area1.innerHTML += i + "번째 인덱스 : " + str1.charAt(i) + "<br>";
			}
			// 문자 하나도 문자열이라고 생각
			
			// 문자열의 일부만 리턴하는 메소드 (8부터 10 전까지 자른다.)
			area1.innerHTML += "문자열 일부만 리턴 : " + str1.substring(8, 10) + "<br>";
			
			// 문자열을 분리하여 배열로 리턴하는 메소드
			var str2 = "사과, 바나나, 복숭아, 키위, 파인애플";
			
			var fruits = str2.split(", ");
			
			area1.innerHTML += "str2 : " + str2 + "<br>";
			area1.innerHTML += "fruits : " + fruits + "<br>";
			
			console.log(str2);
			console.log(fruits);
		}
	</script>
	
	<h3>Math</h3>
	<button onclick="showMathMethod();">숫자 처리 메소드</button>
	<div id="area2" class="area2"></div>
	<script type="text/javascript">
		function showMathMethod() {
			var num1 = -123;
			
			var area2 = document.getElementById("area2");
			
			area2.innerHTML += "절대값 : " + Math.abs(num1) + "<br>";
			
			area2.innerHTML += "임의의 난수 발생 : " + Math.random() + "<br>";
			
			area2.innerHTML += "반올림 : " + (Math.round(123.456 * 100) / 100) + "<br>";
			
			area2.innerHTML += "내림 : " + (Math.floor(123.456 * 100) / 100) + "<br>";
			
			area2.innerHTML += "올림 : " + (Math.ceil(123.456 * 100) / 100) + "<br>";
		}
	</script>
</body>
</html>


자바 스크립트는 변수형이 전부 var로 선언된다.


이는 자바에서 Object 타입으로 생각하면 된다.


문자열, 숫자, 논리, 배열, 객체, 함수, 정의되지 않은 변수와 같이 있고


변수에 넣은 값에 따라서 자료형이 동적으로 바뀐다.


예제를 확인해보자


typeof는 변수와 함께 쓰여 변수가 어떤 자료형인지 출력한다.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	// 전역변수의 선언
	
	// 자동으로 window 객체의 필드가 됨
	str = "전역변수";
	// 브라우져 개발자 모드에서 조회 가능
	
	// 함수 외부에 선언한 변수는 var를 붙여도 전역변수이다.
	var str2 = "var전역변수";
	
	// window 객체가 로드 될 때 (페이지 로딩 시) 동작할 이벤트
	// 참고로 window 객체는 js의 최상의 객체로 페이지 로딩 시 같이 로드 된다. 
	window.onload = function(){
		// 지역변수 선언
		// 지역변수 선언시 반드시 var를 붙여야 한다.
		var str = "지역변수";
		
		// 지역변수가 우선권을 가진다.
		console.log(str);
		
		// window를 붙여 전역변수 호출
		console.log(window.str);
		console.log(this.str);
		// this는 여러가지 의미가 있지만 그 중 하나로 window 객체를 의미
		
		// 함수 내에서 작성되어도 var 키워드를 사용하지 않으면 전역변수가 된다.
		str3 = "난 뭘까요?";
		
		console.log(str3);
		console.log(window.str3);
		console.log(this.str3);
		
		what = "전역변수인지 확인"
		showwhat();
	}
	function showwhat() {
		console.log(what);
	}
</script>
<style>
	.area{
		border: 1px solid black;
		height: 150px;
	}
</style>
</head>
<body>
	<h1>변수와 자료형</h1>
	<h3>변수 선언</h3>
	<p>함수 내부에서 var 변수명; 으로 선언하면 지역변수가 된다.<br>
	함수 내부에서 변수명; 으로  선언하거나, 함수 밖에서 변수명; 혹은 var 변수명;으로
	선언하면 전역변수가 된다.<br>
	지역변수와 전역변수가 동일한 이름인 경우 함수 내부에서 변수명을 호출하면
	지역변수가 우선권을 가지기 때문에<br>
	전역변수 사용시 window.변수명 혹은 this.변수명으로 표현하여
	지역변수와 구분한다.<br>
	전역변수는 해당 window 내에서 어디든 사용할 수 있으며,
	지역변수는 해당 함수 내에서만 사용 가능하다.</p>
	
	<hr>
	
	<h3>자료형</h3>
	<p>자바스크립트에서는 자료형별로 변수 타입이 지정되지 않고
	리터럴에 의해서 동적으로 자료형이 결정된다.</p>
	<button onclick="testType()">자료형 테스트</button>
	
	<br><br>
	
	<div id="area1" class="area"></div>
	
	<script type="text/javascript">
		function testType() {
			// 문자열 변수
			var name = 'abcd';
			
			// 숫자 변수
			var age = 20;
			
			// 논리 변수
			var check = true;
			
			// 배열 변수
			var hobby = ["축구", "농구", "야구"];
			
			// 객체 변수
			var user = {name:"abcd", age:20, id:"user01"};
			
			// 함수 변수
			var testFunction = function testFunction(num1, num2){
									var sum = num1 + num2;
									
								}
			// 정의되지 않은 변수
			var apple;
			
			console.log(typeof(name) + " : " + name);
			console.log(typeof(age) + " : " + age);
			console.log(typeof(check) + " : " + check);
			console.log(typeof(hobby) + " : " + hobby);
			console.log(hobby);
			console.log(typeof(user) + " : " + user);
			console.log(user);
			console.log(typeof(testFunction) + " : " + testFunction);
			
			var area1 = document.getElementById("area1");
			
			area1.innerHTML += "배열 : " + hobby + "<br>";
			area1.innerHTML += "배열 인덱스[0] : " + hobby[0] + "<br>";
			area1.innerHTML += "배열 인덱스[1] : " + hobby[1] + "<br>";
			area1.innerHTML += "배열 인덱스[2] : " + hobby[2] + "<br>";
			area1.innerHTML += "객체 : " + user + "<br>";
			area1.innerHTML += "객체 속성 : " + user.name + ", " + user.age + ", " + user.id + "<br>";
			area1.innerHTML += "함수 : " + testFunction + "<br>"
			area1.innerHTML += "정의되지 않은 변수 : " + apple + "<br>"
			
			
		}
	</script>
	
	<hr>
	
	<h3>동적 타입 테스트</h3>
	<p>자바스크립트에서 변수는 타입이 지정되는 것이 아닌, 동적으로 타입이 결정된다.</p>
	<button onclick="testDynamicType();">실행확인</button>
	<div id="area2"></div>
	<script type="text/javascript">
		function testDynamicType() {
			// 들어온 값에 따른 type의 변화를 살펴보자
			var testVariable = 123;
			
			console.log(typeof(testVariable) + " : " + testVariable);
			
			testVariable = "안녕하세요";
			
			console.log(typeof(testVariable) + " : " + testVariable);
			
			testVariable = [0, 1, 2, 3];
			
			console.log(typeof(testVariable) + " : " + testVariable);
		}
	</script>
	
	
</body>
</html>


보통 태그에 접근하여 그 값을 사용하거나 속성을 변경할 때 이 방법을 이용하는데


변수를 선언하여 document.getElement~~~~ 와 같이 document의 메소드를 이용한다.



Id의 경우는                     var 변수 이름 = document.getElementById("지정한 Id");


태그를 이용할 땐              var 변수 이름 = document.getElementsByTagName("태그 명");


name을 이용할 땐            var 변수 이름 = document.getElementsByName("지정한 name 명");



태그를 이용하여 불러오면 그 태그를 사용하는 모든 항목들이 배열 형태로 변수에 입력된다.


이 변수를 출력하면 태그가 어떤 속성들을 가지고 있는지 확인할 수 있고


속성은 매우 많기 때문에 암기하여 쓰기 보다는 이 기능을 통해서 원하는 속성을 불러오거나 변경하면 된다.



다음 예제를 확인해보자



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	.area {
		border:1px solid red;
		height:100px;
	}
</style>
</head>
<body>
	<h1>HTML 태그에 접근하기</h1>
	<h3>아이디로 접근</h3>
	<div id="area1" class="area"></div>
	<!-- 보통 개발자가 id, 퍼블리셔가 class를 쓴다. -->
	<!-- id는 개발자들 끼리의 암묵적 약속으로 고유하게 단 하나의 대상만 가르킴 -->
	<button onclick="accessId();">아이디로 접근</button>
	<script>
		function accessId() {
			var area1 = document.getElementById("area1");

			area1.style.backgroundColor = "yellow";
			
			area1.innerHTML += "아이디로 접근 성공!<br>"
		}
	</script>
	
	<h3>태그명으로 접근</h3>
	<ul>
		<li>목록1</li>
		<li>목록2</li>
		<li>목록3</li>
		<li>목록4</li>
		<li>목록5</li>
	</ul>
	<button onclick="accessTagName();">태그명으로 접근</button>
	<script type="text/javascript">
		function accessTagName() {
			var list = document.getElementsByTagName("li");
			// li 태그는 여러개이기 때문에 getElements, s를 써서 복수형
			console.log(list);
			// F12의 브라우져 관리자 모드로 콘솔에 태그명 하나하나의 속성들을 확인하고
			// 이용해보자
			
			var changeColor = 50;
			
			/*
			for(var i in list){
				list[i].style.backgroundColor = "rgb(130, 220, " + changeColor + " )";
				changeColor += 50;
				
				// 이 반복을 사용하면 list 배열의 0~4번방의 li 값 뿐만 아니라  length라는 속성도 저장되어 있기 때문에
				// 마지막에 접근하려 하면 오류가 발생한다.
			}
			*/
			
			// 그러므로 일반 for문을 사용하여 해결해야 한다.
			for(var i = 0; i< list.length; i++){
				list[i].style.backgroundColor = "rgb(130, 220, " + changeColor + " )";
				changeColor += 50;
			}
		}
	</script>
	
	<hr>
	
	<h3>name으로 접근</h3>
	<form>
		<fieldset>
			<legend>취미</legend>
			<table>
				<tr>
					<td>
						<input type="checkbox" name="hobby" value="game" id="game">
						<label for="game">게임</label>
						<!-- for 속성을 맞춰서 설정하면 체크박스를 누르지 않고 글자를 눌러도 선택이 된다. -->
					</td>
					<td>
						<input type="checkbox" name="hobby" value="music" id="music">
						<label for="music">음악</label>
					</td>
					<td>
						<input type="checkbox" name="hobby" value="movie" id="movie">
						<label for="movie">영화</label>
					</td>
				</tr>
				<tr>
					<td>
						<input type="checkbox" name="hobby" value="money" id="money">
						<label for="money">돈벌기</label>
					</td>
					<td>
						<input type="checkbox" name="hobby" value="running" id="running">
						<label for="running">뛰기</label>
					</td>
					<td>
						<input type="checkbox" name="hobby" value="walk" id="walk">
						<label for="walk">걷기</label>
					</td>
				</tr>
			</table>
		</fieldset>
	</form>
	<div id="area2" class="area"></div>
	<button onclick="accessName();">name으로 접근</button>
	<script type="text/javascript">
		function accessName() {
			var hobby = document.getElementsByName("hobby");
			
			console.log(hobby);
			// 출력한 배열 값의 속성 중 checked가 현재 체크가 되어있는지 상태를 알려줌
			
			var checkItem = "";
			for(var i = 0; i < hobby.length; i++){
				if (hobby[i].checked == true) {
					checkItem += hobby[i].value + "선택함<br>";
				}
			}
			
			document.getElementById("area2").innerHTML = checkItem;
		}
	</script>
</body>
</html>


JS에서, <script> 블록에서는 주석을 자바와 같이 // 와 /**/ 를 이용한다.





document.write()의 경우는 기존의 HTML 문서를 지우고 새 HTML 빈 문서에 테스트를 할 때 쓰인다.


document.write("<h1>안녕 헤드라인!</h1>") 과 같이 쓰면 기존의 화면이 지워지고


안녕 헤드라인! h1 태그가 화면에 보여진다.


주로 테스트 할 때 사용하는 키워드이다.






inner HTML은 바디에 생성한 개체들의 내용을 읽거나 바꿀 때 사용한다.





console.log의 경우는 자바 이클립스에서 실행하면 코드 아래쪽의 실행창과 비슷하며


원하는 문구를 출력할 수 있고 오류같은 메시지도 볼 수 있다. f12의 개발자 모드 하단에서 찾을 수 있다.




다음은 예제이다.




javaScript02.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	//한줄 주석입니다.
	/*
		여러줄 주석입니다.
	*/
	function start(){
		alert("문서가 로딩완료되었습니다.");
	}
	
</script>
<style>
	.area {
		width:300px;
		height:100px;
		border:1px solid black;
	}
</style>
</head>
<!-- <body onload="start();"> -->
<body>
	<h1>자바스크립트의 데이터 입/출력</h1>
	
	<script>
		// 웹페이지의 모든 내용이 로딘된 후에 실행되면, 로딩된 데이터를 지우고 출력하기 때문에
		// 주로 테스트 용도로만 사용한다.
		document.write("<h1>document.write()로 출력함</h1>");
	</script>
	
	<h3>inner HTML로 요소의 내용 변경하기</h3>
	
	<div id="area1" class="area">자바스크립트에서 태그 앨리먼트의 값을 읽어가거나,
	값을 변경할 때 inner HTML 속성을 사용한다.</div>
	<br>
	<button onclick="checkvalue();">innerHTML 확인</button>
	<script type="text/javascript">
		// text/javascript는 생략가능
		function checkvalue(){
			var area1 = document.getElementById("area1");
			alert(area1.innerHTML);
			console.log(area1.innerHTML);
			console.log(area1);
			
			area1.innerHTML = "innerHTML 속성으로 값 변경함";
		}
	</script>
	<hr>
	<h3>console.log()로 개발자 도구 콘솔 화면에 출력하기</h3>
	<p>개발자 도구 콘솔 화면에 출력을 하고자 할 때 사용하며,
	디버깅 할 때 주로 사용한다.</p>
	<button onclick="printConsole();">콘솔에 내용 출력</button>
	<script>
		function printConsole(){
			var num1 = 3;
			var num2 = 4;
			var sum = num1 + num2;
			
			window.console.log(sum);
			// window는 생략가능
		}
	</script>
	
	<hr>
	
	<h3>window.confirm()을 이용한 데이터 입력</h3>
	<p>어떤 질문에 대해 "예/아니오"의 결과를 얻을 때 사용한다.</p>
	<p>확인 버튼과 취소 버튼이 나타나며, 확인 버튼을 클릭시 true.
	취소 버튼을 클릭시 false를 리턴한다.</p>
	<button onclick="checkgender();">성별 확인하기</button>
	<div id="area2" class="area"></div>
	<script type="text/javascript">
		function checkgender() {
			var result = confirm("남자면 확인, 여자면 취소 버튼을 눌러주세요");
			
			console.log(result);
			
			var gender = "";
			
			if(result == true){
				gender = "남자";
			}else{
				gender = "여자";
			}
			
			console.log(gender);
			
			var area2 = document.getElementById("area2");
			area2.innerHTML += "당신은 " + gender + "입니다.<br>";
		}
	</script>
	
	<hr>
	
	<h3>window.prompt()를 이용한 데이터 입력</h3>
	<p>텍스트필드와 확인/취소 버튼이 있는 대화상자를 출력하고,
	입력한 메세지 내용을 리턴값으로 돌려받는다.</p>
	<button onclick="testPrompt();">이름 입력</button>
	<div id="area3" class="area"></div>
	<script>
		function testPrompt() {
			var result = window.prompt("당신의 이름은 무엇인가요?");
			
			var area3 = document.getElementById("area3");
			
			area3.innerHTML += "앗! 당신이 " + result + "군요! 반가워요!";
			
			
			
		}
	</script>
	
</body>
</html>


먼저 폴더 구조를 설명





view 폴더를 만들고 저번과 같이 html 파일 생성


web 아래에 js 폴더를 만들고 다음과 같이 생성한다.












다음과 같은 화면을 구현한다.







다음 화면으로 넘어가는 코드







index.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>New JS</title>
</head>
<body>
	<h1>안녕!</h1>
	<ol>
		<li>
			<a href="views/javaScript01.html">자바스크립트 개요</a>
		</li>
	</ol>
</body>
</html>



javaScript01.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="../js/sample.js"></script>
</head>
<body>
	<h1>자바스크립트 개요</h1>
	
	<dl>
		<dt>스크립트 언어란?</dt>
		<dd>기본 프로그램의 동작을 사용자의 요구에 맞게 수행되도록 하는 용도로 사용된다.<br>
		짧은 소스 코드 파일로 빠르게 상호작용 하도록 고안되었다.</dd>
	</dl>
	<dl>
		<dt>자바스크립트</dt>
		<dd>웹 브라우저에서 많이 사용하는 인터프리터 방식의
		객체 지향 프로그래밍 언어이다.<br>
		ECMA 스크립트 표준을 따르는 웹 기술이다.</dd>
	</dl>
	<dl>
		<dt>자바스크립트 사용법</dt>
		<dd>
			<ol>
				<li>태그에 직접 간단한 소스코드를 작성해서 실행되게 하는 방법(인라인)</li>
				<li>script 태그 영역에 작성해서 실행되게 하는 방법</li>
				<li>별도의 js 파일로 작성해 가져다 사용하는 방법</li>
			</ol>
		</dd>
	</dl>
	<dl>
		<dt>단, 소스는 함수 단위로 작성하고 이벤트 속성을 사용해서 구동되게 한다.</dt>
		<dd>이벤트 속성은 태그마다 차이가 있음<br>
		on이벤트명 = "실행할 함수 명([전달값])"</dd>
	</dl>
	
	<hr>
	
	<h2>1. 태그에 직접 자바스크립트 코드를 작성해서 실행하게 되는 경우</h2>
	<button onclick="alert('버튼 클릭 확인')">클릭하세요!</button>
	
	<hr>
	
	<h2>2. script 태그 안에 함수 단위로 소스 작성하고,
	태그에서  on이벤트명="함수명();"으로 사용하는 경우</h2>
	<button onclick="testfn();">함수 실행 확인용 버튼</button>
	<script>
		function testfn(){
			window.alert('testfn()함수 실행됨...');
		}
	</script>
	
	<br>
	
	<h2>3. 별도로 작성된 자바스크립트 함수 사용 테스트</h2>
	<button onclick="samp();">samp() 실행</button>
	
</body>
</html>



sample.js



/*
 * 별도로 작성된 자바 스크립트 샘플
 */
function samp(){
	window.alert('samp 함수 실행');
}


구글 검색창에 톰캣을 검색하여 홈페이지로 들어간다.






http://tomcat.apache.org/


메인화면에서 좌측에 다운로드 하위에 Tomcat 버전이 있다.


그 중 8버전을 사용한다.








Tomcat 8의 8.5.34 버전, 그리고 자기 운영체제 환경에 맞춰서 32bit or 64비트를 다운로드 해준다.


다운로드 하고 압축파일을 마음에 드는 위치에 압축 해제만 한다면 끝이다.


톰캣은 따로 설치없이 그대로 사용하게 된다.










개발환경 설정







이클립스에서 새로운 Workspace를 마음에 드는 위치로 설정한다.


워크스페이스를 변경하면 설정도 새로 해야한다.





다음으로는 유니코드 설정변경


먼저 화면에 보이는 창들을 전부 끄자. 그리고 사용할 뷰만 띄울것이다.


상단 메뉴바의 window - show view - console, navigator, servers 를 눌러 화면의 뷰를 띄우자











다음과 같이 뜨면 된다.







다시 상단 메뉴바의 window - preferences를 누르고


설정창을 열자


설정창에서 다음 스크린샷의 검정색 박스와 같이 전부 UTF-8로 변경하자.









이와같이 설정을 마치면 편집기 설정은 끝


다음으로는 톰캣, 서버 설정


이클립스 화면의 좌측 하단 Servers 탭을 보면 서버가 없다, 추가해주세요 라는 문구가 있다.


문구를 클릭하거나 빈 공간에 우측 클릭 - new - server로 생성하자.








나오는 창을 사진의 검정 박스로 표시한 부분을 알맞게 설정하여 진행하자.


Browse 하여 경로 지정하는 부분은 이 게시글 맨 위에서 받은 Tomcat 압축파일을 해제한 위치이다.








아까 서버를 생성하라던 문구가 사라지고 톰캣 서버가 잡혔다.


한번 시작 버튼을 눌러서 가동해보자.






잘 따라왔다면 위와 같이 서버 가동 완료시간과 함께 정상 Start가 됫다고 출력된다.


서버가 정상 실행되는 것이 확인 됫다면 화면 좌측 하단의 Servers에서 빨간색 네모 버튼을 눌러 서버를 정지





다시 화면 좌측 하단의 Servers에서 서버를 더블클릭하면 위와같은 화면이 나온다.


그 중 검정색 네모 박스에 맞춰서 설정을 바꿔주자.


Port는 8080으로 되어있을 텐데 바꾸는 이유는 예전에 DB의 포트를 8080으로 설정했기 때문에 다른거로 바꾼다.


8765 말고 마음에 드는것으로 설정하여도 상관없다.






다음으로는 HTML 파일을 생성하여 정말 간단한 메인 페이지를 만드는 방법


먼저 Servers 폴더가 하나 있는 좌측의 Navigator 창에 우클릭 - Dynamic web Project를 누른다.





이와 같은 창이 뜨고 마음에 드는 이름을 입력하고 Finish를 누르지 말고 Next를 누르자.






디폴트 경로를 꼭 이와같이 바꾸자. 그리고 Next






위의 이름은 기본값으로 설정되어 있을텐데 앞에서 입력했던 프로젝트 이름과 동일하면 나중에


파일을 직접 찾을 때 헷깔리는 일이 있을 수 있다.


고로 다른것으로 바꿔주자.


또한 아래의 체크박스도 체크해주고 Finish를 누른다.





위와 같이 경로가 잘 잡혀있다.






다음으로는 WEB-INF 폴더에 우클릭을 해도 HTML 파일 생성을 찾을 수 없는데 옵션을 수정하여 만들어 보자.


화면 상단 메뉴의 Window - Perspective - Customize Perspective






그리고 Short cut의 좌측 항목의  Web이 네모네모로 설정이 되어있는데


체크박스를 두번 누르면 체크 표시로 변한다.


그리고 OK







다시 WEB-INF에 우클릭을 하고 NEW를 보면 HTML 파일이 생성되어 있는것을 확인 할 수 있다.







index.html이라고 File name을 변경하자


index가 공통적으로 사용하는 화면의 메인페이지이기 때문에 index로 설정한다.









간단하게 문서를  수정한다.





이제 다음과 같이 Java 프로젝트를 서버에 올리면 된다.







Servers 의 톰캣을 우측클릭하고 Add and Remove를 누른다.









생성한 프로젝트를 add 로 추가하고 Finish를 눌러주면 된다.


파일을 올리고 아까와 같이 Servers의 재생버튼을 눌러 서버를 실행하자.





인터넷 브라우저를 띄어 "127.0.0.1:[아까 입력한 포트번호]/js"   "localhost:[아까 입력한 포트번호]/js" 둘 중 하나를 입력하여 실행하면


index, 메인 페이지가 정상적으로 뜬다.


127.0.0.1 이나 localhost는 현재 컴퓨터의 자기 자신의 주소를 의미한다.









※ index.html을 사용한 이유






프로젝트의 web.xml을 누르고 나오는 창의 아래쪽에

Design을 Source로 바꾸어서 보면

Welcom-file 블록이 보인다.

첫 번째 띄울 화면의 파일 이름이 무엇인지 여기서 설정하는데

기본값이 index로 되어있기 때문에 이와같이 사용한다.


Emmet 코드는 자동완성으로 만들어지는 HTML 코드이다.


자주 사용하는 코드들이나 div같은 태그를 쓸 때 <>, </>를 일일히 입력하지 않고


div만 치고 아래 나오는 자동완성 리스트를 선택하는 것이다.






위와같이 리스트를 한꺼번에 만들 수 있고







느낌표를 Tab하면 HTML의 기본 틀이 자동완성 된다.




이러한 단축 코드들의 리스트는 아래 사이트에 정리되어 있다.



https://docs.emmet.io/cheat-sheet/



직접 들어가서 확인해 보면 한눈에 들어올 것이다.







페이지를 만들기 위해 만들어진 양식, 라이브러리가 많은데


그 중 하나가 부트스트랩이다. 


https://getbootstrap.com


사용방법은 이 사이트에서 코드 자체를 직접 다운로드 하는 방법이 있고


CDN 방식인 코드를 통해서 불러오는 방법이 있다.


그 중 CDN 방식을 소개한다.




디자이너가 아니고 개발자가 직접 HTML 코드로 만들면 솔직히 말해서 많이 구리다...


그래서 Bootstrap을 이용하여 미리 만들어진 디자인을 이용해서 html문서를 작성하면 된다.


CDN 방식은 head에 link 태그와 script 태그를 이용해서 불러온다.






페이지 메인화면에서 상단 메뉴바에서 Examples를 눌러보면










스크롤을 내려 Custom components를 보면 미리 만들어져 있는 예제 페이지들을 볼 수 있다.
















다시 상단 메뉴의 HOME을 눌러 메인으로 돌아오고 페이지 스크롤을 내려 아래를 보면 다음과 같이 코드들이 있다.








여기서 CDN이라고 적힌 부분의 CSS only와 JS 부분을 복사하여 head에 추가하면 된다.







이와같이 추가하고 꼭 css를 먼저 쓰고 js를 써야한다. 불러오는 순서와 연관되어 있다.









이제 상단 메뉴바의 Documentation을 눌러보자.






위와 같은 페이지가 뜨는데


여기서 원하는 기능들을 불러올 수 있다.


예를들어 왼쪽 리스트의 Jumbotron을 가져오고 싶다면 눌러보자.






위와 같이 예시가 하나 나오고 아래에는 그에 대한 코드가 나온다.


이 코드를 복사하여 body에 붙여넣기 하면 예시와 똑같이 나온다.







기본 제공되는 HTML 코드와 Bootstrap을 이용한 예시를 한번 비교해보자.



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!--Bootstrap css-->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <!--Bootstrap js-->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>    
    <!--css가 무조건 위에 있어야 함, 먼저 로딩되고 js 코드가 필요하기 때문이다.-->
</head>
<body>
    <h1>HTML이 제공하는 기본 헤더1 태그</h1>
    <div class="jumbotron">
        <h1 class="display-4">Hello, world!</h1>
        <p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
        <hr class="my-4">
        <p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
        <a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a>
    </div>
</body>
</html>



위와 같이 문서를 작성하였고 간단하게 h1태그를 사용하였다.


결과는 아래와 같다.










h1 태그를 보면 매우 구리다.


이와같이 Bootstrap에 잘 디자인 된 코드들이 많으므로 유용하게 갖다 쓰자.






https://startbootstrap.com/


위 사이트는 완성된 페이지 코드들을 공유하고 있다.





ROLLUP은 그룹별 산출한 결과값의 소계/누계를 구하는 함수이다.


GROUP BY와 함께 쓰이며 GROUP BY로 묶은 부분을 ROLLUP을 추가하여 () 괄호로 묶어 사용한다.


GROUP BY ROLLUP( [] );




DECODE는 자바의 Switch 문과 비슷하다고 생각하면 된다.


SELECT 문의 컬럼명에 쓰이며 다음과 같이 쓰인다.


DECODE (검사 할 조건 계산식(결과가 값으로 떨어져야 함), 값1, 처리할 식, 값2, 처리할 식, ..... , DEFAULT값(생략가능))


예제를 통해 실제로 어떻게 쓰이나 보자


--rollup
--그룹별 산출한 결과값의 소계/누계를 구하는 함수

SELECT depart_no, commision, COUNT(*)
FROM employees
GROUP BY depart_no, commision;

SELECT depart_no, commision, COUNT(*)
FROM employees
GROUP BY ROLLUP(depart_no, commision);

-- GROUPING 함수를 통해 (null)을 제거할 수 있다.
-- 실제 데이터와 집계 데이터를 구분하는 함수
-- 0 : 실제 데이터
-- 1 : 집계 데이터
SELECT GROUPING(depart_no), GROUPING(commision), COUNT(*)
FROM employees
GROUP BY ROLLUP(depart_no, commision);

-- DECODE()
-- 자바에서 switch 문과 유사한 선택 함수
-- DECODE(검사 할 조건 계산식(결과가 값으로 떨어져야 함), 값1, 처리할 식 1, 값2, 처리할 식 2 ...... , DEFAULT 값(생략 가능))

SELECT
    DECODE(GROUPING(depart_no), 0, depart_no, 1, ' ') 부서번호,
    DECODE(GROUPING(commision), 0, TO_CHAR(commision), 1, ' ') 커미션,
    COUNT(*)
FROM employees
GROUP BY ROLLUP(depart_no, commision);



JS에서 데이터 타입을 구분하기 위해선


코드를 읽어보는 수 밖에 없다.


왜냐하면 선언 자체를 var로 전부 통일하여 사용하고


그 후에 들어오는 값에 따라서 자동으로 잡히게 되어있기 때문이다.






콘솔은 JS에서 가장 간단한 디버깅 도구이다.


여태껏 출력을 위해 사용한 그 console이다.


이번에는 console. 하고 뒤에 붙는 메소드들과 그의 사용법, 


그리고 body에 있는 요소(ex buttone, li, div 등) 을 가져오는 방법을 함께 알아보자



<html>
    <head>
        <meta charset="UTF-8">
        <title>Java Script</title>
        <link rel="icon" href="img/favicon.ico">
        <style>
            /*css 주석*/
        </style>
        <!--스크립트를 여기에 넣어도 되지만 페이지가 느려지는 등 원인으로 바디 아래에 넣음-->
    </head>
    <body>
        <button>버튼</button>
    </body>
    <script>
        var str = "문자열";
        var obj = {key : "value"};
        var arr = [1, 2, 3, 4, 5];
        // Object의 경우 key는 막 써도 문자열로 잡히는데
        // 뒤의 value값은 ""를 꼭 사용해야 문자로 인식 된다.
        // 만약 쓰지 않으면 변수값으로 인식된다.

        // 로그 레벨
        console.log("Log");
        console.info("Info");
        console.warn("Warn");
        console.error("Error");

        // 어떠한 자료구조든지 표현 가능
        console.log(str);
        console.log(obj);
        console.log(arr);

        // 문자열과 함께 표현도 가능
        console.log("문자열 : " + str);
        console.log("객체 : " + obj); // 객체는 문자열과 함께 사용 x
        console.log("배열 : " + arr);

        // 만약 문자열과 객체와 함께 사용하고 싶다면...
        console.log("객체", obj);
        console.log("배열", arr);
        // 콤마를 사용해도 상관없다.

        //////////////////////////////////////////// 바디의 요소 가져오기

        // 태그는 여러개 일 수 있기 때문에 배열로 가져온다.
        var btn = document.getElementsByTagName("button");
        console.log(btn);
        // 이벤트(이벤트 객체가 매개변수로 들어온다.)
        btn[0].addEventListener("click", function(e){
            console.log("click", e);
        })


        
    </script>
</html>






get하고 자동완성을 누르면 다양한 방법으로 요소를 가져올 수 있다.






또한 가져온 값을 출력(console.log(btn); 구문)하면 위와 같이 배열 오브젝트 형태로 값이 들어오는데


key - value 형식으로


요소의 속성들이 쭈우우욱 들어있다, 정말 많이 있는데


이 요소들을 제대로 컨트롤 할 줄 안다면 JS는 정말 잘하는 숙련자라고 볼 수 있다.




그리고 이벤트를 구현 할 때 이벤트 객체가 매개변수로 들어오게 되는데


이 매개변수는 정말 다양한 정보를 담고 들어온다.


다음 사진을 확인해보자











위와같이 파란색 박스의 펼치기를 눌러보면 이벤트 객체가 담고있는 정보가 주르륵 나온다.


이 정보도 매우 유용하게 쓸 수 있고 어떤 정보가 담겨있는지는 직접 콘솔에 띄어  확인해보자.


위의 캡쳐는 펼쳤을 때 정보가 너무 많아 전부 캡쳐하지 못했다.


간단한 영어 단어로 이루어져 있으므로 의미 그대로 받아들이면 된다.













+ Recent posts