본문 바로가기

프로젝트45

[사이드 프로젝트 : DevToolKit] 데이터 비정규화시키기 현재 우리의 사이드 프로젝트 메인서비스 메인화면에서 폴더와 여러유형의 컨텐츠들이 함께 보여야한다.그러나 여기서 막히게되는데..  데이터 정규화 초기 테이블 설계 시, 나는 폴더와 다양한 유형의 컨텐츠(코드형, 게시판형, 파일형)를 정규화된 방식으로 구조화했다. 이를 위해 다음과 같은 세 가지 테이블로 분리하였다.폴더 도메인: 폴더의 기본적인 속성인 이름과 부모 폴더 정보만을 저장하는 구조로 설계했다. 폴더는 다른 컨텐츠와 구분되어 관리되는 독립적인 개체로 설정되었다.컨텐츠 도메인 1 (코드/게시판형): 이름과 내용만을 포함하는 단순한 구조로, 텍스트 기반의 컨텐츠를 저장하기 위한 테이블로 설계되었다. 코드와 게시판 글 같은 비파일형 컨텐츠는 이곳에 저장된다.컨텐츠 도메인 2 (파일형): 파일 컨텐츠에 특.. 2024. 10. 4.
[사이드 프로젝트 : 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.
[개인프로젝트 리팩토링] 멀티모듈에 대한 회고..? 최근 모듈을 추가하면서 후회?? 회고?? 한 느낌을 작성하고자 한다.  현재 모듈 구성  간단히 이미지로 보자면 이런구성이다. 일단 멀티모듈로 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