[개발 일기] 2025.04.18 - DB 복합키
·
개발 일기
💡 개요 오늘은 데이터베이스의 테이블에 사용되는 복합 키에 대해 정리 해보자. 🛠️ 복합 키 복합 키란 둘 이상의 컬럼을 조합해 하나의 기본 키로 사용하는 것이다. 역시 말로만 설명하면 어려우니까 예시를 하나 보자. ‘수강신청’ 이라는 테이블이 있다. 모든 학생들은 한 과목을 한 번만 신청할 수 있다고 가정하자. (재수강은 없다고 가정함) 만약 복합 키를 사용하지 않는 경우 한 행의 데이터에 삽입하고자 하는 student_id와 course_id가 일치하는 컬럼이 있는 지 매번 확인해야 한다. 하지만 복합 키를 사용한다면 이렇게 불필요한 조회 과정을 생략할 수 있다. 왜냐하면 하나의 테이블에는 중복된 기본 키가 존재할 수 없기 때문이다! student_idcourse_id등록일1001C..
[개발 일기] 2025.04.17 - Cookie 요소
·
개발 일기
💡개요 위 이미지는 크롬의 개발자 도구에서 조회할 수 있는 쿠키 탭이다. 보다시피 하나의 쿠키에는 많은 요소가 포함될 수 있는데, 각각의 요소의 사용 목적이나 형태에 대해 정리해 보자. 🛠️ Cookie 일단 쿠키의 사용 목적에 대해 짧게 정리해 보면 쿠키는 클라이언트 측에 저장되는 작은 데이터로, 주로 클라이언트가 정보를 보관하거나 서버에 요청을 보낼 때 함께 전송되어 추가적인 정보를 제공하는 데 사용된다. 쿠키에 포함되어 있는 데이터 항목은 다음과 같다. 🍪 Name 쿠키의 이름이다. 클라이언트와 서버는 쿠키의 이름을 토대로 쿠키를 구분한다. 🍪 Value 쿠키에 저장되어 있는 값이다. 주로 토큰이나 세션 ID 같은 값이 보관된다. 🍪 Domain 쿠키가 적용되는 도메인 범위를..
[개발 일기] 2025.04.16 - 클래스가 final로 선언되면 내부 필드도 변경이 안될까?
·
개발 일기
💡 개요 클래스가 final로 선언되면 내부에 있는 필드 변수도 변경이 안될까? 🛠️ 클래스 필드가 final일 경우 public class ClassFinalTest { public static void main(String[] args) { Node node = new Node(1, 2); node.a++; node.b++; } static class Node { final int a; final int b; public Node(int a, int b) { this.a = a; this.b = b; } }} 위 코드에선 Node의 int a와 i..
[개발 일기] 2025.04.15 - 자바 vector
·
개발 일기
💡 개요 오늘은 자바에서 사용되는 자료형인 Vector에 대해 정리해보자. 🛠️ Vector Vector는 자바에서 사용되는 동기화된 동적 배열 자료구조이다. ArrayList와 마찬가지로 내부적으로 배열을 사용하며, 배열의 크기가 자동으로 늘어났다 줄어들 수 있다. 하지만 Vector는 모든 메서드에 동기화(synchronized) 처리가 되어 있어, 멀티 스레드 환경에서 안전하게 사용할 수 있는 특징이 있다. 반면, 이러한 동기화 처리 때문에 단일 스레드 환경에서는 ArrayList보다 성능이 떨어질 수 있다. 아래는 Vector를 사용하는 간단한 예제 코드이다. public class VectorTest { public static void main(String[] args) {..
[개발 일기] 2025.04.14 - 스레드 로컬 (Thread Local)
·
개발 일기
💡 개요 오늘은 스레드 내부에서 저장소로 사용되는 기술인 스레드 로컬에 대해 정리해 보자.   🛠️ 스레드 로컬 스레드 로컬이란, 각 스레드가 고유하게 가지는 저장소를 의미한다.  멀티 스레드 환경에서 공유를 피하고 싶은 데이터가 있을 경우, 이를 ThreadLocal을 통해 각 스레드에 독립적으로 저장할 수 있다.  보통 스레드는 데이터를 힙 영역이나 스레드 로컬 영역에 저장할 수 있는데, 힙 영역에 저장된 데이터는 모든 스레드가 접근할 수 있어 공유되고, 스레드 로컬에 저장된 데이터는 해당 스레드에서만 접근 가능하므로 동시성 문제나 데이터 정합성 문제를 방지할 수 있다. public class ThreadLocalTest { // 각 스레드마다 독립적인 값을 저장할 수 있는 ThreadLoc..
[개발 일기] 2025.04.13 - CQRS
·
개발 일기
💡 개요 오늘은 이벤트 소싱에서 사용되는 CQRS에 대해 정리해 보자.   ⚙️ 이벤트 소싱 이벤트 소싱(Event Sourcing)이란 애플리케이션의 모든 상태 변경을 이벤트(Event)로 기록하고, 이 이벤트들의 순서를 따라 현재 상태를 구성하는 방식이다.  말 그대로 데이터 자체를 변경하는 것이 아니라 데이터를 변경하려는 시도(이벤트)를 저장하는 것이다.  이 방식에서는 상태를 변경할 때마다 이벤트를 기록해야 하므로 리소스가 더 소모되긴 한다. 하지만 이로 인해 얻을 수 있는 장점도 명확하다.  가장 큰 장점은 데이터 변경을 직접 수행하지 않기 때문에 정합성 문제나 동시성 이슈 발생 가능성이 낮다는 점이다.  이벤트 소싱을 기반으로 한 시스템은 설계와 구현 난이도가 다소 높지만, 그만큼 더 안전하..