spring
-
enum 활용기개발/java 2024. 9. 11. 09:58
enum을 통해 단순 코드를 비교할뿐만 아니라 특정 코드에 따라 bean을 가져와 method를 동작할 수 있다 예를 들어 고객이 주문을 힐때 특정 조건에 따라 가격을 할인 받는 정책을 정하거나 그 이후 api에 동일한 데이터를 전송하는 경우와 같은 작업을 할때이다 이때 주목할점이 유사한 데이터라는 점이고 이를 특정 조건에 따라 데이터의 일부만 변경하고 그걸통해 특정 기능을 수행하거나 특정 api , 특정 mq , kafka에 전송을 하면 된다는 점이다이때 enum을 이용하면 if else와 같은 형태로 혹시 method 형태로가 아닌 특정 클래스 형태로 파일들을 관리 할 수 있다 코드는 아래와 같은 형태가 될 것이다할인과 관련된 부분을 interface를 통해 동일 메소드를 받게 하고 bean n..
-
CompletableFuture개발/java 2024. 9. 5. 14:19
multi Thread를 통한 성능 개선 단일 Thread를 통해 작업을 수행하게 되면 많은 서비스를 수행하는 로직에서는 동작이 다소 지연 되는 경우가 있다.이 경우 Thread를 추가하여 작업을 main Thread가 아닌 다른 Thread에 작업을 배정함으로써 속도를 향상 시킬 수 있다 그 중 CompletableFuture를 통해 성능을 개선한 사례를 소개하려 한다 CompletableFuture의 경우 ForkJoin을 통해 스레드 풀을 할당받으며 반환 값이 있는 supplayAsync method와 반환 값이 없는 runAsync를 통해 다중 스레드로 작업을 할 당 할 수 있다 또한 아래와 같이 ThreadPoolTaskExecutor를 직접 생성하여 작업별 할당 스레드를 직접 선언하는 것..
-
mybatis로 jpa 흉내내기개발/java 2024. 9. 3. 13:18
mybatis의 경우 jdbc를 통해 코드와 db를 혼합하여 작성하는 방식에서 둘을 분리하게 구현함으로써 유지 보수 및 개발을 함에 있어 간편하고 쉽게 만들었다 그 이후 JPA가 도입됨에 따라 DB table에 따라 구현하는 방식이 서비스를 구현하는 것이 아닌 실 서비스를 세분화하여 ORM에 좀 더 다가갈 수 있게 되었다 그러나 특정 이유로 JPA를 사용하지 못하는 경우 mybatis에서 제공하는 new SQL() 과 ProviderMethodResolver를 통해서 별도 쿼리 작성 없이 동적으로 만들 수 있는 방법이 있다. import org.apache.ibatis.builder.annotation.ProviderMethodResolver;//mybatis 인터페이스 ProviderMethodRe..
-
kafka 설계개발/kafka 2024. 8. 20. 09:20
크게 pub 브로커 sub 으로 구성된다. pub 시점에 시리얼라이즈를 통해 key와 value를 보낸다. 이를 브로커가 적절한 양을 판단 후 sub(컨슈머) 그룹에 보내게 된다. (key 단위 ) sub의 경우 batch로 받을 지 single로 받을지 판단할 수 있다. pub 주요 config ProducerConfig.COMPRESSION_TYPE_CONFIG - 압축유형 ProducerConfig.LINGER_MS_CONFIG - pub 대기 시간 ProducerConfig.MAX_REQUEST_SIZE_CONFIG -pub max 용량 ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG - key 시리얼라이즈 ProducerConfig.VALUE_SERIALIZER_CL..
-
dynamodb write개발/AWS 2024. 8. 20. 08:45
dynamodb에서 write의 경우 로우별 write와 데이터를 묶어서 write를 할 수 있는 기능이 있다.그 중 데이터를 묶어서 write를 하는 경우를 보려고 한다. 모든 api가 그렇듯 네트워크 비용이 증가하면 그만큼 지연이 발생한다 대량건을 빠른 시간 내에 처리를 해야하는 구조라면 로우별 write 보단 bulk 별 write를 고려할 수 있다. nosql인 dynamodb의 경우 key value 형태로 데이터가 저장되므로 aws model인 AttributeValue로 데이터를 변환하는 과정을 거쳐야 한다 AttributeValue 에는 다양한 형태가 있다 1. withS - 말 그대로 String 형태로 변환하는거로 tmp : "123" 같은 형태로 들어간다. 2. withL - Lis..
-
Exception 분리개발/java 2024. 8. 19. 16:43
고객사이드오류가 발생할 경우 Exception을 처리를 보통 하는데 이 경우 고객에게 500에러를 보여줄 수는 없다 1.HttpStatusCode를 변경하고 errorMessage에 고객 사이드에서 발생 시킬 오류를 전달한다 시스템사이드 시스템 내부에서는 빠른 에러 감지를 위해 어떤 에러가 발생했는지 파악을 쉽게 해야한다 그러기 위해 Exception을 분리를 하는게 좋다 예를 들어 APIException , SystemException , MessageException 과 같은 방식이다 그 후 각 서비스 별로 Exception을 호출 하며 ExceptionHandler를 통해 Exception 별 log를 출력한다
-
enum개발/java 2021. 12. 12. 13:52
enum이란 멀까요, 그리고 왜 사용을 할까요 저는 코드 내에 특정 예외로직을 넣을 경우 하드코딩으로 IF문을 넣어 equals를 사용하여 왔습니다. 또한 개발을 할때 공통적인 코드의 경우 주로 DB 조회를 통해서 많이 사용하여 왔습니다. 그러다 보니 코드 자체가 지저분해지는 것은 물론이고 변경이 어렵고 관리가 어렵다는 것을 알게되었습니다. 주로 아래 두가지의 경우에 enum을 활용하면 코드를 읽기 쉽고 간결하게 작성할 수 있습니다. 1.특정 예외로직을 넣을 경우 하드코딩으로 IF문을 넣어 equals를 사용 어떤 예외가 추가 or 변경될경우 해당 소스를 찾아 추가 혹은 변경을 해줘야합니다. 추가 사항이 많아질수록 코드가 지저분해지며 이는 다른이들로 하여금 코드 해석을 어렵게 만듭니다. 2.공통적인 코드..