DDL 제약조건

데이터베이스는 제약 조건을 사용하여 데이터를 일관성 없는 조작으로부터 보호합니다.

제약조건 유형

NOT NULL

열에 NULL값을 허용하지 않음

UNIQUE

열 혹은 열 조합은 유일해야함.

PRIMARY KEY

유일해야하고, NULL값을 허용하지 않음.

FOREIGN KEY

자신 또는 다른 테이블의 열 또는 열 조합을 참조하도록 하여 관계 설정.

CHECK

열 또는 열 조합이 조건에 참인 값만 허용

[백업글]리눅스 유저 삭제

유저 생성엔 useradd 혹은 adduser를 사용하면 된다했고,

생성된 유저의 비밀번호 변경에는 passwd를 사용하면 된다고 했다.

하지만 어떠한 경우에 의해서 계정을 삭제해야 할 때가 있는데,

이럴 땐 userdel 명령어를 사용하면 삭제할 수 있다.

사용법은

userdel 사용자명

userdel [-옵션]  사용자명

즉,

홈 디렉토리같은걸 같이 한번에 삭제하고 싶을 땐

userdel -r 사용자명

자신의 소유가 아닌 것이라도 삭제하고 싶을 땐

userdel -r -f 사용자명

이런식으로 사용 가능하다.

SELinux에 매핑된 유저를 삭제할 땐 -Z 옵션을 붙여주면 된다.

[백업글]리눅스 사용자 패스워드 변경

사용자 추가에는 useradd 혹은 adduser가 있는데,

가끔 추가해 준 유저의 비밀번호를 변경해야 할 때가 있거나,

useradd의 경우 adduser과는 다르게 생성과 동시에 비밀번호 설정이 되지 않아 따로 설정해줘야 한다. (혹은 생성할때 파라미터로 설정하면 될 듯 하다.)

이럴 때 사용하는 명령어는 바로 passwd이다.

(혹은 root의 비밀번호를 모른다거나 해서 sudo로 root의 비밀번호를 바꾸는것도 가능하다!!)

 

사용방법

passwd 계정명

하고 엔터 시

새로운 UNIX 비밀번호 입력: 이라 뜨며, 다시 입력시 비밀번호 변경이 완료된다.

 

[백업글]adduser와 useradd의 차이

우선 눈에 보이는 차이는 홈 디렉토리 생성 여부이다.

useradd는 생성해주지 않고, adduser는 생성해준다.

 

즉, 하나하나 설정을 통해 추가해주고 싶다면 useradd를,

아니면 기본 설정을 통해 계정을 추가하고 싶다면 adduser를 사용하면 된다.

(adduser로도 설정이 가능하다!)

 

adduser의 설정 파일은 /etc/adduser.conf에 있는데, 읽기전용으로 되어있다.

[백업글]UFW 간단한 사용법

ufw status

현재 ufw에 등록 된 설정들 보여줌

ufw allow 포트번호(/udp or /tcp)

해당 포트번호 열기 (아마 지정 안해준다면 udp/tcp 둘 다 열듯)

ufw allow 포트번호1:포트번호2/udp or tcp

포트번호1부터 포트번호2까지 열기(이건 tcp 혹은 udp 지정해줘야함!!)

ufw enable

ufw 작동시작

MariaDB Unix-socket plugin not loaded 문제 해결

우선 데몬으로 돌아가고 있는 mariadb를 멈춰야 한다.

sudo service mariadb stop

그 후, –skip-grant-tables 옵션을 사용하여 인증과정을 우회한다. (로그인이 불가능하니까..)

sudo mysqld_safe --skip-grant-tables &

그 후 mariadb에 접속해본다.

mysql -u root

 

그 다음 쿼리문으로 플러그인 상태를 확인 해 본다.

select host, user, plugin from mysql.user where user='root';

그러면 plugin이 unix_socket으로 되어있는 것을 확인할 수 있다.

 

쿼리문으로 plugin을 다른 것으로 변경 해 주어야 한다.

update mysql.user set plugin = 'mysql_native_password'; 
 
flush privileges; 
quit;

 

플러그인을 mysql native로 변경했으니 safe모드로 켜진 mariadb를 종료하고 정상적으로 시작하여 확인해본다.

sudo kill -9 $(pgrep mysql) 
sudo service mariadb start

카메라 컨트롤러 소스

요번 카메라관련 소스에는 굉장히 유용한 함수와 기법들이 들어가있다.

카메라가 플레이어를 쫒아다니는 형식으로, 다른 곳에서도 유용하게 사용할 수 있을 것 같다.

using UnityEngine; 
using System.Collections; 
 
public class CameraPoint : MonoBehaviour { 
    public float xMargin = 1f; //X축을 캐릭터가 카메라 내부에서 이동할 수 있는 범위 
    public float yMargin = 1f; //Y축을 캐릭터가 카메라 내부에서 이동할 수 있는 범위 
 
    public float xSmooth = 2f; //카메라 X축 이동속도 
    public float ySmooth = 2f; //카메라 Y축 이동속도 
    public float maxY = 5; //Y축이 이동할 수 있는 최대값 
    public float minY = -5; //Y축이 이동할 수 있는 최소값 
 
    private float targetX; 
    private float targetY; 
 
    private Transform player; //카메라 조준 오브젝트 
 
  // Use this for initialization 
  void Start () { 
   
  } 
   
  // Update is called once per frame 
  void Update () { 
   
  } 
 
    void Awake() 
    { 
        //하이어라키뷰의 CameraPoint 오브젝트를 찾아 player에 연결한다. 
        player = GameObject.Find("CameraPoint").transform; 
    } 
     
    void FixedUpdate() 
    { 
        TrackPlayer(); 
    } 
     
    bool CheckXMargin() 
    { 
        return Mathf.Abs(transform.position.x - player.position.x) > xMargin; 
    } 
 
    bool CheckYMargin() 
    { 
        return Mathf.Abs(transform.position.y - player.position.y) > yMargin; 
    } 
 
    void TrackPlayer() 
    { 
        //카메라 위치값 X, Y변수에 연결 
        targetX = transform.position.x; 
        targetY = transform.position.y; 
 
        //캐릭터가 카메라의 X값을 벗어나면 targetX의 수치를 
        //캐릭터 위치로 부드럽게 이동시킨다. 
        if(CheckXMargin()) 
        { 
            //선형 보간함수 
            //일정하게 쪼개서 점진적으로 변화시킴 
            //사용방법 
            //Mathf.Lerp(시작값, 끝값, 변화값) 
            targetX = Mathf.Lerp(transform.position.x, player.position.x, xSmooth * Time.deltaTime); 
 
        } 
        //플레이어가 카메라의 Y값을 벗어나면 
        //targetY의 수치를 캐릭터 위치로 부드럽게 이동시킨다 
        if(CheckYMargin()) 
        { 
            targetY = Mathf.Lerp(transform.position.y, player.position.y, ySmooth * Time.deltaTime); 
        } 
         
        //카메라가 이동할 수 있는 Y값 범위 
        //최소 최대치 고정 
        //최소, 최대치를 넘어가지 않도록 고정하는 함수 
        //사용방법 
        //Mathf.Clamp(value, 최소값, 최대값) 
        //value가 최소보다 작으면 최소값 리턴 
        //최대보다 크면 최대값 리턴 
        targetY = Mathf.Clamp(targetY, minY, maxY); 
 
        //카메라의 이동 
        transform.position = new Vector3(targetX, targetY, transform.position.z); 
    } 
} 

 

어도비 프리미어 사운드 싱크 문제

kakaotalk_20161121_123850938

분명히 영상엔 문제가 없는데 프리미어에 때려넣으면 사운드 싱크가 안 맞는 때가 있다.

그거때문에 몇 번이나 프로젝트를 새로 만들기도 했는데, 답은 의외로 간단했다!!

 

문제되는 영상을 팟인코더로 그대로 인코딩 새로 해주면 문제없이 제대로 작동한다!!

JSP Post방식에서 한글 깨짐 방지

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
  <% 
    request.setCharacterEncoding("UTF-8"); 
  %> 
  이름 : <%=request.getParameter("name")%> 
</body> 
</html>

받는 쪽에서 UTF-8로 캐릭터셋을 인코딩해주면 된다.