Spring Boot 3.x.x 부터는 JavaEE → Jakarta EE로 교체되었습니다. 그렇기 때문에 이전에 사용했던 Springfox는 현재 Spring Boot 3.x.x에 대한 업데이트가 이뤄지지 않고 현시점에는 사용할 수 없었습니다. Springdoc 공식문서에서 어떻게 적용할 수 있는지에 대한 자세한 방법이 나와있으니 참고하시면 좋을 것 같습니다. springdoc-openapi v2.0.2 의존성 추가 Spring Boot 3.x.x부터는 아래 의존성을 추가해주면 Swagger-ui 설정은 끝입니다. implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2" springdoc-openapi-ui → springdoc-..
1. 간단한 팩토리 패턴 먼저 간단한 팩토리를 만들어보고 이를 점진적으로 패턴을 적용하여 업그레이드 하는 식으로 진행해보겠습니다. 먼저 아래에 노트북을 생성하는 함수가 있습니다. 매개변수 type에 따라서 노트북을 생성하고 준비, 설정, 포장해서 최종적으로 노트북을 반환하게 됩니다. public NoteBook creatNoteBook(String type) { NoteBook noteBook; if(type.equals("Macbook")) { noteBook = new MackBook(); } else if (type.equals("LG Gram")) { noteBook = new LGGram(); } else if (type.equals("GalaxyBook")) { noteBook = new Ga..
시작하기 예전에는 배포하는 날이면 접속하는 사용자가 적은 새벽시간에 했다고 본적이 있습니다. 배포를 할 때에는 새로운 버전의 jar 파일을 배포할 서버로 복사시키고, 직접 SSH로 접속하여 jar를 변경하여 실행하는 것이였습니다. 이렇게 배포를 진행하면, 배포를 할 때마다 개발자의 많은 리소스가 들어간다는 단점과 jar를 바꿔끼는 그 찰나에 서비스가 끊긴다는 치명적인 단점이 존재합니다. 그래서 이번 시간에는 어떻게 하면 배포를 자동화하고, 또 기존 서비스를 정지시키지 않고 배포할 수 있는지 알아보도록 하겠습니다. 위에서 말한 이 무중단 배포에는 여러 방법들이 있습니다. Nginx로 무중단 배포 AWS에서 Blue-Green 무중단 배포 도커를 이용한 무중단 배포 이번 시간에는 하나의 서버가 있다고 가정하..
인덱싱 알고리즘 중 가장 일반적으로 사용되는 알고리즘. B는 Binary의 약자가 아닌, Balanced의 약자이다. 8.3.1 구조 및 특성 B-Tree의 구조 제일 상단에 있는 루트 노드, 중간에 있는 브랜치 노드, 가장 마지막에 있는 리프 노드가 있다. 리프 노드는 항상 실제 데이터 레코드를 찾아가기 위한 주소값을 가지고 있다. 인덱스들은 모두 정렬이 된 상태로 저장이 되어 있다. 실제 디스크의 저장된 데이터 파일의 레코드는 정렬되어있지 않다. 엄밀히 말하면, InnoDB에서는 레코드가 클러스터되어 저장되기 때문에 기본적으로 PK 순서로 정렬되어 저장된다. 데이터 레코드 구조 (InnoDB) 리프 노드와 데이터 파일의 구조를 자세하게 살펴보자. 데이터 파일에는 결국 PK를 저장하고 있는 B-Tree..
8.1 디스크 읽기 방식 HDD vs SSD 순차 I/O 방식은 사실 SSD가 HDD보다 조금 빠르거나 거의 비슷한 성능을 보인다. 하지만, 랜덤 I/O에서는 대략 5000배 정도 빠르다. 랜덤 I/O, 순차 I/O란? 순차 I/O는 데이터를 디스크에 저장하기 위해 데이터를 모아서 1 번 시스템에게 요청을 한다. 즉, 디스크 헤더를 1 번 움직였다. 랜덤 I/O는 각각의 데이터를 저장할 때마다 시스템에게 요청을 한다. 즉, 디스크 헤더를 n 번 움직였다. 결국, 순차 I/O는 랜덤 I/O보다 거의 3배정도 빠르다. 💡 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정된다고 볼 수 있다. 일반적으로, 쿼리를 튜닝하는 것은 랜덤 I/O를 줄이기 위함이다. 8..
도커 권한 문제 일반 유저가 도커 명령어를 사용할 때마다 Permission Denied가 떠서 sudo를 사용해야하는 불편함이 있습니다. 이때 해결방법은 여러가지가 있습니다. 제가 알아본 2가지 방법에 대해서 알아보겠습니다. 현재 사용자를 그룹에 추가 현재 로그인 된 유저를 docker 그룹에 추가하는 것으로 sudo 권한 없이 실행할 수 있습니다. sudo usermod -aG docker $USER logout # 로그아웃 후 다시 로그인 후 적용 하지만 위 방법은 써드파티(jenkins 등) 유저에 대해서는 적용이 어려웠습니다. docker.sock Docker CLI(도커 커맨드들)는 결국 docker.sock을 통해서 명령을 실행합니다. 그래서 docker.sock의 권한을 수정해주면 됩니다...