본문 바로가기

분류 전체보기139

[사이드 프로젝트 : DevToolKit] 왜 트랜젝션 Requires_new가 안되는가? 유저관련된 로직을 하다가 맞다은 에러?? 비밀번호 5회틀릴시 로그인 막기 현재 유저가 로그인할때 5회 틀릴시 로그인을 막고 있다. fun login(request: UserLoginRequest): UserLoginResponse { val user = userRepository.findByEmail(request.email) ?: throw RestException.notFound(ErrorMessage.NOT_FOUND_USER.message) if (!user.isEnabled || !user.isVerified) { throw RestException .badRequest(ErrorMessage.IMPOSSIBLE_LOG.. 2024. 9. 20.
어쩌다 보니 사이드 프로젝트..ㅎㅎ 사이드프로젝트를 진행하게 되었다.일단 혼자 프로젝트하기엔 계속 쳐지기도 하고,,, 뭐가 프론트도 있으면 좋을것같다.. 라는 생각이 들어서 이번에는 디자이너 2분, 프론트 개발자 1분, 백엔드 개발자 1명(나) 이렇게 진행하게 되었다. 일단 적용해보고 싶은 것도 많고 배포도 잘해보고 싶고...  머리를 싸매면서 어떻게든 열심히 해보겠습니다.파이팅..! 2024. 9. 10.
요청에 대하여 쓰레드는 어떻게 획득하는가? 갑자기 프로젝트하다가 쓰레드, 쓰레드풀이 궁금해지면 쓰레드는 간단하게 worker라는건 알겠는데,..그래서 요청에대해서 누가 쓰레드를 할당해줄까??가 궁금해졌다. Tomcat이 시작할때 원초적으로 돌아가서 결국 쓰레드풀세팅과 쓰레드에 대한 세팅은 누가 해주는 걸까??로 시작해서 디버깅을 시작했다.먼저 정리한 상황을 말하자면1. Http11NioProtocol(AbstractProtocol) : 엔드포인트 새로운거 세팅2. AbstractEndPoint(NioEndPoint, AbstractJessEndPoint) : 초기화 과정3. Http11NoiProtocal : 위에서 초기화과정을 거친 EndPoint setter4. 앞선 Endpoint : 쓰레드 할당5. CoyoteAdapter : 세팅6. A.. 2024. 8. 30.
[개인프로젝트 리팩토링] 멀티모듈에 대한 회고..? 최근 모듈을 추가하면서 후회?? 회고?? 한 느낌을 작성하고자 한다.  현재 모듈 구성  간단히 이미지로 보자면 이런구성이다. 일단 멀티모듈로 COMMON, CUSTOMER, FCM, JOB ,WALKER 총 5개의 모듈로 구성중이다.여기서 COMMON에 domain관련된 엔티티와 CUSTOMER와 WALKER에 공통적으로 쓰이는 AUTH(로그인, 토큰)관련 로직들이 있다. 그래서 CUSTOMER와 WALKER관련된 코드를 작성한후 FCM코드를 짤때 dependency에 COMMON모듈을 추가해야하나?? 하는 고민이 있었다. 그러려면 AUTH관련된 코드들 떄문에 OpenFeign, Redis와 관련된 설정값을 넣어줘야했다. 그것은 매우 쓸모없는 행위라고 생각했다.일단 FCM에서 관련된 코드들을 사용하지 .. 2024. 8. 21.
[개인프로젝트 리팩토링] 데이터베이스 레플리케이션 적용하기 데이터베이스 레플리케이션을 적용해보았따.  레플리케이션 왜 필요한가? 보통 개인프로젝트 하다보면 데이터베이스를 한대만 운영한다. 데이터를 읽고 쓰는 작업이 하나의 데이터베이스에서 수행된다는 의미다 근데 갑자기 트래픽이 폭주했다고 가정해보자.DB관점에서는 크게 2가지문제가 발생가능하다. 1. SPOF물론 트랙픽에 대응해 DB성능 한대의 성능을 Scale up하는 방법도 존재한다. 그러나 한대의 데이터베이스가 다운될 경우 그냥 서비스가 다운이다. 데이터를 백업하지 않았다면 더 큰일... 그래서 SPOF 하나의 장애가 시스템 전체 장애로 이어지는 상황이 발생하게 된다. 2. 성능저하하나의 데이터베이스에 읽고 쓰는 작업이 모두 일어나다보면 부하가 늘어난다. 물론 이부분도 DB성능을 향상시키는 방법도 존재하지만... 2024. 8. 3.
[개인프로젝트 리팩토링] Actuator, Prometheus, Grafana 구축 이미 어느정도 모듈로 나누고 코드를 80%이상 짠 상태라서 모니터링 환경을 구축해보았다. 구조 구조라고 말하기에 애매하지만 Spring boot의 메트릭정보를 Prometheus가 수집하여 해당 내용을 Grafana가 시각화한다. 1. 디펜던시 추가implementation 'org.springframework.boot:spring-boot-starter-actuator'runtimeOnly 'io.micrometer:micrometer-registry-prometheus' 이후 localhost:{포트}/actuator에 접속해보면 요렇게 제공하는 엔드포인트들이 나온다.Prometheus에서 사용되는 메트릭을 노출시키기 위해 밑의 내용을 yml에 추가한다.management: endpoints: .. 2024. 8. 3.
728x90