Spring Boot 콘서트 예약 시나리오 동시성 문제 분석
https://github.com/hhpb-code/hhplus-concert GitHub - hhpb-code/hhplus-concert: 콘서트 예약 서비스콘서트 예약 서비스. Contribute to hhpb-code/hhplus-concert development by creating an account on GitHub.github.com 콘서트
23개의 글
https://github.com/hhpb-code/hhplus-concert GitHub - hhpb-code/hhplus-concert: 콘서트 예약 서비스콘서트 예약 서비스. Contribute to hhpb-code/hhplus-concert development by creating an account on GitHub.github.com 콘서트
동시성 제어에는 여러 기법이 있다. 이전에는 비관적 락과 낙관적 락을 사용해 동시성 제어를 구현했지만, 이번에는 Redis를 이용한 분산 락을 다루어보자. 비관적 락과 낙관적 락에 대해 더 알고 싶다면 JPA 비관적 락과 낙관적 락 및 재시도를 참고하면 된다. 분산 락은 여러 서버와 데이터베이스 환경에서 동시성 제어를 위해 사용된다. 단일 DB 환경에서는
콘서트 프로젝트에서 대기열을 구현하는 과정에서, 대기열 검증 로직을 어디서 처리할지 고민하게 되었다. 대기열 토큰을 가지고 입장 가능 여부를 검증하는 로직을 작성했는데, 이 로직을 필터나 인터셉터 중 어디에 두는 게 적절할지 알아보면서, 필터와 인터셉터의 차이점과 용도에 대해 정리해보았다. 필터는 J2EE 스펙에서 제공하는 기능으로, 디스패처 서블릿(Dis
필터(Filter)와 인터셉터(Interceptor)에 대해 알아보다가 디스패처 서블릿(Dispatcher Servlet)을 한 번 짚고 가면 좋을 것 같아 작성하게 되었다. 서블릿은 클라이언트의 요청을 처리하고 그 결과를 반환하는 자바 웹 프로그래밍 기술로, Servlet 클래스의 구현 규칙을 따르게 된다. 서블릿은 웹 서버에서 동작하며, 클라이언트의 요
Spring에서 예외 처리 방법은 여러 가지가 있다. 가장 흔히 사용되는 방법으로는 try-catch 문을 이용한 예외 처리, @ExceptionHandler를 이용한 예외 처리, 그리고 전역에서 예외를 처리할 수 있는 @ControllerAdvice를 이용한 방법이 있다. 이 글에서는 각 방법의 특징과 장단점을 알아본다. `try-catch` 문을 이용한
해당 게시물은 이 강의를 보고 제작하게되었습니다. !img - Filter는 WebApplication에 등록 - web.xml - Interceptor는 Spring의 Context에 등록 - Interceptor는 시큐리티가 나오기전에 인증, 권한을 체크하는 훌륭한
해당 게시물은 이 강의를 보고 제작하게되었습니다. !img - Property Defaults - Automatic Restart - Live Reload - Global Settings - Remote Applications - Getter/Setter - ToStr
해당 게시물은 이 강의를 보고 제작하게되었습니다.
해당 게시물은 이 강의를 보고 제작하게되었습니다. - joinForm.html - SecurityConfig.java - com.kbox.security1.model 패키지 생성 - com.kbox.security1.repository 패키지 생성
해당 게시물은 이 강의를 보고 제작하게되었습니다. - / (컨텍스트 삭제) - /auth/joinProc - /auth/loginProc - /auth/joinForm - /auth/loginForm - header.jsp - joinForm.jsp - user.j
해당 게시물은 이 강의를 보고 제작하게되었습니다. - header.jsp - footer.jsp - joinForm.jsp - loginForm.jsp - updateForm.jsp - index.jsp - detail.jsp - updateForm.jsp
해당 게시물은 이 강의를 보고 제작하게되었습니다. - 주소에 데이터를 담아 보낸다. 데이터 형태는 key=value - body로 데이터를 담아 보내지 않음. - Body에 데이터를 담아 보낸다. 데이터 형태는 json으로 통일하는 것이 좋다. - form 태그는 ge
해당 게시물은 이 강의를 보고 제작하게되었습니다. - 링크 - get - 데이터 검색 select - post - 데이터 추가 insert - delete - 데이터 삭제 delete - put - 데이터 수정 update - 요청시 마다 stream을
해당 게시물은 이 강의를 보고 제작하게되었습니다. - web.xml, root-context.xml, servlet-context.xml의 합본 - application.yml - .jsp 경로를 설정한 이유는 스프링 부트는 기본적으로 jsp사용이 권장하기 않기 때문에
해당 게시물은 이 강의를 보고 제작하게되었습니다. - maven이 관리하는 의존성(라이브러리) - C:\Users\[사용자]\.m2\repository\org\projectlombok\lombok\[최신버전] 폴더에 - lombok-1.18.20.jar 실행 - sts
해당 게시물은 이 강의를 보고 제작하게되었습니다. - User.java - Board.java - Reply.java - @ManyToOne - @OneToMany - @OneToOne - @ManyToMany - ManyToMany는 사용하지 않는다. - 그 이유는
해당 게시물은 이 강의를 보고 제작하게되었습니다. - 오라클 jdk 가 유료화가 됬습니다. - 그러므로 OpenJDK 를 설치합니다. - 링크 - DB는 MySQL 사용할 것입니다 - 위에 버전을 사용해도 좋으나 버전마다 이슈사항이 다릅니다.(user passwor
해당 게시물은 이 강의를 보고 제작하게되었습니다. - my.ini 파일에 해당위치에 추가 - 시스템 언어 utf-8로 변경 하기 위함 - MySQL 재시작 !img - show variables like 'c%'; - 해당 쿼리 실행해서 user 생성 및 권한 주기 -
해당 게시물은 이 강의를 보고 제작하게되었습니다. !img !img - Spring Boot DevTools - https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devt
해당 게시물은 이 강의를 보고 제작하게되었습니다. https://github.com/ https://git-scm.com/downloads !img - github 홈페이지에서 원격 repository 생성 - 내 프로젝트 폴더에서 오른쪽 클릭하여 git b
해당 게시물은 이 강의를 보고 제작하게되었습니다. - 자바 프로그램을 할때 영구적으로 데이터를 저장하기 위해서 필요한 인터페이스 - 영속성(persistence)은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미합니다 - Appli
해당 게시물은 이 강의를 보고 제작하게되었습니다. - 톰캣을 따로 설치할 필요가 없이 내장되어있다. - 네트워크 상에서 데이터를 보내거나 받기 위한 실제적인 창구 역할을 하는 것입니다. - 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 통해서 해야합니다. -
해당 게시물은 이 강의를 보고 제작하게되었습니다. - 말 그대로 직역하면 (Frame)틀 안에서 (work)동작하는 것입니다. - 프레임워크는 정해진 틀로 구성을 해야됩니다. - 무료로 소스코드가 공개되어있는 코드입니다. - 이러한 오픈소스를 공개하며 여러 개발자들