socket이란 무엇인가?

소켓(Socket)이란 소켓(Socket) 은 네트워크 통신을 위한 인터페이스를 제공하는 소프트웨어이다. 소켓은 클라이언트와 서버 간의 통신을 가능하게 하며, 데이터를 주고받을 수 있다. 소켓은 네트워크 통신을 위한 API(Application Programming Interface)를 제공한다. 소켓은 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)를 지원하며, 데이터를 안정적으로 전송할 수 있다. 소켓 통신 방식 소켓은 클라이언트와 서버 간의 통신을 위해 다음과 같은 방식을 제공한다. TCP(Transmission Control Protocol): 연결 지향(Connection-Oriented): 클라이언트와 서버 간에 연결을 설정하고, 데이터를 안정적으로 전송한다. 신뢰성(Reliability): 데이터를 순서대로 전송하고, 손실된 데이터를 재전송한다. 흐름 제어(Flow Control): 데이터의 전송 속도를 조절하여 데이터 손실을 방지한다. 혼잡 제어(Congestion Control): 네트워크의 혼잡 상태를 감지하고, 데이터의 전송 속도를 조절한다. UDP(User Datagram Protocol): ...

6월 8, 2024 · 1 분 · 209 단어 · In-Jun Hwang

1차 캐시와 2차 캐시 알아보기

1차 캐시(First Level Cache)란 1차 캐시(First Level Cache) 는 영속성 컨텍스트(Persistence Context) 내부에 존재하는 캐시를 말한다. 1차 캐시는 엔티티를 조회하면, 영속성 컨텍스트가 엔티티를 캐시에 저장한다. 이후 같은 엔티티를 조회하면, 영속성 컨텍스트는 캐시에서 엔티티를 찾아 반환한다. 그렇기 때문에 트랜잭션 내에서만 유효하며, 트랜잭션이 종료되면 1차 캐시도 함께 종료된다. 더티 체킹(Dirty Checking) 더티 체킹(Dirty Checking) 은 1차 캐시를 통해 엔티티의 변경 사항을 추적하는 방식이다. 엔티티를 조회하면, 영속성 컨텍스트는 엔티티의 초기 상태를 저장한다. 이후 엔티티의 상태가 변경되면, 영속성 컨텍스트는 변경 사항을 추적하고 데이터베이스에 반영한다. ...

6월 8, 2024 · 2 분 · 299 단어 · In-Jun Hwang

영속성 컨텍스트 알아보기

영속성 컨텍스트란 영속성 컨텍스트(Persistence Context) 는 JPA(Java Persistence API)에서 엔티티를 관리하는 환경을 말한다. 영속성 컨텍스트는 엔티티를 관리하고, 엔티티와 데이터베이스 간의 상태 변화를 추적한다. 영속성 컨텍스트는 엔티티 매니저(Entity Manager)에 의해 관리된다. 영속성 컨텍스트의 주요 기능 엔티티 관리: EntityManager가 엔티티를 관리한다. 영속성 컨텍스트가 엔티티의 초기 상태를 저장한다. 트랜잭션 연계: 영속성 컨텍스트는 트랜잭션과 생명 주기를 같이 한다. 트랜잭션이 커밋되면, 영속성 컨텍스트가 관리하는 엔티티의 변경 사항이 데이터베이스에 반영된다. 변경 감지(Dirty Checking): 영속성 컨텍스트는 엔티티의 변경 사항을 추적한다. 트랜잭션이 커밋되기 전에, JPA는 엔티티의 현제 상태와 초기 상태를 비교한다. 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다. 영속성 컨텍스트의 동작 방식 엔티티 관리: ...

6월 8, 2024 · 1 분 · 197 단어 · In-Jun Hwang

Dirty Checking 알아보기

Dirty Checking이란 Dirty Checking은 JPA(Java Persistence API)에서 엔티티의 변경 사항을 자동으로 감지하고, 이를 데이터베이스에 반영하는 방식이다. Dirty Checking을 통해 개발자는 명시적으로 데이터베이스 업데이트 쿼리를 작성할 필요 없이, 객체의 상태만 변경하면 된다. 또한 Dirty Checking은 영속성 컨텍스트(Persistence Context)가 관리하는 엔티티만 적용된다. Dirty Checking 동작 방식 엔티티 관리: EntityManager가 엔티티를 관리한다. 영속성 컨텍스트(Persistence Context)가 엔티티의 초기 상태를 저장한다. 변경 감지: 트랜잭션이 커밋되기 전에, JPA는 엔티티의 현제 상태와 초기 상태를 비교한다. 변경 사항 적용: 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다. 트랜잭션이 커밋되면, 변경 사항이 데이터베이스에 반영된다. 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 // 엔티티 저장 Member member = new Member("Alice"); memberRepository.save(member); // 엔티티 조회 Member findMember = memberRepository.findById(member.getId()).get(); // 엔티티 변경 findMember.setName("Bob"); // 변경 사항 감지 // Dirty Checking이 동작하여 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다. // UPDATE member SET name = 'Bob' WHERE id = 1; 장점 편의성: 개발자가 데이터베이스 업데이트 쿼리를 작성할 필요 없이, 객체의 상태만 변경하면 된다. 일관성: 변경 사항이 자동으로 데이터베이스에 반영되므로, 데이터 일관성을 유지할 수 있다. 생산성: 개발자가 비즈니스 로직에 집중할 수 있으므로, 생산성이 향상된다.

6월 8, 2024 · 1 분 · 179 단어 · In-Jun Hwang

N+1 문제 알아보기

N+1 문제란 N+1 문제는 ORM(Object-Relational Mapping)에서 자주 발생하는 성능 문제 중 하나로, 연관된 엔티티를 조회할 때, 연관된 엔티티의 수(N)만큼 추가로 쿼리가 실행되는 문제이다. 그 결과, 쿼리의 수가 N+1개가 된다. 쿼리의 수가 많아지면 데이터베이스와의 통신이 늘어나고, 성능이 저하될 수 있다. 그렇기 때문에 N+1 문제는 성능 최적화를 위해 주의해야 하는 문제이다. 동작 원리 첫 번째 쿼리로 엔티티를 조회한다. 1 List<Member> members = memberRepository.findAll(); 조회된 엔티티를 사용할 때마다 추가로 쿼리가 실행된다. 1 2 3 for (Member member : members) { System.out.println(member.getTeam().getName()); } 연관된 엔티티의 수만큼 추가로 쿼리가 실행된다. 1 2 3 4 SELECT * FROM Team WHERE team_id = 1; SELECT * FROM Team WHERE team_id = 2; SELECT * FROM Team WHERE team_id = 3; ... 해결 방법 Eager Loading으로 N+1 문제를 해결하려고 하면 성능이 저하될 수 있다. 따라서 Fetch Join, Batch Fetch, EntityGraph 등을 사용하여 해결하는 것이 좋다. ...

6월 8, 2024 · 2 분 · 247 단어 · In-Jun Hwang