반응형

사내의 코드 품질 평가를 위해서 static analysis 방법을 조사하면서 항목에 대해서 list up을 할 필요성이 발견되어 조사한 내용들을 공유합니다. 


항목

원인

회피방법

사용여부

비고

JavadocPackage

모든 method, class에는 help 존재해야지 된다.

시간상 힘들고, 관리되지 않는 주석은 더욱 혼란을 가지고 온다. method 이름 규칙으로 대신하기로 한다.

X

NewlineAtEndOfFile

java code 가장 마지막 줄은 빈공백열로 마쳐져야지 된다.

마지막 line에는 항시 빈공백을 넣는다.

O

Translation

Properties file 이용한 경우, 국가별 번역이 모두 존재해야지 된다.

국가별 번역 파일을 따로 만들거나 default 문자열만을 이용한다.

O

FileLength

java file length 2000 line 넘지 않도록 작성한다.

2000 line 넘어가는 경우, 설계상의 문제가 있기 때문에 class 재정의한다.

O

FileTabCharacter

java file 내부에 tab 문자열이 있으면 안된다.

tab 모두 space 치환해서 사용하도록 한다.

O

RegexpSingleline

1 line에는 한개의 method만이 존재해야지 된다.

1 line 대한 설정을 명확하게 해서 사용하도록 한다.

O

ConstantName, LocalFinalVariableName, LocalVariableName, MemberName, MethodName, PackageName

상수, class, method, parameter, package 대한 naming 규칙이 틀릴 경우 발생한다.

naming 규칙에 맞는 명명법을 사용한다.

O

AvoidStarImport

package안에 있는 모든 객체들을 import할때 발생한다.

package안에서 사용되는 객체만을 import 한다.

O

테스트 코드 작성시에는 예외로 한다.

UnusedImports

package안에 사용하지 않는 객체를 import하면 발생한다.

package안에 사용되지 않는 객체들은 import 하지 않는다.

O

테스트 코드 작성시에는 예외로 한다.

LineLength

Line 길이가 80자가 넘는 경우 발생한다.

Line 길이를 120자로 수정해서 사용한다.

O

80 -> 120

MethodLength

Method 길이는 150자가 넘는 경우 발생한다.

Method 길이를 150 이내로 사용한다.

O

ParameterNumber

Method parameter 7개가 넘지 않도록 한다.

Method안의 input parameter 갯수를 제한한다.

O

ModifierOrder

Method 앞에 붙는 order 다음과 같은 순서를 갖는다. (public, abstract, static, final, transient, volatile, synchronized, native, strictfp)

순서를 따르도록 한다.

O

AvoidNestedBlocks

내부 {} 사용하지 않는다. - switch 구문 제외

내부 {} 사용하지 않는다.

O

EmptyBlock

{}안에 아무런 구문이 없는 경우에 발생한다.

{}안에 구문이 없는 경우, 제거한다.

O

LeftCurly

'{' interface method 구현문 끝에 넣어준다.

이집트 표기법을 사용하도록 한다.

O

NeedBraces

code안의 {} 반드시 짝이 맞아야지 된다.

Compile error 발생하지 않도록 만들어준다.

O

RightCurly

'}' 뒤에는 반드시 CRLF만이 존재해야지 된다.

이집트 표기법을 사용하도록 한다.

O

AvoidInlineConditionals

1 line에서 if 문을 이용해서 처리하지 않는다.

condition 제거하도록 한다.

X

1 line에서 가독성이 높은 경우가 존재한다.

EmptyStatement

for loop문에서 무한 loop 발생시킬 있는 empty statement 존재한다.

반드시 for loop 경우에는 statement 존재한다. loop 안에서 조건이 걸리는 경우, while문을 사용하도록 한다.

O

EqualsHashCode

equals(), hashCode() 어느하나 override 경우, 둘다 재정의 되어야지 된다.

반드시 method 쌍으로 재정의 하도록 한다.

O

IllegalInstantiation

boolean, String 같이 java 기본 type 재정의하는 경우 발생

java 기본 type 그대로 사용하도록 한다.

O

InnerAssignment

if문이나 toString() 같은 내부에서 변수에 값을 할당한다.

값의 할당은 따로 line 잡아서 사용하도록 한다.

O

MagicNumber

상수값을 사용하는 경우 발생한다.

상수값을 static final 이름을 지정해서 사용한다.

O

MissingSwitchDefault

switch 문에 default case 없는 경우에 발생한다.

switch문은 반드시 default case 넣어서 작성한다.

O

RedundantThrows

try-catch 시에 throws 순서로 인하여 실행될 없는 catch문이 존재한다.

catch 만들때, exception 상속 상태를 확인하고 구성하도록 한다.

O

SimplifyBooleanExpression

if문내에서 1 line으로 return한다.

if 문안에서 return 하지 않고, return값에 대한 명명을 정확히 한다.

O

SimplifyBooleanReturn

if문의 결과를 그대로 return 한다.

if문의 로직 자체를 return 값으로 변경한다.

O

DesignForExtension

객체는 확장 가능하도록 되어야지 되고, public문은 반드시 final 재정의 되는 것을 막아줘야지 된다.

spring 사용하는 경우 Proxy aspectJ 의해서 재정의 되는 method 다음 규칙에서 에러를 발생시킬 있기 때문에 사용하지 않는다.

X

FinalClass

final class 생성자가 private 되어있는 경우 발생한다.

final class 경우에는 특별한 경우를 제외하고 사용하지 않는다.

O

spring 이용하는 경우에는 특히 사용할 필요가 없는 구성이다.

HideUtilityClassConstructor

public static method만이 존재하는 class 생성자가 protected, private 되어 있다.

UtilityClass 경우에는 모두 public modifier 이용한다.

O

InterfaceIsType

interface type만이 존재하고, method 존재하지 않는다.

type descript interface 사용하지 않는다.

O

VisibilityModifier

getter/setter 사용하지 않고, 내부 변수에 접근 가능하다.

getter/setter 이용해서 property 처리를 하도록 한다.

O

ArrayTypeStyle

java style input array parameter 이용한다. (java style : main(String[] args), C style : main(String args[])

java style 사용하도록 한다.

O

FinalParameters

input parameter 내부에서 참조만 하는 경우, final 선언한다.

모든 input parameter final 사용하는 것을 기본 원칙으로 갖는다.

O

coding style 밀접한 연관이 있다.

TodoComment

"TODO: " 정확히 사용하지 않는 경우에 발생한다. (대소문자, 공백위치)

TODO 정확히 사용한다.

O

UpperEll

'L', '1', 'I', 'i' 명확히 구분할 있도록 method 이름과 객체이름을 짓는다.

명명규칙에 따라 이름을 작성하도록 한다.

O

 

반응형

'Code Inspection' 카테고리의 다른 글

PMD eclipse  (0) 2013.06.24
package-info.java  (0) 2013.05.22
반응형

Window -> Preferences -> Java -> Code Style -> Code Templates -> Comments 에서


 

파일정보 주석 (소스 가장 위 상단을 선택)

Types -> Edit

/**
 * @FileName  : ${file_name}
 * @Project     : ${project_name}
 * @Date         : ${date}
 * @작성자      : ${user}

 * @변경이력 :

 * @프로그램 설명 :

*/



 

 

 

 

메소드정보 주석 (원하는 함수를 선택)

Methods -> Edit

/**
 * @Method Name  : ${enclosing_method}
 * @작성일   : ${date}
 * @작성자   : ${user}
 * @변경이력  :
 * @Method 설명 :
 * ${tags}
 */



${} 내용설명

data : Current date (현재 날짜)

dollar : The dollar symbol (달러문양)

enclosing_type :The type enclosing the method (선택된 메소드의 타입)

file_name : Name of the enclosing compilation (선택된 편집파일 이름)

package_name : Name of the enclosing package (선택된 패키지 이름)

project_name : Name of the enclosing project (선택된 프로젝트 이름)

tags : Generated Javadoc tags (@param, @return...) (Javedoc 태그 생성)

time : Current time (현재 시간)

todo : Todo task tag ('해야할일'태그 생성)

type_name : Name of the current type (현재 타입의 이름)

user : User name (사용자 이름)

year : Current year (현재 연도)


 


3.2 기준으로 주석입력 단축키는 ALT + SHIFT + J

반응형
반응형

그렇다면 SSO(싱글사인온)의 이슈는 무엇일까요?

           

   SSO의 이슈는 크게 3가지가 있습니다.(물론 이슈의 중심에는 보안이 있어야 함)

 

   1. 여러 USER의 DB를 어떤 방식으로 통합할 것인가?

 

   2. 어떤 인증 방식을 통해 USER를 확인할 것인가?

 

   3. 인증받은 USER는 어떤 접근 권한을 가지며 그 접근 권한에 따른 개인화는 어떻게 구현할 것인

      가?

 

 

 ★ 또한 이러한 SSO란 개념이 필요하게 된 이유 및 도입효과

 

    

     쉽게 설명하자면 예를들어 A라는 게임 포탈사이트는 게임 흥행의 성공으로 User가 폭발적으로

     가 되었고, 그에따라 UserDB(사용자데이터베이스)는 증가 되어야만 했습니다.기타 관리 서버등

     의 증설도 불가피하게 되었지요.거기에 사업 확장에 따른  B포털사이트와의 전략적 제휴까지

     게 되어 A와B라는 포탈은 성격은 다르지만 A,B어느쪽의 유저라도 A와 B의 서비스를 부분적으로

     이용가능 하게 되었습니다.

     이렇게 시스템의 규모가 커질 수록  시스템의 구조는 더욱 복잡해지고 관리하기는 더욱 힘들게 될

     것입니다. 전문가가 아니라면 그 복잡한 구조를 이해하는 데, 더 어려움이 생길뿐만 아니라, 문제

     가 발생했을때 그 문제를 처리하는 과정에서도 더 많은 시간과 노력을 초래하게 만듭니다. 그렇기

     때문에 관리를 쉽게하고 비용을 절감할 수 있는 솔루션의 필요성을 느끼게 되었고 SSO이란 하나

    의 솔루션이 등장한 것입니다.

 

     또한 SSO(싱글사인온)의 도입효과로

 

     관리의 투명성과 신뢰성을 높이고 비용을 절감하고 효율성을 높일수 있습니다.

           

            사용자 ID/Password 관리 효율 증가

별도 로그인 없이 다른 시스템 이용
윈도우 자격 증명과 같은 인증  지원
Password 문의 감소
사용자의 로그인/ 종료/ 재접속을 위한 재입력 감소
사용자 접속정보에 대한 리포팅 기능 제공

 

 

 ★ SSO 인증 방식엔 무엇이 있을까요?

    

   중앙 인증 서버과 서비스 제공자간 인증 절차 방식은 사이트 운영 방식에 따라 3가지 인증방식을 지

   원한다. 운영 방식은 통합 인증 저장소의 유무, 통합 로그인 페이지의 유무, 개별 인증 저장소의 유

   무에 따라 나뉘어 집니다.

 

   1. 기본 인증방식

 

기본 인증방식의 사용은 주로 신규로 시스템을 구축하는 경우나 사용자 정보를 통합하는 경우에 많

이 사용된다. 따라서 통합 인증 정보 및 통합 로그인 페이지를 중앙 인증 서버에 포함되어 있다.

 

 

<기본 인증 방식 사용시 로그인 프로세스>

 

 

   2. ID Federation 인증방식

 

ID Federation 방식은 서비스 제공자별로 인증정보 관리 서버가 존재 하여 기존 사용중인 사용자 정

보를 그대로 이용하기 위해 사용한다. 따라서 통합 인증정보 관리 서버에는 통합 인증정보는 존재

하지 않는다. 다만 로그인 여부를 중앙 관리하기 위해 로그인 여부를 알 수 있는 인증 정보 Map

가지고 있다.

 

 

<ID Federation 방식을 사용할 때의 로그인 프로세스>

 

 

   3. Assertion 인증방식

 

 Assertion 방식은 기존 서비스 제공자에 사용중인 인증정보와 통합 인증정보를 같이 사용할 경우

 에 적합한 방식이다. Assertion 방식은 로그인 페이지를 서비스 제공자에서 가지고 있으며 서비

 스  제공자에서 로그인 처리 후 중앙 인증 서버로 강제 로그인 처리를 한다. 인증 정보가 공존하므

 로 인증정보 동기화 작업도 필요하다.

 

 

<Assertion 방식을 사용할 경우 로그인 처리 프로세스>

 

반응형

+ Recent posts