HashMap
·
JAVA/자료구조
HashMap을 비롯한 자료구조들은 Serializable 을 구현한다.Serializable은 구식이고 문제가 많아 JSON으로 넘어가는 추세인데 왜 아직도 Serializable을 구현하는 걸까? Java의 HashMap이 여전히 Serializable을 구현하는 이유1. 역사적 배경: "그때는 그게 최선이었습니다" (1998년의 상황)HashMap은 Java 1.2 버전(1998년)에 처음 등장했습니다. 그 당시 자바(Sun Microsystems)가 꿈꾸던 세상은 지금과 달랐습니다.당시의 비전: "모든 컴퓨터가 자바 가상 머신(JVM) 위에서 돌아가고, 네트워크로 연결된 자바 객체들이 서로 통신(RMI, EJB)하는 세상."필수 기능: 자바 객체끼리 통신하려면 객체를 바로 전송할 수 있어야 했으므..
Serializable
·
JAVA
java.io.Serializable 인터페이스는 "이 클래스는 직렬화해도 되는 클래스입니다"라고 자바 가상 머신(JVM)에게 알려주는 '마커 인터페이스(Marker Interface)'. import java.io.Serializable;public class User implements Serializable { // 1. serialVersionUID를 명시적으로 선언 (매우 중요!) private static final long serialVersionUID = 1L; private String name; private int age; // 2. transient 키워드 사용 // 직렬화 대상에서 제외하고 싶은 민감한 정보에는 transient를 붙입니다...
제한적 직접 실행(Ostep : chapter 06)
·
운영체제
1. 시스템 콜(System Call)과 트랩(Trap)1) 시스템 콜: 은행 창구와 직원개념: 사용자 프로세스(User Mode)가 커널(Kernel Mode)에게 "파일 읽기, 쓰기" 같은 특권 작업을 요청하는 인터페이스비유: 은행 금고(하드웨어)에 직접 들어갈 수 없으니, 창구 직원(커널)에게 신청서를 내는 것과 같다.실제 동작: 우리는 open() 함수를 호출한다고 생각하지만, 실제로는 C 라이브러리(glibc)의 래퍼 함수가 실행되며 내부적으로 시스템 콜 번호를 레지스터에 적는다.2) 트랩(Trap): 실행의 벨을 누르다시스템 콜이 '요청 내용(무엇을)'이라면, 트랩은 그 요청을 전달하는 '수단(어떻게)'.역할: 사용자 모드에서 커널 모드로 진입하기 위해 발생시키는 소프트웨어 인터럽트.동작: T..
서버 연결에 관하여(HTTP, 톰캣, 소켓, 포트)
·
컴퓨터 네트워크
1. 톰캣과 HTTP의 관계HTTP 는 서버가 대화하는 텍스트 규칙에 대한 프로토콜이다. 톰캣은 내부적으로 JAVA의 Socket 라이브러리를 사용해서 만들어진 프로그램이다. HTTP 메시지는 생각보다 커서 패킷으로 쪼개져서 전송된다.-> 하나의 HTTP 요청, 응답은 네트워크를 건널때, 수십, 수백개의 패킷으로 쪼개져서 이동한다. 서버가 실행되면(run)1. 톰캣이 켜지면서 리스닝 소켓이 생성된다.2. 브라우저 요청이 도착하면 리스닝 소켓이 연결소켓을 생성한다. (리스닝 소켓이 OS 커널에게 브라우저 요청을 토스, OS 커널이 연결 소켓을 생성 후 리스닝 소켓에게 반환, 리스닝 소켓이 연결 소켓을 톰캣에게 반환)3. 톰캣은 미리 만들어둔 스레드 풀(Thread Pool)에서 스레드 하나를 골라, 생성..
@OneToOne 관계 매핑, 세가지 설계 방식과 그에 따른 Trade-off
·
프로젝트/회고
1. 객체지향 관점의 단방향 (User -> Profile)"User가 Profile을 소유한다." 가장 객체지향적인, 그리고 가장 단순한 접근 방식. User가 Profile을 알지만, Profile은 User의 존재를 모른다. DB 스키마: users 테이블에 profile_id (FK)가 생긴다.특징: mappedBy가 없습니다. 코드가 단순해진다.// User.java (관계의 '주인')@Entity@Table(name = "users")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 1. User 저장/삭제 시 Profile도 함께 처리 // 2...
FK(Foreign Key)는 필요한가
·
프로젝트/회고
1. FK를 사용하는 경우"데이터 무결성을 DB 레벨에서 강제하여, 애플리케이션의 실수로부터 데이터를 보호하는 것"에 초점을 맞추는, 가장 전통적이고 안전한 전략. 장점 (Pros)1. 압도적인 데이터 무결성 보장 (The Fortress)이것이 FK를 사용하는 가장 큰 이유이다. DB는 '데이터의 최종 수호자' 역할을 한다.'고아 데이터(Orphaned Record)' 원천 차단:예시: users (부모 테이블)와 orders (자식 테이블)가 있다고 가정해 보자. orders 테이블의 user_id 컬럼은 users.id를 FK로 참조한다.상황: 만약 개발자가 실수로 user_id = 999 (존재하지 않는 유령 회원)의 주문 데이터를 INSERT하려고 시도하면, DB는 FOREIGN KEY cons..