반응형 스파르타 내일배움캠프/TIL(Today I learned)109 키워드 기능 - 트러블 슈팅 목차 ✅ 트러블 슈팅1. 문제 상황REST API에서 DTO 없이 엔티티(Entity)를 직접 Response로 반환할 경우, 서로의 연관 관계가 계속 참조를 일으켜 무한 순환 참조 문제 발생.결과적으로 API 응답 시 무한 로딩 현상 및 StackOverflowError가 발생하게 됨. [ 에러 코드 ]더보기Caused by: com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: caffeine.nest_dev.domain.keyword.entity.Keyword.profileKeywords: could not initialize proxy - no Session (thr.. 2025. 6. 20. Backend와 Frontend 연결 방법 목차 1. Backend와 Frontend 프로젝트를 따로 분리하는 이유역할 분리가 명확하여 협업이 쉬움.각각 독립적으로 배포, 관리 가능.대형 서비스 및 기업은 대부분 이런 구조로 개발함. Frontend가 API( /api/users ) 를 통해 Backend에게 데이터를 요청하는 방식. 2. Backend와 Frontend를 연결하는 방법.1. 각각 서버 실행React : npm start → localhost:3000 에서 실행됨.Spring Boot : ./gradlew bootRun → 보통 localhost:8080에서 실행됨. 2. CORS 설정@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override.. 2025. 6. 19. 면접 질문 목차 1. IoC(Inversion of Control)객체의 생성, 관리, 의존성 주입 등과 같은 프로그램 제어 흐름을 개발자가 직접 제어하는 것이 아니라 프레임워크나 라이브러리가 제어하는 것.IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리함.POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가짐. 장점 개발자는 비즈니스 로직에 집중 가능.객체 생성 코드가 없으므로 TDD가 용이함.💡POJO(Plain Old Java Object) - 순수한 오래된 자바 객체. - 스프링이 POJO 기반의 경량화된 개발 환경을 제공하는 오픈소스 프레임워크.💡TDD - 테스트 주도 개발. - 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현. .. 2025. 6. 18. 예약 동시성 제어 테스트 코드 목차 1. 회원 수를 증가시키기 위한 로직@BeforeEachvoid setUp() { for (int i = 1; i 동시에 한 예약을 시도할 사용자들을 1000명 정도 생성함. 2. 예약 동시성 제어 테스트 코드@Test@DisplayName("AOP 를 활용한 분산락")void concurrencyTestWithAop() { LocalDateTime startAt = LocalDateTime.of(2025, 6, 15, 10, 0); LocalDateTime endAt = LocalDateTime.of(2025, 6, 15, 10, 30); AtomicInteger successCount = new AtomicInteger(); AtomicInteger failC.. 2025. 6. 17. 에러코드 출력 관련 트러블 슈팅 목차 ✅ 트러블 슈팅1. 문제 상황고의로 중복 예약을 하여 오류를 발생시켰을 때 에러 코드가 조건에 따라 설정해두었던 에러 코드로 뜨지 않는 현상 발생. 원래 출력되어야 하는 에러 메시지.DUPLICATED_RESERVATION(HttpStatus.CONFLICT, "이미 중복된 예약이 존재합니다."), 2. 원인 분석분산락 설정 코드에 있던 try catch 문으로 인해서 에러 코드가 정상적으로 출력되지 않음.@Aspect@Component@RequiredArgsConstructor@Slf4jpublic class DistributedLockAspect { private final RedissonClient redissonClient; private final PlatformTransa.. 2025. 6. 16. Redisson 분산락 vs Redis 원자 연산 기반 동시성 제어 목차 1. Redisson 분산락Redisson은 Redis 기반의 Java용 분산 락 라이브러리.분산 환경에서 쉽고 안전하게 락 기능을 제공. ✅ 특징다양한 락(Lock) 구현Java의 java.util.concurrent.locks 인터페이스와 유사한 다양한 락 타입을 제공하여 개발자가 익숙하게 사용할 수 있음.자동 락 만료 방지(Watchdog)락을 획득한 서버가 비정상적으로 종료되거나 지연되어 락이 만료되는 것을 방지하기 위해, 락을 획득한 동안 주기적으로 락의 만료 시간을 연장해주는 Watchdog 매커니즘을 내장.분산 환경에서의 안정성Redis의 Pub/Sub 매커니즘을 활용하여 락 해제 이벤트를 구독하고, 락 획득 시 여러 Redis 인스턴스에 걸쳐 락을 설정하는 Redlock 알고리.. 2025. 6. 12. fix: 민원 관련 코드 수정 목차 ✅ 트러블 슈팅1. 한 예약에 여러 개의 민원 발생.1. 문제 상황 1개의 예약에는 1개의 민원만 생성할 수 있어야 하는데, 여러 개를 생성할 수 있는 이슈 발생. 2. 원인 분석민원이 이미 생성되었는지 중복 체크하는 로직이 없음. 3. 해결 방법쿼리 메서드를 이용하여 중복 체크.// 이미 작성된 민원이 있는 지 확인.boolean exists = complaintRepository.existsByReservationId( complaintRequestDto.getReservationId());if (exists) { throw new BaseException(ErrorCode.DUPLICATED_COMPLAINT);}boolean existsByReservationId(Lon.. 2025. 6. 11. 예약 기능 구현 - 트러블 슈팅 목차 ✅ 트러블 슈팅1. 문제 상황예약 시간과 멘토, 멘티 ID가 동일한 경우 중복으로 판단하려고 작성하였으나, 겹치지 않는 시간에도 중복 예약으로 인식되는 문제 발생.boolean exists = reservationRepository.existsByMentorIdOrMenteeIdAndReservationStartAtAndReservationEndAt( requestDto.getMentor(), userId, requestDto.getReservationStartAt(), requestDto.getReservationEndAt()); if(exists){ throw new BaseException(ErrorCode.DUPLI.. 2025. 6. 10. 동시성 제어 목차 동시성 제어DBMS 가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 Database를 보호하는 것.DB 접근을 동시적으로 모두 허용해주면 데이터베이스의 일관성과 무결성이 깨지게 됨. → 이를 방지하기 위해 동시성 제어를 통해 데이터베이스 보호.동시성 제어 = 병행 제어 라고도 불리며 한 번에 들어온 복수의 트랜잭션을 직렬화하는 수행을 보장함. 1. 동시성 제어를 해야하는 이유Race Condition두 개 이상의 스레드가 동시에 같은 데이터를 접근하여 값을 변경하고자 할 때, 데이터의 예상치 못한 변경이 발생할 수 있음. 2. 동시성 제어 방법1. Synchronized프로세스에 여러 스레드가 동시에 접근하는 것을 방지하기 위한 기법. 방법 1. 메서드에 synch.. 2025. 6. 9. 이전 1 2 3 4 ··· 13 다음 반응형