Backend

Backend

<Spring> AOP 기반 분산락

📌 분산락 도입 배경jmeter로 여러 유저가 동시에 같은 아키이빙에 스크랩하도록 해봤다.하지만 count 업데이트가 이상했다.분명히 유저 10명이 스크랩했는데, 스크랩 수는 10이 아니라 1이었다. 동시성 문제가 발생한 것이다.이로 인해 데이터 정합성이 깨지게 되었다.이에 필자는 분산락을 도입해 이를 해결하고자 했다. 📌 동시성 문제🔵 동시성동시성은 여러 작업이 겹쳐서 실행되는 것을 말한다.이때, 실제로 작업이 동시에 실행된다는 뜻은 아니다.쉬운 예시로 CPU의 작업 방식을 들 수 있다. CPU의 코어에서는 특정 시점에 하나의 작업만 수행 가능하다.하지만 CPU가 작업 간 전환을 빠르게 하기 때문에, 작업이 거의 동시에 실행되는 것처럼 보일 뿐이다. 🔵 동시성 문제2명의 유저가 있고, 재고 감소..

Backend

<Spring> ResponseEntityExceptionHandler 이용한 공통 에러 처리

공통 에러 핸들러 구현하기" data-og-description="📌 스프링 에러 처리 방법 스프링은 프로그램 작동 중 여러 에러를 발생시킨다. 이에 에러를 처리할 수 있는 방법이 존재한다. 🔹 try-catch try { Jwts.parserBuilder().setSigningKey(getSecretKey()).build().parseCl" data-og-host="wtg1026.tistory.com" data-og-source-url="https://wtg1026.tistory.com/2" data-og-url="https://wtg1026.tistory.com/2" data-og-image="https://scrap.kakaocdn.net/dn/tdtKC/hySwSBMwOB/eCxwnElzUM9..

Backend

<Spring> HttpServletRequest 값 사라지는 문제

📌 HttpServletRequest🔵 HttpServletRequest란?Extends the javax.servlet.ServletRequest interface to provide request information for HTTP servlets. The servlet container creates an HttpServletRequest object and passes it as an argument to the servlet's service methods쉽게 말해서 HTTP 요청과 관련된 데이터를 저장하고, 이를 이용할 수 있는 메서드를 제공한다. 🔵 왜 값이 사라질까?서블릿의 HttpServletRequest는 body 데이터를 stream으로 제공한다.내용을 가져오기 위해 getIn..

Backend

<Spring> Success Custom Response 적용하기

📌 기존 프로젝트 프로젝트에서 커스텀 리스폰스를 이용하여 API response를 보내주기로 했었다. @GetMapping(value = "") @Operation(summary = "팀플 상세 정보 조회", description = "팀플 상세 정보 조회 API 입니다.") public CommonResponse getTeamDetail(@AuthUser User authUser, @Valid @RequestParam("teamId") Long teamId) { log.info("[api-get] 팀 상세 정보 가져오기"); GetTeamDetailDto teamDetail = teamsService.getTeamDetail(authUser, teamId); return CommonResponse.on..

Backend

<Spring> 공통 에러 핸들러 구현하기

📌 스프링 에러 처리 방법 스프링은 프로그램 작동 중 여러 에러를 발생시킨다. 이에 에러를 처리할 수 있는 방법이 존재한다. 🔹 try-catch try { Jwts.parserBuilder().setSigningKey(getSecretKey()).build().parseClaimsJws(token); return true; } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { log.info("Invalid JWT Token", e); } 단순한 try-catch를 사용한 예외처리이다. 이를 사용한다면 에러를 처리할 수 있으나, 코드의 중복이 많이 발생할 것이다. 🔹 @ControllerAdvice 위 어노테이션..

wjdtkdgns
'Backend' 카테고리의 글 목록 (2 Page)