728x90 반응형 Spring136 리눅스 기본 명령어 정리 - 최신화(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. QueryDsl 설정 방법 - Spring boot 2.7.x + 23.02.03 수정 + 23.02.04 내용추가 ( Unable to load class 'com.mysema.codegen.model.Type'. 에러 ) https://www.inflearn.com/questions/355723/compilequerydsl-%EC%98%A4%EB%A5%98 compileQuerydsl 오류 - 인프런 | 질문 & 답변 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼 www.inflearn.com 김영한님의 실전 Querydsl 강의를 시작하고 Querydsl 설정방법에 대해 간단히 정리하고자 합니다. 강의의 버전은 2.. 2023. 2. 3. List 타입을 Page 타입으로 리팩토링 현재 JPA 를 이용해서 페이징 기능을 사용하고 있으나, 불필요한 Response 생성 및 API 를 클라이언트에게 보내줄때 좀 더 편리하게 사용할 수 있도록 리팩토링을 하려고 합니다. 먼저 현재 코드를 보면 아래와 같습니다. 이전에 가장 중요한 것은 어떤 반환값이든 엔티티를 반환값으로 사용하지 않습니다. 엔티티가 변경되면 API 를 사용하고 있는 화면에 장애가 발생할 수 있기 때문에 Dto 클래스를 필수로 사용합니다. List 타입을 갖고 있는 것을 볼 수 있는데, GoodsPageResponse를 따로 만들어준 이유는 페이징에 필요한 정보만 축약해서 응답해주려고 만들었습니다. // 상품 전체 조회 @GetMapping("/goods") @ResponseStatus(HttpStatus.OK) @ApiO.. 2023. 1. 28. JPA N+1 문제 알아보기 프로젝트에서 페이징이 걸려있는 상품 전체 조회 및 키워드로 검색할 시에 N + 1 문제가 발생하여 해결방법에 대해 알아보고자 한다. 현재 Goods 엔티티에서는 2개 이상의 컬렉션이 있고, 페이징이 걸려있기 때문에 fetch join으로 해결할 수 없어 batch size를 통한 방법을 알아보았다. 뿐만 아니라 N+1 문제의 원인 , 해결방법에 대해 학습한 내용을 정리하려고 한다. N+1 문제로 인해 대량의 데이터가 있는 애플리케이션이 아니라면 성능에 상관없이는 그냥 지나칠 수 있는 문제이지만,성능 개선을 위해서는 필요한 지식이라고 생각한다. 학습하면서 생각해보았다.상황에 맞추어 적절한 방법을 선택해야겠지만, 지연로딩은 필수로 사용하며 페이징과 List 컬렉션을 사용해야 한다면 Batch Size 를 사.. 2023. 1. 25. 이전 1 2 3 4 5 6 7 8 ··· 16 다음 728x90 반응형