일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 권장 PK 전략
- JPA란
- 컨테이너
- index
- transaction
- ArrayList 길이 확장
- ArrayList 소스코드
- github
- Container
- ArrayList 가변
- 멀티스레드 싱글톤
- 트랜잭션
- docker
- heap
- load balancer
- 자바 동시성
- 데이터베이스
- 싱글톤 동시성
- JPA 장점
- thread safety
- acid
- JPA
- java
- postgres
- Database
- 로드밸런서
- PostgreSQL
- create-drop
- 스키마 자동 생성
- 도커
- Today
- Total
목록전체 글 (24)
JS

객체의 불변성(Immutability)이란? 객체가 immutable 하다는 것은 객체가 최초 생성된 시점 이후 상태 값이 변하지 않는다는 뜻입니다. 객체를 처음 만들었을 때의 속성을 해당 객체가 사라질 때까지 그대로 유지한다는 뜻이죠. 객체의 불변성이 왜 중요할까? 어떤 장단점이 있을까? 그렇다면 객체의 불변성이 왜 중요할까요? 이펙티브 자바(Effective Java)에서는 특별한 이유가 있지 않은 이상 클래스는 immutable 해야 한다고 합니다. Classes should be immutable unless there's a very good reason to make them mutable....If a class cannot be made immutable, limit its mutabili..

Java Virtual Machine(JVM) 구조는 크게 Class Loader, Runtime Data Area, Execution 이렇게 세 가지로 나눌 수 있는데, 여기서는 메모리 영역인 Runtime Data Area에 대한 내용을 다룹니다. Runtime Data Area Runtime Data Area란, JVM이 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역입니다. 이 메모리 공간은 5가지 영역으로 쪼개어져 있으며 크게 두 가지로 분류됩니다. JVM 시작시 생성되며 JVM 종료 시 소멸되는 영역들로는 Method Area와 Heap이 있으며, 모든 쓰레드 간 자원이 공유됩니다. 각 쓰레드가 생성될 때 생성되고 해당 쓰레드가 종료될 때 소멸되는 영역들에는 Stack, PC Regi..

1. Proxy 프록시란 서버와 서버 사이에서 목적에 따라 특정 서버들을 대신해 여러가지 작업을 수행해주는 중개인으로 묘사할 수 있습니다. 프록시 서버는 요청을 가로채서 응답할 수 있으며, 요청만 전달하거나 수정할 수도 있습니다. 요즘처럼 프론트엔드와 백엔드로 나누어 개발하는 시스템의 경우, 요청의 주체인 프론트엔드 서버 F에서 요청을 받는 백엔드 서버 B에 직접 요청을 보내 응답을 처리합니다. 따라서 백엔드 서버에서는 해당 요청에 대한 모든 정보를 바로 확인할 수 있습니다. 이 구조에 프록시 서버를 추가하면 어떤 형태가 될까요? 프론트엔드 서버 F와 백엔드 서버 B 사이에 프록시 서버 역할을 하는 P라는 서버를 추가함으로써, 프론트엔드 서버 F는 더이상 백엔드 서버 B가 아닌 프록시 서버 P로 요청을 ..

1. Nginx (N-ginx가 아닌 engine-X라고 발음합니다) Nginx는 최신 웹의 증가하는 요구를 지원하기 위해 개발된 고성능 웹서버입니다. Nginx는 적은 자원의 사용으로 높은 성능과 높은 동시성을 목표로 만들어졌습니다. 기존에는 Apache를 웹서버로 많이 사용했지만, Apache 서버는 웹과 모바일의 발전으로 점점 늘어나는 트래픽을 감당하기 어려워 크고 작은 문제들이 많이 생겼습니다. 이런 문제를 해결하기 위해 Nginx가 개발되었고 현재는 로드밸런싱, 캐싱, HTTP Server 등의 다양한 용도로 많이 사용되고 있습니다. 2. Nginx 설치 2-1. Mac (Homebrew) Homebrew를 통해 nginx 설치 $ brew install nginx nginx 서버 실행 $ ng..

1. Query Processing Pipeline Query Processing Pipeline이란 우리가 작성한 SQL 쿼리문을 실행한 뒤 결과를 볼 때까지 Postgres 내부에서 거치는 과정들입니다. 쿼리 성능을 분석하기 전에 내부 동작 과정을 간단하게라도 파악하고 넘어가면 분석 단계에서 더 많은 도움이 되겠죠? Parser (Stage) Parser Stage는 제공된 SQL문의 단어 하나하나를 확인하여 올바른 문법으로 작성되었는지 확인하는 단계이고 제공된 SQL문을 tree 형태로 만듭니다. 위에서 작성한 SQL문을 읽어들여 컴퓨터 프로그램이 이해할 수 있는 논리적 단계 형태로 만드는 작업입니다. SELECT * FROM users WHERE username = 'jamessoun93'; 위 ..

이번에는 데이터베이스를 다룰 때 정말 중요한 역할을 하는 Index에 대해 다뤄보겠습니다. 실제로 실무에서 서비스를 운영하면서 생기는 장애들을 Index를 적용하여 해결하는 경우가 많습니다. 그렇다면 Index가 무엇인지, 장/단점은 무엇인지 등에 대해 알아보겠습니다. Full Table Scan Index 동작 원리 Index 생성 및 벤치마킹 Index 단점 자동 생성 Indexes Full Table Scan Index가 뭔지 알아보기 전에 Full Table Scan에 대해서 알아보겠습니다. SELECT * FROM users WHERE username = 'jamessoun93'; 위 쿼리는 users 테이블 내 존재하는 모든 데이터 중 username 컬럼 값이 jamessoun93인 데이터를..

이제 컨테이너를 생성하는 방법을 알고 있으니 컨테이너를 사용해볼 차례입니다. interactive하게 컨테이너 사용 docker container run -it -i: interactive라는 뜻으로 명령어를 입력받을 수 있게 세션을 열어둔다는 뜻입니다. -t: tty(pseudo-TTY) 터미널과 비슷한 환경을 제공한다는 뜻입니다. -it는 -i와 -t가 합쳐져 있는 형태의 옵션입니다. 예시 nginx 기반 컨테이너에 -it 옵션을 주고 bash를 실행시켜보겠습니다. docker container run -it --name proxy nginx bash 명령어를 실행하면 실제로 nginx 서버 내부에 SSH 접속을 한 것처럼 터미널 환경이 제공되는 것을 확인할 수 있습니다. 명령어 맨 뒤에 bash는 ..

Commands 설치된 Docker 버전 확인 docker version 이 스텝에서 에러가 발생한다면 docker engine이 돌아가고 있는지 확인이 필요합니다. 상세정보 확인 (도커 engine의 config 값들) docker info 실행 가능한 명령어 리스트 docker docker (options) 이전 방식: docker (options) 컨테이너 실행 docker container run 로컬 이미지 캐시에서 이미지를 찾고 없으면 Docker Hub 같은 리모트 이미지 repository를 확인 최신 버전 다운로드 (ex. nginx:latest) 해당 이미지로 새로운 컨테이너 생성 도커 엔진 내부 private network에 가상 ip를 할당 --publish 옵션이 있다면 명시된 포..