[내일배움캠프] 1월 3일 화요일 TIL 회고록
오늘 공부한 것: 혼자 게시판 기능을 조금 구현했다.
혼자 만들면서 모르는 부분이나 궁금했던 부분을 적어보았다.
User Entity 에서 Entity에 만들어둔 UserRoleEnum을 사용해서 role을 만들때 @Enumrated 어노테이션을 사용했는데
강의를 보면서 만든거라 왜 쓰이는건지 몰라서 구글링을 해봤다.
@Enumrated : enum 타입을 Entity 클래스의 속성으로 사용할 수 있다.
EnumType.ORDINAL 로 사용하면 DB에 USER, ADMIN 이 저장되지 않고 1, 2 이런식으로 저장이 된다.
EnumType.STRING 으로 사용하면 DB에 USER, ADMIN 이라고 저장된다.
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
로그인, 회원가입 기능을 구현하면서 회원가입 부분이 많이 어려워서 저번에 만들었던 강의를 보고 만들고 어떻게 구현이 되는지 적어보았다.
회원가입 코드
public String signup(SignupRequestDto signupRequestDto) {
String username = signupRequestDto.getUsername();
String password = signupRequestDto.getPassword();
// 회원 중복 확인
Optional<User> found = userRepository.findByUsername(username);
if (found.isPresent()) {
throw new IllegalArgumentException("이미 존재하는 Username 입니다.");
}
// 사용자 Role 확인
UserRoleEnum role = UserRoleEnum.USER;
if (signupRequestDto.isAdmin()) {
if (!signupRequestDto.getAdminToken().equals(ADMIN_TOKEN)) {
throw new IllegalArgumentException("관리자 암호가 틀려 등록이 불가능 합니다.");
}
role = UserRoleEnum.ADMIN;
}
User user =new User(username,password,role);
userRepository.save(user);
return "회원가입 성공";
}
먼저 signupRequestDto에서 받아온 username과 password를 String username, password에 저장한다.
String username = signupRequestDto.getUsername();
String password = signupRequestDto.getPassword();
Optional<User> 를 사용하여 found에 userRepository.findByUsername 을 이용하여 username이 있는지 찾습니다.
Optional<User> found = userRepository.findByUsername(username);
그 다음 isPresent()를 사용하여 found의 값이 있으면 익셉션을 출력합니다.
if (found.isPresent()) {
throw new IllegalArgumentException("이미 존재하는 Username 입니다.");
}
익셉션이 없으면 UserRoleEnum을 이용하여 role에 UserRoleEnum.USER를 선언합니다. 기본값은 User로 생성됩니다.
if문을 활용하여 signupRequestDto.isAdmin()이 있으면
다시 if문을 사용하여 signupRequestDto에 getAdminToken()의 값과 equals(ADMIN_TOKEN)이 값이 같지 않으면
익셉션을 출력합니다. 값이 같으면 role = UserRoleEnum.ADMIN으로 선언합니다.
// 사용자 Role 확인
UserRoleEnum role = UserRoleEnum.USER;
if (signupRequestDto.isAdmin()) {
if (!signupRequestDto.getAdminToken().equals(ADMIN_TOKEN)) {
throw new IllegalArgumentException("관리자 암호가 틀려 등록이 불가능 합니다.");
}
role = UserRoleEnum.ADMIN;
User user = new User 로 인스턴스를 새로 선언해주고 매개변수로 28줄의 username, 29줄의 password, role을 받습니다.
그 다음 userRepository에 save 함수를 이용하여 매개변수로 user룰 받게 한 후 "회원가입 성공" 이라는 리턴 값을 출력시킵니다.
User user =new User(username,password,role);
userRepository.save(user);
return "회원가입 성공";
해당 코드를 만들면서 Optional과 isPresent()가 왜 쓰이는지, 어떻게 쓰이는지 모르겠어서 구글링을 해봤다.
Optional<T> :Optional<T> 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다.
따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다
이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.
isPresent : Optional 이 있으면 사용 할 수 있는 코드, boolean 타입이고, Optional 객체가 값을 가지고 있으면 true , 없으면 false 출력
오늘은 게시글 생성, 전체조회 , 선택조회, 수정 까지 구현을 했고 로그인과 회원가입 기능을 구현을 했다.
내일 게시글 삭제 및 댓글 기능을 만들고 팀 프로젝트 각자 맡은 것들을 합쳐보고 수정해야겠다.
어제 오늘 일이 있어서 참석을 못하신 분도 있고 그래서 다 완성은 못할 것 같지만 다같이 힘내서 열심히 만들어봐야겠다.