본문 바로가기

전체 글47

[Spring] PathVariable 암호화 Jasypt GenericConverter 데이터베이스에서 AUTO_INCREMENT 기반의 식별자를 사용하는 경우,API 설계 단계에서 한 번쯤 고민하게 되는 문제가 있다.BIGINT UNSIGNED로 정의된 id 값은 항상 양수이며 1씩 증가한다.이러한 특성은 내부적으로는 매우 편리하지만,외부로 노출되는 순간 예측 가능한 값이 된다.클라이언트가 PathVariable에 숫자를 직접 넣어 요청하는 구조라면의도하지 않은 무차별 API 호출이 가능해진다.이를 방지하기 위해 식별자를 암호화하여 전달하고,서버에서는 이를 자동으로 복호화하는 방식이 실무에서 자주 사용된다.이번 글에서는 Jasypt와 GenericConverter를 이용해PathVariable 암호화를 구현하는 방법을 정리한다.PathVariable 암호화 Jasypt증분 식별자를 암호화.. 2026. 2. 17.
[JAVA] Generic 공변성 Invariance Covariance Generic을 사용하다 보면 반드시 한 번은 마주치게 되는 개념이 바로 공변성이다. 문법 자체는 단순해 보이지만, 왜 이런 제약이 존재하는지 이해하지 못하면 컴파일 에러를 만날 때마다 혼란을 느끼게 된다. 특히 컬렉션과 상속 구조가 함께 등장하는 순간, Generic은 더 이상 직관적으로 동작하지 않는다.이번 글에서는 Animal, Cat, Haru로 이어지는 간단한 상속 구조를 바탕으로 Generic의 기본 성질인 무공변성과, 이를 확장한 공변성, 반공변성을 차근차근 정리해 본다.Generic Invariance 무공변성Generic의 기본 동작은 무공변성이다. 이는 “상속 관계가 있어도 제네릭 타입은 서로 다른 타입으로 취급된다”는 의미다. Animal이 Cat의 상위 타입이라 하더라도 List과 .. 2026. 2. 17.
[MySQL] Global Lock 동작원리 대기시간 MySQL에서 락(Lock)은 동시성을 제어하기 위한 핵심 메커니즘이다. 그중에서도 Global Lock은 가장 범위가 넓은 락으로, 단일 테이블이나 데이터베이스가 아닌 MySQL 서버 전체에 영향을 준다. 이 락은 주로 백업이나 서버 정합성 확보가 필요한 순간에 사용되지만, 잘못 사용하면 전체 서비스가 멈춘 것처럼 보일 수 있어 주의가 필요하다.Global Lock 동작 원리 이해Global Lock은 FLUSH TABLES WITH READ LOCK 명령어로 획득할 수 있다. 이 명령이 실행되면 MySQL 서버는 전체를 읽기 전용 상태로 전환한다. 중요한 점은 SELECT 쿼리는 정상적으로 실행되지만, INSERT, UPDATE, DELETE 같은 DML과 CREATE, ALTER 같은 DDL은 모두.. 2026. 2. 16.
[JAVA] var 키워드 타입추론 정리 Java 10에서 도입된 var 키워드는 로컬 변수의 타입을 컴파일러가 자동으로 추론하도록 도와주는 문법이다. 명시적인 타입 선언을 제거함으로써 코드의 장황함을 줄이고, 개발자가 비즈니스 로직에 더 집중할 수 있도록 설계되었다. 하지만 모든 편의 기능이 그렇듯, 장점과 단점은 명확하며 무분별한 사용은 오히려 가독성을 해칠 수 있다.var 키워드와 타입 추론의 역할var 키워드의 핵심은 타입 추론이다. 개발자가 타입을 직접 작성하지 않아도 컴파일러가 초기화 표현식을 기준으로 정확한 타입을 결정한다. 이는 특히 제네릭 타입이나 중첩된 자료구조를 다룰 때 큰 이점을 제공한다.예를 들어 Map, List, 제네릭이 중첩된 구조를 변수로 받을 때, 기존 Java 문법에서는 타입 선언 자체가 코드의 대부분을 차지하.. 2026. 2. 16.
[JAVA] final 키워드 재할당과 불변 Java를 배우다 보면 가장 먼저 접하지만, 가장 오래 헷갈리는 키워드 중 하나가 바로 final이다. 단순히 “변경 불가”라고만 이해하고 넘어가기 쉽지만, final 키워드는 위치에 따라 전혀 다른 의미와 의도를 가진다.이 글에서는 final 키워드가 클래스, 메서드, 변수에서 각각 어떤 역할을 하는지 살펴보고, 특히 실무에서 자주 혼동되는 재할당 금지와 불변(Immutable)의 차이를 중심으로 정리해본다.final 키워드 클래스와 메서드 의미final 키워드를 클래스나 메서드에 사용하면 가장 먼저 떠올려야 할 개념은 상속 제한이다.final 클래스는 더 이상 상속될 수 없다. 즉, 해당 클래스는 확장 지점이 없다는 것을 명확히 선언하는 의미를 가진다. final 메서드는 오버라이딩이 불가능하며, 하.. 2026. 2. 15.
[MySQL] Lock 트랜잭션 차이 정리 데이터베이스를 공부하다 보면 Lock과 트랜잭션을 같은 개념처럼 받아들이는 경우가 많다. 둘 다 동시에 여러 사용자가 접근할 때 문제가 생기지 않도록 보호하는 역할을 하기 때문이다. 하지만 실제로는 목적과 동작 방식이 완전히 다르다.이 글에서는 MySQL의 대표적인 스토리지 엔진인 InnoDB와 MyISAM 예제를 통해 Lock과 트랜잭션이 각각 무엇을 책임지고, 어떤 차이를 만들어내는지 차근차근 정리해본다.Lock 개념과 동시성 제어 역할Lock의 가장 중요한 목적은 동시성 제어다. 여러 트랜잭션이 동시에 같은 데이터에 접근할 때 충돌이 발생하지 않도록 막는 장치가 바로 Lock이다.예를 들어 한 사용자가 특정 레코드를 수정하고 있는 동안 다른 사용자가 같은 레코드를 동시에 수정하려고 하면 데이터는 예.. 2026. 2. 15.