728x90

Total

728x90

    [JPA] 변경감지 Dirty Checking, @Transactional, @DynamicUpdate

    변경감지 변경감지는 트랜잭션 커밋시 영속화된 Entity에서 가지고 있었던 최초 정보(스냅샷)와 바뀐 Entity 정보를 비교해서 바뀐 부분을 update 해주는기능 1. 클라이언트에서 식별자를 포함한 데이터를 넘김 2. 식별자(id)를 통해서 DB에서 데이터 조회 후, 조회된 데이터를 영속화 . 클라이언트에서 넘어온 값들을 토대로 기존의 데이터를 새로운 데이터로 변경 : 변경점 발생 4. 트랜잭션 커밋 5. JPA에서 변경점들을 확인하고 변경해야할 것에 맞게 DB 쿼리를 실행 : 변경 감지 (Dirty checking) 변경감지 조건 변경하려는 Entity가 영속 상태여야함 (영속성 컨텍스트 안에 관리되는 상태) 트랜잭션 안에 묶여 있어야함 트랜잭션이 제대로 커밋되어야함 (그래야 flush가 작동하기 ..

    [JPA] fetch join, EntityGraph, N+1, Pagination, firstResult/maxResults specified with collection fetch; applying in memory

    1. 즉시로딩jpql을 우선적으로 select하기 때문에 즉시로딩을 이후에 보고 또다른 쿼리가 날아가 N+12. 지연로딩지연로딩된 값을 select할 때 따로 쿼리가 날아가 N+13. Fetch Join지연로딩의 해결책사용될 때 확정된 값을 한번에 join에서 select해서 가져옴Pagination이나 2개 이상의 collection join에서 문제가 발생4. EntityGraphHibernate의 Jpql 구문에서의 fetch는 존재하지는 않지만 기존과 마찬가지로 fetch join을 통해 바로 조회할 수 있음@Repositorypublic interface PersonRepository extends JpaRepository, JpaSpecificationExecutor { @NotN..

    Spring Batch, 배치와 스케줄러의 차이, Job, Tasklet, Chunk

    배치 배치는 실시간으로 처리하는것이 아닌 처리할 작업물들을 모아 한번에 처리하는 것 예를들어 1년간 접속하지않은 모든 회원들을 휴먼계정으로 처리하는 등 일반적인 비즈니스로직이 아닌 상황에 대해서 처리해주는 프로세스 배치와 스케줄러의 차이 배치 스캐쥴러 일괄 처리 정해진 시간에 자동으로 실행 사용자의 명령이 있을 때 실행 주기적으로 실행 Batch Job을 관리(Job을 구동하거나 실행시키는 기능 X ) Job, Tasklet, Chunk Job 배치 처리 과정을 하나의 단위로 만든 객체 배치 처리 과정에 있어 전체 계층의 최상단에 위치 1개 이상의 Step을 가짐 Job 안에는 여러 개의 Step이 존재하고, Step 안에는 Tasklet 또는 {Reader, Processor, Writer} 묶음이 존..

    Spring Jsch SSH Private Key, Dockerfile 복사, Jsch kubernetes pod

    Spring Jsch java ssh 접속private Session session; private ChannelExec channelExec; connect public void connectSSH() throws JSchException { JSch jsch = new JSch(); session = jsch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyCheckikarla.tistory.com SSH Authentication 동작 방식Client → Server : SSH connection을 요청Server → Client : Random message 전송Client..

    Spring Jsch java ssh 접속

    private Session session; private ChannelExec channelExec; connect public void connectSSH() throws JSchException { JSch jsch = new JSch(); session = jsch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); } connectSSH(); // ssh 연결 try { Channel channel = session.openChannel("exec"); // 채널 접속 channelExec = (ChannelE..

    Spring @Async 비동기 처리

    @EnableAsync @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args);} } @Service public class MessageService { @Async public void print(String message) { System.out.println(message); } } @RequiredArgsConstructor @RestController public class MessageController { private final MessageService messageService; @..

    Spring websocket 웹소켓, java 채팅 프로그램

    웹 소켓 1. WebSocketConfig 생성 MessageBrokerRegistry enableSimpleBroker("/topic"); // 메시지 브로커를 활성화하고 subscribe 메시지 접두사를 설정합니다. setApplicationDestinationPrefixes("/app"); // 클라이언트에서 발송한 메시지중 Destination이 해당 경로(/app)로 시작하는 메시지를 메시지 브로커에서 처리하게합니다. StompEndpointRegistry addEndpoint("/chatting") // 웹소켓 엔드포인트를 지정합니다. 추후 클라이언트에서 해당 경로로 서버와 handshake 하게 됩니다. withSockJS(); // SockJS를 사용하여 브라우저에서 websocket을 지..

    ProcessBuilder Java 쉘 명령어, 스크립트 실행

    쉘 스크립트 실행 1. ProcessBuilder 객체 생성 ProcessBuilder builder = new ProcessBuilder(); ProcessBuilder객체를 사용하여 Linux 또는 Window의 커맨드라인의 커맨드입력을 실행할 수 있다. 2. directory(new File(“파일경로”)) : 해당 커맨드를 실행할 경로 String homeDirectory = System.getProperty("user.home"); builder.directory(new File(homeDirectory)); 3. command(“커맨드”) : 커맨드 입력메서드 builder.command("sh", "-c", "ls -l | grep P"); 4. ProcuessBuilder.start() :..

    GCP GKE Kubernetes 인그레스(Ingress), 노드포트(Nodeport) 접속

    MSA (Micro Service Architecture) 로 개발되어 서비스간의 라우팅이 필요한 구조에서는 Ingress 를 사용 Service의 NodePort : 온프레미스 환경에서 사용 Service의 LoadBalancer: 퍼블릭 클라우드 환경에서 사용 Servic는 클러스터 외부로 PORT를 노출하는 기능과 부하분산기능을 수행합니다. 그리고 이점은 Ingress 도 동일합니다. 차이점은 Ingress는 L7이고 Service는 L4라는 점입니다. 1. 노드 포트 2. 파드 생성 (디플로이먼트) vi web-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: web namespace: default spec: selecto..

    쿠버네티스(Kubernetes) 배포 업데이트, 롤백

    2023.10.14 - [Cloud&DevOps/Kubernetes] - GCP Kubernetes GKE Pod 생성, 배포, 접속 GCP Kubernetes GKE Pod 생성, 배포, 접속 2023.10.10 - [Cloud&DevOps/GCP] - GCP GKE 클러스터 생성 | 구글 클라우드 플랫폼, 쿠버네티스 GCP GKE 클러스터 생성 | 구글 클라우드 플랫폼, 쿠버네티스 https://cloud.google.com https://cloud.google.com 영상 통화, 이 karla.tistory.com Deployment 하나씩 Pod의 수를 수동으로 조정해야 하기 때문에 이를 자동화해서 추상화한 개념이 Deployment 이다. 업데이트 v2 이미지 배포 명령어를 실행하면 v1 → v..