본문 바로가기
728x90

Java26

JPA QueryDSL - 쿼리 함수 정리 JPAQueryFactory 함수 select() - 조회할 컬럼 지정 select( entity.variable 명, entity.variable 명) selectFrom() - 조회할 컬럼 전체 및 from 테이블 entity 지정 seledtFrom( entity 인스턴스명) as() - 컬럼 alias 함수 from() - 조회 대상 테이블 from(centerStockOutMaster) join() - join 할 테이블 지정 join(saleBusinessPlaceMaster) leftJoin() - left join 할 테이블 지정 rightJoin() - 사용하지 말자 innerJoin() - join()과 동일 on() - join 시 join 테이블에 매핑되는 컬럼 정의 on(cente.. 2024. 2. 12.
RxJava - Flux 함수 Reactor Core에서 제공하는 Flux는 0개 이상의 아이템을 처리할 수 있는 리액티브 스트림 시퀀스를 나타냅니다. Flux에는 데이터 스트림을 생성, 변환, 조합, 처리하는데 사용할 수 있는 다양한 연산자와 메서드가 있습니다. Flux의 대표적인 함수와 연산자 생성 연산자: just(...): 주어진 아이템들로 Flux를 생성합니다. fromIterable(...): Iterable로부터 Flux를 생성합니다. range(...): 주어진 범위의 숫자로 Flux를 생성합니다. empty(): 아무 아이템도 발행하지 않는 Flux를 생성합니다. interval(...): 주어진 시간 간격으로 숫자를 발행하는 Flux를 생성합니다. 변환 연산자: map(...): 각 아이템을 다른 형태로 변환합니다... 2023. 8. 27.
JAVA - 리플렉션 getField, getDeclaredField 차이 getField vs getDeclaredField 상속관련해서 getDeclaredField 은 상속된 프로퍼티를 불러올 수 없다. 반면 getField 는 public 으로 상속된 프로퍼티만 불러들일 수 있다. - (Field[]) getFields() : 클래스에 선언된 필드들 반환(public 접근지시자만) - (Field) getField(String name) : name에 해당하는 필드를 반환 (없으면 NoSuchFieldException) - (Field[]) getDeclaredFields() : 클래스에 선언된 모든 필드들 반환(private 까지도 포함) - (Field) getDeclaredField(String name) : name에 해당하는 필드를 반환(없으면 NoSuchFie.. 2023. 5. 20.
Java - 람다 스트림 예제 람다 중복 체크 예시 코드 list.stream() .collect(Collectors.groupingBy(HQStoreOrderUploadDto::getGdsCd, Collectors.toList())) .entrySet() .stream() .filter(e -> e.getValue().size() > 1) .map(Entry::getValue) .flatMap(Collection::stream) .forEach(e -> e.setErrCont("gdsCd 중복")); MapKey 를 활용한 컬랙션 그룹핑 List datas = (List) list; datas.stream() .collect( Collectors.groupingBy( e -> new MapKey(e.getStkoutCntrCd(),.. 2023. 2. 10.
Java - Thread 동시성 문제3 (Synchroized) 안녕하세요. Thread 동시성 문제 3편 시작하겠습니다. 동시성 문제 개념과 원인은 앞서 다룬 포스트를 참고하시면 좋을 것 같습니다. https://getthismoment.tistory.com/155 Synchroized 동시성 문제를 해결하는 방법으로 synchroized를 활용하면 됩니다. synchroized 를 사용해서 스레드에 lock 을 걸어 동기화를 시킵니다. lock을 얻은 스레드의 synchroized가 진행되는 동안 다른 스레드는 대기 상태에 놓입니다. lock을 거는 방식을 사용하기 때문에 당연히 성능은 떨어지게 됩니다. 대신 동기화를 통해 스프링에서 객체 주입 받아온, 싱글톤으로 구현된 객체가 멀티 스레드 내에서 Thread Safe를 보장받을 수 있게 됩니다. 동기화에 관한 용.. 2022. 5. 4.
Java - Thread 동시성 문제2 (ThreadLocal ) 이전 글에 이어서 계속해서 Thread 동시성 문제를 보겠습니다. 이번에는 동시성 해결방법을 다루어보겠습니다. https://getthismoment.tistory.com/155 Thread 동시성 문제 해결 방법으로 우선 ThreadLocal 을 살펴보겠습니다. ThreadLocal ThreadLocal 사용방법은 주입해서 사용할 서비스 로직에 구현하면 됩니다. ThreadLocal은 여러 스레드가 실행되어도 각 스레드에서 독립된 실행을 보장하는 방법입니다. public class BankBook { private int balance = 500; // 남은 금액 private ThreadLocal threadLocal = new ThreadLocal(); // 입금 public void deposit.. 2022. 5. 4.
Java - Thread 동시성 문제1 이전 포스트와 이어서 이번에도 스레드를 다루어보겠습니다. https://getthismoment.tistory.com/152 스레드의 정의는 알겠는데 그런데 왜 스레드를 배워야할까요? Thread를 왜 배워야할까? 스레드를 배워야하는 이유는 크게 다음과 같습니다. 1. 우리는 멀티 스레드를 지원하는 자바를 사용하고 있습니다. 2. 스프링의 객체관리 기능(빈 등록 및 빈의 모든 생명주기 관리)이 싱글톤 패턴을 베이스로 하고 있습니다. 3. 객체 주입을 통해 가져온 객체를 수정하게 된다면 그 객체는 멀티 스레드에서 동기화를 보장할 수 없습니다. Thread Safe 멀티 스레드의 서로 다른 스레드에서 같은 메소드를 호출해도 동일한 결과를 보장하는 것. 즉, 스프링에서 Rest api를 통해서 함수를 호출하게.. 2022. 5. 4.
Jave - Thread 개괄 ​안녕하세요. Thread 와 Thread 동시성 문제에 관해서 시리즈화해서 포스트하려고 합니다. 이번 포스트에서는 Thread가 무엇이고 동시성 문제가 왜 발생하는지 알아보겠습니다. Thread 란? Thread는 프로세스 내에서 실행 되는 실행의 단위입니다. 스프링에서 실행되는 public static void main(String[] args) { } 메소드도 사실 유저 스레드의 중에 하나입니다. 알게 모르게 유저 스레드를 만들어서 실행하고 있는 셈이죠. 일반적으로 우리는 멀티 코어에서 멀티 스레드를 사용하게 될 것입니다. 멀티 코어는 CPU의 코어를 말하는 것이고 여러 작업장이 존재하는 것으로 비유할 수 있습니다. 멀티 스레드는 작업장 하나에서 번갈아가면서 스레드를 수행하는 것입니다. 또한 멀티 .. 2022. 5. 3.
Java - 객체 지향 설계 원칙 SOLID SOLID (객체 지향 설계 5원칙) SOLID 원칙은 가독성이 확보되고 확장이 쉬운 객체 지향 설계 기반의 소프트웨어를 만들기 위한 원칙입니다. SOLID 원칙은 앞글 자를 따서 S : 단일 책임 원칙 O : 개방-폐쇄 원칙 L : 리스코프 치환 원칙 I : 인터페이스 분리 원칙 D : 의존관계 역전 원칙 으로 구성 됩니다. 단일 책임 원칙 (Single responsibility principle) SRP 한 클래스는 하나의 책임만 가져야 합니다. 개방-폐쇄 원칙 (Open/closed principle) OCP “소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.” 상속이나 한 클래스를 다른 클래스의 맴버 변수 활용하는 등의 방식으로 확장은 가능하게 하되, 직접적인 클래스 수정은 지.. 2022. 4. 9.
Java - JUnit과 Mock JUnit Java 기반의 단위 테스트를 위한 프레임워크 Annotation 기반으로 테스트를 지원하며, Assert를 통하여, (예상, 실제)를 통해 검증합니다. Junit을 사용하기 위해 2가지 의존성을 추가해야합니다. mockito-core, mockito-junit-jupiter https://mvnrepository.com/search?q=mockito // https://mvnrepository.com/artifact/org.mockito/mockito-core testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.12.4' // https://mvnrepository.com/artifact/org.mockito/.. 2021. 9. 27.
Java - ObjectMapper의 JsonNode, ObjectNode, ArrayNode JsonNode 라이브러리 JsonNode 라이브러리는 전송받은 Json 데이터를 변경하거나 Json 데이터를 만들 때 유용하게 사용할 수 있는 라이브러리입니다. Json 트리에 직접적으로 접근해서 Json 데이터를 수정하거나 추가할 수 있습니다. DTO 객체의 set()을 이용해서 값을 수정할 수 있지만, Json 데이터로 변경해서 ObjectNode를 통해 각각의 제이슨 노드를 통해서도 값을 수정할 수 있습니다. JsonNode 라이브러리를 사용하기 위해서는 다음과 같은 의존성을 추가합니다. (gradle 기준) // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind implementation group: 'c.. 2021. 9. 7.
java - RequestHeader 프론트에서 HTTP 통신할 때 HTTP header에 데이터 보내기 개별 요청 시 $.ajax({ url: 'foo/bar', headers: { 'x-my-custom-header': 'some value' } ... }); // 예제 코드 출처 // http://daplus.net/javascript-js-%EB%98%90%EB%8A%94-jquery%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-ajax-%EC%9A%94%EC%B2%AD%EC%97%90-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-http-%ED%97%A4%EB%8D%94%EB%A5%BC/ headers 변수에 map형태의 객체로 기술하면, HTTP 헤더로 .. 2021. 8. 31.
java - ObjectMapper ObjectMapper Request한 데이터를 객체 형태나 텍스트 형태로 변경하는 메소드를 소개하려고 합니다. ObjectMapper를 이용해서 JSON 데이터를 Object로 변환할 수 있으며, 반대로 Object를 JSON으로 변환할 수 있습니다. @RestController @RequestMapping("/api/objectMapper") public class ObjectMapperController { @PostMapping("") public void objectMapper(@RequestBody String name) throws JsonProcessingException { // Text JSON -> Object // Object -> Text JSON ObjectMapper objec.. 2021. 8. 29.
java - PUT API PUT API리소스가 없으면 갱신하고 리소스가 이미 존재하면 업데이트를 하는 API입니다. PUT API는 구조상 POST API와 거의 유사합니다. @RestController @RequestMapping("/api/put") public class PutApiController { @PutMapping("") public PutRequestDto put(@RequestBody PutRequestDto putRequestDto) { System.out.println(putRequestDto); return putRequestDto; } } import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.d.. 2021. 8. 26.
java - POST API @RequestBody vs @RequestParam @PostMapping("/post") public void post(@RequestBody Map requestData) { requestData.forEach((key, value) -> { System.out.println("key = " + key); System.out.println("value = " + value); }); } @PostMapping("/post2") public void post2(@RequestBody PostRequestDto requestData) { System.out.println(requestData); } post api는 get api와는 다르게 @RequestBody 어노테이션을 사용하여 body로 보내진.. 2021. 8. 26.
728x90