일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 |
30 | 31 |
- 자바
- Java
- spring batch
- CS
- 배포
- 도커
- web server
- JPA
- ORM
- 데이터베이스
- spring cloud
- Spring
- virtualization
- computer science
- 백엔드
- 스프링
- 가상화
- 스프링 시큐리티
- 스프링 부트
- 스프링 배치
- 영속성 컨텍스트
- CI/CD
- 컨테이너
- vm
- mysql
- 웹 서버
- Spring Security
- HTTP
- spring boot
- Container
- Today
- Total
목록Back-End/Spring (36)
개발 일기

드링클리 프로젝트에서 멤버 회원가입 로직을 구현하는 과정에서 두 가지 주요 작업을 처리해야 했습니다. 첫 번째는 DB에 유저 정보를 저장하는 작업, 두 번째는 팀 Slack 채널에 회원가입 요청이 들어왔고 처리되었다는 정보를 전달하는 작업입니다. 처음에는 두 작업 모두 동기 방식으로 처리했지만, Slack 처리 부분은 반드시 동기적으로 처리할 필요가 없다고 판단하게 되었습니다. 이를 통해 성능을 개선할 수 있을 것이라 생각하여, Slack 처리 부분을 비동기 처리 방식으로 변경하기로 했습니다. 이 과정에서 ApplicationEventPublisher와 같은 비동기 처리 기법을 활용해 두 방식의 성능 차이를 비교해보기로 했습니다. 1. 단순 동기 처리 방식위 코드에서처럼 처음에는 회원가입 로직을 동기 ..

회원 가입을 하면 쿠폰을 제공하고 있는 로직의 코드를 보자.package 관점에서 볼 때 멤버에서는 쿠폰 서비스를 사용하기 때문에 멤버에서 쿠폰으로 의존성이 발생하고 있고 쿠폰 서비스는 인자로 인해 쿠폰에서 멤버로의 의존성이 발생하고 있다.→ 즉, 이로 인해 "의존성 사이클 발생", 이를 해결하기 위해서는?인터페이스를 통한 의존성 역전이벤트 처리등을 통해 해결할 수 있는데 이때 이벤트에 조금 더 집중해 보겠다.멤버에서 회원 가입을 하면 다이렉트로 쿠폰 서비스를 호출하는 것이 아니라 멤버가 회원가입했다는 이벤트만 발행한다.그러면 쿠폰 패키지 내부의 리스너가 이 발행된 이벤트를 듣고 이를 처리하는 코드를 작성하면 된다.그렇게되면 위에서와 같이 의존성 사이클이 해결된다. 이를 통해 해결 가능그렇다면 인터페이스는?

Spring에서 외부 API를 요청하는 방법으로 크게 3가지 정도 있다.RestTemplate, WebClient, OpenFeign 등이 있는데 이번에 RestTemplate, WebClient 이 두가지에 대해 집중적으로 알아보겠다.RestTemplateSpring 3.x에서 도입된 동기식 HTTP 클라이언트Multi-Thread, Blocking IO로 동작현재는 maintenance mode로 개발자에게 WebClient사용을 권장한다.Restful 형식에 맞추어진 템플릿Header, Content-Type등 설정하여 외부 API 호출Http 요청 후 json, xml, String 같은 응답을 받을 수 있다.RestTemplate 동작 방법 및 문제점위에서 언급했듯이 RestTemplate은 M..

https://github.com/TanJi-LL/Tanji-Backend해당 블로그는 위 프로젝트에서 내가 직접 구현한 Spring Boot 프로젝트에서 직접 사용한 JWT를 활용한 인가(Authorization)처리 과정을 정리해보고자 한다.지금부터 설명하고자하는 로직은 회원가입이나 로그인 과정이 아닌, 특정 API 요청을 보낸 사용자가 해당 리소스에 대한 권한이 있는지 확인하는 인가(Authorization) 과정을 처리하기 위한 로직에 대한 설명이다인가(Authorization) 처리 흐름도 및 설명우선 처음으로 JwtExceptionFilter로 들어간다. 1. JwtExceptionFilter해당 필터에서는 JWT 처리 중 발생하는 예외를 처리하며, 예외 발생 시 사용자에게 적절한 응답을 반환..

사실 모놀로틱 단일 모듈 프로젝트에서 어떻게 모듈화를 진행할지 즉, 어떻게 하나의 모듈을 역할과 책임이 명확한 N개의 모듈로 나눌지에 대한 명확한 답을 찾기 위해 여러 래퍼런스를 찾아봤지만 사람들마다 다른 관점을 가져 하나로 모으기 힘들었고 그냥 여러 래퍼런스를 보면서 우아한 기술 블로그가 가장 납득이 갔고 이 글 작성자가 배달의 민족에서 프론트 / 주문 / 결제 시스템 등을 담당해왔고 코덕이란 개인 사이드 프로젝트도 진행 중 이신 개발자 분이기 때문에 신뢰할만하다고 판단했고 해당 게시글 및 발표 영상을 참고하여 정리하면서 다른 래퍼런스의 내용도 추가하면서 이 글을 작성해보겠다.우선 이 글에서 회원 시스템을 예시로 들었는데 아마 MSA라서 MSA의 여러 서비스 중 하나인 회원 시스템을 잡고 설명을 하신 ..

피우다 프로젝트라는 공모전의 본선에 붙게되어 실제 프로젝트에 적용시키기 전에 멀티 모듈을 왜 쓰는 것이 좋은지에 대해 알아보고자 작성하게됐다. 전에 개인적으로 멀티모듈 프로젝트를 구성해봤는데 그때 느낀점을 바탕으로 작성하고자 한다.느낀점을 가독성을 포기하고 줄글로 쭉 풀어 써보고자 한다.모듈(Module)이란?우선 모듈이 뭔지 짚고 넘어가보자. 바로 독립적으로 운영될 수 있는 의미를 가지는 구성요소 단위 왜 멀티 모듈(Multi-Module)을 도입하는지 장점 살펴보기?우선은 왜 사람들이 멀티 모듈 구조를 선택하려고 하는지 장점에 대해 고민해봤다.사실 처음에는 MSA(마이크로 서비스 아키텍처) 처럼 독립적인 배포가 가능한 것도 아니고 더 복잡해지기만 하는 것만 같고 왜 써야하는지 이해가 안갔다. 그래서 ..

예외 처리 관련한 블로그를 보다가 Controller에서 응답값 즉, Spring에서 HTTP 통신 시 ResponseBody에 메세지를 설정하는 방식에 두 가지의 처리 방식이 있는 것 같았고 그 두 가지인 @ResponseBody와 ResponseEntity 비교해보고 둘 중 무엇을 선택하는 것이 좋을지 알기 위해 정리해보게 됐다.@ResponseBody (+ Response DTO)@GetMapping("/test")@ResponseBody@ResponseStatus(HttpStatus.OK)public MemberInfoResponseDto responseTest(Long memberId) { ... return memberInfoResponseDto}@ResponseBody는 HTTP ..

Spring Batch에서 데이터를 처리하는 방법에는 Tasklet방식과 Chunk방식이 있다.이 두 가지 비교를 통해 각각 어떤 상황에 쓸 수 있을지 알아 두어야 적절한 데이터 처리 방식을 채택하여 배치 처리를 할 수 있을 것 같아 정리하게 됐다. Tasklet 처리 방식Tasklet은 Spring Batch에서 사용되는 인터페이스로, 배치 작업에서 단일 작업(task)을 수행하기 위한 구성 요소이다.해당 데이터 처리 방식에서 Step은 하나의 Tasklet으로 구성된다.Tasklet을 사용하면 하나의 작업을 간단하게 실행할 수 있으며, 특정 로직을 정의하여 배치 작업 중 반복적으로 실행시킬 수 있다.Tasklet의 execute() 메서드가 호출될 때마다 단일 트랜잭션이 생성되며 Tasklet의 전체..