본문 바로가기

분류 전체보기241

[C#] 캐시 메모리 철학 캐시의 철학 1. 방금 주문한 테이블에서 추가 주문이 나올 확률이 높다. (Temporal Locality) 2. 방금 주문한 사람 근처에 있던 사람이 추가 주문할 확률이 높다. (Spacial Locality) (Spacial Locality) int[,] arr = new int[10000, 10000]; { long now = DateTime.Now.Ticks; for (int y = 0; y 2023. 8. 26.
[C#] 쓰레드 생성 오브젝트 풀링이란? 미리 생성한 오브젝트를 필요한 순간에 가져다가 사용하는 개념이다. 프로그램 중간에 할당하지 않아 성능상 이점이 있다. C# 환경에서는 ThreadPool과 Task를 지원하고 있다. ThreadPool은 인력소 같은 느낌이고, Thread는 고용되서 일하는 Worker라고 볼 수 있다. Task는 작업해야 하는 업무의 개념이다. // 쓰레드 생성 기본 코드 static void ThreadBasic() { Thread t = new Thread(MainThread); t.Name = "TestThread"; t.IsBackground = true; // MainThread 종료시 같이 종료된다. t.Start(); Console.WriteLine("Waiting for thread").. 2023. 8. 26.
Redis란 무엇인가? Redis 레디스는 사용되는 인메모리 데이타 구조 스토어이다. 캐시, 메시지 브로커, 스트리밍 엔진, 데이터베이스로 사용된다. strings, hashs, lists, sets, sorted sets with range queries appending to string, incrementing the value in hash pushing en element to a list, computing set intersection getting the member with higher ranking in a sorted set. 인메모리 데이터셋 일시적으로 데이터셋을 덤핑하든 디스크에 저장하는 방식, 커맨드를 디스크 기반 로그에 추가하여 영속성을 제공한다. 인메모리 캐시, 네트워크, 기능을 위해 영속성을 제거.. 2023. 8. 24.
채용 정보를 통해 알아보는 게임 서버 기술 스택 정리 최흥배님의 '채용 정보를 통해 알아보는 게임 서버 기술 스택 정리' 영상을 보고 정리한 글입니다. https://youtu.be/SSPJSxqHF8c PC 게임 개발에 사용하는 기술 Windows, C++, IOCP, MS SQL Server 채용 정보에서 언급된 것들(빈도수를 위주로 볼 것) RDBMS, Nodejs, Git AWS, 쿠버네티쿠스 .Net Core, .Net Framework 언리얼, C++ C++, Nodejs, MySql, Redis C++, C# RDBMS, NoSQL 멀티쓰레드, C#서버 언리얼, 윈도우 C++, 멀티쓰레드, 자료구조, 알고리즘 병렬 처리 프로그래밍, 소켓, 웹 프로그래밍 PHP, Golang, MySQL 하나 이상의 언어(Java, Python, Javascri.. 2023. 8. 19.
웹 서버 방식의 게임 서버 정리 최흥배님의 '웹 서버 방식의 게임 서버' 영상을 보고 정리한 글입니다. https://www.youtube.com/watch?v=NuxHxHbU-jU&ab_channel=%EC%B5%9C%ED%9D%A5%EB%B0%B0 Socket 서버 방식의 게임 서버 1. 게임 서버는 일반적으로 socket 서버이다. 2. 실시간 통신이 많이 필요한 곳에서 주로 사용한다. 3. TCP/UDP, IOCP 웹서버 기반 게임 서버 1. 주로 모바일 게임에서 사용한다. 2. 수집형 RPG 게임들에서 주로 사용 3. 백엔드 개발과 다르지 않음. 4. 웹 프론트 기술 스택은 사용하지 않음. (게임 엔진을 쓰지...) 5. 주로 POST 방식의 통신 사용하는 웹서버들 C#(ASP.Net core) Java(Spring) PHP .. 2023. 8. 19.
[JPA] 프록시와 연관관계 프록시 Member가 Team을 참조하고 있다면, Member를 조회할 때 Team도 참조해야 하는가? 회원만 필요한 경우도 있고 팀도 필요한 경우가 존재하는데 최적화는? 프록시 기초 1. em.find() vs em.getReference() 2. em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 3. em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시 특징 1. 실제 클래스를 상속 받아서 만들어진다. 2. 실제 클래스와 겉 모양이 같다. 3. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. (이론상) 4. 프록시 객체는 실제 객체의 참조(target)를 보관한다. 5. 프록시 객체를 호출하면 프록시는 실제 .. 2023. 8. 11.
[JPA] 상속관계 매핑 상속관계 매핑 1. 관계형 데이터베이스는 상속 관계X 2. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 3. 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼 타입 서브 타입관계를 매핑 각각의 테이블로 변환 => 조인 전략(각각 INSERT하고 조회할 때 JOIN사용) 통합 테이블로 변환 => 단일 테이블 전략(모든 필드를 하나의 테이블에) 서브타입 테이블로 변환 => 구현 클래스마다 하나의 테이블(부모 클래스는 따로 만들지 않는다) 조인 전략 장점 1. 테이블 정규화 2. 외래키 참조 무결성 제약 조건 활용 가능 3. 저장 공간의 효율화 단점 1. 조회시 조인을 많이 사용(성능 저하) 2. 데이터 저장시 INSERT문 2번 3. 조회 쿼리가 복잡함 단일 테이블 전략 장점 1. 조인이 필요 .. 2023. 8. 10.
[JPA] 영속성 관리 JPA에서 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 영속성 컨텍스트 1. EntityManager.persist(entity) 2. JPA를 이해하는 가장 중요한 용어 3. "엔티티를 영구 저장하는 환경" 4. 영속성 컨텍스트는 논리적인 개념이다. (눈에 보이지 않음) 5. 엔티티 메지저를 통해 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 1. 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 2. 영속(managed) 영속성 컨텍스트에 관리되는 상태 3. 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 4. 삭제(removed) 삭제된 상태 영속성 컨텍스트의 이점 1. 1차 캐시 사용(같은 트랜잭션 내에서) 2. .. 2023. 8. 10.
[JPA] 왜 JPA를 사용해야 하는가? SQL 중심적인 개발의 문제점 1. CRUD 코드를 매번 작성해야 한다. 2. 자바 객체를 SQL로, SQL을 자바 객체로 3. 객체와 관계형 데이타베이스의 패러다임 불일치 만약 중간에 필드라도 추가되면? 관련된 모든 쿼리를 수정해야 한다... public class Member { private String memberId; private String name; ... } INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES SELECT MEMBER_ID, NAME FROM MEMBER M UPDATE MEMBER SET … 객체와 관계형 데이터 베이스의 차이 1. 상속 2. 연관관계 3. 데이터 타입 4. 데이터 식별 방법 객체를 테이블에 저장하려면... 각각 객체에 맞는 쿼리.. 2023. 8. 10.
[Spring] 스프링 MVC 구조 스프링 MVC는 프론트 컨트롤러 패턴으로 되어있다. (DispatcherServlet) 1. HTTP 요청이 들어오면 DispatcherServlet이 핸들러를 조회한다. (매핑된 주소에 매칭되는 handler를 찾는다) 2. Handler Adapter를 찾아온다. (다양한 형태 Controller 함수를 지원하기 위함) 3~4. 핸들러 어댑터를 통해 핸들러의 처리를 실행한다. (Controller의 내부 구현을 따른다) 5~6. ModelAndView를 반환하면 이를 viewResolver에게 넘긴다. 7. ViewResolver가 뷰를 찾아서 반환하면 렌더링한다. 주요 인터페이스 목록 핸들러 매핑: org.springframework.web.servlet.HandlerMapping 핸들러 어댑터: .. 2023. 8. 10.