컴파일(Compile)자바 소스코드(source code)를 기계가 이해하기 쉬운 바이트코드(byte code)로 변환하는 것을 컴파일이라고 한다.이런 일을 해주는 놈을 우리는 컴파일러(compiler)라고 부름. 컴파일할 때에는 단순히 바이트코드로 변환만 하는 것이 아니라, 소스코드의 문법을 분석하고, 문법이 유효한지 유효성 검사가 이뤄진다. 문제가 없으면 byte code로 이뤄진 .class 파일이 생성되는데, 문자들이 어떤 방식으로 인코딩이 되냐하면 컴파일할때 사용하는 그 OS의 기본 문자열집합으로 인코딩이 된다. 윈도 운영체제 사용하는 사람들 중에, 소스코드에 한글이 포함된 파일을 컴파일 돌렸을 때 컴파일 에러를 만나본 적이 있을 것이다. 왜 컴파일할 때 문자가 깨지고 에러가 날까?그것은 Win..
.java 파일확장자가 'java'인 파일은 인간이 작성한 source code 파일이다. .class 파일확장자가 'class'인 파일은 source code 인 java파일을 자바 컴파일러를 통해 byte code(target code)로 변환한 byte code 파일이다. 왜 굳이 class파일로 변환한 다음, class파일을 실행시켜야 할까?자바는 먼저 소스코드를 자바 컴파일러를 통해 기계가 쉽게 이해할 수 있는 bytecode로 이뤄진 class파일로 변환한다.*문법: javac 파일명.java참고로, 컴파일 과정에서는 소스코드를 분석하고, 문법의 유효성을 검사를 한다. 이렇게 모든 검열(?)을 마치고서야 class파일을 우리는 얻을 수가 있다. 이렇게 컴파일이라는 것을 하게되면 class파일이..
자바 컴파일러(Java Compiler)자바 소스 코드를 실행시키려면 먼저 기계가 잘 알아들을 수 있는 bytecode로 변환을 시켜야 한다.변환하기 전의 원본 코드인 source code를, 기계에서 실행할 수 있도록 bytecode로 변환하는 일을 하는 프로그램이 바로 자바 컴파일러다. * 요렇게 특정 프로그램에서 실행할 수 있도록 변환한 코드를 'target code'라고 부름. 특정 기계가 없으면 실행할 수가 없다. 이 놈은 Native code를 실행하는 것에 비해 실행 속도가 느린 대신, OS 독립적이라서 어떤 OS에서라도 VM만 설치되어 있으면 실행할 수 있다. JVM(Java Virtual Machine)자바 컴파일러가 변환한 bytecode를 실행시키는 프로그램이다.(bytecode는 p..
JRE(Java Runtime Environment)Java bytecode를 실행할 때 필요한 프로그램들로, 자바 프로그램을 실행하는 일반 사용자를 위한 SW이다. JRE는- Java Virtual Machine(JVM) * JVM은 바이트코드를 실행하는 프로그램이다.- 필수 자바 라이브러리로 구성되어 있다. JDK(Java Development Kit)자바 프로그램을 만드는 개발자가 사용하는 SW이다.JDK에는 자바프로그램을 개발하는데 필요한 프로그램들이 들어 있는데, 당연히 JVM과 필수 자바 라이브러리를 포함한다. 즉, JDK는 JRE를 포함하고 있다.JDK > JRE !!!프로그램을 개발했으면 실행시키고 테스트도 해봐야 하니까... JVM이 있는 것은 당연한거다.다시 정리해서, JDK는- JRE..
5. 제 3 정규화어떤 컬럼이 PK가 아닌 다른 일반 컬럼에 종속되는 경우가 있다면, 별도의 테이블을 부모-자식 관계로 만든다. 이렇게 문장으로만 보면 뭔 말인지 이해가 안가니 예제를 통해 설명하겠다.이 '학생'테이블을 잘 살펴보면 컬럼들 중에 반드시 '학생'에 종속되는 속성이 아닌 것이 있다. 바로 '우편번호'와 '기본주소' 컬럼이다.기본주소만 놓고 보면, 학생에 따라 기본주소가 다르니 학생에 종속된 것은 맞다. 그러나 '우편번호' 컬럼이 있으면 얘기가 달라진다. 우편번호는 '학생이 누구냐'에 따라 달라지기 보다는, '기본주소가 어디냐'에 따라 달라지기 때문,즉 '기본주소'에 종속되기 때문이다.그러나 상세주소는 우편번호나 기본주소가 어디냐에 따라 달라지지는 않는다. 아래 표를 보면 이해가 빠를 것이다...
4. 제 1 정규화 (중복 컬럼 해소) 앞 장에서 중복 데이터를 따로 빼서 테이블을 새로 정의한 후, 관계를 맺어주는 것을 해봤다. 그러나 제 1 정규화는 그게 끝이 아니라는 점.테이블 안에 중복되는 컬럼들이 있으면 이놈들도 해결해줘야 한다. 1. 테이블에서 중복되는 컬럼들을 뽑아 별도의 테이블로 분리한다. 이 테이블에서는 사진1, 사진2, ... 사진5 컬럼들은 모두 사진을 담는 컬럼이다.교실마다 같은 사진을 가지고 있는 것도 아닌데 왜 중복된다는 건지..? 라고 생각할 수 있겠으나. 어떤 교실은 사진을 2장 가지고 있고, 또 어떤 교실은 5장 모두, 또 어떤 교실은 아예 사진이 없을 수도 있다.마지막의 경우에는 컬럼이 낭비되는 셈이다. 예를 들면. 교실번호교실명 사진1사진2사진3 C01 강동원교실 C..
3. 제 1 정규화중복 데이터 또는 중복 컬럼(속성)을 별도의 테이블(엔티티)로 만들고, 기존 테이블과 관계를 맺어준다.여기부터 이제 평화로웠던 디비나라에 격변이 일어나기 시작함... 말로만 보면 당최 뭔 말인지 모르겠으니 직접 한번 해보겠다. 먼저 앞의 엔티티, 속성, PK까지 정하는 과정을 거쳐서.. 아래처럼 테이블들이 나왔다. 뭐 이건 어떤 시스템이냐에 따라(고객이 무엇을 원하냐에 따라) 달라질 수 있는 것들이다. 즉 노답임. '강의' 테이블을 기준으로 순서대로 해보면.1. 테이블에서 중복되는 데이터를 뽑아 별도의 테이블로 분리한다. 이 테이블에서 '중복되는 데이터'를 뽑아내야 하는데 얼핏 보면 모르겠지만 다양한 데이터가 여러개 쌓이는 경우를 생각해보면 그렇지가 않다.A라는 강의가 있을 때, 그 강..
2. PK(Primary Key, 주키) 선정하기각 엔티티(테이블)의 속성(컬럼)들 중에 바뀔 염려가 없으며, 해당 엔티티를 식별할 수 있는(중복되지 않는) 것을 주키(PK)로 선정한다.이 때, 주키로 사용할만한 속성이 없는 경우에는 임의의 인공 컬럼(속성)을 새로 만들어서 주키로 사용한다. 그렇다면 어떤 경우에 인공 컬럼을 만들어 주키로 선정하는 것이 좋을까?향후 변경 가능성이 있는 속성을 주키로 사용하는 것은 바람직하지 않다. 예를 들어, '학생' 테이블에서 '이메일' 속성은 향후 변경 가능성있다. 있으므로 주키로 선정하기에 바람직하지 않다. 주키로 사용할 속성에 들어갈 내용이 길어지는 것 또한 바람직하지 않다. 예를 들어, '과목' 테이블에서 '과목명' 컬럼은 문자열이 길어질 가능성이 있으므로 임의..
앞에서 정의한 내용을 바탕으로, 모델링을 순차적으로 진행해보겠다! 먼저 이 장에서 하게 될 엔티티와 속성을 정하는 과정은 가장 쉽지만 추상적이고 딱히 답이 없는..? 그런 과정이 되겠다. 하지만 여기서 정의하는게 개인적으로는 중요하고 또 중요하다고 생각한다.여기서 이름 하나를 잘못 지어 놓으면, 속성을 정하거나 이후에 관계맺기를 할 때마다 헷갈리기 때문이다.프로그래밍할 때 언제나 변수명 정하느라 멍 때리며 시간 보내는 나에겐 중요한 작업이당. 예제로 '수강관리 시스템'의 DB를 설계해보장! 1. 엔티티 식별하기우리가 다루는 정보들이 무엇인지 정의한다.시스템에서 다룰 데이터들의 집합을 정의하는거라고 한다.여기서 정해진 엔티티들은 DB에서 어떻게 사용되냐 하면, 각각 하나의 테이블을 이룬다. 그러니까 앞으로..
모델링?모델링은 현실세계를 모형화(추상화)하여 어떤 규칙을 가지고 모델을 만들어가는 것을 말한다. 복잡한 현실세계의 일부를 단순화(?) 시키는 것이라고 하는데, 사실 '모델링은 이것이다' 하고 정의한 내용을 보면 감이 잘 오지 않는다.모델링을 언제, 어떻게 하는건지 그 과정을 통해 이해하는게 훨씬 빠르다는게 내 생각이다. 데이터 모델링데이터 모델링은 DB 설계에 이용된다.(현실세계를 데이터베이스화하는 데에 이용된다.)일단 DB 설계 과정이 [요구분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현] 순서로 이루어지는데, 이 중 '개념적 설계' 단계에서 개념적 데이터 모델링을 한다. 이 때 E-R 모델링을 하게된다.현실세계를 글로 잘 옮겨다가 먼저 요구명세서를 만들고, 이 요구명세서의 내용..