참조에 의한 객체 복사 

  let user1 = {
    name : '홍길동'
  }
  
  let user2 = user1;

  user1.name = '강감찬';

  console.log(user1.name);	// 강감찬
  console.log(user2.name);	// 강감찬

 

javscript는 객체가 할당될 때 참조 값에 의해 복사가 됩니다. 
메모리에 name이라는 프로퍼티가 생성이 되고 각 객체는 메모리에 위치하는 주소 값(참조값)을 할당받게 됩니다.
user1이나, user2는 같은 name주소를 가르키고 있어서 한쪽 객체에서 변경을 시도하면 다른 객체에서도 변경된 값을 보게 됩니다. 

 

독립적인 객체 복제 Object.assign()

  let user1 = {
    name : '홍길동',
	info : {
	  addr : '서울',
	  age : 20
	}
  }
  let user2 = {}

  Object.assign(user2, user1);
  user1.name='강감찬';
  user1.info.addr='부산';

  console.log(user1.name);	// 강감찬
  console.log(user1.info.addr);	// 부산

  console.log(user2.name);	// 홍길동
  console.log(user2.info.addr);	// 부산

Object.assign을 이용해 객체를 독립적으로 복사가 가능합니다. 
하지만 객체안에 다른 객체가 있다고 하면 그 객체는 주소 값을 참조하기 때문에 주의를 해야 합니다. 

중첩 객체를 복사하기 위해서는 직접 코드를 작성하는 방법도 있겠지만 lodash라이브러리를 이용한 _.cloneDeep(obj)를 활용하는게 빠르고 편리합니다. 


let target = _.cloneDeep(obj);

javascript 객체 생성

	// 객체 생성자 
	let user = new Object();
	// 객체 리터널 
	let user = {};

javascript 객체는 new Object 생성자 또는 {} 중괄호를 통해 만들 수 있다. 
key와 value를 쌍을 가지로 있는 프로퍼티로 구성되어 있고, 이 프로퍼티는 추가, 수정, 삭제, 조회 등이 가능합니다. 

 

프로퍼티 추가 

let user = {
	name : '홍길동',
	age : 20
}
user.tel = '111-2222';

프로퍼티 추가 방법 생성된 인스턴스에 .을 이용해 추가 가능합니다.

 

프로퍼티 수정

let user = {
	name : '홍길동',
	age : 20
}
user.tel = '111-2222-3333';

프로퍼티 수정 방법 생성된 인스턴스에 .을 이용해 추가 가능합니다.

 

프로퍼티 조회

let user = {
	name : '홍길동',
	age : 20
}
console.log(user.name);

프로퍼티 조회 방법 생성된 인스턴스에 .을 이용해 추가 가능합니다.

 

프로퍼티 삭제

let user = {
	name : '홍길동',
	age : 20
}
delete user.tel;

프로퍼티 삭제 방법 delete키워드를 이용해 프로퍼티를 삭제 가능합니다. 

변수 선언 방법

var name = '홍길동';
let name = '홍길동';
const name = '홍길동';

자바스크립트 변수에는 자료형은 따로 선언은 없습니다. 

입력된 데이터에 따라 문자, 숫자가 될 수 있습니다. 

 

var

let과 거의 비슷하지만 var에는 블록 스코프가 따로 없기 때문에 요즘에는 잘 사용하지 않습니다.

 

let

변수를 선언시 사용하는 키워드입니다. 

 

const

상수(변하지 않는 값)를 선언시 사용하는 키워드입니다.

httpd-vhosts.conf 파일 수정

vi /home/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
	생략 .. 
    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{HTTPS} off
       RewriteCond %{REMOTE_ADDR}  !127.0.0.1
       RewriteCond %{REQUEST_URI} !^/intro.html$ [NC]
       RewriteRule .* /intro.html [R,L]
    </IfModule>
	생략 .. 
</VirtualHost>

http://www.test.co.kr/page/1.jsp 

 

REMOTE_ADDR : 클라이언트 접속 아이피 

REQUEST_URI : page/1.jsp

 

 

 

1. Vue.js 설치방법

vue.js를 사용하기 위해서는 2가지 방법 사용자 pc에 소스를 직접 내려받아서 적용하는 방법과 CDN주소를 이용해 적용시키는 설치 방법에 대해 알아보겠습니다.

 

설치를 위해서는 공식 사이트(kr.vuejs.org)를 이용해 다운로드를 받습니다.

해당 사이트에 들어가는 다운로드가 개발 버전, 프로덕션 버전 2가지가 있습니다. 개발기간에는 개발 버전을 이용해 작업을 해고, 배포 시에는 프로덕션 버전을 사용하시면 되겠습니다.

 

다운로드 경로에 가시면 아래와 같은 내용으로 적용을 시키면 되겠습니다.

2. Vue.js 직접 다운로드

vue.js 다운로드

 

3. Vue.js CDN 주소 활용

vue.js CDN 주소

 

 

 

 

 

 

1. 오라클(Oracle) LOCK 조회 및 해제

평소에는 아무런 문제가 없이 사용이 되다가 특정 기능을 실행 시킬때 처리가 안되고 지연되는 현상이 간혹 발생할 때 가 있습니다.

 

전체적으로 문제가 생긴게 아니라 특정 기능에 대해서 일시적으로 생긴 문제라 생각을 할 수 있겠지만, 혹시 DB 테이블에 LOCK이 걸려 있는게 있나 확인을 하는게 좋습니다.

 

LOCK이 걸린 테이블은 SELECT 조회는 가능합니다. 다만, insert,update,delete과정에서 처리가 안되고 있는거를 볼 수 있습니다.

 

LOCK을 확인을 하기 위해서는 일반 계정으로 오라클에 접속시는 확인이 불가합니다.

 

SYSTEM계정으로 접속 후 확인 및 해제를 하셔야 합니다.

 

2. LOCK 걸린 테이블 확인

select * from v$locked_object

간단한 LOCK이 있는 테이블이 있는지 확인

 

 

SELECT 
	T2.SID, 
	T2.SERIAL#, 
	T2.USERNAME, 
	T2.SADDR, 
	T2.OSUSER, 
	T2.PROGRAM, 
	T3.SQL_TEXT 
FROM 
	V$LOCKED_OBJECT T1 
	LEFT JOIN V$SESSION T2 ON T2.SID = T1.SESSION_ID 
   	LEFT JOIN V$SQLTEXT T3 ON T3.ADDRESS = T2.SADDR 
ORDER BY T2.SID

상세정보를 보기 위해서는 위에 쿼리를 조회 하시면 LOCK이 걸린 테이블 및 쿼리가 나옵니다.

정보를 확인을 하시고 해제를 시켜주면 되겠습니다.

 

3. LOCK 걸린 세션 해제

alter system kill session 'SID, SERIAL#';

LOCK이 걸려있는 세션 SID와 SERIAL값으로 해제를 합니다.

1. MySQL 검색 결과 행 번호 매기기(ROWNUM)

MySQL은 oracle과 다르게 검색 결과에 행 번호를 넣는 방법이 다릅니다. 

oracle은 ROWNUM을 통해서 검색된 결과에 자동적으로 순번이 들어가는데 MySQL은 그렇지 않습니다. 

그래서 행번호를 적용하는 방법이 아래와 같습니다. 

 

SELECT 
  @rownum:=@rownum+1  rnum, A.* 
FROM 
  TEST_TABLE A, 
  (SELECT @ROWNUM := 0) R
WHERE 
  1=1

 

2. MySQL 페이징

검색결과에 행 번호를 추가를 했으면 페이징을 하는 방법입니다. 

SELECT *
FROM
(
  SELECT 
      @rownum:=@rownum+1  rnum, 
      A.* 
  FROM 
      TEST_TABLE A, 
      (SELECT @ROWNUM := 0) R
  WHERE 
      1=1
) list
WHERE rnum >= 1 AND rnum <=10 

 

1. MySQL 사용자 추가 

create user '사용자'@'IP' identified by '비밀번호';

사용자 : 사용자 아이디 입력

IP : 사용자가 접속될 IP 입력 예) localhost(로컬 접속), 1.2.3.4(1,2,3,4 IP만 허용), 1.2.3.%(1,2,3 번대 IP 허용), %(모든 IP 허용)

비밀번호 : 사용자 비밀번호 입력 

#db 접속 
mysql -u root -p

#db 사용자 추가 
create user 'test1'@'localhost' identified by 'pass1';
create user 'test2'@'1.2.3.%' identified by 'pass2';
create user 'test3'@'%' identified by 'pass3';

 

2. 등록된 사용자에게 권한 추가

grant all privileges on DB이름.Table이름 to '사용자'@'IP';

grant all privileges on DB이름.to '사용자'@'IP'; -- DB에 대한 전체 테이블에 해당하는 권한을 추가시 

grant all privileges on *.* to '사용자'@'IP'; -- 전체 DB, 테이블에 해당하는 권한을 추가시 

#db 사용자 추가 
create user 'test1'@'localhost' identified by 'pass1';
create user 'test2'@'1.2.3.%' identified by 'pass2';
create user 'test3'@'%' identified by 'pass3';

#db 사용자 전체권한 추가 
grant all privileges on DB이름.Table이름 to 'test1'@'localhost';
grant all privileges on DB이름.* to 'test2'@'1.2.3.%'; -- DB에 대한 전체 테이블에 해당하는 권한을 추가시 
grant all privileges on *.* to 'test3'@'%'; -- 전체 DB, 테이블에 해당하는 권한을 추가시

 

권한에 대한 상세한 내용 : https://jang2r.tistory.com/41?category=794926

 

3. MySQL 사용자 삭제

drop user '사용자'@'localhost';

#db 사용자 삭제 
drop user 'test1'@'pass1';

 

+ Recent posts