목록전체 글 (68)
우당탕탕 개발일지

AWS S3 + CloudFront AWS 프리티어 요금제에서는 S3의 경우 5GB가 넘지 않으면 12개월 무료로 사용이 가능하고, CloudFront의 경우, 데이터 송신량이 1TB 이하이고 요청 수가 10,000,000건 이하라면 무료로 사용이 가능하다. 그래서 프론트는 AWS S3 + CloudFront + Route53 을 사용하여 배포할 계획이다. Route53 호스팅 영역 생성 먼저 가비아에서 도메인 구매를 진행한 후, 호스팅 영역을 생성해준다. 가비아 네임서버 등록호스팅 영역을 생성하면 ns 유형으로 값/트래픽 라우팅 대상이 나오는데 이 값들을 가비아의 네임 서버 1차 ~ 4차에 등록해주어야 한다. 참고로 값 맨 뒤에 붙는 .은 빼주어야 등록이 가능하다. AWS S3버킷 이름 : docto..

큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO 형식의 자료구조이다. 우선순위 큐(Priority Queue)는 요소가 특정 우선순위에 따라 정렬되는 큐 인터페이스의 구현체로, 항상 우선순위가 높은 요소를 먼저 꺼낼 수 있다. 기본적으로 우선순위 큐는 힙(Heap) 자료구조를 기반으로 동작한다. 힙이란? 이진 트리 기반의 자료구조로, 특정 규칙에 따라 부모 노드와 자식 노드 간의 관계를 유지하며 최댓값 또는 최솟값을 찾아내는 연산이 빠르다. 힙은 최대 힙, 최소힙 두 가지 유형으로 구분된다. Java에서는 힙을 PriorityQueue 클래스를 사용해 구현할 수 있다.주로 오름차순, 내림차순 정렬 방식을 이용하여 큐를 정의한다.오름차순 PriorityQueue pq = new Priorit..

플로이드 워셜이란 그래프 최단 경로를 구하는 알고리즘 중 하나로, 모든 정점에서 모든 정점까지 최단 거리를 구하는 알고리즘이다. 플로이드 워셜 알고리즘의 점화식은 다음과 같다. 다익스트라 알고리즘과 비슷해보이지만, 소스코드가 다익스트라에 비해 짧고 구현이 쉽다. 다익스트라 알고리즘단계마다 최단 거리를 가지는 노드를 하나씩 반복적으로 선택한다.1차원 리스트에 저장한다. 플로이드-워셜 알고리즘모든 지점에서 다른 모든 지점까지의 최단 거리를 저장한다.2차원 테이블에 저장한다.for (int k = 0; k [ BOJ 11403 ] 경로 찾기https://www.acmicpc.net/problem/11403 처음에는 그래프 인접 리스트로 만들어 풀이를 하였으나 간과한 부분이 있었다. 1. 경로 탐색i → ..

스케줄링이란 일정한 시간 간격으로 반복적인 작업을 수행하는 도구이다. 스프링 부트 애플리케이션에서는 주기적인 작업을 스케줄링하기 위한 어노테이션 기반의 방법을 제공한다. @Scheduled 어노테이션을 사용하면 일정한 시간 혹은 특정 시간에 코드가 실행되도록 설정할 수 있다. 스케줄러 속성fixedDelay: 메서드의 실행이 끝난 시간을 기준으로, 설정된 밀리세컨드 간격마다 실행fixedRate: 메서드의 실행이 시작하는 시간을 기준으로, 설정된 밀리세컨드 간격마다 실행initialDelay: 설정된 밀리세컨드 시간 후부터 fixedDelay 간격마다 실행cron: Cron 표현식을 사용하여 설정한 시간에 실행* fixedDelay의 경우 해당 작업이 끝난 시점부터 시간을 측정하고, fixedRate의 ..

최근 개발 중인 프로젝트에서 Postman을 통해 API를 호출하여 테스트를 진행했지만, 유저 데이터를 수작업으로 입력하다 보니 입력 실수나 불완전한 데이터로 인해 테스트 결과가 일관되지 않거나 예상과 다르게 나오는 경우가 발생하였다. 위와 같은 문제를 해결하기 위해 테스트 코드를 도입하게 되었다. 단위 테스트(Unit Test)란, 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 여기서 모듈은 하나의 기능 또는 메서드이다. 단위 테스트는 해당 부분만 독립적으로 테스트하기 때문에 문제점을 빠르게 확인할 수 있다. 이러한 이유로 최근에는 TTD (Test-Driven-Development) 라는 테스트 주도 개발이 많이 사용되고 있다. 일반적으로 개발 흐름이 코드를 작성한 후 테..

Redis는 데이터를 주로 메모리에 저장하기에 매우 빠른 데이터 액세스 속도를 제공한다. RefreshToken의 경우, 자주 액세스 되는 데이터이기 때문에 데이터를 캐시로 사용하는 데 매우 효과적이었다. 가장 큰 장점은 Time to Live (TTL) 설정을 통하여 만료 시간을 설정하는 기능을 가지고 있다. Redis 사용 순서는 다음과 같았다. 1. 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2. application.yml 작성spring: data: redis: host: localhost port: 6379 password: ${REDIS_PASSWORD} # ..

스프링에서 API 응답 방식으로 보통 ResponseEntity 방식을 사용한다. ResponseEntity는 응답의 상태 코드와 데이터를 포함하지만, 각 API마다 응답 형식이 달라진다. API 공통 응답 구조는 API 개발 및 유지보수의 효율성을 높이며 클라이언트에게도 일관성 있는 응답을 전송하는 것은 중요하다. API 공통 응답 패키지 구조는 다음과 같다. common ├─constants ├─ ErrorCode └─ SuccessCode ├─dto ├─ ApiErrorResponse └─ ApiSuccessResponse ├─exceptions ├─ GeneralException └─ GlobalExceptionHa..

Swagger는 Spring-Fox, Spring-Doc 2가지 라이브러리가 존재한다.Spring-Fox는 오래전에 나온 라이브러리이기 때문에, Spring-Doc를 사용할 예정이다. 1. 의존성 추가dependencies { . . . //Security implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.security:spring-security-test' // swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4' } 2. SwaggerConfig..