'조엘 온 소프트웨어 - 유니코드와 문자 세트'를 읽고 아래 글을 읽고 정리한 내용입니다. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)Ever wonder about that mysterious Content-Type tag? You know, the one you’re supposed to put in HTML and you never quite know what it should be? Did you ever get an email from your friends in…www.joelonsoftware.com 최초에는 EBCDIC가 있었다.그런데, 여기서 다루지는 않을거다. 이..
썸네일 PCB, Process Control Block 프로세스 제어 블록(PCB)각 프로세스는 OS에서 PCB의 형태로 표현된다.OS는 멀티 프로그래밍을 지원하기 위해 모든 프로세스를 추적해야 한다.PCB를 사용하여 플로세스의 실행 상태를 추적한다.프로세스 상태: new / ready / running / waiting / halted(중단) ..프로그램 카운터: 이 프로세스가 다음에 실행 명령어 주소를 가리킴CPU 레지스터들: 프로세스 실행중에 데이터나 주소, 상태아 같은 정보를 저장, 인터럽트가 발생할 때 반드시 저장되어야 한다.CPU 스케줄링 정보: 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함한다메모리 관리 정보: 메모리에 대한 기준(base) 레지스터와 한계(limit) 레지스터의 값, 페이지/세그먼트 테이블을 저장한다..
썸네일 페이징과 TLB, 그리고 MMU 페이징물리 메모리는 프레임, 논리 메모리는 페이지라 불리는 같은 크기의 블록으로 나뉜다.페이지 크기는 일반적으로 4KB~4MBCPU에서 나오는 모든 주소는 페이지 번호(p)와 페이지 오프셋(d: offset) 두 개의 부분으로 나뉜다.페이지 번호는 프로세스 페이지 테이블(page table)을 액세스할 때 사용된다.페이지 테이블은 물리 메모리의 각 프레임의 시작 주소를 저장하고 있으며 오프셋은 참조되는 프레임 안에서의 위치이다.⇒ 접근할 물리 메모리 주소 = 프레임의 시작 주소 + 페이지 오프셋빠른 컨텍스트 스위치를 지원하고 페이지 테이블을 찾기위해 PTBR(Page Table Base Register)을 둔다.PTBR (feat.claude)PTBR의 주요 기능과 특징:페이지 테이블 위치 지정현재 실행..
썸네일 @Transactional 안에서 LazyInitializationException, JPQL @Modifying JPQL, @Query 어노테이션을 통해 Update/Delete/Insert와 같은 Command를 사용하려면 @Modifying 어노테이션을 함께 추가해야 합니다.지금 내가 보내는 요청이 Query, 그러니까 SQL의 Select문이 아니라 DB에 변경을 끼친다는 것을 알리는 것이죠.저도 프로젝트 내에서 JPQL을 사용하는 부분에 위와 같이 @Modifying을 붙여 사용했습니다.@Modifying은 다음과 같은 두 Element를 받습니다. flushAutomatically는 해당 어노테이션이 붙은 modifying query를 실행 전에 영속성 컨텍스트에 있는 내용을 flush 하도록 합니다.clearAutomatically는 해당 어노테이션이 붙은 modifying query 실행 후에 영속성 ..
회고, 2023년을 돌아보며 23년 말에 작성하기로 마음먹었던 글을, 어쩌다 보니 24년이 시작하고 나서야 쓴다. 사실 이것도 마음먹고 앉은 것은 아니고, 본가에서 돌아오는 길에 24년의 웜업을 하려고 도서관 책상에 앉아 노트북을 펼쳤는데. 불현듯 미뤄놨던 이 글을 써야겠다는 마음이 들었다. 어제까지만 해도. 좀 더 정확히는, 글을 쓰려고 마음먹은 조금 전까지만 해도 23년은 뭐라 할 것 없이 아주 짧았다는 느낌이었는데. 막상 글을 쓰려고 앉아 돌이켜보니 꽤 길었던 해 같기도 하다. 현재는 1월 1일이지만 나에겐 아직 23년의 익숙함이 고스란히 남아, 23년의 시점으로 글을 작성한다. 작년 2학기 복학 후, 갖은 노력으로 성적표에 생전 뵌 적 없던 숫자가 찍혔다. 처음 봤던 숫자였지만 나는 무의식적으로 이를 당연하게 받아들였다. 그..
썸네일 FetchType.LAZY와 Proxy, 그리고 Spring의 Transaction 처리 오늘 할 것. 앱센터 활동으로 학기 중 약소하게나마 ToDo List 프로젝트를 진행하고 있다. 현재 JWT를 이용한 로그인 기능을 개발중인데 다른 바보같은 실수들도 많았지만 그 중에서도 알고도 틀린 에러를 소개하려고 한다. LazyInitializationException 그래. 어디서 많이 봐서 이젠 익숙하다 못해 지겨울 지경이다. 아직까지 직접 마주한 적은 없었는데 굳이굳이 틀리며 또 배우게 되는구나. 이번 글에선 LazyInitializationException이 발생한 이유와 javax.persistence의 enum 클래스, 그 중에도 FetchType.LAZY와 Proxy에 대해 알아본다. 현재 상황 우선 로그를 보자. org.hibernate.LazyInitializationExceptio..
세션은 어디에 저장될까? (HttpSession, Cookie and Session) 쿠키와 더불어 Session은 웹에서 널리 사용된다. 주로 유저의 로그인 정보를 다른 페이지로 넘어가서도 유지하기 위해 사용한다. 쿠키와 세션을 비교하는게 그다지 옳바른 방법같지는 않아보이나, 매번 그렇게 설명한다. 사실 이번 포스팅엔 그게 중요한게 아니고 '쿠키는 클라이언트에, 세션은 서버에 데이터를 저장한다'가 핵심이다. 그래. 쿠키는 브라우저에 누구나가 확인할 수 있는 방법으로 저장된다. 반면에 세션 방식은 데이터를 서버에 저장하고 브라우저는 세션ID만 쿠키로 저장한다. 브라우저는 서버에 요청을 보낼 때 쿠키 정보를 함께 보내고, 서버는 쿠키에 담긴 세션 ID를 이용해 세션 정보를 조회한다. 근데, 그래서 세션은 서버 '어디에' 저장되는데? 서버 구성에 따라 달라지겠지만, 크게 두 가지 선택이 있다..
Interface에는 왜 protected 접근지정을 사용할 수 없을까? Java에서 protected 접근 지정자는 멤버를 클래스 내부 또는 동일 패키지에 속한 클래스와 하위(sub) 클래스에 공개한다. protected는 특히 super class의 멤버를 sub class에서 재사용하거나 오버라이딩 할 때 많이 사용한다. 상속에서 강력한 기능인 protected를 인터페이스에서는 사용할 수 없다. 그 이유를 알아보자. 사실 인터페이스에서 protected를 사용하지 못 하도록 하는 것에는 절대적인 이유라기 보단, 언어설계적인 이유가 크다. 이는 인터페이스의 목적과 큰 연관이 있는데, 인터페이스는 다른 클래스들에게 특정 메서드의 프로토콜을 제공하는 것을 목표로 한다. 즉, 이를 구현하는 여러 클래스에서 공통된 이름으로 서로 다른 일을 할 수 있는 메서드의 원형을 제공한다...
접근 지정자 비교하기 Java에는 클래스를 위한 2가지 접근지정자와 멤버를 위한 4가지 접근지정자가 있다. 클래스 접근 지정자 public: 패키지에 상관없이 모든 클래스에서 접근 가능. default: 같은 패키지 내 클래스에서만 접근 가능. 멤버 접근 지정자 public: 패키지에 상관없이 모든 클래스에서 접근 가능. protected: 같은 패키지 or 상속받은 클래스에서 접근 가능 private: 비공개. 동일 클래스 내의 멤버에서만 접근 가능 default(명시하지 않음): 같은 패키지 내 클래스에서만 접근 가능
[DB] 7. 데이터 모델링 7. 데이터 모델링 데이터 모델링: 추상화 과정을 통해 현실세계의 개념을 데이터베이스에 표현하는 과정. 현실세계 -> 개념적 모델링 -> 논리적 모델링 -> 데이터베이스 데이터 모델링의 관점에서 요구사항 수집 및 분석 설계 개념적 모델링: 핵심 Entity를 도출하여 ERD 작성. 논리적 모델링: 각 개념을 구체화(릴레이션 스키마), ERD-RDB 모델 매핑, 상세 속성 정의, 정규화... 물리적 모델링: DB개체 정의(CREATE TABLE), 테이블(도메인..등) 및 인덱스 등 설계 데이터베이스 구현 개념적 데이터 모델 E-R(개체-관계) 모델 (Diagram) 개체-사각형, 관계-마름모 속성-타원형으로 표현. 개체와 개체들 사이의 관계로 표현 논리적 데이터 모델 관계, 네트워크, 계층 데이터 모델 ..
[DB] 6. DDL 6. DDL DDL은 같은 명령을 사용. CREATE / DROP / ALTER CREATE : 데이터베이스 객체 생성 (대표적으로) 테이블을 생성한다. 스키마 내부에서 생성한다. 스키마내에서 이름이 중복된 객체가 존재하면 안 된다.CREATE TABLE 테이블명 ( 열이름 자료형 [DEFAULT 값 | NOT NULLL | UNIQUE | CHECK 체크조건], 열 정의2, 열 정의3, ..., [PRIMARY KEY (열1, ...)] [FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)] [ON DELETE reference_option] [ON UPDATE reference_option] ); DROP : 데이터베이스 객체 삭제 데이터베이스 객체를 삭제한다. 객체의 스키마와 내..
[DB] 5. JOIN 5. Join 여러 테이블에 대한 조인 검색. Join? : 여러 개의 테이블을 연결하여 하나의 테이블로 만드는 과정(데이터를 검색하는 것) 조인 속성 : 조인 검색을 위해 테이블을 연결해주는 속성 연결하려는 테이블 간 조인 속성의 이름은 달라도 되지만, 도메인은 같아야 한다. 일반적으로 외래키를 조인 속성으로 이용 사용 (동등조인) -- CROSS JOIN SELECT * FROM table1, table2 WHERE table1.key1 AND table2.key2; WHERE 절은 ' AND '으로 구성, 해당 폼은 이제 잘 사용되지 않는 구식 형태 혹은, 외부조인과 폼을 통일시켜 다음과 같이 작성할 수 있다.SELECT * FROM table1 {INNER|LEFT|RIGHT|FUL..