TIL(Today I Learned)/트러블슈팅 8

[트러블 슈팅 / ~ 최종발표] 최종 프로젝트 : 9kcal. 오늘 뭐 먹지?

1. WebSocket, StompHandler 인증 방식 변경 - 메시지 단위 JWT 검증 적용1) 개요WebSocket 기반의 채팅 기능을 구현하면서, 기존에는 연결 시점(CONNECT)에만 토큰 검증이 이루어져 이후의 메시지 송신에는 보안 취약점이 존재따라서 메시지 단위에도 JWT를 직접 검증하는 로직을 추가해 보안 2) 문제상황기존 구조(StompHandler)는 StompCommand.CONNECT에서만 JWT 인증 수행이후 메시지(SEND)에서는 SecurityContext를 활용해 인증된 상태로 처리됨하지만, 사용자가 WebSocket 연결 이후 로그아웃하거나 탈퇴 또는 추방된 경우에도 여전히 메시지를 보낼 수 있음결론 : 따라서 메시지 전송 시점마다 JWT 재검증이 필요 3) 해결ChatM..

[트러블 슈팅 / 중간발표 전] 최종 프로젝트 : 9kcal. 오늘 뭐 먹지?

1.  WebSocket 인증 및 Spring Security와 충돌 문제1)개요WebSocket 연결 시 Authorization 헤더에 Access Token이 포함되지 않아 Spring Security의 인증이 실패하여 연결이 차단 됨(인증된 사용자만 접근할 수 있도록 하기 위해 단순 로그인 후 토큰 값을 하드코딩하여 WebSocket 연결을 테스트 하는 과정에서 문제 발생)알고보니 Access Token이 쿠키에 저장되고 있어서 인증이 되지 않았고, 이를 해결하기 위해 WebSocket 연결 시 Headers의 Cookie 값에 자동으로 쿠키에 저장된 토큰 값을 불러오는 방식으로 로직을 변경해봤지만 인증이 여전히 되지 않았음 2)문제상황Access Token의 쿠키 기반 저장Spring Secur..

[트러블 슈팅] Trello(칸반보드) 프로젝트

1. GreenHopper 알고리즘 정밀도 문제1)개요리스트 정렬을 위해 GreenHopper 알고리즘을 사용하여 position 값을 생성하였는데, 처음엔 int 자료형을 사용하여 중간값을 계산했지만, 정밀도 문제로 인해 예상치 못한 값이 저장되는 문제 발생 2)문제상황double 타입으로 변환하여 position 값을 저장했는데, 연산 과정에서 부동소수점 오차 발생.즉, 데이터가 많아질수록 중간값을 정확히 계산하지 못하고 값이 비정상적으로 나오는 문제가 있었음이럴 경우 리스트 두개가 같은 위치를 가지게 되어 정렬이 깨질 가능성이 있음 3)해결방법1. BigDecimal을 사용하여 정밀도 향상-기존 double을 BigDecimal로 변경하여 소수점 오차를 방지 방법2. 기본값을 1에서 100으로 변경..

[트러블 슈팅] JPA 심화 개인과제

1. @DynamicInsert 사용1)개요DynamicInsert를 통해 DB의 기본값을 적용하려고 했지만, ItemEntity 테스트 코드를 작성 했을 때 nullable = false의 조건을 확인하는 과정에서 테스트 코드가 정상적으로 동작하지 않는 문제 발생 2)문제상황기본 값 설정을 @PrePersist를 사용해 처리하는 방식으로 수정을 했는데, 테스트 환경에서 DB에 직접적인 기본값 적용 확인이 어려워 DynamicInsert와 중복으로 인하여 여전히 동작하지 않는 문제 발생 DynamicInsert는 SQL INSERT 문을 생성할 때 null 필드를 제외시켜 DB의 기본값을 적용하지만, 코드에서 설정된 값과 충돌하거나 테스트에서 null 처리가 누락이 되면 동작하지 않는 문제 발생 3)해결..

[트러블 슈팅] 아웃소싱 프로젝트

1. 코드 구현 전 원활하고 구체적인 의사소통 필요1) 개요프로젝트 진행이 아직 미숙하여 초기에 팀원 간의 충분한 의사소통이 이루어지지 않아 프로젝트 진행 중에 기본 구조 및 코딩 규칙 등이 통일 되지 않았다. 이로 인해 코드 merge 후 여러 문제점 발생 2) 문제 상황기본 구조와 의존성 정의 X문제팀원이 각각 다른 방식으로 프로젝트의 기본 구조를 설계BaseEntity를 포함한 예외 처리 방식, 의존성 추가 등에 대한 사전 합의가 부족결과중복된 의존성이 추가됨 (ex. spring-boot-starter-validation 중복 추가)예외 처리가 전역 예외처리와 Service 계층에서 각각 처리되어 일관성 부족 및 혼란용어 정의 및 타입 불일치문제가게 주인과 관련된 용어를 각각 다르게 정의(Owne..

[트러블 슈팅] Spring 심화 개인과제

- 어떤 현상을 발견했는가?1. @RequestParam으로 Enum 값 처리 postman 오류 2. @NotNull과 Bean Validation이 작동하지 않음 3. @PostMapping 어노테이션 사용 불가 오류 4. Project JDK is not defined 이런 장애가 생길 수 있다는 것을 인지1. @RequestParam으로 Enum 값 처리 postman 오류-@RequestParam이 enum 타입 값을 처리하지 못하거나 올바르게 매핑되지 않으면 400 Bad Request 오류가 발생한다는 것을 인지-클라이언트가 enum 문자열 값을 정확히 전달하지 않거나, 서버가 enum을 변환하지 못할 시에 발생 2. @NotNull과 Bean Validation이 작동하지 않음-Dto에서 ..

[트러블 슈팅] Spring 뉴스 피드 프로젝트

1. Git 충돌 해결1) 개요develop 브랜치에서 동시에 작업을 진행하면서 push, pull 하는 과정에서 다른 팀원이 작성한 내용을 pull로 가져올 때, 현재 작업하고 있던 내용과 충돌이 발생 2) 문제상황-모든 작업을 develop 브랜치에서 직접 진행을 하면서 문제가 생김-작업 중 서로 다른 파일을 수정하면서 충돌이 발생 3) 해결-작업을 개별 브랜치 feature에서 진행하도록 변경-작업 완료 후, 로컬에서 develop 브랜치로 병합하고, 충돌이 있다면 로컬에서 해결한 후에 git push-develop이 최신화되면 브랜치를 pull 받아 최신으로 유지하고 다시 feature에서 개발1. feature 브랜치 생성git checkout -b feature/2. 로컬에서 작업 후 병합gi..

[트러블 슈팅] Spring 일정 관리 앱 develop

- 어떤 현상을 발견했는가?1. deleteSchedule 반환 타입 오류 2. Entity 이름 중복 3. Auditing 설정 문제  이런 장애가 생길 수 있다는 것을 인지1. deleteSchedule 반환 타입 오류-deleteSchedule은 삭제 메소드이기 때문에 삭제만 수행하고 데이터를 반환하지 않아도 되는데 반환타입을 Schedule로 잘못 설정함. 2. Entity 이름 중복-Hibernate에서 @Entity를 사용할 때 클래스 이름이 중복되는 경우 두 entity를 동일한 이름의 테이블로 인식함.-이때, entityManagerFactory의 bean 생성 중 BeanCreationException이 발생.-애플리케이션 실행 실패 3. Auditing 설정 문제-Spring Data ..