chmod 777 FileName <- "FileName에 누구나 사용가능하게 권한을 준다. rwxrwxrwx "
레코드가 있으면 UPDATE하고 없으면 INSERT해라 였는데,
오라클9i에서 새로 추가된 MERGE INTO 구문을 사용하면
대략 구문은 아래와 같습니다.
pl/sql환경에서는 위와 같이 사용해도 되지만,
sql을 꼭 사용해야한다면 이 방법이 낫겠네요.
[SYNTAX]
MERGE INTO 테이블 A -- update 또는 insert할 테이블
USING (테이블명 | SUBQUERY | 뷰) B -- 비교 대상
ON(A와 B의 조인식) -- 대상테이블과 비교테이블의 조인식
WHEN MATCHED THEN -- on절에서 일치하는 로우가 있다면
UPDATE SET = , , .... -- 업데이트하고,
WHEN NOT MATCHED THEN -- 일치하는 로우가 없다면
INSERT INTO(컬럼명) -- insert를
VALUES(값, 값, ...) -- 이 값으로 넣어라.
f_u1:
merge into tb_result a
using dual b
on ( a.plt_no = '$in_plt_no' and
a.srt_id = '$in_srt_id' )
when matched then
update set srt_qty = srt_qty + to_number('$in_srt_qty'),
fin_chgr_id = '$in_user_id',
fin_chg_dtm = to_char(sysdate, 'yyyymmddhh24miss')
when not matched then
insert ( plt_no , srt_id , proj_no , blk_no ,
sass_no , prcd_sass_no , ptlst_no , pcs_gb ,
stype , srt_qty , uom_wgt , bom_org_cmpo ,
io_gb , req_gb , ptlst_stat , req_ser ,
lug_gb , mpart_plt_no , newprod_qty , reprod_qty ,
imprv_yn , plt_incd_yn , fs_srt_usr_id , fs_srt_dtm ,
fs_inpr_id )
values ( '$in_plt_no' , '$in_srt_id' , '$in_proj_no' , '$in_blk_no' ,
'$in_sass_no', '$in_prcd_sass_no', '$in_ptlst_no' , '$in_pcs_gb' ,
'$in_stype' , to_number('$in_srt_qty'), to_number('$in_uom_wgt'), '$in_bom_org_cmpo',
'$in_io_gb' , '$in_req_gb' , 'C' , to_number('$in_req_ser'),
'$in_lug_gb' , '$in_mpart_plt_no', to_number('$in_new_srt_qty'), to_number('$in_re_srt_qty'),
'N' , 'Y' , '$in_user_id' , to_char(sysdate, 'yyyymmddhh24miss'),
'$in_user_id' )
;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
f_u2:
declare cursor csr1 is
select a.lug_gb as lug_gb ,
a.ptlst_no as lug_type,
'$in_bizcls' as bizcls ,
sum(a.srt_qty) as srt_qty
from tb_result a
where a.plt_no = '$in_plt_no'
group by a.lug_gb, a.ptlst_no
$in_semicolon
begin
for rec1 in csr1 loop
update tb_result
set stk_qty = stk_qty - rec1.srt_qty * decode('$in_out_gb', 'O', 1, -1),
fin_chgr_id = '$in_user_id',
fin_chg_dtm = to_char(sysdate, 'yyyymmddhh24miss')
where lug_gb = rec1.lug_gb
and lug_type = rec1.lug_type
and bizcls = rec1.bizcls
$in_semicolon
if sql%notfound then
insert into tb_stk
( lug_gb ,
lug_type ,
bizcls ,
stk_qty ,
fs_inpr_id )
values ( rec1.lug_gb ,
rec1.lug_type,
rec1.bizcls ,
rec1.srt_qty * decode('$in_out_gb', 'O', -1, 1),
'$in_user_id' )
$in_semicolon
end if $in_semicolon
end loop $in_semicolon
end $in_semicolon
;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
테이터를 넣어야할 테이블에
값이 이미 있으면 Update
값이 없으면 Insert
우편번호 데이터베이스를 갱신하기 위해서 우정사업본부 홈페이지에서
최신 우편번호 정보 엑셀 파일을 다운받아서 필요한 형태로 조정하고
csv 파일로 저장후 sqlldr 을 사용하여 ORACLE 데이터베이스에 있는
테이블에 입력합니다.
1. 데이터파일 내용입니다. 다음과 같은 형태로 만들어 졌습니다.
파일명 : post.dat
680-752,울산,남구,달동,선경아파트,
680-803,울산,남구,달동,,1368~1500
680-805,울산,남구,달동,,1300~1367
680-750,울산,남구,달동,주공아파트 101-307,
2. 컨트롤 파일 입니다.
파일명 : post.ctl
load data
infile post.dat
replace
into table tbl_post
fields terminated by ','
trailing nullcols
( post_zip, post_sido, post_gugun, post_dong, post_apt, post_bunji)
3. 명령입니다.
C:/> sqlldr 아이디/비밀번호@SID control=post.ctl
컨트롤 파일내의 replace 옵션은 기존의 내용을 지우고 바꾸라는 뜻입니다.
추가하는 append 같은 옵션들도 있습니다.
[출처] [oracle] 대량 데이터 입력위해 sqlldr 사용하기|작성자 미니
여러개의 파일을 하나로 모아 압축한 것을 아카이브(ARchive) 라고 한다.
JAR 는 복수의 클래스 파일과 그 밖의 파일을 하나로 모아 압축한 파일 형식이다.
파일들을 모아 압축을 통해 용량을 줄일 수 있기 때문에 데이터를 교환하기에 편리하다.
일반적으로 자바 프로그래밍을 하다보면 jar 파일을 심심찮게 볼 수 있는데,
압축파일이기 때문에 알집 같은 압축,해제 프로그램으로 풀 수 있다.
즉, 다른 의미로 해석하자면, 굳이 jar 커맨드를 이용하지 않아도, 일반 압축 프로그램에서
jar 파일을 생성할 수 있다는 의미이다.
알집의 경우, 압축은 가능한데, 압축을 해제하기 전에 미리보기 하는 기능은 되지 않았다.
○ JAR 커맨드(명령)
JAR 파일은 명령 프롬프트에서 jar 커맨드(명령)를 사용하여 만들어 낼 수 있다.
jar 커맨드는 'jar' 뒤에 다음과 같은 옵션을 붙여서 사용한다.
옵션 : 설명
c : 새 아카이브를 만든다.
t : 아카이브의 내용을 표시한다. //일반적으로 내용을 볼때는 t 옵션만 사용하지 않고, tf 옵션으로 한다.
x : 아카이브에서 파일을 추출한다.
u : 기존의 아카이브를 업데이트 한다.
v : 명령 프롬프트에상세정보를 표시한다.
f : 아카이브 파일 이름을 지정한다.
m : manifest 정보를 포함시킨다.
o : 저장만 수행하며 ZIP 압축을 사용하지 않는다.
M : manifest 파일을 만들지 않는다.
i : 지정된 jar 파일에 대한 색인 정보를 생성한다.
C : 지정된 디렉토리로 변경하고, 다음 파일을 포함시킨다.
jar 옵션에 대한 사용법을 다시 살펴보면
--------------------------------------------------
사용법: jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C dir] files ...
옵션:
-c 새 아카이브를 만듭니다.
-t 아카이브에 대한 목차를 나열합니다.
-x 아카이브에서 명명된 (또는 모든) 파일을 추출합니다.
-u 기존의 아카이브를 업데이트합니다.
-v 표준 출력에 대한 자세한 정보 출력을 생성합니다.
-f 아카이브 파일 이름을 지정합니다.
-m 지정된 manifest 파일에서 manifest 정보를 포함시킵니다.
-0 저장만 수행하며 ZIP 압축을 사용하지 않습니다.
-M 입력 항목에 대한 manifest 파일을 만들지 않습니다.
-i 지정된 jar 파일에 대한 색인 정보를 생성합니다.
-C 지정된 디렉토리로 변경하고 다음 파일을 포함시킵니다.
디렉토리인 파일이 하나ㅏ도 있으면 재귀적으로 처리됩니다.
'm' 및 'f' 플래그가 지정된 순서대로 manifest 파일 이름과 아카이브 파일 이름을 지정해야 합니다.
예 1: classes.jar 라는 아카이브 파일에 두 클래스 파일을 아카이브하려면
jar cvf classes.jar Foo.class Bar.class
dP 2: 기존의 manifest 파일 'mymanifest' 를 사용하고 foo/ 디렉토리에 있는
모든 파일을 'classes.jar' 로 아카이브합니다.
jar cvfm classes.jar mymanifest -C foo/ .
--------------------------------------------------
책에서는 o 옵션이 애매하게 표시되어 있는데,
명령 프롬프트 상에서 설명해주는 명령어는 영어 o 소문자가 아니라 숫자 0 이다.
압축을 해제하지 않은 상태에서 바로 실행할 수 있는 JAR 파일을 작성하려면 다음과 같이 기술한다.
(Hello.java)----------------------
class Hello{
void hello(){
System.out.println("Hello");
}
}
----------------------------------
(Bye.java)------------------------
class Bye{
void bye(){
System.out.println("Bye");
}
}
----------------------------------
(a.java)--------------------------
class a{
public static void main(String [] args){
Hello h = new Hello();
Bye b = new Bye();
h.hello();
b.bye();
}
}
----------------------------------
이렇게 소스를 작성한뒤 컴파일을 한다.
실행할 클래스명을 기술한 manifest.txt 라는 이름의 매니페스트 파일을 만든다.
Main-class: a
그런다음, JAR 파일에 매니페스트 파일을 포함하여 클래스 파일을 저장한다.
>jar cfm G.jar manifest.txt Hello.class Bye.class a.class
여기서, cfm 옵션은 지정한 파일이름(f)으로 새로 생성(c)하면서 매니페스트 파일을 포함(m)하는 것이다.
Jar 파일을 실행할때는 -jar 을 이용하는데, 아래와 같이 기술하면 된다.
-------------------
>java -jar G.jar
Hello
Bye
-------------------
즉, jar 파일로 압축하면서 매니페스트파일에 어떤 클래스를 시작클래스로 할것인지 지정하였기 때문에,
a.class 가 시작되며, a.class 에서는 마치 패키지에서 다른 클래스들을 포함시켜서 사용하듯이,
Hello.class 와 Bye.class 의 클래스들을 불러와써 쓸 수 있는 것이다.
"영화 미인도 관람 후 인근 호프집에서 가볍게 생맥주 한잔을 마시면서 직원들과 이런저런 이야기를 나눴다"
울산시 공무원들은 술자리 대신 문화.스포츠레저형 회식을 선호하는 추세로 회식문화 풍속도가 변모하고 있다.
울산시 공무원들이 올 한 해 동안 가진 문화회식 등은 총 90회(2045명 참석)로서 문화공연 관람 32회, 등산 22회, 스포츠 20회, 영화 16회로 나타났다.
문화공연의 경우 건축주택과 가족음악회 등 6회, 도시계획과 남해찬가 등 5회, 기획관실 뮤지컬 태화강 관람 등 4회, 도시개발과 행복콘서트 등 3회로 문화회식에 활발히 참여했다.
국제협력과, 농축산과, 회계과, 환경정책과, 보건위생과, 문화예술과, 중구청(지방세과 등 3개과) 등 22개 부서는 등산을 통해 부서 결속을 다졌다.
스포츠 회식도 20회로 적지 않다.
도시계획과(2회), 경제정책과, 계약심사과, 문화예술과, 체육지원과, 북구청(총무과 등 4개과) 등 19개 부서는 축구.족구.볼링.트레킹 등을 통해 체력을 다지고 스트레스를 해소했다.
정보화담당관실, 문화예술과, 동구청(지역경제과 등 8개과) 등 16개 부서는 미인도, 신기전 등 영화관람했다.
시 관계자는 "지금까지 공무원 회식은 1차 고기집, 2차 노래방 등 음주가무로 스트레스를 푸는 형식이었다"며 "각종 공연, 영화프로그램 등 정보 제공 등을 통해 공직사회에 건전한 회식문화를 확산, 정착시킬 계획"이라고 밝혔다.
한편 시가 올 6월 직원을 대상으로 회식문화에 대한 설문조사 결과, 음주회식이 전체 회식의 86%를 차지했으며, 이에 대해 90%의 직원이 불만족했다.
가장 선호하는 회식문화로는 스포츠관람.볼링.등산 등 스포츠레저형 회식 31%, 공연.영화관람 등 문화형 회식 31%, 미식가 회식 27%, 음주가무형 회식 8% 등 순으로 파악됐다.
을 개관한다고 11일 밝혔다.
부산진구 부전동 부산글로벌 빌리지 행정도 5층에 있는 이 도서관은 1043㎡의 면적에 연령대별 열람실과 유아 공부방, 프로그램 개발실, 토론학습실, 멀티미디어실, 다목적 홀 등으로 꾸며진다. 열람실에는 개관일을 기준으로 원서관 참고서 등 2만2169권의 도서 외에도 DVD와 CD 등 각종 교육자료가 비치된다.
도서관 측은 여말까지 책 5000권을 추가로 사들일 계획이다.
또 도서관은 영어 읽기능력과 이해도를 진단하는 프로그램을 마련하는 한편 원어민 영어보조교사 초청강의와 학년별 상설 체험 프로그램도 운영하기로 했다.
이 도서관은 오전9시부터 저녁 9시까지 무료로 운영된다.
Hugh Jackman and Daniel Craig to appear
on Broadway together
May 29, 2009 12:00am
TWO of Hollywood's favourite leading men are teaming up on stage, with Daniel Craig and Hugh Jackman set to star together on Broadway.
The Quantum of Solace actor and X-Men star – who won a prestigious Tony theatre award for his appearance in The Boy From Oz – will play Chicago police officers in A Steady Rain.
The production – which won several awards when it was staged in Chicago two years ago - sees the two men called to a domestic dispute, which results in the accidental death of a young boy and subsequently puts their close friendship through a tough test.
Craig will be making his Broadway debut in the play – which is being made by his James Bond producer Barbara Broccoli – when it arrives in the New York theatre district this autumn.
Meanwhile, Jackman has revealed boxing is his favourite way to work out.
The 40-year-old Australian hunk claims the combat sport has had unexpected benefits for his career.
He joked: "I want to work it. I love it - it's good for the eye. For my job, it helps. When other actors aren't doing what you want them to, you can punch them out!"
The actor has even threatened to try out his skills on Unbound Captives co-star Robert Pattinson, if the young actor fails to see the funny side of their respective heartthrob statuses.
Jackman – who was voted People’s Sexiest Man Alive in 2008 - added: “He'll laugh it all off. And if he doesn't I'll slap him around a little bit."
오라클 속도가 특정시간대에 느려집니다.
----------------------------------------------------------
그럼 그시간대에 특별히 실행되는 SQL문장은 확인 해 보셨나요?
----------------------------------------------------------
Active session 이 수행하고 있는 SQL statement를 확인하는 방법은 다음과
같습니다. 즉, v$session 에서 status 가 active 인 session 에 대한
sql 문만 확인할 수 있습니다.
sqlplus system/manager 로 현재 상황에 따라 다음 query 를 수행합니다.
1) session id 와 session serial# 를 알고 있을 때, SQL statement 를
조회합니다.
(x 대신 sid number, serial number 를 입력)
select s.username username,s.osuser,s.program,a.sql_text SQL
from v$sqltext a, v$session s
where s.sid = 11 and s.serial# = 9
and a.address = s.sql_address and a.hash_value = s.sql_hash_value;
------------------------------------------------------------
아님 그시간대에 Blocking이 일어나고 있는건지는 확인 하셨구요?
새션이 실행하는 SQL이나 데드락도 조회 해 보셔야 할 것 같군요...
------------------------------------------------------------
Lock이 걸린 session과 SQL문확인
select s.sid as sid,s.serial# as serial#,s.username as username,s.logon_time as logon_time,s.machine as machine,
decode(l.type,'MR','Media Recovery',
'RT','Redo Thread',
'UN','User Name',
'TX','Transaction',
'TM','DML',
'UL','P/L SQL User Block',
'DX','Distrbuted Xaction',
'CF','Control File',
'IS','Instance State',
'FS','File Set',
'IR','Instance Recovery',
'ST','Disk Space Transaction',
'TS','Temp Segment',
'IV','Library Cache Invalidation',
'LS','Log State or Switch',
'RW','Row Wait',
'TE','Extend Table',
'Tt','Temp Table','모름') as lock_type,
decode(l.lmode,0,'None',
1,'Null',
2,'Row-S(SS)',
3,'Row-X(SX)',
4,'Share',
5,'S/Row-X(SSX)',
6,'Exclusive','모름') as lock_mode,
decode(l.request,0,'None',
1,'Null',
2,'Row-S(SS)',
3,'Row-X(SX)',
4,'Share',
5,'S/Row-X(SSX)',
6,'Exclusive','모름') as request,
s.status as status,s.program as program,s.osuser as osuser,q.sql_text as sql_text
from v$session s, v$lock l, v$sql q
where l.sid = s.sid
and s.sql_address = q.address
and s.sql_hash_value = q.hash_value
order by s.sid;
-------------------------------------------------
또 세션이 사용하는 메모리도 한번 조회해 보시구요...
-------------------------------------------------
//total memory for all session
select sum(VALUE)||' bytes'
from v$sesstat, v$statname
where name = 'session memory'
and v$sesstat.statistic# = v$statname.statistic#;
//total maximum memory for all session
select sum(VALUE)||' bytes'
from v$sesstat, v$statname
where name = 'max session memory'
and v$sesstat.statistic# = v$statname.statistic#;
------------------------------------
또는 세션별 IO는 확인해 보셨나요
------------------------------------
V$session과 V$sess_io라는 View를 Join하면 session별로
발생하는 I/O를 확인 할 수있다.
select s.sid as sid,s.username as username,s.machine as machine,s.osuser as osuser,
s.status as status,block_gets,consistent_gets,physical_reads,block_changes,consistent_changes
from v$session s, v$sess_io i
where s.sid = i.sid
order by i.sid"
--------------------------
Disk IO는 확인 해 보셨나요..
---------------------------
--
-- diskio.sql
--
set echo off
set feedback off
set verify off
set pagesize 66
ttitle 'Disk I/O per Disk Files'
column name heading 'Name' format a48
column phyrds heading 'Physical Reads' format 99,999,990
column phywrts heading 'Physical Writes' format 99,999,990
spool diskio
select name, phyrds, phywrts
from v$datafile df, v$filestat fs
where df.file# = fs.file#
/
spool off
set feedback on
set verify on
exit
Name Physical Reads Physical Writes
------------------------------------------------ -------------- ---------------
/opt/oracle7/dbs/systKOR7.dbf 787 143
/opt/oracle7/dbs/rbsKOR7.dbf 29 7,121
/opt/oracle7/dbs/tempKOR7.dbf 0 128
/opt/oracle7/dbs/toolKOR7.dbf 0 0
/opt/oracle7/dbs/usrKOR7.dbf 0 0
/dev/rdsk/hd0202 90,758 17,316
/dev/rdsk/hd0201 0 0
아니면 네트워크 문제로 그럴 수 있으니 충분히 검토해 보시기 바랍니다...
특정 컴퓨터에서 하나의 TCP 포트를 열어두고, 그곳으로 요청을 받았을 때 사용하는
클래스이다.
TCP 포트는 1~65,535 번의 포트를 사용하고,
이중 1~1023 은 시스템 서비스용으로 약속된 포트이므로, 이후의 번호들을 사용하는 것이 좋다.
java.lang.Object
┗ java.net.ServerSocket
1. constructs(생성자)
ServerSocket()
-. 바인딩되지 않은 서버 소켓
ServerSocket(int port)
-. 특정 포트에 바인딩된 서버 소켓
ServerSocket(int port, int backlog)
-. 특정 포트에 바인딩되고 클라이언트 연결의 개수를 관리하는 서버 소켓
2. Methods
Socket accept()
-. 바인딩된 포트로부터 소켓 정보 얻기
void close()
-. 서버 소켓 닫기
InetAddress getInetAddress()
-. 바인딩된 서버의 InetAddress
int getLocalPort()
-. 바인딩된 서버의 포트
int getReceiveBufferSize()
-. 데이터 수신 버퍼의 크기
int getSoTimeout()
-. 연결 대기 시간
boolean isBound()
-. 바인딩되었는지 확인
boolean isClosed()
-. 서버 소켓이 닫혔는지 확인
void setReceiveBufferSize(int a)
-. 데이터 수신 버퍼 크기 설정
void setSoTimeout()
-. 연결 대기 시간 설정
String toString()
-. toString() 값 얻기
ex)
import java.io.*;
import java.net.*;
public class Ex07 {
public static void main(String[] ar){
ServerSocket ss = null;
Socket soc = null;
try{
ss = new ServerSocket(12345);
System.out.println("Server Ready...");
}catch(IOException ie){
System.err.println("해당 포트가 열려 있습니다.");
System.exit(-1);
}
try{
soc = ss.accept(); //클라이언트로부터 들어오는 정보를 기다리는 메서드
System.out.println("접속자 정보 : "+soc.toString());
InputStreamReader isr = new InputStreamReader(soc.getInputStream());
//연결된 소켓을 통해 InputStream 의 객체를 생성한다.
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();
//버퍼에서 전송된 내용을 읽어들인다.
System.out.println("전송된 내용 : "+str);
}catch(IOException ioe){}
}
}
[출처] ServerSocket 클래스|작성자 네오랑
Unix의 기본 파일시스템
- dev
모든 디바이스 파일이 들어있다.
- home
이 디렉토리는 모든 사요 ㅇ자의 계정이 생성되는 곳이다.
리눅스는 동시에 같은 컴퓨터를 여러사람이 서로에게 영향을 주지 않고 이용할 수 있는 기능을 제공한다..
새로운 사용자는 다음 명령으로 만들 수 있다. adduser [사용자 이름]
- lost+found
하드디스크가 문제가 있으면 시스템은 자동으로 복구작업을 진행하게 되는데 복구작업이 오류를 발생시킨 블럭의 원래 위치가 어디였는지를 발견하지 못하면 이 디렉토리 밑으로 옮겨지게 된다.
- root
관리자가 작업하는 디렉토리 보통 사용자의 home디렉토리와 같다.
- var
시스템 메시지나 사용자의 편지, 프린터작업등 수많은 임시파일들이 보관된다.
- bin
여기에는 매우 주용한 시스템 명령어들이 들어있다.
- dosc
여러분의 컴퓨터에서는 이름이 이와 다를수 있다. 이곳은 당신의 컴퓨터에 윈도우즈나 도스파티션을 가지고 있다면 그 파티션을 접급할 수 있도록 해준다.
- mnt
만약 여러분이 CD를 사용하고 싶을때 "마운틴"이라 불리우는 작업을 해야 하는데 그때 사용되는 디렉토리이다. /mnt디렉토리를 통하여 CD를 사용하려면
mount -t iso9660 /dev/cdrom /mnt명령을 내려야 한다.
이 명령은 여러분의 시스템 설정에 따라 약간 다를수도 있다.
- sbin
발전된 시스템 관리 명령어들이 들어있다. 보안상의 이유로 이 디렉토리는 관리자이외에 다른 일반 사용자는 접근하거나 실행할 수 없다.
- boot
시스템 커널에 예약되어 있는 영판에는역이다. 몇몇 배포판에서는 /디렉토리에 커널을 설치하도록 선택할 수도 있다.
- etc
여기에는 많은 설정파일들이 들어있다. 이 파일들은 시스템이 부팅될 때나 윈도우시스템 설정을 담당한다.(Config.sys나 Autoexec.bat파일과 같은 역할)
- tmp
프로그램들은 임시로 만들거나 필요없는 파일들을 여기에 둔다. 보통 시스템은 부팅될 때 이곳에 있는 파일들을 자동으로 지운다.
- lib
시스템의 기본 라이브러리 디렉토리이다. 리눅스는 많은 프로그램에서 공유하는 코드들을 파일로 둠으로써 메모리를 절약하는 시스템이다. 이러한 파일들을 라이브러리라 부른다. 만약 사용 되어지는 라이브러리는 그 복사본 하나를 이 디렉토리에 둔다.
- proc
이 디렉토리는 메로리상의 프로그램들을 그대로 옮겨가진다.(미러링을 한다)
ps, top 또는 kill과 같은 명령어들을 이용하면 여러분의 컴퓨터에 실행되고 있는 프로그램들을 살펴볼 수도 있으며 (멈춰진것이라 생가되는) 프로그램들은 그 실행을 중단시킬 수도 있는데 그때 사용된다. 프로그램 창에서 벌어지는 일이 시스템을 다시 시작해야만 되는 상황을 피하고 다른 프로그램에 의해 만들어 진 것이 손실되지 않게 한다.
- user
여기엔 여러분의 응용프로그램이나 문서, 라이브러리들이 들어있다.

Prev
Rss Feed