본문 바로가기

분류 전체보기

(84)
UserDetailsService 스프링 시큐리티가 제공하는 UserDetailsService 인터페이스는 로그인 loadUserByUsername 메서드는 매개변 username으로 스프링 시큐리티의 사용자 객체를 조회하고 반환하는 메서드 @RequiredArgsConstructor @Service public class UserSecurityService implements UserDetailsService { private final UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Optional _siteUser=this.userRepository..
BCryptPasswordEncoder(비크립트패스워드인코더) 회원 가입 기능 구현을 위해 password를 암호화 하는 것이 좋다. 이때 Spring Security의 BcryptPasswordEncoder 클래스를 이용할 수 있다 BcryptPasswordEncoder는 Bcrypt 해시 함수를 사용하는 암호화 기술이다. BCryptPasswordEncoder passwordEncoder=new BCryptPasswordEncoder(); user.setPassword(passwordEncoder.encode(password)); 이렇게 BCryptPasswordEncoder 객체를 직접 생성하는 것도 좋으나 이래처럼 이 객체를 빈으로 등록하여 사용하는 것이 유지보수면에서 좋다(암호화 방식을 변경하면 일일히 수정해주어야하기때문!) PasswordEncoder는 ..
Paging 구현 org.springframework.data.domain.Page : 페이징을 위한 클래스 org.springframework.data.domain.PageRequest : 현재 페이지와 한 페이지에 보여 줄 게시물 개수 등을 설정하여 페이징을 요청하는 클래스 org.springframework.data.domain.Pageable : 페이징을 처리하는 클래스 ** JPA 환경을 구축했다면 JPA 라이브러리에 포함되었으니 추가로 설치할 필요는 없다 Page findAll(Pageable pageable); Pageable 객체를 받아 Page 타입 객체 반환하는 findAll 메서드 작성 public Page getList(int page){ Pageable pageable= PageRequest.of(..
Validation 사용자로부터 입력받은 값을 검증하기 위해 사용하는 라이브러리 dependency 추가 implementation 'org.springframework.boot:spring-boot-starter-validation' @Size 문자 길이 제한 @NotNull Null을 허용 X @NotEmpty Null 또는 빈 문자열을 허용 X @Past 과거 날짜만 입력 가능 @Future 미래 날짜만 입력 가능 @FutureOrPresent 미래 또는 오늘 날자만 입력 가능 @Max 최댓값 이하의 값만 입력할 수 있도록 제한 @Min 최솟값 이상의 값만 입력할 수 있돌고 제한 @Pattern 입력값을 정규식 패턴으로 검증 https://wikidocs.net/book/7601
람다식 람다식 lambda expression * Java8에 추가된 기능 * 메서드를 간략한 식으로 표현 * 익명 함수라고도 불림 함수형 인터페이스 * 람다식 형태로 익명 클래스가 만들어질 수 있는 인터페이스 * 조건: 추상 메소드가 하나만 있어야함 * 람다식과 1:1 대응이 되어야 하기 때문 * @FunctionalInterface 달아줘야햠 함수형 인터페이스 예시 @FunctionalInterface public interface Toaster{ void toast(); } @FunctionalInterface public interface Param { int func(int i); } 람다식 예시 public class Test { public static void main(String[] args) ..
indexOf() 자바의 indexOf()는 특정문자의 위치를 찾아준다 없는 문자면 -1을 반환한다 사용법 String word="자바 indexOf() 자바함수"; System.out.println(word.indexOf("자")); System.out.println(word.indexOf("자",5)); System.out.println(word.indexOf("굥")); System.out.println(word.indexOf(1)); 결과 0 13 -1 -1
Queue 매번 철자가 헷갈리는 Queue .. 개념 먼저 집어 넣은 데이터가 먼저 나오는 선입선출(First In First Out)구조로 저장하는 방식 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용됨 외국에서 사람들이 버스 정류장에 선 줄을 Queue라고 하는데 먼저 선 사람들이 한명씩 버스에 타는 걸 상상하면 스택이랑 헷갈리지 않을 것이다. (스택은 그릇쌓기) Java에서 LinkedList를 이용해 구현 할 수 있다. 큐의 용어 put 큐에 자료를 넣는 것 get 큐에서 자료를 꺼내는 것 front 데이터를 get할 수 있는 위치 rear 데이터를 put할 수 있는 위치 peek front 데이터 반환 poll front 데이터 삭제 및 반환 Overflow 큐가 꽉 차서 자료를 넣을 ..
Stack 앞으로의 코딩테스트를 준비하여 유용한 자료구조나 알고리즘을 정리해두기로 했다. 개념 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조 (Last In First Out)으로 되어있다 Java에서 배열, 리스트, Stack 클래스를 이용하여 사용할 수 있다. 한마디로 그릇이 쌓인 모습을 생각하면 된다 주요 연산 top() 스택의 가장 위(최근에 넣은) 데이터 반환 pop() 스택의 가장 위(최근에 넣은) 데이터 삭제 push() 스택의 가장 윗 데이터로 top의 자리 위에 메모리를 생성 is_emtpy() 스택이 비었다면 True 아니라면 False 리스트로 구현한 스택 class Node{ int data; Node next; public Node(int data) { this.data = d..
DTO(Data Transfer Object) 서비스가 요청을 처리 후 클라이언트에게 반환할 때 Model 자체를 그대로 리턴하는 경우는 드물고 보통 DTO로 변환해 리턴한다. 이유는 다음과 같다 1. 비지니스 로직을 캡슐화 하기 위함 Model은 DB 테이블 구조와 매우 유사하다. 모델이 갖고 있는 필드는 테이블의 스키마와 비슷할 확률이 높다. 외부에서 DB의 스키마를 아는 것을 원치 않을 경우가 대다수이다. 이때 DTO를 사용하면 외부에 서비스 내부의 로직, DB구조 등을 숨길 수 있음 2. 클라이언트가 필요한 정보를 모델이 전부 포함하지 않는 경우가 많다. 만약 서비스 실행 도중 에러가 발생하면 이 메세지를 어디에 포함해야하는가 ,모델은 서비스 로직과는 관련이 없기 때문에 DTO에 에러 메세지를 포함한다.
JPA 쿼리 참고 https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html