SpringBoot 9

Hibernate Lazy Loading: 프록시 객체의 동작 원리와 실제 객체 조회 흐름

개요실제 비즈니스 로직에서의 LazyLoading의 실행흐름에 대해 파악 할 수 있습니다.사전준비Caregiver User Patient현재 3개는 서로 OneToOne관계를 가지고있으며, User Entity에서 옵션을 관리하고있다.비즈니스 로직 @Transactional public CareMatchingDetailResponse generate(final AuthUser authUser, final CareMatchingRequestDto dto) { User user = userQuery.readById(authUser.getUserId()); Patient patient = null; Caregiver caregiver = null; ..

SpringBoot 2025.03.20

JPA에서 ID 값이 NULL일 때와 존재할 때, INSERT vs UPDATE의 차이점

개요User Entity, UserWallet Entity는 현재 OneToOne 관계를 가지고 있습니다.User Entity가 생성되는, 생성자에 UserWallet을 넣어 저장하고있습니다.일반 회원가입 시도시 잘되지만, 테스트코드에서의 오류에 대해 짚어보고자 합니다.시나리오 (Success)회원가입 public UserResponseDto signUp(final SignupRequestDto dto) { Boolean flag = userQuery.existsByEmail(dto.getEmail()); // 중복된 이메일이 없을 경우 if (!flag) { String encodedPassword = pe.encode(dto.getPass..

SpringBoot 2025.03.18

카카오 소셜 로그인시, CORS 문제 발생

개요카카오 소셜 로그인시, 특정 URI로 리다이렉트 시키는 로직에서 CORS가 발생한 문제에 대해 해결 할 수 있습니다문제현재 나는 아래의 프로세스 대로 진행중이다.클라이언트가 /socialLogin?name=KAKAO로 요청한다.서버는 OAuthRedirectController를 통해 카카오의 로그인을 타게한다.카카오의 로그인이 성공적으로 마치면, 우리의 서버 redirectURL로 호출하여 마저 진행한다.코드OAuthRedirectController@Controller@Tag(name = "OAuth Login Redirect API")public class OAuthRedirectController { private static final String KAKAO_AUTH_URL = "https..

SpringBoot 2025.03.13

다양한 상황에서의 DB에 저장하는 시간을 알아보자

개요각각의 상황에서의 저장시간을 비교해보며, 효율적인 방법을 찾아봅시다.상황1000개의 데이터를 데이터베이스에 넣는 상황으로 간주Helperapplication.ymlserver: port: 8081spring: jpa: hibernate: ddl-auto: update // 여기밑에 설정해줘야, Flush, Insert 갯수 카운트 가능 properties: hibernate: format_sql: true dialect: org.hibernate.dialect.MySQL8Dialect generate_statistics: true show-sql: true실제 DB와 상호작용하는 Flush를 네트워크 I/O 비용으로 간주..

SpringBoot 2025.02.26

Redis에 엔티티 저장중 생긴 순환참조문제

개요Redis에 Entity 객체를 저장하면서 생긴 순환참조 문제에 대해 이해하고 해결 할 수 있습니다코드LolPlayerHistoryEntity@Getter@AllArgsConstructor@NoArgsConstructor@EntityListeners(AuditingEntityListener.class)@Entitypublic class LolPlayerHistory implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private ..

SpringBoot 2025.01.23

JSP 란?

개요JSP에 대해 이해하고 파악할 수 있습니다JSP란 무엇인가HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다JSP가 실행되면 자바 서블릿으로 변환되며, 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다이는 @Controller를 통한 JavaSpring 서버 자체적으로 클라이언트에게 동적,정적인 웹페이지(View 페이지)를 반환하는 경우 사용된다@RestController의 경우 단순하게 데이터만 응답하기위한 API용도로 사용되어 서블릿과정만 거치게된다예시@Controller와, @RestController의 예시를 통해 살펴보자@Controller클라이언트의 GET /hello 요청디스패처 서블릿 요청 수..

SpringBoot 2025.01.21

JPA Cascade ?

JPA Cascade 란?어떤 JPA 엔티티는 다른 엔티티의 존재에 깊게 연관되어 있기도 합니다, 가장 대표적인 예시로는“댓글” , “게시물”이 있으며, 이 둘은 즉 “댓글”은 “게시물”이 없다면 존재하는 의의가 없기 떄문입니다게시판 어플리케이션을 만들어 본다고 가정하며, 게시물을 삭제하는 비즈니스 로직은 어떻게 작성 할 수 있을까요?// PostService.java@Transactionalpublic void deletePost(Long postId) { Post post = postRepository.findById(postId); List comments = post.getComments(); commentRepository.deleteAll(comments); postRep..

SpringBoot 2025.01.20

디스패처 서블릿(Dispatcher-Servlet) ?

개요디스패처 서블릿에 대한 이해와, 개념에 대해 파악할 수 있습니다디스패처 서블릿의 개념dispatch는 "보내다" 라는 뜻을 의미합니다HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아, 적합한 컨트롤러에 위임해주는 프론트 컨트롤러라고 정의할 수 있습니다대략적인 흐름은 아래와 같습니다클라이언트의 요청톰캣(WAS)을 통해 서블릿 컨테이너로 요청이 전달컨테이너 내부의 디스패처 서블릿이 요청을 받은후공통적인 작업 처리후, 컨트롤러를 찾아서 작업위임프론트 컨트롤러?서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러MVC 구조에서 함께 사용되는 디자인 패턴장점과거에는 모든 서블릿을 URL 매핑을 위해 Web.xml에 등록해야했지만, 현재는 디스패처 서블릿이 모..

SpringBoot 2025.01.20

서블릿 이란?

개요서블릿에대한 개념에 대해 이해해 보는 시간을 가져봅시다서블릿(Servlet) 이란?동적 웹페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술 이다웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹브라우저에 결과를 전송한다Ex)서버에서 /login 서블릿 생성컨트롤러가 아님 주의!클라이언트 측에서 /login 경로로 데이터 전송/login 서블릿이 이를 감지하고, 매핑되며 데이터등을 수신 가능하다서블릿의 주요 특징클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트정적 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공JAVA의 쓰레드를 이용하여 동..

SpringBoot 2025.01.20