전체 글
-
Java Lint 기능을 사용해서 formatting 강제하기JAVA/자바설치 2024. 5. 3. 23:48
1. 배경 클린코드 책을 보면 한 챕터를 formatting(형식)에 관한 이야기를 한다.요약하자면 작성한 소스코드에 formatting(들여쓰기, 줄바꿈, 띄어쓰기 . . . 등등)이 굉장히 중요하다고 한다.formatting이 코드를 읽을때 가독성에 영향을 주고 이는 뇌에 영향을 줘서 생산성에도 영향이 간다.formatting은 아키텍처와 같이 한번 굳어지면 리펙토링이나 변경이 불가능하다. 기존 코드 formatting을 모방해서 작성할 수 밖에 없고, 이를 지키지 않고 여러명이 각자의 style로 작성하게되면 카오스가 되기 때문. 2. 해결책 Linter 그리고 Sonar Lint, Sonar Cubeformatting을 clean하게 유지하기 위해, 개발자들은 강제로 formatting을 정해진 ..
-
sdkman env 사용해서 java, gradle, maven 버전 프로젝트별로 설정JAVA/자바설치 2024. 5. 3. 22:57
sdkman 설치하기 : https://yeoon.tistory.com/80sdkman env를 사용하는 이유결과부터 보면 아래처럼 인텔리제이로 프로젝트를 열기만 했는데, Java vesion, Gradle version을 변경되게 만들 수 있다. Java의 LTS 변경 주기가 빨라지면서, 회사나 개인 프로젝트에 여러 JAVA version를 사용하게 되었다. IntelliJ를 사용하면 버전에 맞는 JDK 다운로드 및 설정을 지원하지만,터미널에서 java 버전이 프로젝트와 맞지 않는 문제가 있다.sdkman env 기능을 사용해서 JDK와 빌드도구의 버전을 자동 설정해서 문제를 해결해보자.sdkman env 사용법1. 프로젝트 root path 위치에서 터미널에 아래의 명령어를 입력하면 .sdkmanrc..
-
QueryDsl projections 자바 Record에 적용하기Spring Boot/JPA 2024. 4. 23. 01:58
QueryDsl을 이용하는 경우 반환 타입이 Entity가 아닌 다른 응답 객체(DTO)일때 Projection 기능을 제공해서 원하는 응답 객체로 변환할 수 있다.Projections.beanProjections.constructorProjections.fields@QueryProjection아니면 projection 기능을 포기하고 변환하는 로직을 작성해야하는데, 데이터 size가 크면 성능 이슈가 있을 수 있다. 위 4개 기능들의 사용법과, 장단점을 비교해보자. 결론부터 말하자면 Record는 Projections.constructor로만 데이터 바인딩이 가능하다. constructor 방식은 버그를 만들수 있어서, QueryDSL 응답객체는 Record 대신 class를 이용하고 fields pr..
-
Port Adapter 패턴이란? (클린아키텍처)Spring Boot 2024. 4. 20. 23:39
배경 사내에 MSA를 도입 해보자는 이야기가 있어서, 이왕이면 제대로 해보고 싶어 요즘 열심히 스터디 중이다. 내가 필요하고 판단한 선수지식은 다음과 같다. 멀티모듈(https://yeoon.tistory.com/145) DDD (https://yeoon.tistory.com/147) port-adapter pattern Spring Cloud event-consistency, 카프카 AWS EKS port-adapter pattern에 관해 작성해본다. Clean Architecture port adapter pattern은 아키텍처적인 문제를 해결하기 위해 등장한 아키텍처 패턴 중 하나다. 아키텍처는 기본적으로 변경이 어렵다 즉 개선이 어렵다. 좋은 아키텍처는 쉬운 확장, 테스트 하기 쉬운 코드, 높..
-
DDD 기본개념 톺아보기Spring Boot 2024. 4. 20. 00:23
배경사내에 MSA를 도입 해보자는 이야기가 있어서,이왕이면 제대로 해보고 싶어 요즘 열심히 스터디 중이다.내가 필요하고 판단한 선수지식은 다음과 같다.멀티모듈(https://yeoon.tistory.com/145)DDDport-adapter pattern (https://yeoon.tistory.com/148)Spring Cloudevent-consistency, 카프카AWS EKSDDD에 관해 작성해본다. Domain Driven Design의 탄생2005년 마틴 파울러, 로드 존슨 등등등 유명한 개발 아저씨들 모여 토론.주제는 1999년 ~ 2005년 EJB 등장으로 객체지향개발 같은 방법론 적용 못하고, 코드 너무 복잡해져서 해결책 논의.에릭 에반스라는 사람 Domain Driven Design이란..
-
JPA OSIV false 설정Spring Boot/JPA 2024. 4. 19. 23:25
초반 JPA 설정중 설정해야할 것 JPA 사용시 OSIV(Open Session In View) 설정 정보를 false로 사용하는 것이 좋다. spring.jpa.open-in-view 이 값이 true라면 트랜젝션 범위 밖의 view에서도 EntityManager가 요청 프로세스 내내 open 되어 있다. 예를 들어 3초 이상 걸리는 API를 사용하면 3초 동안 DB 커넥션 반납 안함 유저 API Response를 보낼때 Transaction 반환 DB 커넥션을 Transaction 시작 시점에 획득 (@Transactional) 즉, DB 커넥션을 @Transactional이 아니라 API 요청 ~ 응답까지 가지고 있겠다는 설정 - api 속도 만큼 커넥션 획득 후 반납. false로 사용하게 되면 ..
-
멀티모듈 잘 설계해보기Spring Boot 2024. 4. 18. 01:35
배경 사내에 MSA를 도입 해보자는 이야기가 있어서, 이왕이면 제대로 해보고 싶어 요즘 열심히 스터디 중이다. MSA를 공부하려고 강남 교보문고에 들려서 MSA 관련 책 5권을 훑어봤는데 선수지식이 필요하다고 느껴서 이론 공부는 잠시 미루기로 했다. 내가 필요하고 판단한 선수지식은 다음과 같다. 멀티모듈 DDD (https://yeoon.tistory.com/147) port-adapter pattern (https://yeoon.tistory.com/148) Spring Cloud event-consistency, 카프카 AWS EKS 그중 가장 먼저 만들어보면서 해볼만한 멀티모듈 부터 다뤄본다. 결론부터 말하면 아래처럼 구성했다. 이런 구조에 다다른 이유를 기록 해본다. 멀티모듈 실무에서 처음 경험한..
-
Kafka 기본개념 정리Spring Boot/DB 2024. 4. 16. 01:29
1. Kafka 기본 용어 Producer의 messge 저장 대상 Broker는 기본 라운드로빈 방식으로 결정됨 Key를 지정해서 원하는 Broker에만 저장하는 방식도 제공 2. Kafka란? 링크드인에서 2010년 아래와 같은 문제 해결하기위해 개발, 2011년 아파치 오픈소스로 공개 실시간 데이터 처리 문제 데이터 파이프라인 구축 및 확장 문제 다양한 시스템과의 연동 분산 이벤트 스트리밍 플랫폼이라고 공식 페이지에서 소개하고 있음 포츈 100대 기업 80% 이상이 사용 중 (제조업, 은행, 보험, 통신사 . . . 광범위한 산업군) 3. Kafka 특징/사용용도 카프카 핵심 특징 빠른 데이터 전송, 높은 처리량, 낮은 지연 시간 파티션 파일 OS 페이지 캐시 사용 Zero Copy (디스크 버퍼 ..