[React] 개념
·
공부일기../리액트
아 계속 헷갈려서 비슷한 내용을 계속계속 정리하고 읽어보겠슴미다.. 1. React의 동작 원리와 기본 구조1-1. SPA(Single Page Application)의 개념React는 단일 페이지 애플리케이션(SPA) 방식으로 동작한다. 기존 웹 애플리케이션과 달리, 실제로 존재하는 HTML 파일은 딱 하나뿐이며, JavaScript가 동적으로 화면의 내용을 변경하는 방식으로 작동한다.사용자가 다른 페이지로 이동하는 것처럼 보이지만, 실제로는 서버에 새로운 HTML을 요청하지 않고 클라이언트 측에서 JavaScript가 DOM을 조작하여 화면을 갱신한다.1-2. 프로젝트의 기본 파일 구조React 프로젝트를 생성하면 기본적으로 다음과 같은 구조를 가진다. public 폴더에는 index.html 파일이..
[인터넷 통신] http 기본개념 전반적인 내용 찍먹
·
공부일기../Infra
서론..더보기http가이드 책이 갑자기 생겨서 읽어봤다.. 볼 책많은데 제목이 좀 만만해보이고 흥미생겨서 앞에만 조곰 읽어봄일단..전체적인 큰 개념만 정리를 해봤다 각 항목별로 자세한 내용은 차차 읽어보면서 써보께.. 할게 산더미임내용이 넘 재밋게 써져있음..! (아직은) HTTP 완벽 가이드 이책인데 가볍게 보기좋을거같은데 두께는 ㅋㅋ 안가벼워1. 인터넷 통신의 기본 개념1-1. IP (Internet Protocol)인터넷에서 데이터를 주고받기 위해서는 IP 프로토콜이 필요하다. IP는 출발지 IP 주소와 목적지 IP 주소를 가지고 있어서 패킷을 목적지까지 전달한다. 하지만 IP만으로는 부족한 점이 있다. 비연결성이라서 패킷을 받을 대상이 없어도 일단 전송하고, 비신뢰성이라서 패킷이 중간에 소실되거나..
[Java] String 정리
·
공부일기../Java
1. StringJava에서 String은 가장 많이 사용되는 클래스 중 하나다.문자열을 다루는 것은 프로그래밍의 기본이지만, String은 다른 일반 객체들과는 조금 다른 특성을 가지고 있다. 먼저 String은 불변 객체(Immutable Object)다. 한번 생성된 String 객체의 내용은 절대 변경할 수 없다.예를 들어 "hello"라는 문자열을 만들었다면, 이 문자열의 내용 자체를 "world"로 바꿀 수는 없다.대신 새로운 String 객체를 만들어야 한다.String str = "hello";str = str + " world"; // "hello" 객체는 그대로, 새로운 "hello world" 객체 생성위 코드에서 + 연산을 하면 기존 "hello" 문자열이 변경되는 것이 아니라, ..
[JPA] Spring Data JPA 페이징 (3/3) - 성능 최적화와 테스트
·
공부일기../JPA
시리즈![JPA] Spring Data JPA 페이징 (1/3) - 기본 개념과 핵심 객체[JPA] Spring Data JPA 페이징(2/3) - 실무 패턴과 동적 쿼리[JPA] Spring Data JPA 페이징 (3/3) - 성능 최적화와 테스트 1. 페이징 성능 최적화1-1. COUNT 쿼리 최적화Page를 사용할 때 COUNT 쿼리가 자동으로 실행되는데, 복잡한 조인이 포함되면 성능 문제가 발생한다.// 문제 상황: 복잡한 조인이 COUNT 쿼리에도 포함됨@Query("SELECT p FROM Product p " + "LEFT JOIN FETCH p.category c " + "LEFT JOIN FETCH p.supplier s " + "LEFT JOIN FE..
[JPA] Spring Data JPA 페이징(2/3) - 실무 패턴과 동적 쿼리
·
공부일기../JPA
시리즈![JPA] Spring Data JPA 페이징 (1/3) - 기본 개념과 핵심 객체[JPA] Spring Data JPA 페이징(2/3) - 실무 패턴과 동적 쿼리[JPA] Spring Data JPA 페이징 (3/3) - 성능 최적화와 테스트 1. 실무에서 자주 사용하는 페이징 예시1-1. 관리자 페이지관리자 페이지에서는 전체 데이터 개수와 페이지 네비게이션이 필요하므로 Page를 사용한다.// Controller@RestController@RequiredArgsConstructor@RequestMapping("/admin/products")public class AdminProductController { private final ProductService productService; ..
[JPA] Spring Data JPA 페이징 (1/3) - 기본 개념과 핵심 객체
·
공부일기../JPA
시리즈![JPA] Spring Data JPA 페이징 (1/3) - 기본 개념과 핵심 객체[JPA] Spring Data JPA 페이징(2/3) - 실무 패턴과 동적 쿼리[JPA] Spring Data JPA 페이징 (3/3) - 성능 최적화와 테스트 1. 페이징이 필요한 이유실무에서 데이터베이스의 모든 데이터를 한 번에 조회하는 것은 심각한 성능 문제를 야기한다. 예를 들어 상품 테이블에 10만 건의 데이터가 있을 때, 전체 조회를 시도하면 다음과 같은 문제가 발생한다.// 안티패턴: 전체 데이터 조회List products = productRepository.findAll();// 문제점:// 1. 메모리 부족으로 OutOfMemoryError 발생 가능// 2. DB에서 데이터를 가져오는 시간이 ..
[Infra] 웹 서버 & 리버스 프록시 (Nginx) 기초개념 찍먹~
·
공부일기../Infra
1. 개요 및 역할 (Concept & Role)Nginx(엔진엑스)는 경량화된 고성능 Web Server이다. Java 기반의 WAS(Jeus, Tomcat) 앞단에 배치하여 Reverse Proxy 역할을 수행하는 것이 표준 아키텍처이다.리버스 프록시 (Reverse Proxy): 외부 클라이언트의 요청을 받아 내부의 WAS로 전달한다. 보안상의 이유로 내부 WAS(8080 포트 등)를 직접 노출하지 않기 위해 사용한다.로드 밸런싱 (Load Balancing): 트래픽이 많을 경우 여러 대의 WAS로 부하를 분산한다. (L7 스위치 역할 수행)정적 파일 처리 (Static Content): HTML, CSS, Image 등 단순 파일 요청은 WAS를 거치지 않고 Nginx가 직접 처리하여 성능을 최..
[도커] Docker와 Docker Compose의 차이점
·
공부일기../Docker
1. Docker: 단일 컨테이너Docker는 컨테이너를 생성하고 실행하는 기본 엔진이다. 하나의 컨테이너를 띄우고 관리하는 데 사용한다.# MySQL 컨테이너 실행docker run -d \ --name mysql-container \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=rootpass \ -e MYSQL_DATABASE=portmis \ -v mysql-data:/var/lib/mysql \ mysql:8.0# Spring Boot 애플리케이션 컨테이너 실행docker run -d \ --name spring-app \ -p 8080:8080 \ --link mysql-container:mysql \ -e SPRING_DATASOURCE_URL=jdb..
[DB] Pagination 시 Offset-based와 Cursor-based 고려조건
·
공부일기../DataBase
1. 오프셋 vs 커서1-1. 성능 비교와 벤치마크두 방식의 성능 차이는 데이터 규모와 페이지 깊이에 따라 극명하게 나타난다. 실제 환경에서의 성능 특성을 이해하는 것이 중요하다. 오프셋 기반 성능 특성첫 페이지 (OFFSET 0): 매우 빠름중간 페이지 (OFFSET 10000): 점진적 성능 저하깊은 페이지 (OFFSET 100000): 심각한 성능 저하커서 기반 성능 특성첫 페이지: 매우 빠름중간 페이지: 빠름 (일정)깊은 페이지: 빠름 (일정)실무 벤치마크 예시 (100만 건 데이터 기준)오프셋 기반:- OFFSET 0 LIMIT 10: 5ms- OFFSET 10000 LIMIT 10: 50ms- OFFSET 100000 LIMIT 10: 500ms- OFFSET 500000 LIMIT 10: 2..
[DB] 페이지네이션 종류 (커서 , 오프셋)
·
공부일기../DataBase
1. 페이지네이션의 기본 개념과 필요성1-1. 페이지네이션이란 무엇인가페이지네이션(Pagination)은 대용량 데이터를 효율적으로 조회하고 사용자에게 제공하기 위해 데이터를 일정 단위로 나누어 처리하는 기법이다. 실무에서 테이블에 수십만, 수백만 건의 데이터가 존재할 때 이를 한 번에 모두 조회하면 메모리 부족, 네트워크 대역폭 낭비, 사용자 경험 저하 등의 문제가 발생한다. 예를 들어 쇼핑몰의 상품 테이블에 100만 건의 상품이 있다고 가정해보자. 사용자가 상품 목록 페이지에 접속할 때마다 100만 건을 모두 조회하여 클라이언트로 전송한다면 서버 메모리는 물론이고 네트워크 비용도 엄청나게 증가한다. 또한 사용자는 실제로 처음 몇십 개의 상품만 확인하는 경우가 대부분인데, 불필요한 데이터까지 모두 로딩..