본문 바로가기

백엔드35

[Lombok] @Builder.Default - @Builder 사용 시 필드값 초기화 방법 Lombok에서 @Builder 어노테이션 사용 시 필드 초기화를 하면 아래와 같은 경고가 발생하는 이유 및 해결방법! warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final. DTO에서 @Builder 어노테이션과 함께 필드 초기화를 하면 위와 같은 경고가 발생한다. 해석하자면, @Builder는 초기화 표현을 완전히 무시한다. 초기화 표현식으로 default.. 2023. 8. 13.
[Swagger] 2. Swagger3에서 Group별로 Tag 설정하기(feat. OpenApiCustomiser) 목차 1) Group이 하나일 때 비어있는 Tag(API가 없는 태그)는 Swagger-ui에 미노출하기 2) SwaggerConfig에서 path에 따라 그룹을 나누고 각 그룹별로 Tag 리스트 관리하기 API가 많아지면서 각 API를 path나 package에 따라 Group으로 나누고 해당 그룹 내에서 Tag를 별도로 관리하고 싶다는 니즈가 있었고, 추가로 Tag를 클래스 단위가 아니라 메서드에 달았을 때는 description을 작성할 수 없어서 name과 description을 모두 사용할 수 있도록 Tag를 한 번에 관리하고 싶었다. 구글링했을 때 나오듯이 SwaggerConfig에서 프로젝트에서 사용하는 모든 태그를 한 번에 관리할 수도 있지만 그 경우에 태그를 해당 그룹에서 사용하지 않더라.. 2023. 5. 16.
[Checkstyle이란?] Google과 Naver에서 적용한 정책 비교(+정책설명) 이번에 직접 팀에서 진행하고 있는 프로젝트에 코드 컨벤션을 정하고, Checkstyle을 도입하여 컨벤션을 강제화 하는 작업을 진행했다. Java의 코드 컨벤션과 구글, 네이버에서는 각각 어떤 정책을 사용하고 있는지 구글링을 통해 많이 공부했는데, Checkstyle 적용 내용은 나오지만 막상 그게 무슨 정책인지 어렵고 Google과 Naver가 각각 어떤 정책들을 선택해서 적용하고 있는지 한 눈에 파악하기 어려워서 직접 정리해보았다!! 그래서 각 회사별 어떤 정책을 수용했는지 정리하고, 최종적으로 우리 프로젝트에 적합한 정책들을 선별하여 적용시켰다 :) Checkstyle이란? 프로젝트 빌드 시 프로젝트 내에서 정한 코드컨벤션을 지켰는지 확인하는 플러그인으로 Checkstyle 내의 설정에 따라 컨벤션.. 2023. 5. 8.
[Swagger3] 1. springdoc-openapi를 이용한 Swagger3 설정하기(+Swagger 옵션) Swagger 기본 설정 및 Swagger에서 제공하는 기본 옵션에 대해 알아보자! 1) build.gradle dependencies 안에 openapi-ui 추가 //swagger implementation 'org.springdoc:springdoc-openapi-ui:1.7.0' 2) application.yaml springdoc: api-docs: path: /api-docs# api-docs url: localhost:8080/api-docs groups: enabled: true# group 허용 swagger-ui: path: /index.html# swagger url : localhost:8080/swagger-ui/index.html enabled: true groups-order:.. 2023. 5. 5.
[ELK] 2. Kibana에서 Teams WebhookURL로 에러 모니터링하기 이전 글에서는 Kibana Alert을 통해 Slack으로 500 에러 모니터링 설정하기를 진행해보았다. 사실 원래 목적은 Teams로 에러 모니터링을 하는 것이었는데, Teams는 Trigger 설정이 슬랙과는 조금 달라서 이번 글에서 자세히 정리해보려고 한다. 개요 Kibana Alert Monitor에 설정한 쿼리를 통해 추출한 결과 500 에러 리스트들을 모두 Teams로 확인하고 싶었다. Teams로 전송하고 싶은 정보는 1) 1분 내에 발생한 500 에러 개수, 2) 에러가 발생한 request URI, 3) 에러 메시지, 4) 에러 발생 시간 이다. 준비 Teams Webhook URL 복사해두기. 1. Alert - Monitor 생성하기 Destination 설정부터 Monitor 생성은.. 2023. 3. 13.
[ELK] 1. Kibana에서 Slack Webhook 모니터링 설정하기 서버에서 500 Error 발생 시 키바나를 통해 Slack으로 알림을 보내는 모니터링 설정 방법 알아보기 준비 Slack WebhookURL 복사해두기 1. Alerting - Monitor 생성하기 1) 좌측 상단 햄버거 버튼 클릭 후 Kibana - Alerting 으로 이동한다. 2) Destinations의 우측 상단 Add Destination 버튼을 눌러 준비해둔 Slack Webhook URL을 등록한다. 3) 다시 뒤로 돌아와 Monitors로 이동한 후 Create monitor 버튼을 통해 모니터 등록 화면으로 이동한다. 4) Monitor name에 모니터링 이름을 설정하고, Disable monitor는 체크 해제 한다.(캡쳐화면은 오류) Define monitor 영역에서 Def.. 2023. 3. 13.
[트러블 슈팅] Reflection 객체 내 @Autowired NullPointerException 발생 1. 이슈 Reflection으로 동적 생성한 객체 내 @Autowired된 변수 접근 시 NPE(NullPointerException) 발생 2. 상세 내용 Reflection을 이용하여 객체를 동적으로 생성. -> method.invoke를 이용하여 객체 내 메서드를 실행 -> InvocationTargetException 발생. -> 원인을 확인해보니 실행된 메서드 내에서 @Autowired된 변수에 접근 시 NPE 발생 문제가 된 코드 Class targetClass = Class.forName(className); Object instance = targetClass.getDeclaredConstructor().newInstance(); Method method = targetClass.getD.. 2022. 10. 8.
[Java] 왜 배열은 Covariant(공변)이고 제네릭은 Invariant(불공변)일까? 자바에는 Variance(변성)이라는 개념이 있다. 변성은 타입의 계층 관계에서 서로 다른 타입 간에 어떠한 관계가 있는지 나타낸다. 변성의 개념은 자바의 Generic에서도 사용된다. 오늘의 주제인 Covariant(공변), Contravariant(반공변), Invariant(불공변)는 모두 변성의 한 종류이다. 각각의 개념을 간단하게 설명하면 아래와 같다. Covariant - SubType[]은 SuperType[]이다. (ex - String[]은 Object[]이다.) Contravariant - SuperType[]은 SubType[]이다. (ex - Object[]은 String[]이다.) Invariant - SubType[]은 SuperType[]이 아니고, SuperType[]은 Su.. 2022. 7. 22.
[Java] Covariant Return Type이란? 객체지향 프로그래밍에서 메소드의 Covariant Return Type이란 서브 클래스에서 오버라이딩된 메소드의 리턴 타입을 “더 좁은" 타입으로 지정할 수 있는 것이다. * 자바의 Covariant(공변)에 대한 자세한 내용은 다음 게시글을 보면 도움이 된다. 자바에서 Covariant Return Type은 Java 1.5부터 허용되었다. 코드로 확인해보자. 예를 들어 B가 A를 상속받는 subclass라고 하고, A타입을 반환하는 C의 get() 메소드를 오버라이딩할 때 똑같이 A를 반환하지 않고 A의 서브타입인 B를 반환해도 문제가 발생하지 않는다. (원래 오버라이딩한 메소드에서 리턴타입이 맞지 않을 경우 컴파일 타임에 The return type is incompatible with ... 라는.. 2022. 7. 15.
반응형