본문 바로가기

Spring130

RestTemplate의 개념과 기본 사용법 스프링에서 제공하는 HTTP 통신 기능을 쉽게 사용할 수 있게 설계되어 있는 템플릿입니다. HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킬수 있으며 동기 방식으로 처리됩니다. REST 서비스를 호출하도록 설계되어 HTTP 프로토콜의 메소드에 맞게 여러 메소드를 제공합니다. + 스프링 5.0 이후 부터는 WebClient 를 사용하기를 권장합니다. https://tecoble.techcourse.co.kr/post/2021-07-25-resttemplate-webclient/ RestTemplate과 WebClient 이 글은 자바에서 HTTP 요청을 써봤거나 써보려고 하는 독자를 대상을 작성하였습니다. 스프링 어플리케이션에서 HTTP 요청할 때 사용하는 방법으로 RestTemplate과 W.. 2023. 2. 26.
JPA 벌크 연산 처리 방법 및 주의점 JPA 에서 벌크 연산을 하는 방법에 대해 알아보겠습니다. 먼저, 벌크 연산은 말 그대로 어떤 조건이나 상황에 따라 한번에 연산(수정) 하는 것을 의미합니다. 가장 중요한 개념은, 벌크 연산 시 SQL 을 실행하는 것이기 때문에 1차 캐시를 거치지 않고 바로 DB 로 접근해서 값을 수정합니다. 따라서, 1차 캐시를 초기화 하지 않으면, 수정한 데이터의 DB 값과 1차 캐시에 있는 값의 정합성이 다르게 됩니다. 예시는 스프링 데이터 JPA 강의 및 QueryDsl 내용을 참고했습니다. 2가지 방법으로 나뉩니다. 스프링 데이터 JPA 를 사용하지 않는 방법과 스프링 데이터 JPA 를 사용한 방법으로 나뉩니다. 먼저 첫번째 스프링 데이터 JPA 를 사용하지 않는 방법입니다. 예시는 정해진 age 보다 크거나 .. 2023. 2. 25.
@queryProjection 이란 ? querydsl 프로젝트를 하면서 Dto 생성자에 @queryProjection 을 사용하는 코드를 보았습니다. 간단히, Q타입의 파일을 만들어주어, repository 에서 querydsl 코드를 작성할 때 도움을 주는 것으로 학습했는데, 조금 더 자세히 살펴보려고 합니다. 먼저, Projection 은 select 절에 대상을 지정하는 것입니다. 즉 테이블에서 원하는 컬럼만 뽑아서 조회할 수 있습니다. Entity를 직접 사용하면 불필요한 데이터 값을 넘길 수 있는데, 원하는 컬럼만 뽑아 사용한다면 더욱 효율적인 코드를 작성할 수 있기에 충분히 사용할만한 가치가 있다고 생각합니다. 편리하지만 아키텍처에 관련해 고려해야 할 점이 있습니다. Dto 클래스의 생성자가 QueryDsl 에 의존하게 됩니다. .. 2023. 2. 24.
리눅스 기본 명령어 정리 - 최신화(23.02.21) 프로젝트 진행 및 배포, 다른 다양한 작업을 하면서 리눅스를 사용할 일이 많아 질 거 같습니다. 이전에 프로젝트를 할 때, 찾아가면서 간단한 명령어만 사용했지만, 조금 더 능숙하게 해야 하는 것은 필수 인 것 같습니다. 여러 블로그를 통해 내가 써보았고, 경력있으신 분들이 자주 사용했던 내용을 정리했습니다. 1. 폴더 이동 관련 - pwd : 현재 폴더 위치 조회 - cd [폴더경로] : 폴더로 이동 - cd ~ : 홈 폴더로 이동 - cd / : 최상위 폴더로 이동 - cd . : 현재 폴더 - cd .. : 이전(상위) 폴더로 이동 2. 폴더 위치 확인 - ls : 현재 위치의 파일 목록 조회 - ls -l : 파일의 상세정보 조회 - ls -a : 숨긴 파일 표시 - ls -t : 파일 생성 시간순.. 2023. 2. 21.
Service 인터페이스는 거의 사용하지 않는다. 프로젝트를 하다보면 다양한 인터페이스를 만들고 인터페이스를 구현하는 형식으로 진행하는 경우가 많습니다. 이전 프로젝트에서는 Service 를 모두 인터페이스로 먼저 생성하고 구현을 진행을 했습니다. 전략패턴이라는 것을 배우면서 갈아끼우는 것이 미래에도 굉장히 좋은 선택이다 라고 생각해 무지성으로 작성했던 것 같습니다. 아래처럼 서비스 인터페이스를 만들고 구현 클래스를 따로 만들어서 로직을 구현했습니다. 막상 작성해보니, 일단 DI 를 사용할 일이 없었고, 작성할 코드량이 많아졌으며 메서드 네이밍이나 매개변수의 타입 등을 변경할 때 인터페이스에서도 고쳐야하는 번거로움이 생겼습니다. 그 중에 장점을 하나 뽑자면, 개인적으로는 메서드(어떤 기능을 하는지) 를 한눈에 볼 수 있다는 점이 있었습니다. public.. 2023. 2. 19.
JWT 토큰 + @AuthenticationPrincipal @AuthenticationPrincipal 어노테이션을 사용하면 JWT 토큰 정보에 필터링 된 유저정보를 Controller 에서 간단히 가져올 수 있습니다. 이번 포스팅에서 변경해볼 사항은 SecurityContextHolder (이전) -> @AuthenticationPrincipal(변경) 해보겠습니다. Spring Security 에서는 인증된 사용자 정보를 SecurityContextHolder 내부의 SecurityContext 에 Authentication 객체로 저장을 하고 이후 필요할 때 꺼내어 사용합니다. SecurityContextHolder 에 저장된 회원을 꺼내어 사용하는 방법을 알아보겠습니다. 먼저 해당 어노테이션을 몰랐을 때, 사용했던 방법은 아래와 같은 방법을 통해 auth.. 2023. 2. 11.
SpringSecurity Enum 타입으로 권한 설정하기 사전과제로 여러 요구사항 중 권한을 부여하는 요구가 있어 정리했습니다. 이전에 프로젝트할 때 구현을 해보았을 때 권한부분에서는 순조로웠는데, 이번에는 403 에러가 계속 발생해 설정에 관한 부분을 다시 한번 학습할 수 있었습니다. 권한을 Enum 으로 지정한 클래스입니다. Enum 으로 지정한 이유는 잘못된 권한(값) 이 들어오지 않도록 하기 위해서 입니다. 3가지 권한이 있는데 여기서 실수가 있었습니다. ROLE_ 을 안붙여줘서 403 에러가 발생했습니다. 붙여야 하는 이유는 SpringSecurity 가 prefix를 자동으로 "ROLE_" 을 넣어주기 때문입니다. @Getter public enum AccountType { ROLE_LESSOR("임대인"), ROLE_REALTOR("공인중개사"),.. 2023. 2. 7.
querydsl 다중 조건 검색 만들기 https://josteady.tistory.com/848 이전에 학습하려고 간단히 예제를 만들어보고, 개인프로젝트에 적용해보려고 합니다. 전 포스팅에서는 0원 이상 0원 이하의 조건으로 검색했으나, 이번에는 카테고리를 추가해보려고 합니다. querydsl 를 위한 customRepository는 이전에 만들었으니 바로 코드를 확인해보겠습니다. public class GoodsRepositoryImpl implements GoodsRepositoryCustom { private final JPAQueryFactory queryFactory; private final CategoryRepository categoryRepository; public GoodsRepositoryImpl(EntityManage.. 2023. 2. 5.
Querydsl 동적 쿼리 - 기초 예제 Querydsl 학습을 하면서 기초이지만, 기초를 토대로 응용할 수 있기때문에 정리해보았습니다. 동적쿼리에 관련된 코드를 짜지 못해보았는데 연습하면서 접해볼 수 있어서 동적쿼리가 무엇인지, Querydsl를 왜 사용해야하는지 알게되었습니다. 해당 예제는 Dto 타입을 조회하는 것이 아닌 Entity 를 조회하는 예제입니다. 만들 예제는 아주아주 간단한, 설정한 값 사이에 있는 상품을 조회하는 것 입니다. 실제로, 상품이 000원~ 000원 사이의 상품을 검색해본 경험이 많아서 주제로 선택했습니다. 스프링 데이터 JPA 인터페이스를 따로 만들어주고, 사용자 정의 인터페이스를 하나 더 작성해주었습니다. 먼저, 스프링 데이터 JPA 인터페이스를 만들었습니다. 기본적인 CRUD 기능을 자동으로 지원해줍니다. G.. 2023. 2. 4.