728x90

Programming 275

Spring - Swagger API 명세 작성

Swagger 의존성 추가 (Gradle) Swagger 설정 추가 API 그룹 설정 API 상세 정보 설정 API Data Schema API Response * 본 Swagger는 Spring 3.x Java 17에서 작성되었다. Swagger Swagger는 API 문서화 및 테스트 도구로서, 개발자가 RESTful API를 더 쉽게 문서화하고 API 엔드포인트를 테스트하고 이해할 수 있도록 돕는 오픈소스 프레임워크다. 1. API 스펙 정의 / 2. 자동 문서화의 장점이 있다. Swagger 의존성 추가 (Gradle) implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' Spring 3.x 버전에서는 위 코드를 Grad..

Programming/TMP 2023.12.21

DB 대용량 데이터 처리, 동시성 이슈 해결 방법 (Redis)

Synchronized 사용 Synchronized의 문제점 DB를 활용한 데이터 정합성 맞추기 Pessimistic Lock Optimistic Lock Named Lock Lettuce Redisson 간단한 로직을 통해 재고 감소 코드를 아래와 같이 작성한다고 가정한다. - StockService.java @Service public class StockService { private final StockRepositroy stockRepositroy; public StockService(StockRepositroy stockRepositroy) { this.stockRepositroy = stockRepositroy; } @Transactional public void decrease(Long i..

Programming/Redis 2023.12.19

Docker - 초간단 Docker 사용법 (Spring, EC2)

- Docker Docker는 컨테이너 기반 가상화 기술을 사용하여 애플리케이션을 패키징하고 배포하는 오픈 소스 플랫폼이다. Docker를 사용하면 코드를 컨테이너 이미지로 패키징하고, 이미지를 독립적으로 실행 할 수 있다. Docker의 주요 특징은 1. 이식성 2. 빠른 배포 3. 확장성 4. 자동화 의 장점이 있다. 주요 특징을 가지고 소프트웨어 개발 및 배포 프로세스를 단순화하고, 애플리케이션의 이식성과 확장성을 향상시키는 데 도움이 된다. https://www.docker.com/ Docker: Accelerated Container Application Development Docker is a platform designed to help developers build, share, and ..

Programming/CI, CD 2023.12.14

CodingTest - 정렬 (Comparable, compareTo, Collections.sort)

Comparable : 해당 인터페이스는 객체의 비교를 제공하기 위해 구현된다. compareTo() : Comparable 인터페이스의 일부로, 비교하려는 두 객체를 인자로 받아 비교 결과를 반환한다. Collections.sort : 해당 메서드를 사용하여 리스트의 요소를 정렬할 때, 해당 요소들의 compareTo 메서드가 호출되어 정렬이 수행된다. - 기본 구조 public int compareTo(Integer other) { return this.value - other.value; } - Example import java.util.*; class Point implements Comparable{ public int x, y; Point(int x, int y){ this.x=x; this..

Spring - Spring <-> AWS S3 첨부 파일 업로드, 삭제 (첨부 파일 업로드 수정 및 삭제)

1. S3 생성 AWS S3를 통해 bucket을 생성한다. - bucket : 다수의 객체를 관리하는 컨테이너로 파일시스템이라고 보면 된다. 체크를 하지 않으면 public으로 해당 버킷에 접근 할 수 있다. public으로 접근 가능하다는 것은 외부에서 해당 버킷에 접근이 가능하다는 뜻이다. 2. 사용자 생성 (IAM) AWS IAM을 통해 사용자를 생성한다. 사용자의 권한 정책으로 AmazonS3FullAccess 권한을 부여해준다. 3. 액세스 키 생성 새롭게 생성한 사용자를 선택하여 액세스 키를 생성해준다. 생성한 액세스키, 비밀 액세스 키는 따로 확인 가능하도록 보관해놓는다. 4. 스프링 연동 4.1. build.gradle 의존성 추가 implementation 'org.springframe..

Programming/Spring 2023.12.12

Spring - REST API 간단한 연습 (RestController 사용)

지금까지 프로젝트를 진행하면서 REST API에 대한 반환값으로 String 즉, View로 전달하는 방식을 많이 사용하였다. @RestController를 사용하는 방법 또한 크게 다른점은 없지만 많이 사용해보지 않았기 때문에 익숙함을 위해 연습하기 위한 작은 프로젝트다. - ERD - RestaurantApi.java @RequiredArgsConstructor @RestController public class RestaurantApi { private final RestaurantService restaurantService; @GetMapping("/restaurants") public List getRestaurants() { return restaurantService.getAllRestau..

Programming/Spring 2023.11.27

Spring Test Code 관련 - (MockMvc 등... 여러가지)

- MockMvc - MockMvc 1. Spring MVC 컨트롤러를 테스트하기 위해 사용된다. 이를 통해 웹 애플리케이션의 HTTP 요청과 응답을 시뮬레이션하고 테스트하는 것이 가능하다. - @AutoConfigureMockMvc 1. Mock 객체를 자동 주입하기 위해 사용한다. @SpringBootTest @AutoConfigureMockMvc public class MyControllerTest { @Autowired private MockMvc mockMvc; // 테스트 코드 작성 } 2. 위와 같이 MockMvc를 주입 받아 테스트 코드를 작성 할 수 있다. - ObjectMapper 1. JSON 데이터와 Java 객체 간의 변환을 수행하는 데 사용되는 라이브러리다. @Test @Disp..

Programming/Spring 2023.11.19

Spring - 페이징, Querydsl RE

- Page - Pageable - PageRequest - 페이징 구성 예시 - Querydsl - JpaQueryFactory - Querydsl 추가 및 예시 - 페이징, Querydsl 적용 - Page - Page는 페이징된 데이터와 페이징 정보를 포함하는 객체이다. 쿼리 결과의 일부 데이터를 나타내며, 페이지 정보, 총 항목 수, 페이지 번호, 데이터 목록 등을 포함한다. getContent() 현재 페이지의 데이터 목록을 반환한다. getTotalPages() 총 페이지 수를 반환한다. getTotalElements() 전체 항목 수를 반환한다. getNumber() 현재 페이지 번호를 반환한다. getSize() 페이지 크기 (한 페이지당 항목 수)를 반환한다. - Pageable - Pa..

Programming/Spring 2023.11.14

CodingTest - Recursive, Tree, Graph(DFS, BFS 기초)

1. 재귀 함수 2. DFS 깊이 우선 탐색 2.1. 스텍 프레임 3. BFS 레벨, 너비 우선 탐색 - 재귀 함수 - 재귀 함수는 자기 자신을 호출하는 함수를 말한다. - 기본적으로 if else를 통해 특정 조건에 자기 자신을 호출하여 원하는 값을 도출해낸다. - 재귀 함수를 이용한 팩토리얼 import java.util.Scanner; class Main { public int DFS(int v) { if (v == 1) { return 1; } else { return v * DFS(v - 1); } } public static void main(String[] args) { Main main = new Main(); Scanner scanner = new Scanner(System.in); in..

CodingTest - Sorting and Searching(정렬, 이분 검색과 결정 알고리즘)

1. 선택 정렬 2. 버블 정렬 3. 삽입 정렬 4. 삽입 정렬 예제 5. 이분 검색, 결정 알고리즘 6. 이분 검색, 결정 알고리즘 예제 - 선택 정렬 1. 선택 정렬은 정렬 알고리즘 중 하나이다. 2. n(n-1)/2번, 즉 O(n^2)의 시간 복잡도를 가지므로 대규모 데이터에 대해 효율적이지 않다. - 버블 정렬 1. 버블 정렬은 정렬 알고리즘 중 하나이다. 2. 시간 복잡도가 O(n^2)의 시간 복잡도를 가지므로 선택 정렬과 마찬가지로 대규모 데이터에 대해 효율적이지 않다. for(int i=0; itmp) arr[j+1]=arr[j]; else break; } arr[j+1]=tmp; } return arr; 1. 배열의 두번째 인덱스를 기준으로 잡는다. 2. 기준 인덱스보다 작은 인덱스 중 기..

728x90