CommonOAuth2Provider Spring Boot 2.0 버전(Spring Security 5 이상)에서 제공하는 enum 클래스이다. 구글, 깃허브, 페이스북, 옥타의 OAuth2.0 Provider들의 기본 설정을 포함하고 있다. CommonOAuth2Provider 을 사용하면 설정 파일에서 client-id 와 client-secret만 설정하면 되고 나머지 설정은 CommonOAuth2Provider에서 제공하는 기본 설정을 사용하면 된다. (입력하지 않아도 된다.) CommonOAuth2Provider에는 google의 기본 설정을 포함하기 때문에 client-id 와 client-secret 정보만 입력해주었다. 하지만 카카오와 네이버의 정보는 없기 때문에 provider 설정값을 ..
아래 코드는 postsRepository 결과로 넘어온 Posts의 Stream을 map을 통해 PostsListResponseDto로 변환 후 , List로 반환하는 메소드입니다. 코드를 좀 더 자세히 분석해보겠습니다. Java는 Stream API를 활용하여 리스트의 항목을 변환하고, 새로운 리스트로 만드는 작업을 수행합니다. 기존 반복문을 사용하는 방법에 비해 더 간결하게 코드 작성이 가능해집니다. 또 데이터의 변환, 필터링, 정렬 등 다양한 연산을 체이닝 방식으로 연결하여 실행하고 함수형 프로그래밍이 가능하게 해줍니다. public List findAllDesc(){ return postsRepository.findAllDesc().stream() .map(PostsResponseDto::new)..
템플릿 엔진이란? 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어이다. 문자열을 기반으로 HTML을 생성하며, 데이터가 변경될 때마다 전체 페이지나 특정 부분을 다시 렌더링하기 위해 서버에 요청을 보낼 수 있다. 서버 사이드 템플릿 엔진 화면 생성을 서버에서 Java 코드로 문자열을 만든 후, 문자열을 HTML로 변환하여 브라우저에 전달하는 방식이다. DB나 API에서 가져온 데이터를 템플릿에 넣어 HTML을 만들고 이를 클라이언트에 전달해준다. 고정된 부분은 템플릿으로 만들어두고 동적으로 변화되는 부분만 템플릿에 끼워 넣는 방식이다. 서버 사이드 템플릿 엔진은 JSP, Thymleaf, Velocity, Freemarker가 있다. (JSP는 명확하게 서버 템플릿 엔진은 아니지..
API를 만들기 위해선 총 3개의 클래스가 필요하다. Request 데이터를 받을 Dto Api 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service 우리가 흔히 하는 오해가 있다. 비즈니스 로직은 Service에서 처리하는 것이 아니다. 도메인에서 처리해야한다. 이를 위한 예시를 살펴보자 주문을 취소하는 비즈니스 로직을 개발해보자. 슈도코드로 로직을 구현하면 아래와 같다. @Transactional public Order cancelOrder(int orderId){ 1) 데이터베이스로부터 주문정보(Orders), 결제정보(Billing), 배송정보(Delivery)조회 2) 배송 취소를 해야하는지 확인 3) if(배송 중이라면){ 배송 취소로 변경 } 4) 각 테..
Lombok 롬복이란? 자바 라이브러리로 코드를 효율적으로 작성할 수 있도록 도와준다. 어노테이션을 사용하여 소스 코드 가독성을 증가시켜준다. 접근자, 생성자 자동 생성 @Getter, @Setter 필드에 어노테이션을 설정해주면 자동으로 get(), set() 메소드를 생성해준다. boolean 타입인 경우 is() 를 생성해준다. 필드가 아닌 클래스에 어노테이션을 선언해주면, 모든 필드에 접근자와 설정자가 자동으로 생성된다. 생성자 자동 생성 @NoArgsConstructor 파라미터가 없는 기본 생성자를 만들어 준다. @AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자를 만들어준다. @RequiredArgsConstructor final이나 @NonNull인 필드 값만 파라미..
JPA Auditing 이란? 엔티티에는 해당 데이터의 생성시간과 수정시간을 포함한다. 생성시간과 수정시간은 유지보수에 있어서 굉장히 중요한 정보이기 때문이다. 엔티티의 생성, 수정 서비스 로직이 실행될 때 날짜 데이터를 등록/수정하는 코드가 반복적으로 들어가야한다. 반복 작업을 해결하고자 JPA Auditing을 사용한다. Spring Data JPA는 Auditing이라는 기능을 제공한다. 엔티티가 생성되고 변경되는 그 시점을 감지하여 생성시각, 수정시각, 생성한 사람, 수정한 사람을 자동으로 기록할 수 있다. Auditing 사용 예제 BaseTimeEntity.java 생성시간과 수정시간은 대부분의 엔티티에서 사용되는 필드이기 때문에, 별개의 엔티티 클래스로 분리하고 다른 엔티티에서 상속받아서 사..
문제 상황 스프링부트 3.1.0 버전에서 mustache 파일 내 한글 깨짐 오류가 발생했다. 시도해본 것 html 내 내 태그 추가 -> 둘 다 넣어도 안됨 intelliJ 인코딩 설정 변경 Settings -> Editor -> File Encodings Global Encoding/Project Encoding/Default encoding for properties files 해결 방법 yml 파일 server: servlet: encoding: force-response: true properties 파일 server.servlet.encoding.force=true