분류 전체보기161 reified를 통해 generic type 정보 가져오기 generic을 사용하여 코드를 작성할 때, generic type의 정보를 사용하고 싶은 경우가 있을 것이다. 아래 코드는 generic을 사용하여 파라미터의 타입을 확인하는 함수이다. fun isInstanceOf(obj: Any): Boolean { println("check object(${obj::class}) is instance of ${T::class}") return obj is T } 하지만 generic은 compile 후 제거되기 때문에 위 코드와 같이 generic type을 직접적으로 사용하는 코드는 compile error를 낸다. 그래서 주로 아래와 같이 추가로 generic type과 같은 Class 타입의 파라미터를 받는 식으로 우회한다. fun isInstanceOf(o.. 2023. 1. 16. Kafka Partition key를 사용하여 데이터 순서대로 처리하기 Kafka에서 하나의 Topic은 여러 Partition으로 파티셔닝 될 수 있다. 하나의 Partition은 동일한 Consumer Group 내에서 하나의 Consumer에 의해 처리되기 때문에, Partition의 개수를 늘려 Consumer Group에 대해 하나의 Topic에 대한 처리량을 늘릴 수 있다. (참고: Can multiple Kafka consumers read the same message from a partition?) (* 하지만 Partition을 무조건 늘리는건 좋지 않다 - 참고: How to Choose the Number of Topics/Partitions in a Kafka Cluster?) Topic의 어느 Partition에 적재될지는 publish 할 때 p.. 2023. 1. 12. [Spring Data JPA] entity update 후 JpaRepository.save 호출에 관하여 통상적으로 Spring Data Jpa를 사용하면 Hibernate를 사용하게 되고, 그로인해 dirty checking도 사용하게 된다. 그렇기 때문에 아래와 같이 코드에 따로 update를 명시하지 않아도, entity의 변경을 감지하여 update 문이 실행된다. import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class UpdatePostService { private final Po.. 2023. 1. 9. [Java] List, Set, Map 구현체들 Java로 개발을 할 때 가장 많이 쓰이는 자료구조는 List, Set과 Map이며 이들은 모두 interface로 여러 구현체들을 제공한다. 하지만 대부분 관성적으로 ArrayList, HashSet, HashMap을 주로 사용한다. 각 자료 구조의 대표적인 기능은 구현체마다 모두 동일하기 단순히 자료를 담는 역할로써 단순히 위 구현체들을 쓰는건 크게 문제가 되지 않지만, 각 구현체는 엄연히 다른 기능을 한다. 이번 포스팅에서는 java.util 에서 기본적으로 제공해주는 List, Set, Map의 구현체들을 몇가지를 살펴보도록 하겠다. List List는 중복을 허용하는 데이터를 담는 역할을 한다. ArrayList ArrayList는 클래스 명에서도 나타내듯 List 내부에 Array를 두고, 이.. 2023. 1. 6. [springdoc-openapi] 고정 header 설정하기 서버 API 문서화 시 주로 간편한 설정과 직접 요청을 보낼 수 있는 UI를 제공하는 Swagger UI를 주로 사용한다. 하지만 실서비스 용 서버는 주로 인증 기능이 붙어있기 때문에 API 요청 시 인증 용 토큰 등이 필요한 경우가 대다수이다. 이번 포스팅에서는 springdoc-openapi를 사용하여 Swagger UI를 구성할 때, header 기반 인증을 처리하는 방법 중 하나로 고정 header를 설정하는 방법에 대해 알아보겠다. (org.springdoc:springdoc-openapi-ui:1.6.14 기준) (코드 예제는 여기에서 확인할 수 있다) ※ 참고 Springfox는 현재 maintain이 되고있지 않기 때문에, 되도록 springdoc-openapi를 사용하는 것을 추천한다. .. 2022. 12. 31. 2022년도 개발인생 연말정산 2022년 짧은 소회 개발을 업으로 삼은지도 5년이 가까워지고 있다. 예전에는 막연히 연차가 높아지면 개발이 더 쉬워질 줄 알았는데, 오히려 아는게 더 생기다보니 필요 이상으로 생각을 하는 경우도 생기고 가끔은 단순할 수 있는걸 더 꼬아서 생각할 때도 있어서 여전히 개발은 쉽지 않은 것 같다. 그래도 개발을 하면서 어느 부분을 더 신경을 써야할지, 문제가 생길 만한 부분은 어디인지 보이는게 많아지는 것 같다. 또 예전에는 기술적인 것만 팠었는데 서비스 사용성이나 프로젝트 매지닝 같은 부분도 신경을 쓰게 되는 것 같다. (그런걸 메인으로 고려해야하는 포지션에 있는건 아니지만 업무에서 중요한 부분이니...) 그리고 나이도 먹어가고 경력이 쌓이면서 말에 영향력이 생기는 것을 느낀다. "권력이 생긴다"라는 뜻 .. 2022. 12. 27. 이전 1 ··· 8 9 10 11 12 13 14 ··· 27 다음