본문 바로가기

개발 관련78

Feign 사용 (1) 이번 API 통신을 하면서 Feign 을 사용해봤는데, 어떻게 사용했는지 적어보고자 함. Feign 이란? Java to HTTP client binder Netflix 에서 개발함 https://github.com/OpenFeign/feign 이라고 간단하게만, API 통신을 이용해서 개발할 필요가 생겼는데, API 를 통하여 개발해 본 적이 없기에 그래서 무작정 구글링 시작 -> httpClient 를 이용해서 통신하는 것을 알게 됨 -> 관련 코드를 보면서 분석 시작 -> Spring 에서는 restTemplate 를 이용한다는 얘기를 들음 -> restTemplate 구글링 및 테스트 코드 작성 -> Feign 이라는 것을 들음 -> Feign 적용해보자 라는 흐름으로 진행. (무려 하루만에 진행.. 2022. 7. 14.
HandlerMethodArgumentResolver 사용 이전에 회사에서 다른 프로젝트 소스를 보다가 http 헤더에서 보낸 정보를 controller 단에서 바로 vo 로 매핑해주는 코드를 발견했다. 당시에 이거 꽤 유용하게 쓸 수 있겠네. 하고 지나가기만 했었는데, 이번에 기회가 생겼다. 목표 클라이언트의 IP 를 컨트롤러 단에서 바로 받아서 처리하고자 함. 1. ClientInfo 생성 @Data @NoArgsConstructor @AllArgsConstructor public class ClientInfo { private String clientIp; } 바인딩될 객체를 생성 2. ClientResolver 어노테이션 생성 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) publi.. 2022. 7. 14.
JPA 어노테이션 1. NotFound org.hibernate.annotations 에 포함되어 있음 @JoinColumn 등으로 조인을 했을 시, 조인한 테이블의 값이 null 일 경우 EntityNotFoundException 이 발생하는데, 이럴 경우 @JoinColumn("dto_id") @NotFound(action = NotFoundAction.IGNORE) private DTO dto; 을 해주면 Exception 이 발생하지 않음. Ignore, Exception 2개의 값이 있는데 default 는 Exception 인 모양이다. 2. Transient javax.persistence 에 포함되어 있음 Entity 에 변수는 있으나, 컬럼과의 매핑을 원하지 않는 경우 사용 @Transient privat.. 2022. 7. 14.
Transactional 정리 Q. 스프링 프레임워크에서는 트랜잭션을 처리할 때 @Trasnactional 을 사용하는데, 이 @Transactional 어노테이션에는 7가지 전파 방법이 있다, 어떤 것들이 있는가? A. @Transactional 어노테이션을 사용하면 적용된 클래스 또는 메소드에 트랜잭션이 적용된다. 따라서 클래스에 할 것인지, 메소드에 할 것인지 판단을 잘 해야 한다. 7가지 Propagation(전파) 방법은 REQUIRED : 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 새로운 트랜잭션을 생성한다. REQUIREDS_NEW : 부모 트랜잭션을 무시하고 무조건 새로운 트랜잭션이 생성된다. SUPPORT : 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 nontransactionally 로 .. 2022. 7. 14.
JPA 락에 대해 트랜잭션에 대해서 이야기 하다보면은 항상 나오는 얘기가 있는 것 같습니다. 대량의 트래픽이 한 번에 들어왔을 때 어떻게 줄을 세울 것인가? 물론 아닐 수도 있지만, 면접때는 거의 항상 비슷한 내용을 물어봤던 것 같습니다 여러 방법이 있을 것 같습니다. DB 의 isolation level 을 조정한다던가 (하지만, 심각하게 느려지므로 비추인 것 같습니다.) JPA 의 낙/비관적 락을 사용한다던가 레디스를 통해 받는다던가 (클러스터를 사용하면 zookeeper 를 사용해야 한다던가 하는데, 자세히는 모르겠네요.) 알아본 혹은 알고 있는 방법으로는 3가지 정도가 있는 것 같습니다. 이번엔 JPA 의 락에 대해서 알아보려고 합니다. 1. 락 없이 동시 접근을 했을 때 동일한 데이터에 접근하여 수정하는 예로는 .. 2022. 7. 14.
Mockito 정리 (1) Mockito 란? 자바에서 단위 테스트를 위한 Mocking framework tastes really good(?!) (개인적으론) 간편하게 사용할 수 있어서 테스트코드 작성할 때 즐겨 사용하는 편입니다. 1. 의존성 추가 org.mockito mockito-core 3.0.0 test 버전에 대해 mockito 의 버전은 1.x, 2.x, 3.x 로 총 3개가 있습니다. 공식 wiki 에 따르면 1과 2는 맞지 않는(Incompatible) 것도 있다고 합니다. 2와 3은 API 로는 변경된 것이 없으나, Java8 에 맞춰졌다고 합니다. 2. 사용 방법 2-1. verify // mock 등의 코드를 깔끔하게 하기 위해 static import import static org.mockito.Moc.. 2022. 7. 14.