일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 동시성 문제
- db
- Locking Read
- iterable
- MVCC
- 데이터 타입
- 백엔드
- Varchar
- 동시성
- 가비지 컬렉터
- CAS
- 자바
- text
- gc
- 스프링
- jpa
- reflection
- Di
- 가비지 컬렉션
- Synchronized
- java
- iterator
- Atomic Type
- Lock
- foreach
- MySQL
- Today
- Total
목록전체 글 (98)
과정을 즐기자

프로그래밍 언어는 메모리 관리 주체에 따라 크게 2가지로 나눌 수 있습니다. 언어 자체적으로 메모리를 관리해주는 Managed 언어 (Java, C#)와 개발자가 직접 메모리를 관리하는 Unmanaged 언어 (C, C++)입니다. Managed 언어는 메모리에 할당된 객체를 개발자가 관리를 하지 않아도 되고 Garbage Collector가 대신해줍니다. 이번 글에서는 Garbage Collection에 대해 알아보겠습니다. JVM 메모리 구조 Garbage Collector가 메모리의 어떤 부분을 관리해주는 지 알아보기 위해 먼저 JVM의 메모리 구조에 대해 알아보겠습니다. JVM 메모리는 크게 5가지 영역으로 나뉩니다. 1. Method Area Method Area에는 자바 컴파일러에 의해 변환된..

이번 글은 MySQL과 InnoDB 스토리지 엔진을 기준으로 작성하였습니다. MySQL에는 여러 데이터 타입이 있습니다. 숫자형 데이터 타입, 문자열 데이터 타입, 날짜 시간 데이터 타입 등..이 중에서 문자열 데이터 타입의 종류에는 CHAR, VARCHAR, TEXT 등이 있습니다.CHAR는 고정 크기 문자열 방식이고 VARCHAR는 가변 크기 문자열 방식이고 TEXT는 긴 문자열을 저장할 때 사용합니다. 이때 한가지 의문이 듭니다. VARCHAR가 가변 크기 문자열 방식이라면 TEXT를 사용하지 않고 그냥 최대 크기인 VARCHAR(16683)로 (65535 bytes) 선언하면 되지 않을까요? 어차피 10글자만 입력하면 실질적인 10글자인 40bytes를 저장하고 나머지 4byte는 길이정보로 사용..

이번 글에서는 서버가 처리할 수 있는 요청의 수는 어떻게 결정되는지 알아보겠습니다.그 전에 먼저 전체적인 웹 서비스의 흐름을 간단하게 살펴보겠습니다. 우선 크게 3가지 서버로 나눌 수 있습니다. 웹 서버, WAS, DB입니다.웹 서버는 Nginx, Apache 등이 있고 정적인 컨텐츠를 처리, 보안, 로드 밸런서 등의 역할을 합니다.WAS는 Tomcat, Jetty 등이 있고 애플리케이션 로직같은 동적 컨텐츠를 처리합니다.DB는 MySQL, Oracle, MongoDB 등이 있고 데이터를 저장하는 역할을 합니다. 사용자의 요청이 오면 웹 서버, WAS, DB를 거쳐 응답을 반환합니다.물론 이때 DB를 거치지 않고 웹 서버나, WAS에서 바로 응답을 반환할 수도 있습니다. 스프링부트를 사용하면 톰캣 서버..

현재 가장 많이 사용되는 백엔드 기술 스택으로 Spring과 Node.js가 있습니다. Spring은 Java, kotlin과 같은 JVM 계열의 언어를 사용하고 사용하는 언어에 따라 Java Spring, kotlin Spring이라고 부릅니다. Node.js는 기본적으로 javascript을 사용하지만 타입이 없다는 단점이 있어 현재는 TypeScript를 주로 사용합니다. 이번 글에서는 2가지 기술 스택을 비교해보며 각각 어떤 장단점이 있으며 어떠한 경우에 사용하면 좋을 지 알아보겠습니다. 동작방식 기본적으로 Spring은 멀티 쓰레드 동기 방식으로 작동합니다. 아래 그림과 함께 더 자세히 알아보겠습니다. 예를들어 동시에 10개의 사용자 요청이 왔다고 하면 쓰레드 풀에서 10개의 쓰레드를 꺼내어 각..

이전 글에서 자바 쓰레드 관리의 시작에 대해 알아보았습니다. 자바 쓰레드 관리의 시작 OS 쓰레드와 유저 쓰레드 자바 쓰레드 관리에 대해 알아보기 전에 OS 쓰레드와 유저 쓰레드에 대해 먼저 알아보겠습니다. OS 쓰레드는 OS 커널 레벨에서 생성되고 관리되는 쓰레드로 CPU 에서 실제 320hwany.tistory.com 자바는 멀티 쓰레드를 이용해 동시성 프로그래밍을 가능하게 했습니다. 하지만 Thread, Runnable은 매번 쓰레드의 생성과 종료를 직접해야 하며 쓰레드 관리가 어려웠습니다. 또한 쓰레드를 실행만 할 수 있을 뿐 결과 값을 반환할 수는 없었습니다. Callable, Future의 등장 자바가 발전하면서 Callable, Future가 등장했습니다. @FunctionalInterfac..

OS 쓰레드와 유저 쓰레드자바 쓰레드 관리에 대해 알아보기 전에 OS 쓰레드와 유저 쓰레드에 대해 먼저 알아보겠습니다.OS 쓰레드는 OS 커널 레벨에서 생성되고 관리되는 쓰레드로 CPU 에서 실제로 실행되는 단위로 CPU 스케줄링의 단위입니다.OS 쓰레드의 컨텍스트 스위칭은 커널이 개입하고 비용이 발생하게 됩니다.유저 쓰레드는 OS 커널이 아닌 User Program과 관련되어 있는 쓰레드로 쓰레드 개념을 프로그래밍 레벨에서 추상화한 것입니다.이때 유저 쓰레드가 CPU에서 실행되려면 OS 쓰레드와 반드시 연결되어야 합니다. 유저 쓰레드와 OS 쓰레드를 연결하는 모델로는 One-to-One, Many-to-One, Many-to-Many 모델이 있습니다.자바의 초창기는 Many-to-One 모델이었습니다...

이번 글에서는 저번 글에 이어서 애플리케이션 계층(L7)이 하는 일에 대해 알아보겠습니다. 물리 계층(L1), 데이터 링크 계층(L2), 네트워크 계층(L3), 트랜스포트 계층(L4)이 하는 일은 이전 글들을 참고해주세요 L7 - 애플리케이션 계층 L7은 개발자가 직접 다루는 애플리케이션이 하는 일에만 집중합니다. 하위 계층에서 어떤 프로토콜이 어떻게 동작할 지 모르더라도 개발자는 L7 계층의 프로토콜을 이용하여 애플리케이션을 만들 수 있습니다. L7의 프로토콜로는 DHCP, DNS, SSH, FTP, STMP, IMAP, HTTP 등이 있습니다. 지금부터 이러한 프로토콜에 대해서 알아보겠습니다. DHCP 우리가 사용하는 컴퓨터는 연결된 라우터와 같은 네트워크에서 겹치지 않는 IP 주소를 할당받아야 합니..

이번 글에서는 Stateless인 HTTP에서 로그인을 어떻게 유지하는 지에 대해서 생각해보며 성능을 고려하여 세션 기반 인증, 토큰 기반 인증을 비교해보겠습니다. 세션 기반 인증 세션을 저장하는 곳 세션 기반 인증은 서버측에서 사용자들의 정보를 기억해야 합니다. 사용자가 로그인 요청을 하면 서버에서는 로그인 할 수 있는 회원인지 확인한 후 로그인 가능하면 Set-Cookie에 Session Id를 반환합니다. 그러면 사용자의 다음 요청시 쿠키의 헤더를 보고 서버는 사용자가 로그인 유지를 할 수 있도록 합니다. 하지만 이때 문제점이 있습니다. 사용자의 세션 정보는 서버가 가지고 있는데 트래픽이 늘어나 서버가 여러 대로 늘어난다면 사용자는 로그인을 요청했던 서버에게 요청을 할 때만 로그인을 유지할 수 있다..

프로그래밍 언어를 공부하다보면 Call By Value, Call By Reference 라는 용어가 자주 들립니다. Call By Value는 값을 전달하는 방식이고 Call By Reference는 주소를 전달하는 방식입니다. 그렇다면 자바는 어떤 방식을 사용할까요? 변수를 Primitive type, Reference type으로 나눠 각각 테스트 해보겠습니다. Primitive type @Test @DisplayName("정수를 매개변수로 받아서 Call By Value로 동작하는 지 확인한다") void test1() { // given int a = 10; - 1 int b = 20; - 2 // when inner1(a, b); // then assertThat(a).isEqualTo(10)..

이번 글에서는 저번 글에 이어서 트랜스포트 계층(L4)이 하는 일에 대해 알아보겠습니다. 물리 계층(L1), 데이터 링크 계층(L2), 네트워크 계층(L3)이 하는 일은 이전 글들을 참고해주세요 L4 - 트랜스포트 계층 L4는 송신자와 수신자를 연결하는 통신 서비스를 제공합니다. 직접 물리적으로 데이터를 옮기는 것은 아니지만 송신자, 수신자가 통신을 할 수 있게 연결해주는 역할입니다. L4는 호스트 내에서 애플리케이션을 구분하는 용도로 포트라는 것을 사용합니다. 포트는 16비트로 사용하기 때문에 2^16으로 부호없는 정수 0 ~ 65535번이 될 수 있습니다. IP 뒤에 콜론으로 포트 번호를 붙입니다. 포트는 논리적인 개념으로 간단하게 프로세스 주소라고 할 수 있습니다. 이렇게 L4는 송신자, 수신자를 ..