일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바로그
- 자연변수
- jpa
- ReactAdmin
- 네트워크 io
- Cross-Zone Load Balancing
- UNION 열
- Routing Policies
- superset-oracle
- querydsl-sql
- 람다 캡쳐링
- queryDsl #JPA #hibernate
- Connection Draining
- oracle
- CannotGetJdbcConnectionException
- ContentCachingRequestWrapper
- afterCompletion
- RequestBody로깅
- hikari cp
- reflection API
- Duration-Based Cookie
- 스프링
- aws
- 아파치 드루이드
- ChatGPT
- Application-Based Cookie
- Route53
- 슬로우 쿼리
- 코딩삽질일기
- SSR #CSR
- Today
- Total
목록알쓸신코 (38)
Forest Gump?
코드를 짜다가 습관적으로 int로 변수를 선언 후 람다 식 내부에서 사용하려고 했지만, 컴파일 오류가 나왔다. 아 맞다 캡쳐링! 이라는 생각과 Atomic 클래스로 래핑시켜주려다가, 선언 안되는 이유가 기억이 안나 다시 한번 복기한다. 코드는 다음과 같다. public void capturing(){ List lists = Arrays.asList("apple","banana","peach"); int count = 0; lists.forEach(fruits -> { try { rabbitTemplate.convertAndSend(exchangeName, routingKey,"object"); count++; // 컴파일 에러가 나온다. } catch (Exception e) { e.printStackT..
로그백 설정을 하다가, http requestBody와 responseBody가 찍히면 좋을것 같다고 생각해서 찍으려고 했다. @preHandle에서 URL이나 Method 로깅하는 식으로 하면 되겠다 하고 HandlerInterceptor를 상속받아 오버라이딩 해서 request 객체의 메소드를 봤지만..! header와 url 그리고 getMethod 등등이 존재하지만 중요한 requestBody객체가 없어 구글링을 해봤다. ContentCachingRequestWrapper 을 사용하면 된다! 라는 답을 받고 찾아봤다. ContentCachingRequestWrapper 이란? 스프링에서는 기본적으로 RequestPacade / ResponsePacade라는 요청을 통해 request/respons..
개요 프로젝트를 진행 중, 간헐적으로 DB peak를 치는 현상이 발생했다 . 점점 사용하는 aws rds cpu 퍼센테이지가 상승 곡선을 그리면서 95프로 이상 alert이 자주 오길래(ㅠㅠ), 정말 위험함을 온몸으로 느끼고 해결 방안을 찾아봤다. 1차 임시 해결 메인 rds는 오라클 하나만 쓰고 있고 멀티 AZ 전략도 취하고 있지 않아서, 일단 무지성 클래스 유형 업그레이드를 했다. 서비스는 해야하니까 올리긴 했지만, 평균 70-80사이였던 DB 평균 부하 30퍼센트대로 하락한걸 보고 마음이 많이 놓였다. 역시 돈이 최고다.. 라는 일그러진 생각이 들다가 근본적인 해결법이 아니라, 부하 피크 이유 분석을 시작했다. 원인 원인을 찾으려고, AWS RDS에서 제공하는 성능 계선 도우미에서 상위 호스트를 ..
CI ( Continuous Integration) CD ( Continous deply) 지속적인 통합과 지속적인 배포의 준말이다. ec2 인스턴스를 만들고, jenkins 를 설치해 CI/CD 를 구축하려고 했다. 그런데! 찾아보다 보니 github Actions 이라는 도구가 새로 나왔다고 했다. 심지어 간편하다고 하다. 새로운건 빠르게 적용시켜보고 싶어서, 젠킨스 대신 사용해보려고 한다 . 각각의 용어의 명칭은 다음과 같다. Workflows: 작업 뭉치 Events: 작업 뭉치 동작하는 이벤트, push, release, pull request, 스케줄, 등 Jobs: 동시 수행 가능한 작업 단위 Runners: Job 실행되는 곳. GitHub이 제공하는 가상 머신(Linux, macOS, W..
error: cannot find symbol String message = makeMessage(targetToken, title, body, Message.Data.builder().build()); 푸쉬 테스트 프로그램 진행중에, cannot find symbol method builder() 오류가 나왔다. 왜 롬복의 builder method 를 못찾는건가 하고 찾아봤다. 컴파일 이전에 annotationProcessor 가 선언 되어야지만 먼저 builder method 생성이 되고, 그 후에 가능하다 고 해서 추가해줬다 . annotationProcessor('org.projectlombok:lombok') 문제 없이 실행이 되니 , 궁금해졌다. 왜 annotationProcessor 선언을..
프로젝트 진행 중에, 오라클 시퀀스를 사용해야 해서 NEXTVAL 함수를 사용하려고 했었다. 처음에 사용하려고 했던 방법은 다음과 같다 . var a = entityManager.createNativeQuery("select sequenceName.NEXTVAL from dual").getSingleResult(); 기본적으로 queryFactory Bean 등록을 할때, entityManager을 파라미터로 등록해줘서 jpql을 이용하는건 아무 문제가 없었다. 사용한 문제의(?) configuration 코드는 다음과 같다. @Configuration @RequiredArgsConstructor public class QuerydslConfiguration { @PersistenceContext pri..
잘안쓰는 레거시 프로그램의 서버가 다운됐다는 소리를 듣고 급하게 repo를 받아서 실행했다.거의 deprecated된 레거시 프로젝트라 급하게 환경 설정을 맞춘 후 프로젝트를 겨우 실행이 됐다. gradle 설정이 자꾸 안먹혀서 다시 보니 , gradle.wrapper 폴더가 없어서 최신 환경으로 세팅이 되어 해당 의존성들과 버전 문제로 생각보다 시간 소모를 많이 했다. 환경 설정은 경험을 하면 할수록 조금은 더 빨라지는것 같다. 로그를 보면 특정 메소드에 대한 api 요청이 오고 나서 장렬히 전사했다. 그밖에 다른곳에 문제는 없어 보여서 , 데이터 값에 버퍼가 많이 걸려 부하로 서버가 죽었겠거니 생각했다. 근데 왠걸, 실행을 하고 해당 api 요청을 날려보니 쎄한 느낌이 들었다. 설마 쿼리 문제..
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'FCMService': Injection of autowired dependencies failed 구글 파이어베이스 연동중, 따로 autowired 주입을 한것도 없는데, autowired 의존성 주입이 실패했다는 메세지가 떴다. Circular reference(순환 참조)의 위험성 때문에, 또 객체를 생성할 때 최초 한번만 호출이 됨으로 불변함을 유지할 수 있다. 그리고 무엇보다 스프링에서 권장하는 의존성 주입이다! 라는 이유로 거의 공식처럼 외우고 사용하고 있었는데 , 최근들어 강의에서도 몇몇 강사분들이 autowired을 사용하는것을 봐서 ..
오늘은 RestTemplate 을 사용하려고 의존성을 주입해주고, 불러와서 쓰려고 하는데 갑자기 오류가 났다. NoClassDefFoundError: org/apache/http/impl/client/HttpClients] with root cause java.lang.ClassNotFoundException: org.apache.http.impl.client.HttpClients at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders..
자바 바인딩을 알아보자. 오버로딩(Overloading)과 오버라이딩(Overriding)을 공부할 때 오버로딩은 정적 바인딩되고 오버라이딩은 동적 바인딩된다고 하였다. 그렇다면 여기서 말하는 바인딩은 무엇일까? 이에 대해서 한번 공부 및 정리해 보려고 한다. 바인딩(Binding)이란 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위를 의미한다. 즉, 프로그램에서 사용되는 변수나 메서드 등 모든 것들이 결정되도록 연결해주는 것을 뜻한다. 이러한 바인딩은 바인딩이 되는 시점에 따라 정적 바인딩과 동적 바인딩으로 구분할 수 있다. 그렇다면 왜 오버로딩은 정적 바인딩이며 오버라이딩은 동적 바인딩일까? 오버로딩은 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 ..