분류 전체보기
-
Spring swagger 적용 방법 (springdoc-openapi)백엔드 2023. 9. 18. 20:01
Swagger란? Swagger는 Open Api Specification(OAS)을 위한 프레임워크입니다. OAS는 RESTful 웹 서비스를 설명, 생산, 소비 및 시각화하기 위한 기계 판독 가능 인터페이스 정의 언어에 대한 사양을 뜻합니다. 직접 소스 코드를 보지 않고도 서비스를 이해할 수 있도록 해주는 것입니다. Swagger는 개발한 REST API를 편리하게 문서화해주고, 이를 통해서 관리 및 제 3의 사용자가 편리하게 API를 호출해보고 테스트 할 수 있는 프로젝트입니다. 다만, 주의할 점은 운영환경과 같은 외부에 노출되면 안되는 곳에서의 사용은 주의해야 합니다. Spring Boot에서는 springfox와 springdoc을 통해 Swagger를 사용할 수 있습니다. springfox의 ..
-
Spring Boot 독립된 test DB 구성 (MySQL, H2)백엔드 2023. 9. 15. 20:17
현재 MySQL을 이용해 프로젝트를 구성하고 있습니다. 또한, 테스트를 계속 진행할 예정이기 때문에 테스트에는 h2 DB를 활용해보려고 시도해보았습니다. 서버 실행할 때와 테스트를 실행할 때 다른 DB 환경에서 구동할 수 있도록 설정하는 과정에 대해 글을 남겨보도록 하겠습니다. 환경 application.yml spring: jpa: show-sql: true properties: hibernate: format_sql: true generate-ddl: true hibernate: ddl-auto: validate datasource: url: username: password: server: port: 8080 현재 DB로 mysql을 연결해서 사용하고 있는 상태입니다. 이 환경에 테스트를 할 때에는..
-
Rest Template으로 Server(Client) to Server 통신하기백엔드 2023. 9. 15. 10:49
Spring Boot 프로젝트를 통해 api를 설계해 Client로부터의 요청에 대한 응답을 내려줄 수 있었습니다. 이번 포스팅에서는 Server에서 다른 Server로 요청을 하고 이 요청에 대한 응답을 받는 방법에 대해 공부해보도록 하겠습니다. 예제 코드 Client ApiController @RestController @RequestMapping("/api/client") @RequestArgsConstructor public class ApiController { private final RestTemplateService restTemplateService; @GetMapping("/hello") public String getHello(){ return restTemplateService.he..
-
Spring filter, interceptor백엔드 2023. 9. 14. 11:32
오늘은 filter, interceptor에 대해 배워보도록 하겠습니다. 이전에 배웠던 AOP와 같이 서비스 로직으로부터 여러가지 다른 관점의 로직을 분리시켜줄 수 있는 기능입니다. 각각의 기능마다 어떤 차이가 있는지 살펴보도록 하겠습니다. Filter Web Application에서 관리되는 영역으로써 Spring Boot Framework에서 Client로부터 오는 요청/응답에 대해서 최초/최종 단계의 위치에 존재하며, 이를 통해서 요청/응답의 정보를 변경하거나, Spring에 의해서 데이터가 변환되기 전의 순수한 Client의 요청 응답 값을 확인할 수 있습니다. 유일하게 ServletRequest, ServletResponse의 객체를 변환할 수 있습니다. 주로 SpringFramework에서는 ..
-
Spring Validation백엔드 2023. 9. 13. 11:45
Validation Java에서는 null값에 대한 접근을 할 때 null pointer exception이 발생합니다. 이러한 부분을 방지하기 위해 미리 검증을 하는 과정이 필요한데 이를 validation이라고 합니다. 예시 public void service(String account, String password, int age){ if(account==null || password==null){ return ... } if (age == 0){ return ... } // 정상 로직 시작 } Validation은 검증해야 할 값이 많은 경우 코드의 길이가 많이 길어지게 됩니다. 구현에 따라서 달라질 수 있지만 Service 로직과 분리가 필요합니다. 흩어져 있는 경우 어디에서 검증을 하는지 알기..
-
백준 1516번 게임 개발, 1700번 멀티탭 스케줄링 (Python)알고리즘 2023. 9. 8. 09:49
1516번 게임 개발 건물을 짓는 속도와 이전에 지어져야하는 건물들이 주어질 경우, 모든 건물을 짓는데 걸리는 시간을 구하는 문제입니다. 전형적으로 Dynamic Programming를 활용해 풀 수 있는 문제라고 생각했습니다. dp에 저장할 값은 각 번호의 건물을 짓는데 걸리는 속도로 했습니다. 우선, 이전에 지어져야하는 건물이 없는 건물의 경우 자신만 지으면 되므로 건물을 짓는데 걸리는 시간을 dp에 저장했습니다. 그 이후 건물을 짓기 전 필요한 건물이 있을 경우 해당 건물들이 지어지는 속도를 우선 확인하도록 했습니다. 건물의 번호를 i라 할 때, dp[i]에 값이 존재한다면 그 값을 반환해주었고, 값이 없다면 해당 건물을 지을 때 필요한 시간을 측정해줍니다. dp[i]의 값은 (필요한 건물들의 건설..
-
백준 2225번 합분해, 2133번 타일 채우기 (Python, DP)알고리즘 2023. 9. 7. 11:16
2225번 합분해 0~N개의 숫자 K개를 더해서 N을 만드는 경우의 수를 구하는 문제입니다. 덧셈의 순서가 바뀐 경우 다른 경우로 셉니다. 풀이 다이나믹 프로그래밍을 이용해 이전의 결과값들을 저장해서 다음에 사용할 수 있도록 했습니다. dp 배열의 행은 N을 나타내고 열은 K를 나타내도록 2차 배열로 선언했습니다. 1️⃣ N이 1인 경우 K에 상관 없이 dp[1][k]=k입니다. 1을 1개의 숫자로 만드는 방법은 1 1을 2개의 숫자로 만드는 방법은 0+1, 1+0 1을 3개의 숫자로 만드는 방법은 0+0+1, 0+1+0, 1+0+0 ... 이므로 dp[1][i]=i 입니다. 2️⃣ k가 2인 경우 N에 상관 없이 dp[n][k] = n+1 입니다. 1을 2개의 숫자로 만드는 방법은 0+1, 1+0 2를..
-
Jpa Embedded백엔드 2023. 9. 6. 14:47
Jpa에서 converter를 이용해 DB에 저장하는 값과 객체에 저장하는 값을 다르게 하는 이유는 아무래도 가독성 높은 코드를 작성하기 위해서 일 것입니다. 이러한 것들을 가능하게 해주는 Entity의 Embedded 속성들을 살펴보도록 하겠습니다. 임베디드 타입으로 많이 선언하는 것은 Spring 프레임워크에서도 예시를 들어주고 있습니다. Example 1: @Embeddable public class EmploymentPeriod { @Temporal(DATE) java.util.Date startDate; @Temporal(DATE) java.util.Date endDate; ... } Example 2: @Embeddable public class PhoneNumber { protected St..