일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자동화워크플로우
- STOMP
- JPA
- 엘라스틱서치
- QA
- selenium
- springboot
- jwt토큰
- 헥사고날아키텍처
- Kafka
- 테스트케이스
- Java
- XSS
- nplus1
- 자료구조
- 오블완
- 프로토콜역할
- 하이브리드접근법
- 캐시의 작동 원리
- 스프링시큐리티
- n8n
- 티스토리챌린지
- N+1문제
- 한화시스템부트캠프
- 메소드
- 부트캠프
- kafka배포
- 오버로딩
- 프로세스와스레드의차이
- 자바
- Today
- Total
목록Programming/Java (16)
아쿠의 개발 일지
JPA를 사용하면서 연관 관계가 설정된 엔티티를 조회할 때 N+1 문제를 경험한 적이 있을 것입니다. 이는 하나의 쿼리를 실행한 후, 연관된 엔티티를 개별적으로 추가 조회하는 문제로 인해 성능 저하를 초래합니다. 이를 해결하기 위한 대표적인 방법이 fetch join과 EntityGraph입니다.이번 글에서는 fetch join과 EntityGraph의 개념을 이해하고, 이를 활용하여 성능 최적화를 어떻게 할 수 있는지 알아보겠습니다. .👍😊 1. Fetch Join 소개 및 활용Fetch Join 개념fetch join은 JPA의 JOIN FETCH 키워드를 활용하여 연관된 엔티티를 한 번의 쿼리로 조회하는 방법입니다. 이를 통해 N+1 문제를 해결하고 불필요한 추가 조회를 방지할 수 있습니다.Fe..
멀티쓰레드 환경에서 동시성 제어는 중요한 이슈입니다. Spring Boot 애플리케이션에서 여러 사용자의 요청이 동시에 처리될 때, 올바른 데이터 일관성을 유지하기 위해 적절한 동시성 제어 기법을 적용해야 합니다. 이번 글에서는 synchronized, Lock, Atomic 클래스를 활용한 동시성 제어 방법을 비교하고, 각각의 장단점을 알아보겠습니다. 1. 동시성 제어가 필요한 이유멀티쓰레드 환경에서는 여러 개의 쓰레드가 동시에 공유 자원에 접근할 수 있습니다. 이때 동기화 처리를 하지 않으면 데이터 무결성이 깨지거나 레이스 컨디션(Race Condition) 문제가 발생할 수 있습니다. 예를 들어, 아래 코드를 살펴봅시다. @RestController@RequestMapping("/counter")p..

AWS S3(Simple Storage Service)는 안정적인 클라우드 스토리지 서비스로, 다양한 애플리케이션에서 파일 저장 용도로 사용됩니다. 이번 글에서는 Spring Boot에서 S3 파일 업로드를 구현하는 방법과 비용 절감을 위한 최적화 전략을 소개합니다. 1. Spring Boot에서 S3 파일 업로드 구현1.1 AWS SDK 의존성 추가먼저, AWS SDK를 프로젝트에 추가해야 합니다. build.gradle 혹은 pom.xml에 아래 의존성을 추가합니다. software.amazon.awssdk s3 2.20.01.2 S3 클라이언트 설정Spring Boot에서 AWS S3를 사용하려면, S3Client를 설정해야 합니다.@Configurationpublic class ..

다음 사진은 채팅 기능에 Kafka 기술을 적용한 것입니다. Kafka를 도입한 이유로는, 확장성 및 신뢰성: STOMP 기반의 세션 관리는 단일 서버 환경에서는 한계가 있었습니다. 다중 서버 환경에서 메시지 손실과 확장성 문제를 해결하기 위해 Kafka를 도입하였습니다. Kafka는 사용자가 다른 서버에 접속해도 메시지를 안정적으로 전달받을 수 있도록 해줍니다.세션 관리: 여러 서버를 운영하는 환경에서 Kafka를 통해 서버 간 세션을 관리하여, 메시지의 일관성과 신뢰성을 보장하였습니다. 적용 예시로는, Kafka의 Pub-Sub 모델을 활용하여 동일한 토픽을 구독한 클라이언트들에게 안정적으로 메시지를 전송하고, 여러 서버 간의 세션 관리 문제를 해결하였습니다. 이제 이러한 기능을 K8S에서 배포..

왜 Ai는 주로 Python을 사용하는가? Python은 간결하고 직관적인 문법 덕분에 빠른 개발이 가능하며, 특히 데이터 과학과 머신러닝에 필요한 풍부한 라이브러리와 프레임워크를 제공합니다. TensorFlow, PyTorch, Scikit-learn 같은 AI와 머신러닝 관련 라이브러리가 잘 지원되고 있으며, 커뮤니티도 매우 활발해서 문제 해결이 상대적으로 수월하다는 점도 Python이 AI 개발에 많이 쓰이는 이유 중 하나입니다. 하지만 꼭 Python으로 Ai를 활용하는 것은 아닙니다. 그렇게 생각에 생각을 더 해서 찾아 낸 방법이 바로 N8N입니다. N8N은 오픈 소스 워크플로우 자동화 도구로, 다양한 서비스를 연결하여 작업을 자동화할 수 있게 도와줍니다. N8N의 장점은 오픈 소스이기 때문에 ..

1. 객체지향의 핵심 개념 다들 개발을 시작하면서 객체지향 프로그래밍에 대해 많이 들어봤을 것이다.객체지향 프로그래밍은 데이터를 객체로 모델링하고, 객체 간 상호작용으로 프로그램을 구성하는 방법이다.Java는 대표적인 객체지향 언어이다. 그 중 4대 핵심 개념이 있는데1. 캡슐화 (Encapsulation)데이터를 클래스 내부에 감추고, 외부에는 필요한 기능만 노출하는 방식이다. 2. 상속화 (Inheritance)기존 클래스의 속성과 메서드를 재사용하여 새로운 클래스를 만드는 것이다. 3. 다형성 (Polymorphism)하나의 메서드가 다양한 클래스에서 다른 동작을 하도록 구현하는 방식이다. 4. 추상화 (Abstraction)불필요한 세부 사항을 숨기고 필요한 것만 드러내는 설계 방식이다.2. Sp..

현재 진행하는 Tiggle 프로젝트에 엘라스틱 서치를 도입하기 전에, 어떤 이점이 있고 어떻게 사용하면 좋을 지에 대해서 먼저 알아보게 되었다. 엘라스틱 서치를 도입하기 위해서 현재 키워드 기반 검색으로 구현해 둔 컨트롤러를 보며 생각했다. 어떤식으로 도입 할 수 있을지 1. Docker를 사용하여 엘라스틱 서치를 실행한다.docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.10.2 1-1. 필요한 경우 Kibana도 함께 설치한다.docker run -d --name kibana -p 5601:5601 --link elastic..

헥사고날 아키텍처(Hexagonal Architecture)는 소프트웨어 디자인 패턴 중 하나로, 응용 프로그램의 핵심 로직(Application Core)과 외부 시스템 간의 의존성을 최소화하여 유연성과 테스트 가능성을 높이는 구조입니다. 이 아키텍처는 “포트와 어댑터 아키텍처(Ports and Adapters Architecture)”라고도 불리며, 시스템의 내부와 외부를 명확히 구분합니다. 1. Application Core (응용 프로그램 핵심)• 핵심 비즈니스 로직과 도메인 규칙이 포함됩니다.• Use Case와 Entity가 Application Core에 속하며, 외부 환경에 독립적입니다.• 비즈니스 규칙은 특정 프레임워크나 외부 기술에 의존하지 않으며, 이로 인해 테스트가 용이해집니다. 2..

N+1 문제란 ?연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔터티를 조회할 경우에 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 이를 N+1 문제라고 한다. EAGER 는 열렬한, 열심인 이런 뜻을 가졌는데 모든 연관관계 데이터를 즉시 빠르게 열렬하게 가져온다고 생각하면 된다.위 말한 것 처럼 필요하지 않아도 추가로 가지고 오게 된다.LAZY는 게으른의 뜻을 가지고 있는데 게을러서 필요한 것만 조회하고 연관 관계에 있는 나머지 데이터는 조회를 미룬다. 기본적으로 EAGER 가 세팅되어 있지만, N+1 문제를 해결하기 위해 LAZY 사용을 쓰는 것이 좋다. JPQL ?SQL은 아니고, 변경되기 전 단계이기에 자바와 SQL 문법이 섞여있다. where :..

객체 지향 프로그래밍의 가장 중요한 개념이다.캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말 한다.속성과 기능을 하나로 묶고, 외부에는 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것이다. 캡슐화를 안전하게 완성 시킬 수 있는 장치는 " 접근 제어자 " 이다. 1. 데이터를 숨겨라 객체에는 속성과 기능이 있다. 가장 필수로 숨겨야 하는 것은 속성이다.객체 내부에 데이터를 외부에서 함부로 접근하게 하면 클래스 내의 로직을 무시하고 데이터를 바꿀 수 있다.이로 인해서 캡슐화가 깨진다. Ex ) 음악 플레이어사용 할 때 전원부나, 볼륨 상태의 데이터를 직접 수정할 일이 있을까?모든 사람들이 플에이어의 전원을 켜고, 끄거나 볼륨을 조절하는 버튼을 누..