점프 투 스프링 TIL -230329

주바나·2023년 3월 29일
0

Spring Boot

목록 보기
12/14
post-thumbnail

Setter


객체 지향 프로그래밍에서 객체의 데이터는 객체 외북에서 직접적으로 접근하는 것을 막는다. 객체 데이터를 외부에서 읽고 변경 시 객체의 무결성이 깨질 수 있기 때문.
ex) 자동차 속도는 음수 불가, 하지만 외부에서 음수로 설정하면 객체 무결성이 깨짐.
따라서 메소드를 통해 테이터를 변경하는 방법 선호

Setter :데이터는 외부에서 접근하지않도록 막고, 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도
(메소드는 매개값을 검증해서 유효한 값만 데이터로 저장 가능하기 때문)

Getter


외부에서 객체의 데이터를 읽을때도 메소드를 사용하는 것이 좋다.

Getter : 객체 외부에서 객체 필드값을 사용하기 부적절한 경우가 있다. 이런 경우 메소드로 필드값을 가공 후 , 외부로 전달한다.

@GeneratedValue


기본키를 자동으로 생성할 때에는 @Id@GenerratedValue 어노테이션이 함께 사용되어야한다.

IDENTITY - @GeneratedValue(strategy = GenerationType.IDENTITY)

기본키 생성을 데이터베이스에게 위임하는 방식으로 id값을 할당하지 않아도 데이터 베이스가 자동으로 AUTO_INCREMENT를 하여 기본키를 생성해준다.

  @Entity
    public class PkEx() {
		
        	@Id
        	@GeneratedValue(strategy = GenerationType.IDENTITY)
        	private Long id;
        
        	private String name;
            
        }

회원가입- 비밀번호


사용자의 비밀번호는 보안을 위해 반드시 암호화하여 저장해야 한다.
암호화를 위해 시큐리티의 BCryptPasswordEncoder 클래스를 사용하여 암호화하여 비밀번호를 저장했다.

BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

하지만 이렇게 BCryptPasswordEncoder 객체를 직접 new로 생성하는 방식보다는 PasswordEncoder 빈(bean)으로 등록해서 사용하는 것이 좋다. 왜냐하면 암호화 방식을 변경하면 BCryptPasswordEncoder를 사용한 모든 프로그램을 일일이 찾아서 수정해야 하기 때문이다.

PasswordEncoder 빈(bean)을 만드는 가장 쉬운 방법은 @Configuration이 적용된 SecurityConfig.java에 @Bean 메서드를 생성하는 것이다.


    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

이거 추가하면됨. 이후 UserService도 수정해야함.

중복 회원가입


사용자ID 또는 이메일 주소가 동일할 경우에는 DataIntegrityViolationException이 발생하므로 DataIntegrityViolationException 예외가 발생할 경우 "이미 등록된 사용자입니다."라는 오류를 화면에 표시하도록 했다. 그리고 다른 오류의 경우에는 해당 오류의 메시지(e.getMessage())를 출력하도록 했다.

bindingResult.reject(오류코드, 오류메시지)는 특정 필드의 오류가 아닌 일반적인 오류를 등록할때 사용한다.

UserController.java

 try {
            userService.create(userCreateForm.getUsername(), 
                    userCreateForm.getEmail(), userCreateForm.getPassword1());
        }catch(DataIntegrityViolationException e) {
            e.printStackTrace();
            bindingResult.reject("signupFailed", "이미 등록된 사용자입니다.");
            return "signup_form";
        }catch(Exception e) {
            e.printStackTrace();
            bindingResult.reject("signupFailed", e.getMessage());
            return "signup_form";
        }
profile
BE -JAVA,Spring boot

0개의 댓글