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

이번 글에서는 저번 글에 이어서 네트워크 계층(L3)이 하는 일에 대해 알아보겠습니다. 물리 계층(L1), 데이터 링크 계층(L2)이 하는 일은 이전 글을 참고해주세요 물리 계층(L1), 데이터 링크 계층(L2)이 하는 일 이번 글에서는 물리 계층(L1), 데이터 링크 계층(L2)에 대해서 알아보겠습니다. L1 - 물리 계층 L1에는 케이블, 리피터, 허브가 있습니다. L1은 실제로 데이터를 물리적으로 전송해주는 역할을 합니 320hwany.tistory.com L3 - 네트워크 계층 이전에 스위치와 허브로만 이루어진 브로드캐스트 영역을 나눠야할 필요성이 있었습니다. LAN 영역에서 LAN 영역으로 넘어가게 되면 기존에 사용하던 출발지 MAC 주소, 목적지 MAC 주소만으로는 다른 LAN 영역에 있는 컴..

이번 글에서는 물리 계층(L1), 데이터 링크 계층(L2)에 대해서 알아보겠습니다. L1 - 물리 계층 L1에는 케이블, 리피터, 허브가 있습니다. L1은 실제로 데이터를 물리적으로 전송해주는 역할을 합니다. 데이터는 디지털이지만 디지털은 물리적으로 보낼 수 없습니다. 즉 디지털 데이터가 아날로그로 변환되고 이것을 전기신호, 전자기파(가시광선, 전파 등)로 보내는 것입니다. 케이블 이렇게 데이터를 보내는 것은 케이블을 통해서 가능합니다. 케이블은 UTP 케이블, 동축 케이블, 광 케이블이 있습니다. UTP 케이블은 현재 가장 많이 사용되며 흔히 볼 수 있는 랜선이라고 생각하시면 됩니다. 동축 케이블은 반이중 통신이고 설치가 어렵고 비싸기 때문에 잘 사용하지 않습니다. 광 케이블은 빛을 이용하기 때문에 더..

저번 글인 MySQL 엔진 아키텍처에 이어서 이번에는 MySQL의 스토리지 엔진 가운데 가장 많이 사용되는 InnoDB 스토리지 엔진에 대해 알아보겠습니다. MySQL 전체 구조 InnoDB 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하여 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어납니다. 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장됩니다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빠르게 처리될 수 있습니다. 쿼리의 실행 계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 비중이 높게 설정..

MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진 과 손발 역할을 담당하는 스토리지 엔진 으로 구분할 수 있습니다. 이번 글에서는 MySQL 서버의 전체적인 구조와 MySQL 엔진에 대해서 작성해보겠습니다. MySQL의 전체 구조 MySQL의 전체 구조는 위 그림과 같습니다. MySQL은 일반 상용 RDBMS와 같이 대부분의 프로그래밍 언어로부터 접근 방법을 모두 지원합니다. MySQL 고유의 C API 부터 시작해 JDBC, ODBC 등을 제공합니다. 이러한 라이브러리를 이용해 모든 언어로 MySQL 서버에서 쿼리를 사용할 수 있게 지원합니다. 여기서 MySQL 엔진은 커넥션 핸들러, SQL 파서, 전처리기, 옵티마이저, 쿼리 실행기로 이루어지는데 각각의 요소에 대해 알아보겠습니다. MyS..
지금까지 톱 레벨 클래스에 @Controller, @Service, @Repository, @Component를 붙여 스프링 빈으로 등록하였습니다. 등록을 하면 스프링 컨테이너 안에서 기본적으로 싱글톤으로 관리됩니다. 이때 내부 클래스도 스프링 빈으로 등록할 수 있는 지 궁금증이 생겨 예제, 학습 테스트를 만들어봤습니다. 중첩 클래스는 정적 멤버 클래스, 비정적 멤버 클래스, 익명 클래스, 지역 클래스 4가지로 나뉩니다. 여기서 정적 멤버 클래스를 제외한 나머지 클래스 들을 내부 클래스라고 부릅니다. Hello 라는 톱 레벨 클래스 안에 4가지 중첩 클래스를 만들어보았습니다. // 톱 레벨 클래스 @Component public class Hello { // 정적 멤버 클래스 @Component stat..

이 글은 '성공과 실패를 결정하는 1%의 네트워크 원리'를 읽고 정리한 내용입니다. 브라우저에 URL을 입력하면 그것을 바탕으로 브라우저는 HTTP Request Message를 만들고 OS에 송신을 의뢰합니다. 여기까지의 과정은 이전 글에서 설명하였습니다. 웹 브라우저가 메세지를 만든다(HTTP, DNS, OS 프로토콜 스택, 소켓) 이 글은 '성공과 실패를 결정하는 1%의 네트워크 원리' 책의 1장으로 보고 정리한 내용입니다. HTTP Request Message를 작성한다 먼저 사용자가 브라우저에 URL을 입력합니다. URL에는 프로토콜, 웹서버 320hwany.tistory.com TCP/IP 전체 구조 이번 글에서는 그 다음 과정인 OS에 내장된 프로토콜 스택이 어떻게 송신을 의뢰하는 지를 알아..

이 글은 '성공과 실패를 결정하는 1%의 네트워크 원리' 책의 1장으로 보고 정리한 내용입니다. HTTP Request Message를 작성한다 먼저 사용자가 브라우저에 URL을 입력합니다. URL에는 프로토콜, 웹서버명, 디렉토리명, 파일명 등이 정의되어 있습니다. 프로토콜에는 http, ftp, file, mailto 등이 있지만 여기서는 가장 많이 사용하는 http로 설명하겠습니다. 이제 브라우저는 URL의 정보를 보고 HTTP Request Message를 만듭니다. 이렇게 브라우저가 만든 HTTP Request Message를 서버에 전송하고 서버로부터 HTTP Response Message를 받습니다. HTTP 구조에 대한 자세한 내용은 이전 글을 참고해주세요. HTTP 특징 HTTP 메소드 ..
개발을 하다보면 상수를 관리해야할 경우가 있습니다. 상수를 사용하는 곳마다 하드코딩을 하지 않고 따로 클래스를 만들면 효율적으로 관리할 수 있습니다. 그래서 Error 메세지를 관리하는 클래스인 ErrorMessageConstant를 만들어서 사용하고 있었습니다. 하지만 이 방식은 완벽한 싱글톤을 보장하지 못한다는 문제점이 있습니다. Before 먼저 기존에 상수를 관리하던 방식부터 살펴보겠습니다. ErrorMessageConstant public class ErrorMessageConstant { private ErrorMessageConstant() { } public static final String MEMBER_DUPLICATION_MESSAGE = "이미 가입된 회원입니다"; public st..

현재 '원하는 분야의 CS 면접 질문을 매일 아침 이메일로 전송해주는 서비스'를 운영하고 있습니다. 매일 아침 9시에 각 회원이 선택한 분야, 문제 수를 보내주는데 회원이 10명이 조금 넘을 때 30초가 넘게 걸렸습니다. 이렇게 오래걸린 이유는 이메일을 보내는 작업은 시간이 많이 드는 작업이기도 하지만 회원의 요청을 순차적으로 처리했기 때문입니다. 이번 글에서는 이메일을 보내는 작업을 비동기로 처리하여 30초가 넘게 걸리는 작업을 7.4초 정도로 줄인 과정 에 대해 작성해보려고 합니다. Before SendRandomQuizzes public void sendRandomQuizzes() { List quizFilterSearchList = quizFilterRepository.findAllQuizFilt..

원하는 분야의 CS 면접 질문을 이메일로 전송해주는 서비스를 만들고 있었습니다. React 기반의 프론트, Spring 기반의 백엔드를 배포할 때 구매한 도메인을 적용하고 Https도 적용 해보겠습니다. 같은 EC2 서버에서 프론트, 백엔드 모두 배포를 진행하였습니다. EC2 인스턴스는 이미 만들었다는 가정을 하고 진행하겠습니다. 도메인 구매 후 EC2와 연결하기 저는 가비아에서 도메인을 구매하였습니다. 구매 후 DNS 관리에서 레코드 수정에 들어가 EC2 인스턴스의 ip 주소를 입력합니다. 값/위치 부분에 ip 주소를 적으면 됩니다. Backend 배포하기 github에 올라와 있는 프로젝트를 clone해서 가져왔습니다. 폴더 구조는 sendQuiz 아래 frontend, backend가 있습니다. 먼..