진행상황
1주차의 목표는 로그인 , 회원가입 , 프로필 수정등의 계정 기능을 완성하는거였지만 환경설정 부분에서 편리하다는 gradle로 프로젝트를 생성할 때부터 해매며 시간을 많이 사용했다. 내가 사용할 라이브러리들을 설정하고 mysql DB와 연동하는 것으로 어느정도 초기설정을 마무리 했다. 그 후 미리 만들어 놓은 css , image 파일들을 spring의 정적 리소스 경로인 /resources/static 에 넣어주고 html 파일들은 /resources/templates 경로에 기능별로 폴더를 만들어 만들어주었다. 초기 설정을 하면서 느낀건데 스프링으로 프로젝트를 만들때는 viewResolver 설정도 직접 했던 기억이 있는데 스프링부트에서는 자동으로 설정이 되어 있어 확실히 스프링 부트가 여러 설정들을 AutoConfig로 자동화를 해줘서 사용하는 개발자에게 편리함을 제공하는구나라고 생각했다.
SpringSecurity를 이용해 계정 기능을 구현했는데 나는 백기선님의 강의를 봤던 기억을 되살리며 계정기능을 구현해봤다. 워낙 SpringSecurity 기능을 커스터마이징하게 편하게 만들어놔서 가지고와서 구현을 완료하는데는 큰 어려움이 없었지만 정작 완성을 하고 보니 클라이언트의 요청을 받아서 어떤흐름으로 서버에서 돌아가는지에 대한 동작원리를 이해했다기 보다 오 이게 되네? 이런 느낌이였다. 그래서 스터디 모임 발표 때도 흐름을 설명하지 못한 부분이 너무 아쉬워 Security 개념을 찾아가며 읽어봤지만... 역시 여전히 흐름이 완전히 이해 되진 않는다. 이 부분은 이번 프로젝트를 끝내면 백기선님 spring security 강의를 들어 보완을 해보면 좋을 거 같다.
그래도 SpringSecurity가 인증과 인가(권한)을 해주는 기능이고 로그인할 때 UserDetailService를 이용해 사용자가 입력한 정보를 가져가 서버에 저장되어있는 계정정보와 일치하는지 판단하는 기능을 한다라는 정도까지 이해할 수 있었다.
또한 Validation을 이용해 유효성 검사를 해주는 부분도 처음 구현해봤는데 정규식검사뿐만 아니라 vaildate 메소드를 오버라이딩하여 DB에 저장되어있는 계정과 중복되는지와 같은 부분도 구현할 수 있었다. 나는 로그인 할 때 아이디만 중복검사 하면 되기 때문에 아래와 같이 코드를 작성해봤다.
@Component
@RequiredArgsConstructor
public class SignUpFormValidator implements Validator {
private final AccountRepository accountRepository;
@Override
public boolean supports(Class<?> aClass) {
return aClass.isAssignableFrom(SignUpForm.class);
}
@Override
public void validate(Object object, Errors errors) {
//userId(이름만)
SignUpForm signUpForm = (SignUpForm) object;
if(accountRepository.existsByUserId(signUpForm.getUserId())) {
errors.rejectValue("userId","invalid.userId", new Object[]{signUpForm.getUserId()},"이미 사용중인 아이디입니다.");
}
}
}
보완해야겠다 느낀 점
감사하게도 프로젝트 발표하는 스터디 모임원들이 다들 경력있으신 분들이 많아서 여러가지 피드백을 해주셨다. 그 중에 다른 분들은 다들 기능 구현에 중점을 두셨다기보단 한 가지 기능을 구현하더라도 동작원리를 이해하려고 노력하고 그 부분을 설명하는데 시간을 많이 사용하셨는데 나는 기능 구현에만 집중하다보니 이 코드가 어떻게 흘러가는지를 전혀 설명해줄 수 없었고 이런 식으로 하다보면 결국 다음에 다시 똑같은 기능을 구현할 상황이 와도 개발 실력 향상에 전혀 도움이 안되겠다라고 생각했다. 프로젝트 완성까지 3주 정도의 시간이 남았으니 이번엔 기능 구현 완료 후에 디버깅을 통해 흐름을 파악하는 데에도 많은 시간을 써볼 생각이다.
2주차 목표
- 비밀번호 찾기 , 비밀번호 수정
- Spring Data JPA를 이용한 CRUD 구현(JPA 흐름 파악해보자)
'사이드 프로젝트 회고 및 기록' 카테고리의 다른 글
| [Han-Commerce] RestAPI 토이 프로젝트를 시작하며 (0) | 2024.01.19 |
|---|---|
| [Self-Develope] 마지막 주차 회고 (1) | 2023.11.03 |
| [Self-Develope] 2주차 회고 (0) | 2023.06.08 |
| [Self-Develope] 개인프로젝트로 자기개발 커뮤니티 사이트를 선정한 이유 (0) | 2023.05.20 |