전체 글

전체 글

    [DB] MySQL 샘플 데이터

    [DB] MySQL 샘플 데이터

    MySQL 을 공부하다보면 데이터 샘플이 필요할 때가 있는데 MySQL 홈페이지에서 제공하는 데이터가 있다. https://dev.mysql.com/doc/index-other.html 데이터 다운로드 Employee 데이터를 GitHub에서 다운받을 수 있다. $> unzip test_db-master.zip $> cd test_db-master/ 압축을 풀고 엔진 세팅을 해준다. set storage_engine = InnoDB; -- set storage_engine = MyISAM; -- set storage_engine = Falcon; -- set storage_engine = PBXT; -- set storage_engine = Maria; git clone 으로도 사용이 가능하다. Inte..

    [SQL 튜닝] 옵티마이저(optimizer)

    옵티마이저란? SQL을 가장 빠르고 효율적으로 수행할 최적(최적비용)의 처리 경로를 생성해주는 DBMS 내부의 핵심엔진이다. 개발자가 SQL을 작성하고 실행하면 즉시 실행되는 것이 아니라 옵티마이저에서 해당 쿼리문을 어떻게 실행시킬지 실행계획을 세우고 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떻게 분포 되어있는지 참조하고 데이터를 기반으로 최적의 실행 계획을 처리해준다. 옵티마이저 종류 옵티마이저는 실행 계획을 세우는 방식에 따라 규칙 기반 옵티마이저와 비용 기반 옵티마이저로 나뉜다. 규칙 기반 옵티마이저 실행 속도가 빠른 수능로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택하는 것이다. 과거에 옵티마이저의 비용 예측하는 능력이 좋지 않아 해당 방식을 사용했었다. 우선순위는 다음과 같다..

    [자료구조] B-Tree, B+Tree

    [자료구조] B-Tree, B+Tree

    B-Tree, B+Tree는 학부때 공부하면서 배우지만 내용을 다시 정리하는 이유는 InnoDB 의 엔진이 B+Tree로 이루어져 있고 B+Tree는 B-Tree 의 확장된 개념으로 InnoDB에 대해 공부할 겸 두개의 내용에 대해서 정리하고자 한다. B-Tree B트리라고 부르고, 트리 자료 구조의 일종으로 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조이다. B-Tree는 자료를 정렬된 상태로 유지되어 있는것이 특징이다. key값을 이용해 찾고자 하는 데이터를 트리 구조를 이용해 찾는 것이다. B-Tree의 장점으로는 어떤 값에 대해서도 같은 시간에 결과를 얻을 수 있다.(균일성) 사각형으로 표시된 한개 한개를 '노드(Node)' 라고 한다. 가장 상단의..

    [Spring] Swagger Error - Failed to load API definition.

    [Spring] Swagger Error - Failed to load API definition.

    Failed to load API definition. Fetch error undefined http://localhost:8080/v3/api-docs Spring 에서 Swagger3을 사용하고 있는데 해당 오류가 발생했다. 해결 방법 (1) Spring Security도 사용하고 있어서 permitAll()을 사용했다. ... .antMatchers("/swagger-ui/**", "/v3/api-docs/").permitAll(); 해결 방법 (2) permitAll을 사용해도 안된다면 @ApiImplicitParam 이라는 어노테이션을 사용하고 있을때 @RequestBody와 요구되는 Param이 일치하지 않아서 생기는 오류일 수 있어서 해당 부분도 확인해보면 좋다.

    [JPA] Swagger Error - [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

    Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 이유 NullPointerException이 발생한 이유는 Query 조건 중에 Null이 들어갔기 때문이다. 해결방법 쿼리에 Null이 안들어가도록 수정해주면 된다.

    [Spring] Spring HATEOAS란

    [Spring] Spring HATEOAS란

    HATEOAS란 Hypermedia As The Engine Of Application State 약자로 REST API의 필수 구성요소 중 하나이다. Spring HATEOAS 는 스프링 프로젝트중에 하나인데 이 프로젝트의 목적은 REST API를 보다 쉽고 편리하게 사용할 수 있게 일종의 툴을 제공해주는 프레임워크이다. REST API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는것을 의미하는데 이러한 방법은 특정 API 요청 시 어떠한 행동을 할 수 있는지 URL을 전달하여 클라이언트가 참고해 사용할 수 있고 리소스 정보 뿐만 아니라 리소스 상태에 따라 다양한 링크 정보가 바뀌며 동적으로 리소스를 구성한다. 즉, 높은 수준에서 클라이언트와 서버를 분리시키고, 의존성을 줄여..

    [JPA] List to Page - List를 Page로 변환해서 사용하기

    JPA 에서 제공하는 Page를 사용하고 싶은데 데이터를 가공해서 사용하다 보니 List 로 결과가 나오고 있어서 List를 Page로 변환해서 사용하고자 한다. 아래 코드를 참고해서 List 를 Page로 변환해서 사용하면 된다. 방법1 Page pageResult = (Page) PageUtils.makePageResponse(list, pageable); 페이징 처리를 위한 공통 코드 public static Page makePageResponse(List list, Pageable paging, int totalCount) { try { return (new PageImpl(list, paging, totalCount)); } catch (Exception e) { return (new PageI..

    [CKA] Udemy - Mock Exam3 문제풀이

    [CKA] Udemy - Mock Exam3 문제풀이

    Q1.Create a new service account with the name pvviewer. Grant this Service account access to list all PersistentVolumes in the cluster by creating an appropriate cluster role called pvviewer-role and ClusterRoleBinding called pvviewer-role-binding. Next, create a pod called pvviewer with the image: redis and serviceAccount: pvviewer in the default namespace. ServiceAccount: pvviewer ClusterRole:..

    [JPA] JsonMappingException: Infinite recursion (StackOverflowError) 오류

    [JPA] JsonMappingException: Infinite recursion (StackOverflowError) 오류

    이슈 원인 Member 엔티티와 Company 엔티티간의 연관관계가 있는데 Company 엔티티에서 JSON으로 반환하는 과정에서 생긴에러로 Company에더 LAZY JOIN을 해도 JSON으로 변환하는 중 직렬화(serialize) 과정을 거치는데 Member에 Company가 있어서 Company를 참조하고, Company에 있는 Member 를 참조하면서 무한 재귀가 발생했다. 해결방법 @JsonIgnore 참조하는 엔티티에서 (재귀를 일으키는) 필드에 @JsonIgnore 를 추가한다. DTO 생성 엔티티로 반환하지 않고 리턴용 DTO를 따로 만들어서 사용한다. 해결 나는 두번째 해결 방법인 DTO로 반환해도 해당 문제가 생겼는데 DTO 에서 엔티티 정보 전체를 가져오는게 있다보니 생기는 문제였..

    실전! 스프링 데이터 JPA 내용 정리 - 섹션 4(1)

    실전! 스프링 데이터 JPA 내용 정리 - 섹션 4(1)

    실무에서 JPA를 사용하는데 개념적인 부분을 집고 넘어가면 좋을 것 같아서 강의를 보게 되었고 인프런 강의를 보고 내용 정리를 해보았다. 프로젝트 어노테이션 @NoArgsConstructor(AccessLevel.PROTECTED) 엔티티에서 레벨을 protected 까지로 한다 Protected 로 설정하는 이유는 무분별한 객체 생성에 대해 한번 더 체크할 수 있게 한다. 그러나 @Builder와 같이 사용하고 싶다면 AllArgsConstructor 와 같이 사용하거나 @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) 안에 @Builder를 계속적으로 선언해서 사용해야한다. @Builder 를 사용하면 의미있..