728x90

현재 Spring에서 아래와 같이 3가지 DI 방식을 사용하고 있다.

  • 가장 흔한 필드 주입방식: Field Injection 방식 (비 권장)
@Controller
public class BoardController {
	@Autowired 
  private IBoardItemService boardItemService;
}
  • 수정자 주입: Setter Injection
private IBoardItemService boardItemService;
  @Autowired // 4.3 부터 생략 가능
  public void SetIBoardItemService (MessageSource messageSource){
    this.messageSource = messageSource;
  }
  • 생성자 주입: 가장 선호하는 방식 ( Class 상단에 @RequiredArgsConstructor 추가 , @AllArgsConstructor 는 지워야 될껄?)
@RequiredArgsConstructor
public class BoardController {
	private final IBoardItemService boardItemService;
}

Lombok 없이 사용시:

public class BoardController {
	private final IBoardItemService boardItemService; // Immutability 이슈까지 해결하고 싶다면 private final 접근자 붙여주기
    
		@Autowired
		public BoardController(IBoardItemService boardItemService) {
    	this.boardItemService = boardItemService;
    }
}
728x90

  • 시스템 셋팅

AWS CLI 설치 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-macos.html

AWS 인증용 profile 셋팅 : profile 명 exkr-kms

$ aws configure --profile exkr-kms
AWS Access Key ID [None]: AKIAJHQMLLDJRWODVZBQ
AWS Secret Access Key [None]: 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
Default region name [None]: ap-northeast-2
  • KMSManager 사용법

aws/KMSManagerExample.java

  1. KMSManager 초기화
KMSManager kmsManager = KMSManager.getInstance(); 
kmsManager.init((String) System.getProperties().get("exkr.kms.alias"));
  1. 사용자별(uid) cipher 생성
String cipher = kmsManager.createCipherWithUID(uid);
  1. uid와 cipher로 암호화
String encrypted = kmsManager.encryptWithUID(uid, plain, cipher);
  1. uid와 cipher로 복호화
String decrypted = kmsManager.decryptWithUID(uid, encrypted, cipher);

서비스 프로퍼티 암호화 : 실행 옵션 exkr.kms.cipher 사용하여 암/복호화

예제 소스들 ~~~~

예제 프로젝트

1. resources/META-INF/spring.factories  추가 
org.springframework.context.ApplicationContextInitializer=com.example.springapiexample.init.DecryptPropertiesContextInitializer

2. resources/application.properties 에 예제 프로퍼티 추가
exkr.test={cipher}743QDr/oHPyshILBgJURgXfqyUe4ZHgpKDx2qRwVR1k=

3. curl -si localhost:8080/greeting  호출시 exkr.test 복화화되어 출력 '안녕하세요!'포함한 문자열 
{"id":1,"content":"Hello, 안녕하세요?! with World pwd"}
~~~

끝!

728x90

Rest api url 패턴정의시…

  1. 대문자 말고 , 소문자로 작명
# 비추!
<https://www.neoport.com/customService>
# 권장!
<https://www.neoport.com/custom-service>

  1. 언더바 말고 하이픈!
# 비추!
<https://www.neoport.com/custom_service>
# 권장!
<https://www.neoport.com/custom-service>

  1. url 끝은 /가 없어야 함.
# 비추!
<https://www.neoport.com/custom/>
# 권장!
<https://www.neoport.com/custom>

  1. 패턴을 계층형으로 하나씩 / 시로 구분하여 …url 패턴으로 해당 url 역할을 한눈에 알아볼수있게
# 비추!
<https://www.neoport.com/getcustoms>
# 권장!
<https://www.neoport.com/customs/depth/service/all>

<https://www.neoport.com/customs/depth/service/create>
<https://www.neoport.com/customs/depth/service/update>
<https://www.neoport.com/customs/depth/service/delete>
  1. url 에 파일 확장자 노출 x
# 비추!
<https://www.neoport.com/customs/xxx.json>
<https://www.neoport.com/customs/xxx.xml>
# 권장!
<https://www.neoport.com/customs/xxx>
  1. query parameter 이냐 path parameter 이냐 (일반적으로…)
# 수정, 삭제
<https://www.neoport.com/customs/12345/xxx> 

# 검색 ,(상세 검색)
<https://www.neoport.com/customs/depth/service?id=12345&name=xxx>
  1. HTTP method에 대한 정의
url POST GET PUT DELETE
/customers create get all batch update  delete all
/customer/id error 1건검색 1건 수행 1건삭제
/customers/id/orders id=xxx인 customer 주문생성  xxx모든 주문검색 xxx모든 주문 수중 xxx모든 주문 삭제

 

항상 말하지만!

내가 정리한 글이 정답은 아니다.

규칙은 팀바팀으로 따로 정의할것이고 혹시나 내가 직접 개발스타트를 끊어야 될상황이라면 

요런 규칙들을 참고하면 좋을듯하다. 이것 되에도 구글링하면 많은 규칙들이 있으니 찾아보면 좋을듯 하다.

+ Recent posts