728x90
반응형

Spring 15

Reflection

리플렉션에 대해 정확하게 무엇이다라고 정의 내리기가 쉽지 않다. 명확하게 캡슐화를 하여 접근하지 못하도록 정의 된 생성자를 포함하여 멤버변수라던가 메소드에 접근 가능하도록 해 주는 기능이라고 정의하면 될려나 모르겠다. 원래는 접근하지 못하는 코드에 어떻게 접근하는 것일까? Reflection 이란 말 처럼 Heap 메모리에 올라간 Instance를 투영하여 실제 Class가 어떻게 생겼는지 확인하는 방법으로 접근한다고 한다. 내부적으로 정확하게 어떻게 구현 되어 있는지 알 수 없지만 ^^ 그런데 이러한 기능은 코드를 통해 접근하지 못하도록 의도를 가지고 만든 코드를 오히려 망치는 기능일수도 있는데 왜 존재하는 것일까? Reflection이 사용된 대표적인 코드는 바로 Spring Framework의 DI..

Java 2021.06.25

Rest API Versioning

https://www.springboottutorial.com/spring-boot-versioning-for-rest-services 참조 URL Path 방식, Param 방식, Header 방식, Media type versioning 등이 있음. 개인적으로 Header 방식 선호. 다음과 같은 방식으로 처리 @GetMapping(value = "/student/header", headers = "X-API-VERSION=1") public StudentV1 headerV1() { return new StudentV1("Bob Charlie"); } @GetMapping(value = "/student/header", headers = "X-API-VERSION=2") public StudentV2..

Java/Spring 2021.06.16

간단한 Flux method 테스트 (Reactive WebFlux) 3

2021.04.02 - [Java/Reactive] - 간단한 Flux method 테스트 (Reactive WebFlux) 2 간단한 Flux method 테스트 (Reactive WebFlux) 2 2021.03.26 - [Java/Reactive] - 간단한 Flux method 테스트 (Reactive WebFlux) 위 글이 길어져서 새롭게 포스팅을 더 작성한다. usingTest 일회성 리소스에 의존하는 스트림을 만들 때 using 메소드를 사용한다... www.4te.co.kr 위의 글이 길어져 추가로 작성한다. 마지막에 context가 불변객체로 작성 되며, Context0 ~ Context5, ContextN과 같이 만들어져 있다고 하였는데 이와 관련하여 책에서 아래와 같이 테스트 한 코..

Java/Reactive 2021.04.12

Reative 관련 북마크

www.reactivemanifesto.org/ko 리액티브 선언문 탄력성(Resilient): 시스템이 장애 에 직면하더라도 응답성을 유지 하는 것을 탄력성이 있다고 합니다. 탄력성은 고가용성 시스템, 미션 크리티컬 시스템에만 적용되지 않습니다. 탄력성이 없는 시 www.reactivemanifesto.org woowabros.github.io/experience/2019/03/18/tech-toby-reactive.html 3월 우아한 Tech 세미나 후기 - 우아한형제들 기술 블로그 스프링 리액티브 세미나 후기 woowabros.github.io devahea.github.io/2019/04/21/Spring-WebFlux%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A..

Java/Reactive 2021.01.27

Spring Cloud Gateway - Http timeouts configuration

http 관련 타임아웃 설정을 할 수 있다. Global timeouts 전역 설정 식으로 모든 것에 적용 되는 설정을 할 수 있다. spring: cloud: gateway: httpclient: connect-timeout: 1000 response-timeout: 5s Per-route timeouts 각 route 룰 마다 타임아웃을 별도로 줄 수 있다. 아래는 yml 서정 방식 - id: per_route_timeouts uri: https://example.org predicates: - name: Path args: pattern: /delay/{timeout} metadata: response-timeout: 200 connect-timeout: 200 아래는 Java 설정 방식 RESPO..

Architecture/MSA 2021.01.07

테스트 코드 작성 시 willReturn 값이 안나오는 경우

오랜만에 테스트 코드를 작성하기 위해 구글링 해서 작성을 했는데 내가 짜 놓은 시나리오대로 동작을 하지 않아 더 구글링, 그리고 주변에 사람들에게 질문을 하였지만.... 해답은 안 보였다. 작성한 테스트 코드는 아래와 같다. import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springf..

Java/Spring 2020.12.02

Springboot + JPA + JTA (Atomikos) + MySQL 을 이용한 멀티 트랜잭션 구현

두 개의 물리적으로 다른 Database에 트랜잭션을 적용하기 위해서 JTA를 사용해야 한다는 것을 듣고 그 중에 Atomikos를 사용하면 된다는 이야기에 구현을 해 보았다. 구글링을 해 보아도 이런말 저런말들이 많고 예전 기준으로 구현된 것도 많고 소스들이 너무나도 달라 뭘 어떻게 따라 해야 할지 막막했는데... 그리고 주로 MyBatis 기준으로 작업이 되어 있어서 답답한 감이 있었는데 JPA 기준으로 작업을 할 수 있도록 4일 정도 삽질 끝에 완성하여 백업 차원에서 기록으로 남긴다. 먼저 Legacy Database와 새롭게 사용하는 Database가 있다는 가정하에 아래와 같이 작업을 해야 한다. 먼저 사용한 의존성은 아래와 같다. build.gradle dependencies { impleme..

Java/Spring 2019.12.05

QueryDSL 사용하기

JPA를 사용하면서 QueryDSL을 셋팅하고 사용하는 부분에 있어서 매번 헷깔려 정리한다. QueryDSL을 사용하기 위해서 build.gradle 파일에 아래의 내용을 추가 해 준다. plugins { ... id 'idea' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' ... } dependencies { ... implementation 'com.querydsl:querydsl-apt:4.1.4' implementation 'com.querydsl:querydsl-jpa:4.1.4' ... } ext { querydslSrcDir = 'src/main/generated' queryDslVersion = '4.1.4' } configuratio..

Java/Spring 2019.08.08

파라미터에 따라 특정 변수에 값 Set 하기

Java로 Entity를 만들고 멤버 변수로 1 ~ 31일을 만들어 둔 다음 넘오는 날짜에 따라 특정 날짜 변수에 값을 담는 작업을 하다 알게 된 내용이다. 역시 새롭게 알게 된 내용이라 정리 차원으로 올린다. MontTimeTable Entity는 아래와 같다. @Entity @EntityListeners(value = {AuditingEntityListener.class}) @Data @Table(name = "month_timetable") public class MonthTimetable { @Id @Column @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private Integer policy_inst..

Java/Spring 2018.10.24

JPA QueryDsl 에서 Group By Count 값 가져오기

JPA, QueryDsl 쓰기 참 힘들다. 그래도 하나 하나 어렵게 해 나가고 있는데 오늘은 또 Group By한 Count 개수를 반환하는 것을 만든 삽질 내용을 올린다. 리파지토리 단 소스는 아래와 같다. @Override public QueryResults getBusinessTotalCount() { QUser user = QUser.user; return from(user).where(user.userType.eq(UserType.B2B)).groupBy(user.platform).select(user.platform, user.platform.count()).fetchResults(); } 그리고 가지고 온 내용을 가지고 맵으로 이쁘게 정렬해서 반환해 주면 된다. public Map getBu..

Java/Spring 2018.09.28

[삽질] stomp, sockjs를 이용하여 websocket 연결 시 info 가 404로 나오는 경우

WebSocket을 이용하여 특정 내용을 처리하는 로직을 개발 중에 삽질한 내용을 정리 차원에서 올린다. 클라이언트는 SockJS와 stompClient를 이용하였고, 서버는 Spring에서 기본적으로 정리한 내용을 크게 바꾸지 않은 상태로 코딩 하였다. 전반적으로 코드의 내용은 https://spring.io/guides/gs/messaging-stomp-websocket/ 에서 나오는 내용과 거의 다르지 않다. 다만 해당 내용을 코딩 중에 sockjs에서 websocket 서버의 "endpoint/info?timestamp" 와 같은 주소를 찾지 못하는 경우가 발생 했다. 이로 인해 서버의 특정 모듈 Dependency가 잘못 되던가, 알지 못하는 문제로 인해 발생 하는 것인줄 알고 프로젝트를 Spr..

Java/Spring 2018.03.13

이미지 파일 업로드 오류 수정 기록...

구매후기 이미지 업로드에서 오류가 나고 있어서 해당 내용을 검토 중에 알게 된 내용을 정리합니다. 기본적으로 아래와 같은 방식으로 업로드가 되고 있습니다. 브라우저 -> php -> Java 그런데 문제는 어느 한쪽의 문제가 아니라 php, Java 둘다 문제가 발생... 그리고 문제의 원인은 둘다 Version Up이였습니다. 1. 먼저 Java Error Message가 "Required MultipartFile parameter 'file' is not present" 라고 발생. 구글링 하니 http://stackoverflow.com/questions/25830503/spring-mvc-http-status-400-required-multipartfile-parameter-file-is-not-..

Java/Spring 2016.11.08

Spring Batch(스프링 배치)에서 작업 시간이 길어지는 경우

Spring Batch를 그닦 많이 써본 경험이 없지만, 특정 요구 사항이 있어서 개발하게 되었습니다.작업을 하면서 겪은 오류를 어떻게 해결 했는지 History 및 Backup을 위해 적어 둡니다. 보통 배치는 Reader와 Writer로 구분합니다.특정 정보를 Reader에서 읽어 들여서 필요한 내용을 가공하고 Writer에서 필요한 행동을 합니다. 그런데 Reader에서 정보를 읽어 들이고 가공하는 시간이 오래 걸리면서 Writer에서 DB Connection을 못 찾게 되고, Writer 작업을 수행하지 못하게 되는 경우가 발생했습니다. 구글링을 한 결과 "autoReconnect 값을 true로 해라", "validationQuery를 날려라" 등등이 나왔지만 유효하지 않은 해결책이였습니다. 결..

Java/Spring 2016.10.27

Spring에서 MessageUtil 사용하기

다국어 사용을 위해서 그동안 Struts2 기반 MessageUtil만 사용하다가 Spring 기반으로 변경하기 위해 구글링, 작업한 내용을 정리 차원에서 올립니다. 1. applicationContext.xml에 다음 내용을 추가 /WEB-INF/messages/messages 2. MessageUtil import java.util.Locale; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.web.context.reques..

Java/Spring 2015.02.24
728x90
반응형