728x90
728x90
PK 값을 DB 에서 부여해주는 그대로 1, 2, 3, 4... 와 같이 1씩 증가하는 PK 로 설정할 경우 몇가지 문제점이 발생한다. 1씩 증가하는 형식은 ID 의 앞 뒤로 다른 user 의 PK 값임을 쉽게 예측할 수 있으며 악의적인 공격에 취약하다. 새 항목을 생성하고 해당 ID 를 검사하면 테이블의 행 수를 알 수 있다.(정보가 공개된다.) 각 테이블이 순차적인 값을 가지므로, 동일한 값이 다른 엔티티의 기본키로 발견된다. 1씩 증가하는 방식은 범위가 한정적이기 때문에 서비스를 이용하는 수가 폭발적으로 증가하면 고갈이 될 수 있다. 이러한 문제점을 해결하기 위해 UUIDv4 를 PK 로 선정하여 문제를 해결할 수 있다. uuid 란 'c0b656b1-7351-4dc2-84c8-62a2afb41e6..
JPA Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재한다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있다. 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말과 일맥상통합니다.데이터베이스에서 누가, 언제하였는지 기록을 잘 남겨놓아야 합니다. 그렇기 때문에 생성일, 수정일 컬럼은 대단히 중요한 데이터이다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있다. Audit은 감시하다, 감사하다라는 뜻으로 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능이다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update..
통일된 Error Response 객체 Error Response 객체는 항상 동일한 Error Response를 가져야 한다. 그렇지 않으면 클라이언트에서 예외 처리를 항상 동일한 로직으로 처리하기 어렵다. Error Response 객체를 유연하게 처리하기 위해서 간혹 Map 형식으로 처리하는데 이는 좋지 않다고 생각한다. 우선 Map 이라는 친구는 런타입시에 정확한 형태를 갖추기 때문에 객체를 처리하는 개발자들도 정확히 무슨 키에 무슨 데이터가 있는지 확인하기 어렵다. @ExceptionHandler(MethodArgumentNotValidException.class) protected ResponseEntity handleMethodArgumentNotValidException(MethodArgu..
어노테이션 구성과 동작 원리 커스텀 어노테이션은 메타 어노테이션을 사용하여 다음과 같은 구조를 가진다. 메타 어노테이션이란 커스텀 어노테이션을 구성할 때 시점, 위치 등을 지정하기 위한 어노테이션이다. 어노테이션의 필드 타입은 enum, String 이나 기본 자료형, 기본 자료형의 배열만 사용할 수 있다. @Targer({ElementType.$적용대상}) @Retention(RetentionPolicy.$정보유지되는대상) public @interface $어노테이션명{ public 타입 elementName() $default값 .... } 메타 어노테이션의 종류는 다음과 같다. @Retention : 컴파일러가 어노테이션을 다루는 방법을 기술, 어느 시점까지 영향을 미치는지를 결정 Retention..
Validation Validation 이란 프로그래밍에 있어서 가장 필요한 부분이다. 특히 Java 에서는 null 값에 접근하려고 할 때 null pointer exception 이 발생 함으로, 이러한 부분을 방지 하기 위해서 미리 검증을 하는 과정을 Validation 이라고 한다. public void run(String account, String pw, int age) { if(account == null || pw == null) { return } if(age == 0) { return } // 정상적인 로직 } 검증해야 할 값이 많은 경우 코드의 길이가 길어진다. 구현에 따라서 달라질 수 있지만 Service Logic 과의 분리가 필요 하다. 흩어져 있는 경우 어디에서 검증을 하는지 ..
Spring Spring 1.0 버전은 2004년 3월 출시, 지난 20년 세월 동안 자바 엔터프라이즈 어플리케이션 개발의 최고의 자리를 차지 스프링 프레임워크의 구성은 20여 가지로 구성, 이러한 모듈들은 스프링의 핵심기능(DI, AOP, 등) 을 제공해 주며, 필요한 모듈만 선택하여 사용 가능 현재 단일 아키텍쳐(모놀리스) 에서 마이크로서비스 아키텍쳐로 변환 중이다. 여러 가지 모듈이 있지만 그 중에서 스프링 부트, 스프링 클라우드, 스프링 데이터, 스프링 배치, 스프링 시큐리티에 중점을 둔다. 스플리의 과제는 "테스트의 용이성", "느슨한 결합" 에 중점을 두고 개발됐다. 스프링이 다른 프레임워크와의 가장 큰 차이점이 IoC 를 통한 개발이다. AOP 를 사용하여 로깅, 트랜잭션 관리, 시큐리티에서..