본문 바로가기
회고

TIL_211022

코동이 2021. 10. 22.

1. Facts(사실, 객관)

 

- Strategy 패턴을 이용해서 로그인 검사 개선하기

 

2. Feelings(느낌, 주관)

 

- strategy 전략을 이용해서 수많은 if 로그인 검사를 하나의 메서드로 담아내도록 했습니다. 각 로그인 검사 클래스를 @Component로 등록하고, 하나의 추상 클래스에서 각 경우를 순차적으로 검사하여 해당 코드가 맞아떨어지면 처리하도록 했습니다. 아쉬운 것은 Java8이상에서 새롭게 추가된 스트림을 사용하지 못한 것입니다. 스트림을 사용하지 못해 for문을 통해서 검사하도록 했습니다. 약 10개의 검사 if문이 하나의 검사문으로 줄어드는 효과가 있었습니다. 변경이 있을것으로 예상되는 곳은 모두 interface를 사용하는 것이 과할 수 있겠으나, 해당 방식으로 구성하는 것이 안전한 프로젝트 설계를 위해 고려해볼만 합니다.

 

3. Findings (배운 점)

 

public abstract class LoginStatus {
	public boolean isLoginedWith(String retCode) {
		return this.status().equals(retCode);
	}
	
	protected abstract String status();
	
	protected abstract String message();
	
	public String getMessage() {
		return this.message();
	}
}

 

 추상클래스를 만듭니다. 각각 로그인 유효성을 검증하면서 retCode가 같을 것이 있는지 확인합니다.

 

	@Autowired
	private List<LoginStatus> loginStatusList;

 

 추상클래스 LoginStatus를 상속하는 모든 자손 클래스들은 @Autowired 설정된 List<LoginStatus>만 있으면, 모두 Spring Bean으로 등록됩니다. 

 

for(LoginStatus loginStatus : loginStatusList) {
			if(loginStatus.isLoginedWith(retCode)) {
				log.info("LoginController." + loginStatus.getClass().getName());
				model.addAttribute("resultMsg", loginStatus.getMessage());
				return "login/login";
			}
}

 

 이제 retCode를 검사하는 isLoginedWith메서드를 통해서 로그인 검사를 합니다. 어떠한 실제 구현체도 있지 않습니다. 단지 추상클래스로 검사하고 리턴할 뿐입니다. 새로운 로그인 검사 유형이 추가되어야 한다면, 클래스만 만들어주면 되고 비지니스 로직은 건드릴 필요가 없습니다.

 

4. Affirmation (자기 선언)

- 나는 내가 배운 디자인 패턴을 실제 업무에 적용하는 사람이다.

반응형

'회고' 카테고리의 다른 글

TIL_211027  (0) 2021.10.27
TIL_211024  (0) 2021.10.25
TIL_211021  (0) 2021.10.22
TIL_211019  (0) 2021.10.19
TIL_211018  (0) 2021.10.18