Tag Archives: 공통

ORM(JPA,Hibernate)의 미세 권한 제어 1

라고 하면 뭔지 알아듣기 힘들겠지?

일반적으로 spring security와 같은 권한프레임워크의 권한관리는 주소패턴을 따른다.
조금 변경한다고 해도 컨트롤러 서비스별로 권한을 처리한다.

하지만 가끔.. 특정 데이터에 대해서는 이런게 필요한 경우가 있다.
각 테이블별 권한제어
또는 각 테이블의 row당 접근권한 제어..

ORM interceptor를 이용해서 이 부분을 처리할 수 있지 않을까 싶다.

현재 이정도 코드로 하면 되지 않을까 생각하고 있다.
다른 한개의 테이블에 권한을 설정해놓고 다른 테이블의 데이터에 대한 권한을 관리할 수 있다.

데이터가 늘어남에 따라 이 테이블도 비대해지는 문제가 있기는 한데… 문제가 생기면 다시 생각해봐야겠다.

VCS svn,git ignore셋팅 샘플

Subversion(svn) property
svn:ignore

 

Git

{GIT_ROOT}/.gitignore

 

객체지향의 기본 구조 .. to_string — from_string …..되면 좋겠다.

toString의 구현… 객체지향 언어에는 보통 다 존재하는 이 메서드…

사람이 인지할 수 있는것은 어떤 패턴… 그림으로는 의미를 나타내기 힘들기 때문에 toImage보다는 toString를 사용하는 것 같다.
객체지향 언어에서는 struct(구조체)의 역할을 대신하기도 하니까.. 데이터를 담고있는 객체의 toString의 역할은 더욱 중요하다. 객체의 중요한 데이터를 모두 뽑아내 보여주는 역할….

사람이 뭔가를 인식하는 것은 결국에는 문자열이기 때문에… 디버깅시에도 중요하게 사용된다.

toString를 사용하는 경우는 보통 두가지다.
1. 객체내의 중요 데이터를 보여주는 역할
2. 객체내의 모든 데이터를 보여주는 역할…

1번은 보통… 데이터 출력시에 사용되고… 일반적으로 이 구현을 사용한다.
2번은 이클립스나 롬복을 이용해 자동으로 생성된 코드일 경우….

fromString의 구현을 위해서는 1번과 2번을 구분할 필요가 있다.
1번은 완성되지 않은 형태의 데이터를 출력하게 되고 2번은 객체 복원을 위한 객체스트링이 된다.
2번은 직렬화랑 비슷한 개념이 될까…? (같은건가? 직려로하 그 자체인가? 개념이 좀 부족한듯..차후 추가변경) 현재 객체 생성 및 구현시에 막무가내로 사용되고 있는 toString포멧의 표준화가 좀 필요할 것 같다. json형태의 출력이라던가….

이 부분에 대한 표준이 잘 잡히게 되면 언어간 제한없이 더 쉽게 RPC콜이 가능해질 것 같다.
아니면 그냥 이것들을 구현해놓고 상속해서 사용하게 하면… 간단하게 RPC를 만들 수 있지 않을까… 뭐 그렇다고 이걸 만들 시간은 없고 이미 RPC프레임워크들이 많아서 그냥 갖다쓸거지만

ACL,Access Control List 접근 제어 목록

사용자별로 권한을 부여하고 그 권한을 바탕으로 접속 허용 여부를 결정하는 것을 말한다.

값은 보통 String을 사용한다.

 

guest, member, admin 세개의 권한이 있다.

사용자들은 위 권한중의 몇 가지(중복가능)의 권한을 가지고 있다.

권한은 사용자가 가진 최상위 권한을 우선 적용한다. 구현하기 나름이지만… member {student, teacher} 이런식으로 포함관계를 갖게 만들수도 있고 {minsu, dongsu}와 같이 수평 개념으로 만들수도 있다.

예1)

연습장에다가 다음의 사용자 이름을 적어본다

이건희, 이재용, {내이름}, 박정희

다음의 사용자가 있다고 가정하고 {guest, admin, member} 세개의 권한을 적당히 줘 본다.

예2)

그럼 다음 기능에 권한을 줘 보자

{사용자목록보기, 공지사항읽기, 공지사항댓글쓰기, 자유게시판 읽기}

(역시 구현하기 나름이지만 기능에 권한을 줄 수도 잇고 페이지에 줄 수도 있다. 도쿠위키의 경우는 페이지에 준다.)

 

이거 대충 보고 dokuwiki를 설치하고 ACL설정을 해 보면 곧 이해가 갈 것이다.

굳이 dokuwiki를 찝어서 말한것은…. 이게 설치하기 쉬우니까

식별자identifier

데이터, 함수, 프로그램 등에 각각을 식별할 수 있는 이름을 붙인다.

 

이 이름을 식별자라고 한다.

 

변수variable와 함수function에는 항상 이름이 있다.

int num1; //이 변수의 식별자는 num1

void AddNum(int x, int y);//이 함수의 식별자는 AddNum

class People//이 클래스의 식별자는 People

{

}

식별자는 그냥 편하게 이름이라고 부르는 경우가 많다.

 

식별자는 대부분의 경우 이 규칙을 따른다.

첫 글자는 a~z, A~Z, $, _ 이것들만 사용가능

첫글자가 아닌 곳에는 0~9도 사용가능

1num, 2_aaa 이것들은 안되고

num1, $aaa, _num1 이것들은 된다.

 

유니코드가 지원되는 C#, Delphi 등의 최신 컴파일러에서는 한글 이름(식별자)도 사용가능하다.

int 계좌잔고 = 10000;

 

대부분의 언어에서는 대소문자를 구분한다.

Add 와 add는 다르다.

 

옛날 언어중 하나인 turbo pascal에서는 대소문자를 구분하지 않고 앞에서 8글자까지만 구분을 한다.

Add와 add는 같고 abcdabcdjkjlk abcdabcdabcd 이 두개가 같은 이름으로 인식된다.

 

언어별로 차이가 있긴 하지만 이 포스팅에 있는게 표준으로 대부분 언어가 이것을 따른다.

예약어reserved word = 키워드key word

예약어란

각 언어에서 미리 어떤 의미로 사용하기로 정해놓은 단어들을 의미한다.

이 단어들은 변수로 사용할 수 없다.

 

쉽게 말해서 VisualStudio, Eclipse 등의 ide에서 입력하면 색이 변하는 단어들은 거의 예약어이다.

 

외울 필요는 없고.. 쓰다보면 알게된다.

abstract, class, new, include, int, double…등의 단어들… 각 언어마다 정해진 예약어가 있다.

 

예약어들이 흔히 쓰일 수 있는 단어들이라서 무심코 사용하게 되는 경우가 간혹 있다. 최근에는 ide에서 예약어를 입력하면 색이 변하기 때문에 그런 실수를 잘 하지는 않지만…. 그래도 조심해야한다.

new는 예약어이지만 newNum1, cntinclude 등의 이름은 사용이 가능하다. 그래도 이런 식으로 이름을 지으면 헷갈릴 수 있으니 되도록이면 피하는게 좋다.