매일 공부 기록

매일 공부 기록

성장의 동기부여를 함께 일으키는 개발자가 되고 싶은 백승한입니다!
JVM 내부 구조 & 메모리 영역
2024-07-09·백승한

JVM 내부 구조 & 메모리 영역

실행 엔진은 클래스 로더를 통해 런타임 데이터 영역에 배치된 바이트 코드를 명령어 단위로 읽어서 실행Java ByteCode(.class) 는 기계가 바로 수행할 수 있는 언어보다는 JVM이 읽을 수 있는 중간 레벨의 컴파일 된 코드이다. 그래서 실행 엔진은 이 바이트코드를 실제로 JVM 내부에서 기계가 이해할 수 있는 언어로 변경한다.이 변경 작업은 인터프리터와 JIT 컴파일러 두 가지 방식을 혼합하여 사용한다.Heap 메모리 영역에서 더는

Garbage Collection
2024-07-09·백승한

Garbage Collection

GC를 수행하기 위해 JVM이 프로그램 실행을 멈추는 현상GC가 작동하는 동안 GC 관련 쓰레드를 제외한 모든 쓰레드는 멈추게 되어 서비스 이용에 차질이 생길 수 있다. 이 시간을 최소화 시키는 것이 쟁점이다 특정 객체가 Garbage인지 아닌지 판단하기 위해 도달성, 도달능력(*Reachability)이라는 개념을 적용한다.객체에 레퍼런스(참조)가 있다면 Reachable로 구분되고 객체에 유효한 참조가 없다면 Unreachable로

DDD - 최범균
2024-06-26·백승한

DDD - 최범균

결제나 배송처럼 특정 도메인은 직접 구현하지 않는 경우도 빈번하다.특정 도메인을 개념적으로 표현하는 것(도메인 자체를 이해하기 위한 개념 모델)도메인을 이해하는 데 도움이 된다면 표현 방식이 무엇인지는 중요하지 않다.DIP는 저수준이 고수준을 의존하는 것이다. 하지만 왼쪽 사진처럼 도메인이 구현체를 담당하는 인프라 스트럭처 영역에 의존하고 있다면 이는 잘못 적용된 것이다. 여전히 고수준이 저수준을 의존하는 것이기 때문이다.따라서 DIP를

MySQL의 아키텍처
2024-06-17·백승한

MySQL의 아키텍처

MySQL은 크게 MySQL 엔진과 스토리지 엔진(InnoDB, MyISam 등)으로 나뉜다.그리고 이러한 엔진들을 합쳐서 일반적으로 MySQL 서버라고 부른다.

Real MySQL 시작
2024-06-14·백승한

Real MySQL 시작

InnoDB에서는 트랜잭션을 지원하기 때문에 글로벌 락을 사용하지 않아도 되지만, 8,0부터 기본 스토리지 엔진으로 체택되면서 무거운 글로벌 락 대신 백업만을 위한 백업 락이 도입됐다.개별 테이블 단위로 설정되는 락이며, 명시적 / 묵시적으로 특정 테이블의 락을 획득 가능하다.데이터베이스 객체의 이름이나 구조를 변경하는 경우에 획득하는 잠금이다.

SQL 파티셔닝 샤딩 레플리케이션
2024-06-13·백승한

SQL 파티셔닝 샤딩 레플리케이션

SQL DBCP
2024-06-13·백승한

SQL DBCP

백엔드에서 DB를 통해 쿼리 결과를 받는 대략적인 시퀀스 다이어그램은 이렇다.

SQL DB 정규화
2024-06-10·백승한

SQL DB 정규화

SQL DB에서 Functional Dependency(함수 종속)
2024-06-03·백승한

SQL DB에서 Functional Dependency(함수 종속)

SQL DB 설계를 잘못하면 어떤 문제가 생길까
2024-06-03·백승한

SQL DB 설계를 잘못하면 어떤 문제가 생길까

SQL 인덱스 타면 빨라지는 이유
2024-06-02·백승한

SQL 인덱스 타면 빨라지는 이유

우리도 모르는 새에 인덱스를 사용하고 있었다.

동시성 제어 / 낙관적 / 배타적 락
2024-06-02·백승한

동시성 제어 / 낙관적 / 배타적 락

SQL Concurrency Control : Lock을 활용
2024-05-31·백승한

SQL Concurrency Control : Lock을 활용

SQL MVCC
2024-05-31·백승한

SQL MVCC

그리고 UPDATE 문을 실행시켰다고 가정해보자.

SQL Concurrency Control 기초: Schedule과 Serializabillity, 트랜잭션들이 동시에 실행될 때 Isolation을 보장하는 기초 이론
2024-05-30·백승한

SQL Concurrency Control 기초: Schedule과 Serializabillity, 트랜잭션들이 동시에 실행될 때 Isolation을 보장하는 기초 이론

SQL concurrency control 기초 : recoverability. 트랜잭션들이 동시에 실행될 때 rollback이 발생하면 어떤 일이 벌어질까
2024-05-30·백승한

SQL concurrency control 기초 : recoverability. 트랜잭션들이 동시에 실행될 때 rollback이 발생하면 어떤 일이 벌어질까

@Transactional
2024-05-29·백승한

@Transactional

Spring이 제공하는 선언적 트랜잭션(@Transaction)의 장점 중 하나는 여러 트랜잭션을 묶어서 커다란 하나의 트랜잭션 경계를 만들 수 있다는 점이다. 작업을 하다보면 기존에 트랜잭션이 진행 중일 때 추가적인 트랜잭션을 진행 해야하는 경우가 생긴다. 이 때, 이미 트랜잭션이 진행중일 때 추가 트랜잭션 진행을 어떻게 할지 경정하는 것이 전파속성 이다.Transaction은 DB에서 제공하는 기술이므로, 커넥션 객체를 통해서 처리한다는

SQL Stored Procedure 백엔드에 실무에서 쓰기 조심스러운 이유
2024-05-29·백승한

SQL Stored Procedure 백엔드에 실무에서 쓰기 조심스러운 이유

SQL Trigger
2024-05-29·백승한

SQL Trigger

데이터의 변경이 생겼을 때(C, U, D) 이것이 계기가 되어 자동으로 실행되는 프로시저

SQL ORDER BY, GROUP BY
2024-05-28·백승한

SQL ORDER BY, GROUP BY

SQL STORED FUNCTION
2024-05-28·백승한

SQL STORED FUNCTION

임직원의 ID를 열자리 정수로 랜덤하게 발급한다. ID의 맨 앞자리는 1로 고정이다.졸업 요건 중 하나인 토익 800점 이상을 충족했는지를 알려주는 함수를 작성

SQL STORED PROCEDURE
2024-05-28·백승한

SQL STORED PROCEDURE

SQL Join
2024-05-27·백승한

SQL Join

LEFT JOIN, RIGHT JOIN을 UNION하여 해결 가능함

SQL Null의 의미, Three-valued logic
2024-05-27·백승한

SQL Null의 의미, Three-valued logic

SQL 서브쿼리
2024-05-27·백승한

SQL 서브쿼리

동기화, 멀티 스레드 환경에서 동시성 문제 해결
2024-05-24·백승한

동기화, 멀티 스레드 환경에서 동시성 문제 해결

동시성의 일반적인 문제는 다음과 같다.

모놀리식 아키텍처 VS MSA
2024-05-24·백승한

모놀리식 아키텍처 VS MSA

모놀리식 아키텍처는 단일 코드 베이스 애플리케이션이다.전체 애플리케이션은 단일 코드로 작성되어 단일 데이터베이스에 연결된다.애플리케이션을 작은 서비스로 분할하고 각 서비스가 독립적으로 느슨한 결합이 되어있어 기술에 구애받지 않는다.각각 고유한 데이터베이스를 소유할 수 있다.복잡성을 함께 수반함MSA로 프로젝트를 진행하려면 많은 경험이 필요하다.일반적으로 작업하는 것이 모놀리식에 비해 훨씬 더 복잡하다.

Transaction 격리 수준
2024-05-24·백승한

Transaction 격리 수준

위에서 설명한 Dirty Read, Non-Repeatable Read, Phantom Read 와 같은 이상한 현상을 발생시키지 않고 트랜잭션간에 격리성을 완벽하게 보장하려면 동시 처리되는 트랜잭션을 거의 차례대로 실행해야 한다. 하지만 이런 처리는 DB 전체 처리량이 하락하게 되어 매우 나쁘다.따라서 일부 현상을 허용하는 몇 가지 Level을 만들어 필요에 따라 적절하게 선택할 수 있도록 한다. 이를 트랜잭션 격리수준이라고 부른다.ANSI/

ACID
2024-05-11·백승한

ACID

ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.

Slf4j 사용하는 이유
2024-05-03·백승한

Slf4j 사용하는 이유

slf4j(Simple Logging Facade for Java)는 자바를 위한 간단한 로깅 퍼사드(facade)이다.다양한 로깅 프레임워크(Log4j, Logback 등)를 추상화하고 통일된 인터페이스를 제공한다.로깅 프레임워크 변경 시 소스코드 변경 없이 가능하다.로깅 시 실행 시간 성능 개선을 위한 로깅 레벨(info, debug 등)을 지원한다.다양한 로깅 방식(문자열 포맷, 매개변수, 예외 처리)을 지원한다.구현 기술에 종속되지

SAM(Single Abstract Method) Interface
2024-05-02·백승한

SAM(Single Abstract Method) Interface

하나의 추상 메서드만 포함하는 인터페이스함수형 인터페이스라고 부르기도 한다자바에서는 익명 객체를 생성하지만, 코틀린은 함수 타입이 따로 존재하기 때문에 익명 객체를 생성하지는 않는다.

코틀린에서 Lombok을 사용하지 못하는 이유
2024-05-02·백승한

코틀린에서 Lombok을 사용하지 못하는 이유

https://junghyungil.tistory.com/157Lombok을 사용하는 자바 프로젝트에 코틀린을 적용했을 때 컴파일 오류가 발생한다. 왜일까문제의 원인은 Java & Kotlin이 섞인 프로젝트의 빌드과정을 살펴봐야 한다.이 중 2 번 과정에서 Annotation Processing을 할 때 컴파일 오류가 발생한다..kt 파일이 이미 .class 파일로 변환된 이후 .java 파일이 .class로 변환될 때 코틀린 클래스 파일도

코틀린 자바 Immutable 컬렉션 차이
2024-05-02·백승한

코틀린 자바 Immutable 컬렉션 차이

오직 저장된 요소를 조회하는 것만 가능한 컬렉션불변이 보장된다.코틀린의 컬렉션은 불변을 지향하는 코틀린의 특성에 따라 기본적으로 불변 컬렉션 객체를 만든다.자바에서 불변 컬렉션을 생성하는 방법으로는 java.util.Collections.unmodifyingXXX 메소드를 통해 불변 컬렉션을 생성하는 방법이 있다.unmodifiableList(), unmodifiableSet(), unmodifiableMap()의 파라미터로 기존 컬렉션을

코틀린 Slf4j 사용법
2024-05-02·백승한

코틀린 Slf4j 사용법

UI 의존 개발 금지
2024-05-01·백승한

UI 의존 개발 금지

Git Fork로 협업하기
2024-05-01·백승한

Git Fork로 협업하기

kotest 환경 설정
2024-05-01·백승한

kotest 환경 설정

IsolationMode를 통해 재사용을 방지할 수 있다. 인스턴스 단위를 결정한다.

My는 개념이 아니다
2024-05-01·백승한

My는 개념이 아니다

‘내’ 정보‘내’ 주문‘내’ 리뷰 등을 개념으로 바라보면 설계가 잘못될 수 있다.‘나의’ 라는 것을 개념으로 사용하면 my라는 패키지가 생성되는데, MyOrder, MyProduct, MyReview가 포함되버린다. 이 경우는 묵음 처리 되면서 융합되는 거라고 생각하면 편하다.예를 들어, 나의 주문이 있다고 하면 이는 MyOrder라는 ‘개념’이 아니라 Order + User의 융합인 것이다.

Subscribe to our newsletter

Get the latest news and updates from our team