분류 전체보기143 요청에 대하여 쓰레드는 어떻게 획득하는가? 갑자기 프로젝트하다가 쓰레드, 쓰레드풀이 궁금해지면 쓰레드는 간단하게 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. [개인프로젝트 리팩토링] 리팩토링 계획 최근에 쉬다가 개인프로젝트를 조금 널널하게 리팩토링중이었다. 그래서 무엇을 리팩토링하고 있는지 정리해보고자 한다.그에 대한 자세한 얘기는 차차 다룰 예정이다. 프로젝트 리팩토링 첫번째로 멀티모듈개인프로젝트에는 지금 Customer와 Walker가 섞여있다. 그니까 약간 Admin코드랑 Customer 코드가 한 프로젝트에 섞여있는 느낌??그래서 모듈을 나누고자 한다. 1. Common 모듈domaincommon code (위치, auth 관련)2. Customer 모듈산책 알바를 신청한 고객3. Walker 모듈산책 알바를 하는 고객(알바생느낌)4. Batch 모듈Spring Batch관련 코드이렇게 4모듈정도로 나눌 예정이다.사실 Common모듈은 조금 애매함이 있어서 나중에 고민좀 해볼 예정 두번째.. 2024. 8. 1. 왜 swagger에서는 괜찮은데 테스트코드에서 LazyInitializationException이 터지는가? 코드짜다가 swagger로 테스트를 했을때는 괜찮아서 pr을 올렸느데 팀원중 한분이 이거 Lazy예외 안터지냐고 물어보셨다. 그러면서 트랜젝션 어노텡션 붙여야하지 않아요? 하셔서 엥..? 나는 swagger에서 됬는데 싶었다.그래서 일단 swagger테스트해봤는데 되었다고 말씀드렸다. 근데 내가 테스트코드를 까먹고 안한것이다..ㅎㅎ그래서 테스트코드를 짰는데 엥?? LazyInitializationException 바로 터지쥬...? 그래서 트랜젝션을 해당 서비스 코드에 붙였더니 테스트코드가 잘 통과했다.왜?? swagger에서는 잘되었는데 테스트코드에서는 예외가 터진건지,,, 급 궁금해짐,, 일단 트랜젝션 로그를 보자 일단 처음에는 LazyInitializationException자체가 트랜젝션과 관계.. 2024. 6. 7. 이전 1 2 3 4 5 ··· 24 다음 728x90