728x90 전체 글138 SQL - partition by 성능개선 row_number() over (partition by ~ order by ~) 문법을 사용하는 도중 성능 이슈 문제가 발견되어 몇 가지 개선방법을 기록하기 위해 글을 남깁니다. 1. partition by ~ order by ~ 사용할 때 partition by 컬럼과 order by 컬럼에 index를 걸어줍니다. 2. 만약 partition by 컬럼과 order by 컬럼이 한 테이블에 없다면, with book(brand_cd, wish_dt) as ( select brand_cd ,create_dt as wish_dt from ecomms.tpd_brand_bookmark book where book.mem_no = (select mem_no from "member".tmb_mem where.. 2021. 10. 7. Mongodb 생성 및 연결 Mongodb 회원 가입 이후 free db로 생성합니다. 생성이후 Network Access - ADD IP ADDRESS 를 통해서 외부에서 ip를 접근할 수 있게 접근망을 열어둡니다. 특정 포트나 특정 ip 등에 접근을 허용할 수 있습니다. 이후 Database Access - ADD NEW DATABASE USER 에서 DB에 접근할 계정을 만듭니다. 계정 마다 접근 권한을 설정할 수 있습니다. Databases 탭(구 cluster)에 들어가면 생성한 db의 인스턴스 정보를 볼 수 있습니다. Databases - connect - connect your application 으로 들어가면 연결 코드를 복사할 수 있습니다. 예시) mongodb+srv://test1234:@cluster0.hzah.. 2021. 10. 5. SQL - Array 정리 SQL Array가 다 비슷비슷해보여서 구분하고 정리할 필요가 있어 포스트합니다. 대표적으로 ARRAY, ARRAY_AGG, ARRAY_TO_STRING, STRING_AGG을 구분하겠습니다. ARRAY ARRAY는 select ARRAY[1,2,3]::int8[]; 와 같이 element를 모아서 배열 형식으로 만들 수 있습니다. 배열을 만들 때 자료형만 주의하면 손쉽게 데이터를 배열로 호출할 수 있습니다. 또한 ARRAY는 서브쿼리를 통해서 배열 데이터를 만들 수 있습니다. select ARRAY(select prd_no from tpd_prd limit 5)::integer[] ARRAY_AGG ARRAY_AGG는 ARRAY와 같이 배열을 만들어주지만 차이점이 있습니다. ARRAY_AGG는 from.. 2021. 10. 5. SQL - LATERAL Lateral은 PostSql에만 있는 문법입니다. join할 때 각 row 별로 for-each문처럼 join할 row를 고를 수 있습니다. 또한 lateral 안에서는 외부 스코프를 볼 수 있습니다. 즉, 외부에서 변수 개념으로 컬럼 값을 넘겨줄 수 있습니다. select * from tpd_prd prd left join lateral ( select SUM(tstc.real_stck_qty) as stck_qty , SUM(tstc.temp_stck_qty) as temp_stck_qty from ecomms.tpd_stock tstc inner join ecomms.tpd_opt_value val on prd.prd_no=tstc.prd_no and val.stock_no=tstc.stock_n.. 2021. 10. 5. Spring Boot - Swagger Swagger 란 Swagger 란 개발한 REST API를 편리하게 문서화해주고, 이를 통해서 관리 및 제 3의 사용자가 편리하게 API를 호출해보고 테스트할 수 있는 프로젝트이다. Spring Boot에서는 간단하게 springfox-boot-starter를 gradle dependencies에 추가함으로 사용할 수 있다. 다만, 주의할 점은 운영환경과 같은 외부에 노출되면 안되는 곳에는 사용할 땐 주의해야한다. Swagger Annotation Swagger 라이브러리 적용 maven repository에 접속해서 springfox를 검색하여 swagger 관련 라이브러리를 찾을 수 있습니다. https://mvnrepository.com/ 예전에는 SpringFox Swagger2, SpringF.. 2021. 10. 1. Java - JUnit과 Mock JUnit Java 기반의 단위 테스트를 위한 프레임워크 Annotation 기반으로 테스트를 지원하며, Assert를 통하여, (예상, 실제)를 통해 검증합니다. Junit을 사용하기 위해 2가지 의존성을 추가해야합니다. mockito-core, mockito-junit-jupiter https://mvnrepository.com/search?q=mockito // https://mvnrepository.com/artifact/org.mockito/mockito-core testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.12.4' // https://mvnrepository.com/artifact/org.mockito/.. 2021. 9. 27. Spring Boot - 서버 간 통신 예제 예제 RestTemplate - getForEntity 서버 간의 통신을 위한 client 서버를 우선 만듭니다. client 서버를 통해서 다른 서버와 http 통신을 하여 response를 받아옵니다. package com.example.client.controller; import com.example.client.dto.Req; import com.example.client.dto.UserResponse; import com.example.client.service.RestTemplateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation... 2021. 9. 26. Spring Boot - 서버 간 통신 RestTemplate 정의 Spring Boot - 서버 간 통신 파트는 RestTemplate 라이브러리의 개념편과 예제편으로 따로 정리하여 포스트할 예정입니다. 바로 RestTemplate 라이브러리 개념부터 가겠습니다. RestTemplate이란 spring 3.0 부터 지원한다. 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿이며, HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다. jdbcTemplate 처럼 RestTemplate 도 기계적이고 반복적인 코드들을 깔끔하게 정리해준다 특징 기계적이고 반복적인 코드를 최대한 줄여줌 RESTful형식에 맞춤 json, xml 를 쉽게 응답받음 출처: https://sjh836.tistory.com/141 [빨간색코딩] RestTemplate 의 .. 2021. 9. 25. Spring Boot - Interceptor Interceptor Interceptor란 fIlter와 매우 유사한 형태로 존재 하지만, 차이점은 Spring Context에 등록 됩니다. AOP와 유사한 기능을 제공할 수 있으며, 주로 인증 단계를 처리하거나 Logging를 하는데 사용합니다. 이를 선/후 처리함으로써, Service business logic과 분리 시킵니다. Client에서 요청을 하면 다음과 같은 순서로 실행됩니다. Filter -> Interceptor -> AOP -> Controller Interceptor 예제 - 어노테이션으로 권한 체크 @RestController @RequestMapping("/api/private") @Auth @Slf4j public class PrivateController { @GetMap.. 2021. 9. 23. Spring Boot - Exception 구현 예제 Valid 라이브러리를 이용하여 예외처리(Exception)를 하는 예제를 살펴보겠습니다. 저번 포스트에 다루었던 Exception을 좀 더 확장하여 예제 중심으로 보겠습니다. 이번 예제에서는 lombok을 사용합니다. 해당 의존성을 추가해서 사용하시면됩니다. compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' package com.example.exception.dto; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.Min; import javax.validation.constraints.N.. 2021. 9. 13. Spring Boot - Filter Filter Filter란 Web Application에서 관리되는 영역으로써 Srping Boot Framework에서 Client로부터 오는 요청/응답에 대해서 최초/최종 단계의 위치에 존재하며, 이를 통해서 요청/응답의 정보를 변경하거나, Srping에 의해서 데이터가 변환되기 전의 순수한 Client의 요청/응답 값을 확인할 수 있습니다. 유일하게 ServletRequest, ServletResponse의 객체를 변환할 수 있습니다. 주로 Spring Framework에서는 request/response의 Logging 용도로 활용하거나, 인증과 관련된 Logis들을 해당 Filter에서 처리합니다. 이를 선/후 처리함으로써, Service business logic과 분리시킵니다. Client에.. 2021. 9. 12. Spring Boot - Exception 개괄 이전 글에 다루었던 Validation 라이브러리 편을 먼저 보시는 것을 권장합니다. https://getthismoment.tistory.com/84 validation과 함께 사용해야하는 exception 예외 처리에 관해서 알아봅시다. Spring boot에 내장되어있는 라이브러리 중에 예외처리를 손쉽게 도와주는 라이브러리가 있습니다. try/catch 나 throw exception 형식으로 주로 예외처리를 하지만, exception 라이브러리는 상황에 따라서 특정값을 예외처리하거나 사용자 정의에 의해서 예외처리를 하고 싶은 경우 유용하게 사용할 수 있습니다. 전역 예외 처리 @RestControllerAdvice @RestControllerAdvice public class GlobalContr.. 2021. 9. 10. Spring Boot - Validation 스프링 부트에서 손쉽게 Request 파라미터의 유효성 검사를 하는 라이브러리를 소개합니다.Validation 라이브러리는 dto에 어노테이션만 붙임으로써, Request 파라미터의 유효성 검사를 합니다. 또한 커스덤해서 유효성 검사를 할 수 있고 유효성에 맞지않으면 Response Message도 커스덤할 수 있기에 꾀나 유용하게 사용할 수 있습니다. Validation 라이브러리를 사용하기 위해서 다음과 같은 의존성을 추가 합니다.(Gradle 기준)implementation("org.springframework.boot:spring-boot-starter-validation") Validation 주요 어노테이션 Validation 사용 예제@RestController@RequestMappin.. 2021. 9. 9. Spring Boot - Annotation 참고자료 2021. 9. 7. Java - ObjectMapper의 JsonNode, ObjectNode, ArrayNode JsonNode 라이브러리 JsonNode 라이브러리는 전송받은 Json 데이터를 변경하거나 Json 데이터를 만들 때 유용하게 사용할 수 있는 라이브러리입니다. Json 트리에 직접적으로 접근해서 Json 데이터를 수정하거나 추가할 수 있습니다. DTO 객체의 set()을 이용해서 값을 수정할 수 있지만, Json 데이터로 변경해서 ObjectNode를 통해 각각의 제이슨 노드를 통해서도 값을 수정할 수 있습니다. JsonNode 라이브러리를 사용하기 위해서는 다음과 같은 의존성을 추가합니다. (gradle 기준) // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind implementation group: 'c.. 2021. 9. 7. 이전 1 2 3 4 5 6 7 8 ··· 10 다음 728x90