일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Python
- 개발자부트캠프추천
- jwt
- 코딩테스트 준비
- 항해99
- 커스텀 헤더
- 프로그래머스
- 개발자 취업
- @FeignClient
- infcon 2024
- 프로그래머스 이중우선순위큐
- DesignPattern
- 디자인 패턴
- spring batch 5.0
- 전략패턴 #StrategyPattern #디자인패턴
- KPT회고
- jwttoken
- 디자인패턴
- Spring multimodule
- 단기개발자코스
- TiL
- 99클럽
- 파이썬
- 1주일회고
- 구글 OAuth login
- 취업리부트코스
- 인프콘 2024
- 빈 충돌
- JavaScript
- 빈 조회 2개 이상
- Today
- Total
목록Toy Projects/Ditto - Discuss Today's Topic (17)
m1ndy5's coding blog
Ditto가 종목토론방 프로젝트인만큼 각 종목에 해당하는 전 주가데이터를 평일 아침 5시마다 가져오는 작업을 실행해야했다. 이 작업을 실행하기 위해 Spring Batch와 Scheduler를 사용해 구현했다. Spring Batch? Spring Batch는 대용량 데이터를 처리하기 위한 프레임워크로, 스프링 프레임워크 기반에서 동작한다. 일반적으로 대량의 데이터를 처리하거나, 주기적이고 반복적인 작업을 실행하는데 사용되며, 이러한 작업을 효율적이고 안정적으로 처리할 수 있는 로깅 및 추적, 트랜잭션 관리, 작업 재시작, 건너뛰기 등등의 기능들을 제공한다. Scheduler? 배치와 스케줄러는 개념이 다른데, 배치는 논리적 또는 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 방법이고 스케줄..
기존 모놀리식 구조에서 멀티모듈 구조로 변경을 하니 문제 아닌 문제가 한가지 발생했다. 바로 각 모듈의 포트번호가 다르다는 것! 예를 들면 user 모듈에 있는 api들은 8080, activity 모듈에 있는 api들은 8081, newsfeed 모듈에 있는 api들은 8082에서 돌고 있었기 때문에 각 api들의 요청에 따라 포트번호를 변경해 요청해줘야했고 여간 귀찮은 일이 아니었다!! 그래서 이를 해결하기 위에 spring cloud gateway를 도입해 특정 포트로 요청이 들어오게 되면 각 api를 알맞은 포트로 연결해주는 역할을 하도록 했다. spring cloud gateway를 사용하려면 아래와 같은 의존성을 추가해주면 된다. 이 또한 스프링 부트의 버전에 따라 맞춰서 넣자!! implem..
드디어 멀티모듈 나누기의 길고도 험난한(?) 과정을 어느정도 정리했다. 아직 완벽하다고 할 수는 없지만 그래도 내가 고민했던 것들을 해결해 나가는 과정을 정리해보려고 한다! https://m1ndy5.tistory.com/153 Ditto 프로젝트 멀티 모듈 도입 1편 - 모듈 나누기에 대한 고민 뭔가 실행으로 옮기는 데는 많은 시간이 걸리진 않았지만 정말 많은 고민을 했던 부분이었던 것같다. 기존 모놀리식 구조에서의 패키지는 auth(인증, 인가), member(회원가입, 팔로우/팔로잉), post( m1ndy5.tistory.com 이전 글에서 나는 common 모듈에 모든 엔티티를 몰아넣고 사용을 했었고 그 과정에서 1. 도메인을 common에 몰아넣는 것이 진정하게 모듈이 잘 분리된 것이라고 얘기..
뭔가 실행으로 옮기는 데는 많은 시간이 걸리진 않았지만 정말 많은 고민을 했던 부분이었던 것같다. 기존 모놀리식 구조에서의 패키지는 auth(인증, 인가), member(회원가입, 팔로우/팔로잉), post(게시글 crud, 게시글 좋아요), comment(댓글 crud, 댓글 좋아요), newsfeed(팔로잉하는 사용자들의 활동에 대한 알림, 게시글), global(공통적으로 사용 ex. BaseEntity, BaseResponse, Config etc) 이런식으로 나누어져있었다. 일단 첫 번째로 4개의 모듈을 만들었다. ditto-module-user(멤버 엔티티와 관련), ditto-module-activity(게시글, 댓글과 관련), ditto-module-newsfeed(뉴스피드와 관련), di..
DDD(Domain Driven Design, 도메인 주도 설계)란? 의미 그대로 도메인 위주의 설계 기법 도메인이란 특정 업무의 영역 ex) 음식 주문 배달 애플리케이션이라 가정했을 때 주문을 하는 고객, 실제 판매하는 음식점, 음식을 배달하는 배달원, 결재 담당인 카드사 혹은 은행 이렇게 나눠볼 수 있다. 따라서 크게보면 회원, 주문, 음식, 배달, 결제 도메인 간의 상호작용이 필요하다. 또한 큰 상위 도메인들도 더 작은 하위도메인으로 표현될 수 있다.(ex. 주문 - 주문자 정보, 음식 정보, 주문 정보, 배달 정보 등) 주요 설계 원칙 Loose Coupling(느슨한 결합) 다른 모듈과의 의존성이 낮을수록 좋다. 의존성이 높게 된다면 A모듈에서 코드를 수정하게 되면 B모듈, C모듈 등에서도 다 ..
JWT가 무엇일까? 가 궁금한 사람은 https://m1ndy5.tistory.com/89 위 글을 먼저 읽고 오시길!!ㅎㅎ JWT가 무엇인지 알았다면 JWT의 장점 중에 하나는 바로 Stateless하다는 것을 알았을 것이다! 즉, 서버가 이 토큰을 저장하고 있지 않다는 것인데... 여기서 궁금증이 생겼다. JWT 토큰은 클라이언트 쪽에서 보관한다. 서버는 보관하지 않는다. 그럼 로그아웃을 할 때 클라이언트에 있는 토큰을 어떻게 없애지...?? JWT와 연관되서 로그아웃이 가능한거야?? 라는 궁금증을 품고 답을 찾아 해맸다!!! 그 결과 다음과 같은 로직을 찾을 수 있었다. 로그아웃을 요청한다. 해당 accesstoken을 blacklist에 저장한다. 요청의 accesstoken이 blacklist에..
build.gradle // email implementation 'org.springframework.boot:spring-boot-starter-mail' // string auto generate implementation 'org.apache.commons:commons-lang3:3.12.0' //thymeleaf implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'위와 같은 디펜던시를 추가해주었다. 순서대로 이메일을 보내기 위해, 랜덤생성코드를 위..