일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ExecutorService
- microsoft
- 비동기
- 사이드 프로젝트
- 스레드
- FeignClients
- 멀티태스킹
- Spring Reactive Programming
- 2024년 상반기 회고
- 네이버클라우드 서버
- spring boot
- 비사이드프로젝트
- querydsl
- asciidoctor
- 코드로 배우는 스프링 부트 웹 프로젝트
- REDIS
- OpenFeign
- 프로세스
- Spring Security
- 멀티프로세싱
- ExceptionHandlerFilter
- Spring Cloud OpenFeign
- 티스토리챌린지
- springboot
- OAuth2.0
- JWT
- 오블완
- 도메인 주도 설계(DDD) 기반 마이크로서비스(MSA) 모델링
- Apple 로그인
- 멀티스레드
- Today
- Total
목록전체 글 (29)
기록하기
![](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 ..
Spring Security + JWT 를 적용한 프로젝트에서 토큰을 검증할 때 만료된 토큰이거나 유효성 검증에서 실패할 경우 Exception 처리를 하게 된다. 하지만 Exception 처리 이후 재로그인을 하도록 유도하기 위해 alert 을 줘야하는데 이 과정에서 프론트 개발자에게 해당 메세지를 전달해야하기에 단순히 Exception 처리만 하는 것으로는 해결할수가 없었다. 특히나 Filter 처리 과정에서 발생하는 에러이기에 처리를 위해서는 다른 설계가 필요하다고 판단되어 찾아본 결과 ExceptionHandlerFilter 를 커스텀하여 생성한 뒤 SecurityConfig 에 설정을 해주면 된다고 하여 설정을 해보았다. 1. Security Configuration 적용 및 flow 설계 2...
필자가 실무에서 가장 많이 사용하는 자료구조는 List, Set, Map 인데 이들의 차이점은 무엇일까? 간단하게 정리를 해보고자 한다. 순서가 있는 목록 List List 는 순서가 있는 목록을 나타낸다. List 인터페이스의 가장 큰 차이점은 배열처럼 순서가 있다는 것이다. ArrayList 와 Vector 클래스의 사용법은 거의 동일하고 기능도 거의 비슷한 "확장 가능한 배열"이다. 하지만 ArrayList 는 thread safe 하지 않고, Vector 는 thread safe 하다. ArrayList 는 객체를 선언할 때 매개 변수를 넣지 않으면 초기 크기는 10이다. 따라서 10개 이상의 데이터가 들어가면 크기를 늘이는 작업이 ArrayList 내부에서 자동으로 수행된다. 참고로 자바의 모든..
DB 를 설계할 때 엑셀이나 ER 다이어그램을 이용하여 도메인과 속성을 정의하고, 관계를 정의해보며 설계를 진행한다. 예를 들어 반려동물과 법적 보호자 사이에는 '소유'라는 속성이 있음을 이해한 뒤 관계를 정의해보면 더 정리가 잘 되기 때문에 꼭 ERD 를 그리지 않더라도 속성과 관계를 정의해보는 것을 습관으로 하려고 한다. 하지만 매 번 가장 어려운 것이 식별, 비식별 관계를 정의하는 것과 일대다인지 다대다인지 등을 정의하는 것이 가장 어렵기에 정리를 해보려고 한다. 식별 / 비식별 관계 쉽게 정의하는 식별, 비식별 관계의 정의는 아래와 같다. 키로 찾을 때 여러 개가 나오면 -> 약결합(비식별) 무조건 한 개만 나오면 -> 강결합(식별) 만약, 아래와 같이 테이블이 구성되어 있다고 가정해보자 반려동물..
실무에서 insert 와 update 를 같이 수행시키기 위해 INSERT ON DUPLICATE KEY UPDATE 명령어를 많이 사용하는데, 사용시 PK 를 왜 입력해야하는지에 대해 mariadb 공식 사이트 내용을 정리해보려고 한다. INSERT ON DUPLICATE KEY UPDATE INSERT ON DUPLICATE KEY UPDATE 명령어는 insert 를 할 때, 중복되는 유니크 키 또는 pk 가 있을 경우에는 update 명령어가 수행되고, 그 외에는 insert 가 수행되는 명령어를 의미한다. 예를 들어, Person 클래스가 있고, id 가 pk 일 때 아래와 같이 구성할 수 있다. public class Person { private Long id; private String n..
javascript 에서 DOM 을 조작하는 방법에 대해 알아보려고 한다. DOM먼저, DOM 이란?문서 객체 모델(The Document Object Model) 은 HTML, XML 문서의 프로그래밍 interface 이다. DOM 은 nodes 와 objects 로 문서를 표현한다. 이들은 웹 페이지를 스크립트 또는 프로그래밍 언어들에서 사용될 수 있게 연결시켜주는 역할을 담당한다.자바스크립트에서는 HTML 에서의 값을 가져오거나 수정하는 방법으로 접근을 할 수 있다. 아래에서는 자바스크립트에서 DOM 요소에 접근하는 방법을 설명하려고 한다. id 속성을 이용해서 DOM 요소 찾기HTML 에서 id 는 유일한 값 이다. 따라서 이 id 로 찾게 되면 값 하나만 리턴하게 된다.document.get..
프로젝트를 진행하면서 도메인 추출을 통해 테이블 설계 작업을 하고 있는데 어떤 데이터 타입이 이 컬럼에 적절한지 고민이 되는 경우가 많았다. 모든 부분을 기억할 수는 없지만 적어도 가장 많이 사용하는 VARCHAR 타입에 대해 간단하게라도 정리를 할 필요성을 느꼈고, 이 뒤로 조금씩 정리를 해가면서 프로젝트 설계에 도움이 되고자 데이터 타입 정리를 시작했다. CHAR, VARCHAR CHAR VARCHAR 길이 0 ~ 255 byte 0 ~ 65,535 byte 특징 고정 길이 문자열 가변 길이 문자열 할당된 크기만큼공간이 생성된다. 여기서 특징에 주목할 필요가 있다. CHAR 의 경우에는, 고정 길이의 문자열이므로 저장될 데이터의 길이가 지정된 공간보다 작더라도 그 공간이 그대로 유지가 된다. 만약 ..