TIL_MapStruct Mapping 오류_250102
·
Spring 단기심화 2기
문제 상황호텔 검색 기능 개발을 완료한 후, HTTP 요청을 보내니 필드 값이 모두 null로 반환되었다.{ "content": [ { "hotelId": null, "name": null, "country": null, "city": null, "address": null, "description": null, "charge": 0 } ], "page": { "size": 10, "number": 0, "totalElements": 1, "totalPages": 1 }} 처음에는 검색 조건으로 받는 요청 파라미터나 DB에서 불러오는 데이터에 문제가 있다고 생각하고 로그를 확인해봤으나, 요청 파라미터와 ..
TIL_Annotation_241221
·
Spring 단기심화 2기
Annotation이란?어노테이션은 적용된 소스코드에 추가적인 메타데이터를 할당한다.메서드, 인터페이스, 클래스, 필드에 붙어서 :컴파일러에게 경고과 에러를 알려준다.컴파일 시점에 소스코드를 조작한다.런타임 시점에 동작을 수정하거나 검증한다.Annotation의 종류Built-in annotation자바 언어에 포함된 기본 제공 어노테이션에는 @Override, @SuppressWarnings, @Deprecated, @SafeVarargs, @FunctionalInterface, @Native 이 있다.Meta-annotation메타 어노테이션은 다른 어노테이션에 적용할 수 있는 어노테이션이다.@Retention : 어노테이션의 유지 범위를 설정RetentionPolicy.SOURCE : 컴파일 전까지..
TIL_MapStruct_241219
·
Spring 단기심화 2기
프로젝트 발표 피드백으로 DTO와 Entity 간의 변환 로직이 불필요하게 중복되었다는 말을 들었다. 그에 대한 대안으로 MapStruct라는 것을 소개 받았는데 어떻게 적용할 수 있는지 간단하게 알아보려고 한다. MapStructMapStruct는 Java 빈 타입 간의 매핑하는 코드를 자동으로 생성해주는 코드생성기이다. MapStruct는 컴파일 시점에 Java Bean 매핑 코드를 컴파일 시점에 생성하기 때문에 높은 성능을 제공하며, 개발자에게 빠른 피드백을 제공하고 철저한 에러 검사를 수행한다.User 엔티티회원가입 API에서 회원 정보를 받아 User Entity로 변환하고 저장된 Entity를 가지고 Response로 변환하는 것을 MapStruct를 적용해보겠다.@Getter@Entity@T..
TIL_JVM 구조와 동작 원리_241208
·
Spring 단기심화 2기
C/C++ 은 컴파일 플랫폼과 타겟 플랫폼이 다르다면 프로그램이 동작하지 않는다.이와 다르게 자바는 JVM을 통해 타겟 플랫폼과 상관없이 컴파일된 소스코드(Java Bytecode)가 동작하도록 설계했다.WORA(Write Once, Run Anywhere)Java 소스코드의 변환 과정Java Compiler(javac)를 통해 소스코드를 분석 : Source Code(.java) -> Java Bytecode(.class)JVM 실행 : Java Bytecode(.class) -> Target Assembly Programbytecode는 JVM이 알아들을 수 있는 명령어 집합이고 JVM은 bytecode를 기계어로 번역해 CPU에게 일을 시킴JVM 구조Class loaderRuntime Data Ar..
TIL_HTTP 메서드의 멱등성_241205
·
Spring 단기심화 2기
멱등성이란?동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.멱등성은 리소스의 상태로만 판단하며 응답코드와는 무관하다.멱등성 메서드에서 통계기록 등을 제외하면 어떠한 Side Effect 도 존재해서는 안된다.  멱등한 HTTP 메서드1. GET리소스 조회같은 요청을 N번 호출해도 시스템으로부터 같은 결과가 조회됨 2. PUT리소스 대체같은 요청을 N번 호출해도 항상 대상 리소스를 대체하여 동일한 상태로 만듦 3. DELETE리소스 삭제N번 호출해도 항상 리소스가 없는 동일한 상태 멱등하지 않은 HTTP 메서드1. POST리소스 생성 및 처리같은 요청을 N번 호출하면 새로운 리소스가 생성..
TIL_대규모 스트림 처리에서의 데이터 일관성 유지_241205
·
Spring 단기심화 2기
1. 분산 트랜잭션단일 트랜잭션이 어려 서비스에 걸쳐 실행될 때 모든 시스템이 일관되게(Commit or Rollback) 처리되도록 보장2PC(Two-Phase Commit)분산 트랜잭션을 관리하는 프로토콜로, 2가지 단계(준비/커밋)로 나누어 트랜잭션 처리Saga 패턴트랜잭션을 나누어 처리하고 독립적으로 커밋한다. 실패시 보상 트랜잭션을 실행해야 한다2. 이벤트 소싱데이터의 상태 변화를 이벤트로 기록하고 해당 이벤트를 순차적으로 재생함저장되는 것이 데이터 변경 자체가 아닌 변경 이벤트를 저장함
TIL_OSIV_241129
·
Spring 단기심화 2기
OSIV (Open-Session-In-View)영속성 컨텍스트의 생존 범위를 지정하는 옵션true : 영속성 컨텍스트를 뷰까지 열어둔다는 의미false : @Transactional 메서드가 종료되면 영속성 컨텍스트가 종료. 즉, 트랜잭션을 종료할 때 영속성 컨텍스트가 닫히고, 커넥션도 반환```각 옵션의 특징과 장단점true장점@Transactional을 벗어난 곳(View Template / API Controller)에서 지연 로딩이 가능 Lazy Loading(지연 로딩)은 영속성 컨텍스트가 살아있어야 가능하기 때문에단점DB 커넥션 리소스를 오랫동안 사용(View 까지)하기 때문에 커넥션이 고갈될 수 있다.대규모, 실시간 애플리케이션에서 성능 저하로 이어질 가능성이 존재표현 계층에서 엔티티를 수..
TIL_AOP_241126
·
Spring 단기심화 2기
관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)개념공통 관심 사항과 핵심 관심 사항을 분리하는 기술어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화**횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목정인 프로그래밍 패러다임어플리케이션의 핵심기능 + 부가기능을 분리 가능기능 : 코드 핵심부를 어수선하게 채우지 않고도 비지니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있게 한다AOP가 필요한 상황모든 메소드의 호출 시간을 측정하고 싶다면?공통 관심 사항(cross-cutting concern) vs핵심 관심 사항(core concern)공통 관심 사항 : 시..