| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- error
- 후기
- node
- kibana
- nodejs
- RCP
- Spring
- 인터페이스
- effective
- 독후감
- JPA
- java8
- 스프링
- 엘라스틱서치
- elasticsearch
- 자바
- javascript
- boot
- jface
- 자바스크립트
- Web
- MySQL
- 백준
- 알고리즘
- Spring Boot
- 이펙티브
- 리뷰
- Git
- java
- 맛집
- Today
- Total
목록web (195)
wedul
회사에서 사용하고 있는 서버가 파일관련 서버이다 보니 조건이 많아 호출에 대한 종류가 생각보다 많았다. 호출되는 api도 mvc server endpoint도 100개가 넘었고 내부에서 webclient로 호출하는 외부 api client도 100개가 넘었다. 어느날 새로운 api가 개발이 되고 선 배포 된 이후 실제 배포일자가 되서 호출이 되었는데 metric정보를 찾을수가 없었다. 처음에는 exporter에서 관련 tags cardinality가 높아서 정상 수집이 안되나 확인해봤지만 이슈가 없었고 각 서버에 들어가서 /actuator/prometheus를 통해 수집되는 메트릭 지표를 확인해봤는데 해당 endpoint가 없었다. 하나의 서버에서 이렇게 많은 api를 호출하는것도 호출받는것도 처음이어서..
회사에서 사용하고 있는 rpc library가 있는데 해당 rpc는 proto를 사용하는것이 아닌 java class로 만든 IDL을 사용하고 있다. https://youtu.be/iOoquUhKT5g method를 정의하고 method에 사용된 request, response 객체를 사용해서 rpc 호출을 하는 구조이다. 기존에 http로 통신하는 경우에는 spring rest docs를 사용하거나 spring swagger ui를 사용해서 api명세를 편하게 만들어서 외부 사용하는 팀에 전달 할 수 있었다. 하지만 java method기반으로 통신 프로토콜을 정의하는 방식에서는 swagger 기존 방식으로는 사용할 수 없기 때문에 이를 custom해줘야했다. 그 과정에서 문서를 만들기 위해서 cust..
lettuce를 사용해서 레디스를 사용을 하고 있었는데 어느날 갑자기 아래처럼 레디스 커넥션을 못잡는 이슈가 발생했다.org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: Master is currently unknown: [RedisMasterReplicaNode [redisURI=redis://xxx.xxx.com?timeout=20s, role=REPLICA]] 처음에는 aws 레디스쪽 이슈일것으로 의심했으나 레디스쪽에는 별다른 지표가 없었고 애플리케이션에서 커넥션을 사용하지 못하는 것 같았다. 이번에 배포 하면서 들어간 코드는 비동기 ..
spring batch에서 job param을 전달할 때 관용적으로 -를 붙여서 사용했다. 문제가 된 시점은 프로젝트에서 중복으로 돌면 안되는 배치에 preventrestart를 붙히고 돌리고 있는데 주기적으로 already job param으로 동작한 배치가 있다면서 배치가 자꾸 죽는 이슈가 발생했다. 원인을 파악하기 위해 디버깅을 하던 중 spring batch에서 job의 unique를 판단하는 부분에서 job param으로 전달하고 있는 값들을 job instance에 유니크로 확인하는데 사용을 못하고 있는 부분을 발견했다. 그림을 보면 알겠지만 실제 parameter는 push라는 형태로 전달 되지만 identifying이 false로 되어있는걸 확인할 수 있다. 이러다보니 job instan..
beta에는 restdocs를 만들어서 static/index.html에 위치시키고 싶었고 운영에 경우에는 이로직을 빼고 싶었다.그러기 위해서는 build시점에 profile을 전달받아야했고 그것에 따라서 로직 분리가 필요했다. 그러기 위해서는 ./gradlew build 시 param으로 값을 전달하고 그 전달한 값을 사용하여 빌드 로직을 분리해야했다. 우선 build를 할 build.gradle에 argument를 받는코드와 분기로직을 작성했다.bootJar { enabled = true String activeProfile = project.findProperty('profiles') ?: '' println "zone: $activeProfile" if (activeProfi..
저번에 작성했던 MapStruct를 사용하면서 겪은 이야기를 정리해본다. MapStruct를 사용하면 값을 매핑해야하는 여러 경우에서 편리하게 값을 매핑할 수 있다. 특히 Entity값을 외부로 내보내려고 값객체에 값을 저장할 때 유용하게 사용된다. 객체 생성 및 값 주입 방법 기본적으로 MapStruct에 경우 setter, constructor, builder를 사용하여 객체를 생성하고 값을 넣는다. 먼저 setter를 사용하는 경우를 살펴보자. 1. setter package com.wedul.mapstructtest.entity; import lombok.Builder; import lombok.Getter; import java.util.List; @Getter public class Accou..
Mapstruct를 통해 편하게 응답값을 매핑할 수 있도록 도와주는 라이브러리를 살펴본적 있다. https://wedul.site/703 만들면서 배우는 아키텍처 그리고 매핑 프레임워크 MapStruct를 사용한 매핑 만들면서 배우는 아키텍처 (Get Your Hands Dirty on Clean Architecture) 요새 읽던 책중에 'Get Your Hands Dirty on Clean Architecture' 책이 인상 깊었다. 원서로 팀원들과 스터디 하고 나서 인상깊어서 '만들면서 배 wedul.site 값을 매핑할 때 필드의 이름이 다를 경우에는 아래 처럼 Mapping애노테이션을 사용해서 source, target에 이름을 명시하여 이를 해결 할 수 있었다. @Mapping(source =..
Jpa join시 중복 엔티티 출력 현상 교실 (Classes 엔티티) package com.wedul.jpa.school; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; import java.util.List; @Getter @NoArgsConstructor @Entity @Table public class Classes { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String className; @OneToMany(cascade = CascadeType.AL..
package com.wedul.jpa.school; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; import java.util.List; @Getter @NoArgsConstructor @Entity @Table public class Classes { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String className; @OneToMany(cascade = CascadeType.ALL, mappedBy = "classes", orphanRemoval =..
엔티티에 연관되어 있는 다른 테이블의 데이터를 2개 이상 fetch join하려고 시도했다. 예를 들어보면 아래와 같이 Classes엔티티에 oneToMany관계인 student와 teacher 두개에 엔티티를 fetch join으로 가지고 오고자 했다. Classes.java package com.wedul.jpa.school; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; import java.util.List; @Getter @NoArgsConstructor @Entity @Table public class Classes { @Id @GeneratedValu..
