2013년 9월 3일 화요일
2013년 8월 30일 금요일
Day_19

[요구사항들]
1.팀을 구성2.맴버가 팀에 가입/탈퇴
3.팀은 프로젝트를 생성
4.각 팀은 팀장이 있고,팀장은 프로젝트는 관리(생성/삭제)
5.팀원평가
6.팀원들은 상호평가
7.프로젝트를 여러 작업으로 정의하여 관리
8.각 작업에 대해 팀원을 할당하고,팀원은 해당 작업에 산출물을 등록
9.pm은 각 작업에 대해 평가
10.각 프로젝트의 자료실이 있어야한다.
11.프로젝트에 페이스북처럼 단일 게시판이 있어야한다.
12.피드 등록시 파일 첨부가 가능해야한다.
13.각 작업의 진행 상태를 조회
14.프로젝트의 전체 작업 목록조회
15.개인정보 수집않는다.
*요구사항 식별
1.Actor 식별(primary actor)-시스템을 이용하는 사람이나 프로세스
참고>Supplemantary(secondary) Actor
;시스템에 의해 이용당하는 다른시스템
2.usecase 식별
-actor가 시스템을 사용해서 달성하려는 업무목표(사용목표)
-2주에서 6주내에 개발이 가능한 범위
*체크리스트
1)업무의 시작과 끝이 명확해야 한다.
=>카운트 가능해야함.
2)한사람이 한순간에, 한장소에서 수행하는 작업.
3)업무여야한다.
usecase 관리를 용이하게 함.
1>C R U D -> XXX관리
2>예:{주문요청} 관련있는것들은 -> XXX관리
{결제 }
{장바구니}
*ACtor - use-case
0. 공통0.1 사용자인증(로그인/로그아웃)
1.학생
1.1프로젝트정보관리
1.2프로젝트맴버관리
1.3맴버정보관리
1.4산출물관리
1.5피드관리(피드작성자를 필터링 검색)
1.6작업관리
2.pm강사
2.1작업평가
2.2팀원평가
2.3프로젝트평가
2.4산출물조회
2.5프로젝트조회
2.6피드관리
3.교육매니저
3.1프로젝트 평가조회
3.2멤버 평가 조회
3.3산출물 백업
3)use-case 명세서작성
1.use-case명
2.actors
3.pre-condition
-use-case를 시작하기 위한 사전 시스템상태
4.post-condition
-use-case를 종료한후 시스템 상태(종료조건)
5.기본시나리오
-actor와 시스템간의 눈에 보이는 대화
-오류 사항을 고려하지 않음.
6.예외시나리오
-오류발생시 시나리오
*시스템이 다루는 data 관리
2013년 8월 29일 목요일
2013년 8월 27일 화요일
Day_17
<connectionful:stateful>
ex>고객<---------(인터폰)--------->서버
*클라이언트와의 통신상태를 계속 추적하고 이를 자신의 서비스제공에 이용하는 서버를 말한다.
*서버의 현재 상태에 따라 클라이언트로부터 요구에 대한 응답이달라진다.
*상태 정보를 사용한면 약속된 명령에 대하여 신속한 응답이 가능해지며 클라이언트와 주고 받을 메세지의 크리가 줄어든다.
*네트워크가 안정적일 경우에는 Stateful서버를 사용하는 것이 유리하다.
참고로 인터넷환경은 복사, 오류, 지연, 순서바뀜등이 발생할 가능성이 크므로 안정적이라고 할수 없다.
<connectionless:stateless>
ex>고객<---------(114)---------->서버
*동작 상태를 정의하지 않고 항상 클라이언트로 부터의 독립적인 요청에 의해 서비스를 제공하는 서버를 stateless서버라고 한다.
*stateless서버는 클라이언트로 부터 새로 도착한 명령문에만 의존하여 서비스를 제공한다.
*stateless 서버를 사용할 경우의 장점은 틀린 상태 정보를 사용할 가능성을 없앰으로써 서버가 안정적으로 동작한다는 것이다.
<HTTP Application>
*HTTP Server(Web server)<---->*HTTP Client(Web Browser)참조>Web은 아래 그림처럼 거미줄로 연상된다.

<servlet container 와 Application>
1)Servlet 이란?*servlet은 웹에서 java 프로그래밍을 구현하기 위해 탄생한것이다.
*java 로 구현된 CGI(common gateway interface)라고들 흔히 말한다.
*HTTP protocol 서비스를 지원하는 javax.servlet.http.HttpServlet클래스를 상속하여 개발하며, Servlet은 Container에 의해서 실행되고 관리된다.
*HTML변경시 Servlet을 재컴파일 해야 하는 단점이 있다.
2)Servlet Container란?
*HTTP요청을 받아서 Servlet을 실행시키고, 그결과를 사용자 브라우저에게 전달해주는 기능을 제공하는 컴포넌트이다.
*Servlet을 실행하고 생명주기를 관리하는 역할을 한다.
*Servlet과 웹 서버가 서버통신할수 있는 방법을 제공한다.
*멀티 스레딩을 지원하여 클라이언트의 다중 요청을 알아서 처리해준다.
*대표적인 Conatainer에는 Tomcat.jetty,jboss등이 있다.
<web Browser 의 요청URL>
프로토콜://서버주소:포트번호/리소스 ID*관리를 쉬게 하기위해
파일 path형태를 사용한다.
참조>리소스:Application(HTML, gif, mov, 정적File)
**web Application 배치 (Deplayment) :
Eclipse 연동:(원래폴더와 파일을 손대지 않는다,개발을 위해 다양한 서버환경구축)1>서버마다 배치 폴더가 다르다.
2>Tomcat(*톰캣은 Java로 만들었다)
ex)c:/javaide/server/apache-tomcat.....
/bin <== 톰캣 실행 관련파일
/conf <== 선정파일
/lib <== 톰캣 java library
/work <== 실행중에 임시생성하고 파일
/webapps <== webapp.배치폴더
<web Application 배치 폴더 구조>
/classes/자바클래스파일/배치폴더루트/웹어플리케이션폴더/web-inf/web.xml(기타설정파일)/lib/.jar java라이브러리 파일<web application 메소드 5개-servlet lifecycle 메소드>
init()service()
destry()
getservletconfig()
getservletinfo()
interface servlet{ <== 정의 되어있다.
<servlet 만들기>
<tomcat 설치방법>
1>apache.org 로 접속한다.2>아래쪽 Tomcat을 누른다.
3>원하는 버전을 받는다.(예)tomcat 7.0

4>c:에 server 파일을 만들어 저장한다.

-끝-
2013년 8월 26일 월요일
2013년 8월 23일 금요일
Day_15
<Thread>
동시 프로그래밍이 가능하도록 만들어 주는 기본 단위로 프로세스(processes)와 쓰레드(thread)를 들수있다.**프로세스(process): 컴퓨터에서 연속적으로 실행되고 있는 프로그램을 말하는 것으로 여러개의 프로세서를 사용하면 멀티프로세싱이고 여러개의 프로그램을 같은 시간에 시분할 방식으로 돌리면 멀티태스킹이라 말한다.
**쓰레드(thread):프로세스내에서 실행되는 흐름의 단위를 말하는 것으로 하나의 프로그램은 최소한 하나의 쓰레드(main thread)를 가진다.
프로그램에 따라 둘 이상의 쓰레드를 동시에 실행할수 있는데 이를 멀티쓰레드라고 부른다.
<쓰레드 실행>
=>쓰레드를 실행시키려면 run()이라는 메소드를 오버라이드해서 사용해야 한다.또한 이 run()이라는 메소드를 작동시키기 위해서 start()라는 메소드로 작업지시를 해서
run()메소드를 실행하게 만들어야 쓰레드가 작동된다.
쓰레드를 이용해서 화면에 메세지를 출력하는데는 두가지 방법이있다.
둘다 java.lang패키지에 속해있는데 하나는 Runnable이라는 인터페이스를 구현하는 방법이고 다른하나는 Thread라는 클래스를 상속받아서 쓰레드를 작동시키는 두가지 방법이 있다.
public class Test implements Runnable
}
public void run()
{
system.out.println("Runnable을 통해 쓰레드를 실행하였습니다.");
}
public static void main(string args[])
{
Test r = new Test();
Thread t = new Thread(r);
t.start();
}
}
Runable 을 통해 쓰레드를 실행하였다.
인자가 없는 run()메소드를 위처럼 오버라이드 해야한다. 메인메소드에서 쓰레드를 만들고
실행시키기 위해 자체 클래스의 인스턴스를 생성해서 쓰레드 객체 생성할때 인자로 넣어주고 쓰레드를 시작하라는 start()메소드를 작동시키는 예제이다.
public class Test extends Thread
{
public void run()
{
System.out.println("thread를 통해 쓰레드를 실행");
{
public static void main(String args[])
{
Test t = new Test();
t.start();
}
}
Thread를 통해 실행하였다.
인터페이스로 구현해서 간접적으로 Thread클래스를 사용하느냐 아니면 Thread를 위처럼 직접 상속받아서 쓰레드를 작동하느냐의 차이다.쓰레드를 작동시키기 위해 아까처럼 start()메소드를 지시하면 run()메소드가 지시받아서 쓰레드를 작동시킨다.
<context switching>
->process의 실행환경정보 저장/로딩1.프로그램 실행과정에서 i/o를 잘고려해서 멀티 프로세스 기반의 프로그램 실행을 효율적으로 사용해야 한다.
2.컨텍스트 스위칭을 잘 고려해야 하면서 사용해야한다.
->process의 실행환경정보 저장/로딩
ex>교차로 신호등..
<Threadsave>
context객체와 session객체는 다른 여러 서블릿에서 동시에 접근이 가능하기 때문에
thread unsafe한 상황이 가끔 발생한다.
그렇다면 반대로 thread safe하다는 것은 다음을 만족하면 된다.
1>하나의 thread 밖에 없다.
=>어플리케이션이 하나의 thread로 동작한다면, thread간 간섭이 있을수 없으므로 당연 thread safe하다.
2>그렇지 않더라도(복수의 thread로 동작하더라도),하나의 인스턴스를 같이 사용하지 않는다.
=>복수의 thread가 동작하더라도 상태를 담을,그래서 서로 간섭할 인스턴스가 없다면 역시 thread safe할것이다.
반대로 서로 간섭할 방법이 없다.각 쓰레드가 상태를 갖지 않는 stateless타입이라면 공유할 인스턴스 자체가 필요없는것이다.
이런 방식으로 개발하면 근본적으로 thread safe하게 되고, 각thread간의 블로킹도 없게 되어 성능도 좋게 된다. 또는 상태를 담는 인스턴스를 갖더라도 그인스턴스를 저장하는 곳이 threadlocal과 같은 thread별 공간이라면 이조건을 만족하게 된다.
3>그렇지 않더라도(하나의 인스턴스를 같이 사용하더라도),인스턴스가 속성을 갖지 않는다.
=>서로 건드릴 속성이 없다면 thread safe하게 된다.Util성 클래스들이 이러한 예이다.
속성을 갖지 않기 때문에 thread safe를 신경쓰지 않고 사용할 수 있다.
4>그렇지 않더라도(인스턴스가 속성을 갖더라도),그 속성이 runtime시에 변경되지 않는다.
=>thread간에 공유되는 인스턴스가 속성을 갖더라도 runtime시에 변경되지 않는다면 thread safe의근본적인 원인은 한 thread가 특정 값을 설정하고 이후에 그값을 사용해야하는데, 그사이에 다른 thread가 그값을 변경하기 대문에 발생한다.
그런데 값을 설정할 수 없다면 이런한 문제가 발생하지 않는다.
final로 선언된 상수값이거나,초기화 시에 값이 설정되어 외부에서는 read only만 가능하게 된 경우 등이 이에 해당한다.
5>그렇지 않더라도(runtime시에 변경되더라도),그 속성에 동시에 접근가능하지 않다.
=>synchronized 블럭을 사용하는 경우가 이를 만족하게 하기위한 것이다.
값을 설정하고 그값을 이후에 다시 조회할때 까지, 다른 thread가 그값을 건드리지 못하게 하는것이 synchronized의 역할이다.
이를 통해 thread safe를 보장할 수 있다. 하지만 synchronized 된 블럭에 접근할수있는 thread는 유일하기 때문에 다른 thread는 기다릴수밖에 없고,이는 곧 성능에 영향을 끼치게 된다.
DB와 같은 공유자원을 사용하지 않으면서 cpu는 놀고 있는데 성능이 나오지 않는 경우가 이러한 상황에 기인한다.
6>그렇지 않더라도(동시에 접근 가능하더라도),그 클래스 자체가 thread safe하다.
=>동시에 사용하는 인스턴스 자체가 thread safe한 경우이다. 이것은 그 thread safe자체를 그클래스 내부에서 보장하는 것이다.
반대로 작성한 코드를 배포할때는 그동작이 thread safe하다는 것을 반드시 주석으로 명시해 주어야한다는 것이,굳이 이렇게 언급해야 하는 이유이다.
2013년 8월 22일 목요일
Day_14 소켓통신
<시스템 아키텍처의 발전사>
1.메인프레임
-Data처리-업무처리
-UI생성
<socket>
서버와 클라이언트는 각각 socket을 생성하고 server는 accept를 통해
client가 접속하기를 대기, 접속하게 되면 client의 socket번호를 저장하고
그뒤로는 각각이 제공하는 전송방식으로 통신을 하게 된다.
1.socket 생성과 연결
1) SernerSocket server = new SernerSocket(***);//server측에 써준다.
***은 포트넘버이다.(ServerSocket을 사용하기 위해선 try/catch필수)
2) Socket sock = server.accept();//server측에 써준다.
Socket sock = new Socket(serverIP,***);//client측에 써준다.
server가 대기하고 있다가 client가 접속하게 되면 client의 socket넘버를
리턴받는다.
client는 socket을 생성할때 serverIP주소와, portnum을 인자로 준다.
client가 소켓을 생성함과 동시에 server는 accept되면서 대기가 해제된다.
2.accept 메서드
-accept()메서드를 이용하여 클라이언트의 TCP커넥션(클라이언트에서 Socket객체를
생성하는 것)을 기다리고 있다.
accept()메서드는 클라이언트의 socket객체가 생성될때까지 블로킹되고 있다가
클라이언트의 Socket객체가 생성되면 서버에서 클라이언트와 통신할수있는
Socket객체를 리턴하게 된다.
accept()메서드의 유효시간이 지나면 java.net.socketTimeoutException이 발생하는데,
이예외가 발생하더라도 ServerSocket객체는 계속 유효하다.
accept()메서드가 Socket객체를 리턴하지 않는 한 while문의 루프도 돌아가지않는다.
2013년 8월 21일 수요일
Day_13
<Stringbuffer>
-String 데이터에는 메소드라는 것이 있는데 특정위치의 단어를 빼오거나 문자갯수를 세는것을 말한다.
하지만 String데이터는 문자열의 갯수를 바꾸는 것이 불가능하다.
그래서 String 메소드에 두문장을 합쳐주는것이 있는데 그것은 새로운 String 클래스를 생성해 주는 것이다.
하지만 StringBuffer는 변수자체의 수정이 가능하다.

위에내용을 풀어말하자면...
String 으로 +한값은 AABB가 나올것이다.
하지만 +사용되었을경우는 많은 메모리 소모한다.
이유는 객체와 객체가 합쳐지기 때문이다.
그럼 Stringbuffer는 어떠할까?
String에 + 하는것에 비해 내용은 좀더 길어지지만 객체가 합쳐지는것이 아닌 기존객체에 들어가는것이기 때문에 메모리낭비를 줄일수있고 결과값출력 역시시간이 단축될수있다.
위와같이 String + 와 Stringbuffer 를 한번만 수행하는경우는 메모리의 차이를
느낄수 없지만 여러번 반복해서 값이 나오는경우는 수행속도에 차이를 느낄수있다.
<equals()와 toString()>
-object 클래스는 모든 클래스에 대한 최상위 클래스로
java.lang 패키지에 있는 클래스중에 최상위이다.
object 클래스의 메서드중 equals(),toString() 두개의 메서드에 대해 알아보겠다.
class test{
String name;
int age;
test(String name,int age){
this.name = name;
this.age = age;
}
public static void main(String[] arg){
test a = new test("김철수",20);
test b = new test("김철수",20);
if( a == b )
System.out.println("같다");
else
System.out.println("다르다");
}
}
결과값은 "다르다"가 나온다.
이유는 주소가 다르기 때문이다.
<toString>
-toString 에 해당객체가 가지고 있는 String 을 반환하는 메서드이다.형식은 String toString();을 갖는다.
toString()메서드는 클래스이름과 정보만을 문자열로 넘겨준다.
더 자세한 인스턴스의 정보는 오버라이딩을 사용해서 얻을수 있다.
class test {
String name;
int age;
test(String name, int age) {
this.name = name;
this.age = age; }
public String toString(){
return name+"의 나이는 "+age;
}
System.out.println(a.toString());
public static void main(String args[]){
test a = new test("김철수", 20);
test b = new test("김철수", 20);
String name = "김철수";
if ( a.equals(name))
System.out.println("같다");
else
System.out.println("다르다");
}
}
<equals()>
-객체들 사이의 같은 내용이 있는지 검사하는 메서드로써..equals=>객체사이의 참조형 변수가 참조하는 객체가 포함하고 있는 항목이 같은지를 물어본다.
'=='연산자=>객체사이의 참조형 변수가 가리키고 있는 객체가 같은 객체인지 물어본다.
2013년 8월 19일 월요일
Day_12
<Statement vs PreparedStatement 의 차이점>
1>소스가독성:
SQL문이 복잡할수록 읽기 어렵다 vs 간결하다
2>바이너리 데이터(이미지,음악,동영상등)입력:
불가(base64와 같은 문자열 형식으로 인코딩시 가능) vs 가능
**base64 란?
==>base64인코딩은 바이너리 데이타를 텍스트로 전환시켜주는 방법이다.
처음 만들어진건 SMTP(이메일 프로토콜)에서 이메일에 파일을 첨부 시킬수 있게 할려고 만들었다고 한다.
때때로 암호화 방법으로 사용도 되지만,손쉽게 풀려버릴수 있으므로 중요한 암호의 경우에는 추천하지 않는다.
복호화가 얼마든지 가능하기때문이다.
보통 BASE64를 쓰는 경우에는 XML안에 바이너리 데이터를 저장해야 될때 쓴다.
그냥 바이너리를 넣어버리면 XML문서가 깨지기 때문에 BASE64로 인코딩하여 안전한 텍스트로 만들어서 집어넣는다.
바이너리를 텍스트로 만드는 것이므로 분량이 1.5배정도 증가하며,암복호화 과정을 걸쳐야
되기때문에 성능상의 이슈도 있을수 있다.
거의 모든 사용언어마다 BASE64라이브러리가 제공된다.
3>반복 수행 시 속도:
매번 SQL문을 DBMS 형식에 따라 변환 속도가 느리다 VS 한번만 변환,그리고 실행,속도가빠르다.
<System.getproperty();>
==>jvm내 자바속성 값을 가져오는 함수이다.
-즉,시스템에 맞춰 개행 문자가 자동으로 입력되어 별도의 변환없이 컴파일 될수 있다.
자바에서는 system.getProperty()를 이용하여서,os의 정보등 다양한 값을 알아올수 있다.
OS정보,로그인 사용자,자바의 정보등, 운영체제의 버전,이름등을 알아올수도 있다.
<MySQL 서버연결에 관한 예제>
2013년 8월 16일 금요일
Day_11
<오버로딩(overloading)>
상속과 관계없이, 같은 클래스 안에,동일한 이름의 매서드를 두개 이상 정의가 가능하다.
**특성
1.매서드 이름이 같다.
2.리턴타입은 상관없다.
3.인자리스트는 반드시 최소한 하나이상 달라야 한다.(타입,갯수)
**사용목적
=>해당 클래스 함수의 사용자 편리를 위해서 사용가능하다.
정확하게 일치되지 않는다고 하더라도,근사치의 타입이 호출될 수 있다.
*생성자
매개변수가 있는 생성자를 정의하면 디폴트 생성자는 더이상 자동으로 제공되지 않는다.
호출순서:최상위 클래스-->하위클래스
*소멸자
메모리가 제거될때 가비지 콜렉터가 호출된다.
호출순서:최하위 클래스-->상위클래스
*접근 지정자
privateprivate맴버는 .로 직접 접근할 수 없다.
상속관계에서 하위 클래스가 상위 클래스의 private에 접근할 수 없다.
같은 클래스 내에서만 사용 가능
protected
객체의 이름으로.로 접근할 때는 private,상속관계에서는 public으로 동작한다.
this
맴버 변수와 지역변수를 구별
자신의 생성자를 재사용하기 위해 자신의 생성자를 호출할때 사용한다.
--생성자의 중복을 피하기 위해서 사용된다.
--생성자 내에서 this를 호출하면 this를 이용한 생성자가 먼저 처리된후 현재의 생성자가 처리
<Adapter 패턴>
기존의 클래스를 재사용하려고 하나 인터페이스가 원하는것과 동일하지 않을때서로 관계가 적고 호환되는 인터페이스가 별로 없는 클래스들을 활용해서 새로운 클래스를
생성하려고 할때 Object Adapter는 하위클래스가 여러개 존재해서 모든 하위 클래스들을
상속해야 할 경우 사용하면 Class Adapter보다 유용하다.
(최상위 클래스에 대한 객체 참조 데이터 맴버만 정의하면 되므로..)
<장.단점>
Adaptee 클래스의 하위 클래스에 대해서도 소스코드 변경없이 동작이 가능하다는 점이다.
Adaptee 클래스의 맴버함수를 Override하려면 Adaptee클래스를 상속한 하위클래스를
정의해서 다시 사용해야 한다는 단점이 있다.
2013년 8월 14일 수요일
Day_10
<오버로딩(overloading)>
상속과 관계없이, 같은 클래스 안에,동일한 이름의 매서드를 두개 이상 정의가 가능하다.
**특성
1.매서드 이름이 같다.
2.리턴타입은 상관없다.
3.인자리스트는 반드시 최소한 하나이상 달라야 한다.(타입,갯수)
**사용목적
=>해당 클래스 함수의 사용자 편리를 위해서 사용가능하다.
정확하게 일치되지 않는다고 하더라도,근사치의 타입이 호출될 수 있다.
*생성자
매개변수가 있는 생성자를 정의하면 디폴트 생성자는 더이상 자동으로 제공되지 않는다.
호출순서:최상위 클래스-->하위클래스
*소멸자
메모리가 제거될때 가비지 콜렉터가 호출된다.
호출순서:최하위 클래스-->상위클래스
*접근 지정자
privateprivate맴버는 .로 직접 접근할 수 없다.
상속관계에서 하위 클래스가 상위 클래스의 private에 접근할 수 없다.
같은 클래스 내에서만 사용 가능
protected
객체의 이름으로.로 접근할 때는 private,상속관계에서는 public으로 동작한다.
this
맴버 변수와 지역변수를 구별
자신의 생성자를 재사용하기 위해 자신의 생성자를 호출할때 사용한다.
--생성자의 중복을 피하기 위해서 사용된다.
--생성자 내에서 this를 호출하면 this를 이용한 생성자가 먼저 처리된후 현재의 생성자가 처리

<Adapter 패턴>
기존의 클래스를 재사용하려고 하나 인터페이스가 원하는것과 동일하지 않을때서로 관계가 적고 호환되는 인터페이스가 별로 없는 클래스들을 활용해서 새로운 클래스를
생성하려고 할때 Object Adapter는 하위클래스가 여러개 존재해서 모든 하위 클래스들을
상속해야 할 경우 사용하면 Class Adapter보다 유용하다.
(최상위 클래스에 대한 객체 참조 데이터 맴버만 정의하면 되므로..)
<장.단점>
Adaptee 클래스의 하위 클래스에 대해서도 소스코드 변경없이 동작이 가능하다는 점이다.
Adaptee 클래스의 맴버함수를 Override하려면 Adaptee클래스를 상속한 하위클래스를
정의해서 다시 사용해야 한다는 단점이 있다.
<MySQL Connector Jar File -> 이클립스에 적용>
***위에 파일복사한뒤 원하는 경로에 들어가서 add jar 클릭후 등록한다.

<참조>
**인터페이스(=규칙)EX))동일한방법으로 키보드를 치고있다.
인터페이스가 같다=자동차 바뀌에 휠 나사규격과 같다.
<void와 return의 차이>
http://blog.naver.com/euro87/1201760074162013년 8월 13일 화요일
Day_9
<DBMS란..>
1.DATA 저장,조회,변경,실행 관리 전문 S/W이다.2.DATA OR DATA 사이의 관계관리
=>RDBMS
3.File I/O free
-효율적인 Data 관리 =>체계적인 Database(틀)
-Data 중복제거,결함제거(무결)
**networking 마다 soket, serversocket 이 있다.
=>soket은 IP,ID/PW,protocol등 DBMS 마다 다르다.



*SQL이란?
1.Data 저장할 틀을 정의한다.(DDL)=>(table,view) 생성/삭제/변경
2.Data를 입력/삭제/변경 가능하다.(DML)
3.Data를 조회한다.(DQL)
<MySQL 작성법_chapter1>
피드 구독하기:
글 (Atom)










































