1. 리플렉션(Reflection)자바의 리플렉션은 런타임 시점에 클래스의 내부 구조(클래스, 메서드, 필드, 생성자 등)에 접근하고 조작할 수 있게 해주는 기능입니다. ExampleData exampleData = new ExampleData();// 일반적인 방법으로 메소드 호출exampleData.hello();// ReflectionClass dataClass = exampleData.getClass(); String methodName = "hello"; // 이부분에서 동적으로 수정가능Method helloMethod = dataClass.getDeclaredMethod(methodName);helloMethod.invoke(exampleData);위 코드는 자바 리플렉션을 사용하..
1. 로그(Log)로그(Log)는 프로그램이나 시스템이 실행되는 동안 발생하는 다양한 이벤트, 오류, 상태 정보를 기록하는 데이터입니다. 이를 통해 문제 해결, 성능 분석, 보안 감시 등에 활용할 수 있습니다. 하지만 로그를 사소한 것까지 모두 기록하면 어플리케이션 성능에 영향을 미치게 됩니다. 따라서 로그 메시지의 중요도와 우선순위에 따라 로그 레벨을 나누고 체계적으로 관리하는 것이 필요합니다. 1.1. 로그 레벨(Log Level) 이해하기 일반적으로 알려진 로그 레벨은 DEBUG, INFO, WARN, ERROR, FATAL 순으로, 순서대로 갈수록 로그 레벨이 높아집니다. 레벨이 높다는 의미는 시스템에 영향을 미치는 흔치 않은 문제나 비정상적인 상황을 나타내며, 중요한 조치가 필요한 상태를 ..
1. 개요 인터넷을 사용하다 보면 선착순 이벤트, 콘서트 예약, 합격자 조회 같은 특정 순간에 트래픽이 몰려서 사이트가 느려지거나 먹통이 되는 상황을 가끔 경험하게 됩니다. 이에 대한 해결책으로 캐싱, 쿼리 최적화, 대기열 시스템, 스케일 아웃, 스케일 업 등 다양한 해법이 알려져 있습니다. 이를 실제로 적용해보며 발생하는 문제와 이를 해결하는 방법을 모색하고자 합니다. 2. 성능 테스트 개요 이 프로젝트는 간단한 수강신청 시스템에 부하 테스트를 진행하고 성능 개선을 목표로 진행됩니다.(https://github.com/kokoko12334/traffic_test)애플리케이션 및 런타임 Spring Boot:3.4.1, JDK:1.7데이터 관리 Redis:7.4.1, Mysql:9.1.0, Sp..
1. 문제 설명Springboot의 @RestController는 Jackson을 사용하여 객체를 JSON으로 자동으로 직렬화 시킵니다.(return 시점에)이때 직렬화 대상의 Domain이 연관관계가 있고 지연로딩을 사용한다면 다음과 같은 문제가 발생합니다. 예를 들어, 다음의 코드를 실행한다면@Getterpublic class Course { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long courseId; @Column(name = "title", length = 50) private String title; @ManyToOne(fetch = FetchType.LAZY) @JoinColu..
1. Hibernate 프록시 객체 JPA의 영속성 컨텍스트를 통해 User 정보를 조회할 때, 연관된 Team 정보도 함께 가져올 수 있습니다. 그러나 Team 정보가 당장 필요하지 않은 경우, 이를 지연 로딩(Lazy Loading) 방식으로 처리할 수 있습니다. 이때 Hibernate는 Team 객체 대신 프록시 객체를 반환하여 실제 데이터 조회를 필요 시점으로 지연시킵니다. getReference()를 통해 프록시 객체를 생성할 수 있습니다. 이 프록시 객체는 실제 엔터티를 상속하며, 필요한 시점에 실제 데이터를 조회합니다.User findUser = em.getReference(User.class, user.getId());System.out.println("class = " + findU..
1. 연관관계 매핑연관관계 매핑은 테이블 간의 참조 관계를 JPA의 어노테이션을 통해 자바 코드에서 표현하는 기능입니다. 이를 통해 객체 지향적으로 연관 관계를 쉽게 관리할 수 있습니다. 1.1. @OneToOne@OneToOne은 두 엔티티 간의 1:1 관계를 매핑할 때 사용하는 어노테이션입니다. 한 엔티티가 다른 엔티티와 고유하게 연결될 때 사용됩니다. 예를 들어, 회원과 회원 상세 정보를 각각의 엔티티로 분리하고 1:1 관계를 설정할 수 있습니다. 이때, 외래 키를 명시적으로 설정하려면 @JoinColumn을 함께 사용합니다.@Entitypublic class Member { @Id @GeneratedValue private Long id; private String name; ..