일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 2024년 상반기 회고
- ExecutorService
- 스레드
- Spring Reactive Programming
- Apple 로그인
- spring boot
- Spring Cloud OpenFeign
- 도메인 주도 설계(DDD) 기반 마이크로서비스(MSA) 모델링
- 프로세스
- 멀티프로세싱
- 사이드 프로젝트
- 오블완
- OpenFeign
- JWT
- querydsl
- 비동기
- 멀티스레드
- 코드로 배우는 스프링 부트 웹 프로젝트
- ExceptionHandlerFilter
- 비사이드프로젝트
- Spring Security
- 멀티태스킹
- 네이버클라우드 서버
- OAuth2.0
- 티스토리챌린지
- microsoft
- springboot
- asciidoctor
- FeignClients
- REDIS
- Today
- Total
목록Server (14)
기록하기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b72lfk/btsKALKlnFM/Q5pGl6noOF77ihHGmkR511/img.png)
소셜 로그인을 연동하면서 Kakao, Naver, Google, Apple 로그인은 연동을 해보았지만, Microsoft 연동은 처음이었다.진행하면서 많이 헤맸던 부분도 있고 더 공부가 필요하다고 생각한 부분도 있어서 더 까먹기(?) 전에 블로그에 정리를 해보려고 한다. 글의 목차는 다음과 같다. Microsoft 로그인을 위한 앱 설정Spring Security 설정OAuth2.0 흐름과 custom 설계Microsoft 로그인을 위한 앱 설정앱 설정다른 소셜 로그인과 마찬가지로 일단 앱 등록 과정이 필요하다.Microsoft Entra 관리 센터에 들어가서 앱 등록을 해주면 되는데 Microsoft(이하 MS) 연동에서는 조금 다른 개념 하나가 있다. 그 개념은 바로 tenant 라는 개념이다.Mic..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cKp2F2/btssbhuLOgB/adG1dQiJZ44aGHau5itKI1/img.png)
사이드 프로젝트에서나 사내에서 많이 적용하고 있는 OpenFeign 에 대해 그 적용 과정에서 겪었던 어려움을 정리해보고자 한다. Spring Cloud OpenFeign 먼저, OpenFeign 이란, 복잡성을 줄이고 외부 API 호출을 쉽게 할 수 있도록 지원하는 Declarative REST Client 로 다음과 같은 특징을 가진다. API 응답 캐싱 지원 URI 템플릿 표현 지원 Retry API 지원 서버 간의 통신을 하거나 외부 API 를 호출할 때 기존 프로젝트에는 RestTemplate, WebClient 등 다양한 방법으로 구현이 되어 있지만 이번에 신규 프로젝트를 구성하면서 OpenFeign 으로 설계를 진행해보았다. 구현을 하면서 예전에 OpenFeign 설정 과정에서 어려웠던 문제..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cRxVk7/btssfyvYZ4t/HtCQHGMteaKxA91mGZLFi0/img.png)
Spring Webflux 를 공부하면서 Reactive Programming 에 대해 학습을 진행하였다. 그 중에서 가장 먼저, 항상 헷갈리는 개념인 동기 vs 비동기, Blocking vs Non-Blocking 에 대해 내용을 정리해보고자 한다. 내용 정리에 앞서 결론적으로 먼저 정리를 해보자면, 더보기 Caller : 호출하는 함수 Callee : 호출 당하는 함수 동기와 비동기의 차이는 Caller 가 Callee 의 결과에 관심을 가지는지 여부 Blocking 과 Non-Blocking 의 차이는 제어권을 Caller 와 Callee 중 누가 가지고 있는지 이렇게 정리할 수 있으며 위 기준에 따라 구분할 수 있다. 이제 이 내용을 바탕으로 함수 호출 관점에서, I/O 관점에서 내용을 정리해보고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Z6H5a/btsddTH8Ar8/p3k5oJfDXEeIbFYH2K95Tk/img.png)
디프만 13기 SERVER 파트에 참여하게 되었다🥳 초반에는 팀 별로 같이 아이디어 회의를 통해 기능을 도출하는 시간이기 때문에 SERVER 파트끼리는 사용해보고 싶은 기술 스택이나 아키텍처에 대해 이야기를 나눌 시간이 주어졌다. 이번에 우리 팀에서는 헥사고날 아키텍처를 경험해보고 싶다는 의견과 + 그 내부적인 도메인을 DDD 로 설계하고 싶다는 의견이 나왔다. 그리고 멀티 모듈을 활용하여 설계를 하고 싶다는 의견을 같이 더하여 결국 하고 싶었던 것, 공부해보고 싶었던 것 다 해보자! 라는 결론이 나오게 되었다. 하고 싶은 거 다 해보기! 그러나 DDD 어떻게 설계해야 복잡성이 좀 줄어들 수 있을까? 필자는 레이어드 아키텍처만 경험을 해보고 헥사고날, DDD 를 제대로 경험한 적이 없었다. 또한 멀티 모..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxQR1q/btssc9iXspe/wcUlDs2ZcnanGhTQ2g83G1/img.png)
비사이드 프로젝트에 13기 BE 포지션으로 참여했다. 팀 내에서 중간에 일정이 조금 딜레이가 있었어서 아직 QA 진행중이긴 하지만 그래도 좋은 경험이었기에 기록용으로 짧은 후기를 남기려고 한다. 서버 스펙 아 먼저 NCP 로 서버를 운영해가면서 서버 스펙에 대해 어떻게 구성했는지를 기록해 놓으면 다른 분들도 참고하실 수 있을 것 같아 적어보려고 한다. 처음에는 아래와 같이 가장 작은 서버를 구매해서 운영해갔는데 이는 당연히 부족했고 QA 를 시작하기 전에 서버 스펙을 올렸다. [Micro] ubuntu-18.04 vCPU 1개, 메모리 1GB, 디스크 50GB [G1] 올리기 전에 어느 정도로 구성을 하는지 궁금해서 다른 분들에게 여쭤보니 아래의 정보를 공유해주셨다. - 개발시 추천하는 최소 스펙 sta..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmyKiz/btrWX37jtjn/kQDDHw8MoSB33kiAjLeXk1/img.png)
Spring Boot + JPA + Querydsl 적용네이버 클라우드 Global DNS, SSL 설정애플 로그인 구현(현재글) 이제 마지막으로 애플 로그인 구현한 것을 정리해보고자 한다.애플 로그인은 소셜 로그인 연동 중에서 가장 어려움이 큰 기능이다. 레퍼런스도 다른 소셜 로그인보다 부족한 편이고, 공식 문서에서 해결법을 찾기도 어려움이 있다.이번에는 이전에 구성한 여러 방법들과 더불어 주요하게 도움을 받은 여러 블로그들이 있는데 이런 전체적인 내용을 정리해보려고 한다. 애플 로그인 전체적인 구조로그인 로직을 구현하는데 이 블로그에 의하면 크게 2가지가 있다고 한다. 그 중에서 필자가 선택한 방법은 아래와 같다.그러면 가장 먼저 회원가입 요청이 들어온 뒤 App 에서 authorizationCode..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rbfYE/btrVsIDDHgG/x7fgun0JkfBhr0q8il5guk/img.png)
비사이드 13기에 참여하게 되면서 프로젝트 세팅에서 매번 헷갈리는 내용인 Querydsl 과 애플 로그인 구현, 네이버 클라우드와 관련된 내용을 정리해보려고 한다. Spring Boot + JPA + Querydsl 적용(현재글) 네이버 클라우드 Global DNS, SSL 설정 애플 로그인 구현 Spring Boot + JPA + Querydsl 적용과 관련해서는 이미 다른 분들께서 블로그 정리를 너무나도 잘해주셨다. 그래서 블로그 작성을 고민하다가 나중에 또 세팅할 때 헷갈릴 것 같아 추후 확인을 위해 다시 정리해보려고 한다. build.gradle 설정 설정은 다음과 같이 진행을 했다. 참고로 프로젝트 환경은 아래와 같다. Spring Boot 2.7.7 Java 17 gradle 7.6 plugi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vg2GV/btrSZlEP83L/HthJspM69NsrWWkovQKI7k/img.png)
회사에서 매번 REST Docs 를 설정할 때마다 설정 방법이 헷갈려서 레퍼런스를 많이 찾게 된다. 이미 좋은 자료들이 많긴 하지만 프로젝트마다 그리고 회사의 환경마다 조금씩 설정을 변경해줘야하기 때문에 어려움이 있다. 특히 CI/CD 를 적용해서 젠킨스에 배포를 할 때면 배포 환경에서 MySQL 등에 접속을 막아두었기 때문에 build 시 asciidoctor 가 수행이 되면 안 된다!(이 부분이 제일 힘들었다.. gradle 작성방법이나 문법도 더 공부를 해야겠다..) 그래서 다른 블로그에서 참고한 내용에 좀 더 수정이 필요했기에 해당 내용을 추후 기억하기 위해서라도 적어보려고 한다. 프로젝트 환경 gradle 7.6 Spring Boot 2.7.5 Java 11 build.gradle 에 REST ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b4Ngbz/btrMoyW3fMr/xrRBM0Tv2BMKkJkH7yPvAK/img.png)
회사에서 프로젝트를 진행하던 중 ehcache 를 사용해야했으며 key 생성에는 StringCacheKeyGenerator 를 import 받아서 사용하고 있었다. StringCacheKeyGenerator 란, Cache 를 저장할 때 key 를 생성하는데 있어서 사용할 수 있는 방법 중 하나이다. com.googlecode.ehcache-spring-annotations 를 import 하여 사용할 수 있으며 CacheManager 를 활용하여 cache 를 생성할 때 Bean 으로 주입받은 해당 객체를 사용하여 generateKey 메소드로 cache 를 저장할 수 있다. 하지만 프로젝트에서 org.springframework.boot:spring-boot-starter-cache 와 함께 사용하기..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cidfqi/btrKGPU0oMK/2Pmiz2Hql4DuecplCVgtWK/img.png)
회사에서 프로젝트를 진행하던 중 logback 설정을 수정해야 했는데 이때 적용한 방법을 정리해보고자 한다. 기존 프로젝트를 리팩토링하는 과정에서, 기존과는 다르게 특정 변수에 따라 log 파일의 위치가 다르게 저장이 되어야 하는 요구사항이 추가되었다. 이 요구사항을 적용하기 전과 후의 상태를 간단하게 살펴보기 위해 logback 프로젝트를 생성해보았다. 프로젝트 구조 및 api 상황 Spring Boot Java 8 Spring Data JPA H2 Database 요구사항 적용 전 예시를 통해 설명을 하자면, 만약 DB 에서 어떤 값을 조회해오는 api 하나가 있다고 할 때, 성공/실패의 결과만 구분되어 log 가 쌓이고 있었다고 가정하자 이 경우에는 아래와 같이 설정을 하면 success, erro..
이전 글에 이어서 마지막 flow 를 기록해보려고 한다. 1. Security Configuration 적용 및 flow 설계 2. Spring Security + JWT + Redis 설정 및 진행 과정 3. ExceptionHandlerFilter 설계 ExceptionHandlerFilter 설계 이번 글에서는 설계한 ExceptionHandlerFilter 코드를 공유하고, 어떻게 처리를 했는지 간단하게 설명하도록 하겠다. ExceptionHandlerFilter @Slf4j @Component @RequiredArgsConstructor public class ExceptionHandlerFilter extends OncePerRequestFilter { private final ObjectMa..
이전 글에 이어서 다음 flow 를 기록해보려고 한다. 1. Security Configuration 적용 및 flow 설계 2. Spring Security + JWT + Redis 설정 및 진행 과정 3. ExceptionHandlerFilter 설계 Spring Security + JWT + Redis 설정 및 진행 과정 JwtAuthenticationFilter 에서 토큰의 유효성을 검증하는 역할을 하며 여기서 Exception 이 발생하게 될 경우 ExceptionHandlerFilter 가 이를 처리하도록 설계했다. public class JwtAuthenticationFilter extends OncePerRequestFilter { @Autowired private TokenService ..