[Spring]JPA N + 1 문제
·
cs/dev
JPA N+1문제란?ORM JPA의 대표적인 성능 문제로 관련 데이터 조회를 할때 발생하는 비효율적인 쿼리 패턴입니다.최초 조회 쿼리 1번 실행 후 조회된 데이터 개수(N)만큼 추가 쿼리가 발생하여 총 N+1번의 쿼리가 실행되는 현상입니다. 예시: Post와 Comment가 일대다(1:N) 관계이고게시물 목록을 조회하는 쿼리(1번) 후, 각 게시물의 댓글 수를 구하기 위해 게시물 수만큼(N번) 추가 쿼리가 실행되는 경우입니다. [상황 별 해결 방법]- @EntityGraph: JPQL 작성 불필요, 간단한 조회 (단, LEFT OUTER JOIN 고정)- Fetch Join: 복잡한 조건, INNER JOIN 필요 시- @BatchSize: 페이징 필요 시 필수페이징 주의사항Fetch Join/@En..
[Spring] Spring MVC 와 Spring WebFlux 차이
·
cs/dev
동기vs비동기, 블로킹vs논블로킹동기(Synchronous)동시에 일어날 수 있다. 호출과 응답이 동시에 이루어 지는 것을 의미한다. 순차적으로 실행되므로 제어하기 쉬움호출한 작업이 완료될 때까지 대기하므로 여러 작업을 동시에 처리할 수 없음함수를 호출한 곳에서 바로 응답을 받는 것으로 비동기와 비교했을때 처리결과를 받는 시점에 대한 차이가 있다.비동기(Asynchronous)호출과 응답이 동시에 이루어지지 않는 것을 의미한다.호출시점과 처리결과에 대한 응답시점이 같지 않아서, 함수를 호출했을때 그에 대한 처리결과를 추후에 처리가 완료된 불특정 시점에 전달받는다.블로킹(Blocking)함수를 call했을때 응답을 받기 위해 멈춰있는 상태를 의미한다. 그래서 함수가 종료되야 다음줄을 실행한다.예를들어 B라..
[Spring]Spring의 3가지 핵심 프로그래밍 모델(AOP, DI, IOC)
·
cs/dev
AOP: 관점 지향 프로그래밍어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.결국 AOP는 Aspect를 분리하여 핵심기능을 설계 및 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 것이다.핵심적인 관점: 개발자가 적용하고자 하는 핵심 비즈니스 로직.부가적인 관점: 핵심 로직을 수행하기 위해 필요한 DB연결(JDBC), 로깅, 파일 입출력 등...| AOP 주요 개념Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체JointPoint :..
[Spring] Spring Batch란?
·
cs/dev
1. 스프링 배치 소개개요배치 처리에 요구하는 재사용 가능한 자바 기반 배치 아키텍처 표준의 필요성이 대두 배치 핵심 패턴Read - 데이터베이스, 파일, 큐에서 다량의 데이터 조회한다Process - 특정 방법으로 데이터를 가공한다Write - 데이터를 수정된 양식으로 다시 저장한다배치 시나리오배치 프로세스를 주기적으로 커밋동시 다발적인 Job의 배치 처리, 대용량 병렬 처리의존관계가 있는 step 여러 개를 순차적으로 처리조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성반복, 재시도, Skip 처리아키텍처(출처: https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/images/spring-batch-layers.png) Appli..
[Spring]spring과 spring boot
·
cs/dev
spring / spring boot 차이점spring: 자바 기반 웹 프레임워크웹 개발에 필요한 모든 기능을 제공하지마 설정이 많고 복잡ex) XML설정, 톰캣 설치spring boot: spring을 쉽게 쓰게 만든 (편의)도구설정은 최소로 개발은 빠르게ex)@SpringBootApplication, 의존성 관리, 내장 톰캣, 자동 설정까지 해줍니다.spring스프링 프레이임워크(spring Framework)자바에서 가장 많이 사용되는 프레임워크의존성주임(DI, Dependeny Injection)과 제어역전(IOC, Inversion of Control), 관점 지향 프로그래밍(AOP)이 가장 중요한 요소위 요소들을 통해 느슨한 결합(Loose Couping)을 달성할 수 있음위와 같이 느슨한 결..
[Spring]JPA란 무엇인가요? (ORM, SQL Mapper)
·
cs/dev
JPA1. Java Persistence API이다. 영속성(persistence)은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. Persistence API = 자바데이터를 기록할 환경을 제공RAM은 휘발성이라 전원이 꺼지면 데이터가 사라지고, 하드디스크는 비휘발성이라 영구 저장된다.DBMS는 하드디스크 일부를 관리한다. API란?애플리케이션(A) -> 프로그램 프로그래밍(P) -> 프로그래밍! ⤴인터페이스(I) -> 인터페이스 ⤴ 프로토콜인터페이스약속동등상하관계예시A, B, CA, B, C (B가 나에게 연락할 때는 전화하지 말고 직접 찾아와) 2. ORM(Object-Relational Mapping) 기술JAVA 객체와 데이터베이스 테이블을 자동으로 연..
Spring - kakao(Security + OAuth 2)
·
cs/dev
Kakao Developers란? 카카오 API를 활용하여 다양한 애플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. 카카오 디벨로퍼로 이동하기 https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com 애플리케이션 추가하기REST API 키 확인하기좌측메뉴에서 앱 설정 > 플랫폼 > Web 플랫폼 등록대부분이 8080포트 이겠지만, 설정해 준 포트를 입력해 주시면 됩니다.Redirect URI 확인하기좌측메뉴에서 제품 설정 > 카카오 로그인활성화 ..
Spring boot에서 Chatgpt openAPI 연동하기
·
cs/dev
GPT 모델 결제GPT-3: https://platform.openai.com/account/api-keys모델을 사용했습니다.무료 크레딧현재 처음 회원 가입을 하면 3개월 동안 사용이 가능한 5달러의 무료 크레딧을 줍니다.Usage에서 확인할 수 있습니다. 하지만 저는 무료가 만료되어 있어서 카드 등록을 통하여 사용하기로 결정했습니다.결제billing - Overview - Payment methods결제수단으로 해외결제(마스터, 비자 등)가 가능한 카드를 등록할 수 있습니다.카드 등록 후 초기값 10달러, 자동결제 여부가 나와있는데 5달러(백만 토큰 당 2달러) 를 초기값으로 설정 총 5.5달러가 결제되었습니. 테스트용이라면 자동결제는 하지 않는게 좋을 것 같다.limit설정API Key 발급하기Cr..
Springboot와 AWS RDS 연동하기 with DataGrip
·
cs/ops
보안상 이유로 RDS은 퍼블릭 엑세스를 허용하지 않도록 퍼블릭 IP를 할당 받지 않았다.private subnet에 RDS가 위치하고, public subnet에 bestion server을 만들어서 접근하려고 한다.RDS에 적용된 보안그룹은 아래와 같다. 10.0.0.0/23은 public subent이므로 해당 ip에서 3306으로 요청이 들어오는것은 허용한다.public subnet에 bastion server에는 SSH포트와 MYSQL/Aurora를 열어준다. AWS RDS 설정하기RDS 생성 시 주의사항퍼플릭 엑세스 아니요 (예로 하면 취약)프리티어는 다중 AZ 배포를 지원하지 않는다가용영역은 최소 2개 선택해야한다.백업, 암호화 활성화하지 않는다 개발 환경에서 스프링 프로젝트 설정하기이대로 ..