JwtTokenProvider 토큰 생성하고, 토큰을 복호화 해서 정보를 추출하고, 유효성을 검증하는 클래스입니다. jwt 토큰 구현 방식으로는 access Token, refresh Token 두가지 토큰을 사용하고, 인증 타입으로는 Bearer를 사용하였습니다. 최종 구현 코드 @Slf4j @Component // spring bean 등록 public class JwtTokenProvider { private final String key; private final Key jwtKey; private static final String BEARER_TYPE = "Bearer"; private static final String CLAIM_JWT_TYPE_KEY = "type"; private sta..
stream 의 map map 함수는 Java의 Stream API에서 제공하는 메소드, stream의 각 요소에 주어진 함수를 적용한 후 결과를 새로운 stream으로 반환한다. 기존에 있던 댓글을 가져와서 새로운 댓글로 업데이트 하는 과정을 의식의 흐름대로 작성해보니 이러했다. @Transactional public Comment update(Long commentId, CommentDto request) { // 변경하기전 댓글 객체 조회 Comment original = commentRepository.findById(commentId) .orElseThrow(() -> new BusinessException(ErrorCode.COMMENT_DOES_NOT_EXISTS)); Comment comm..
3주간 프로젝트를 마치고 회고록을 씁니다. 앞으로 남은 과제들이 많아서 해당 부분들은 차차 업데이트 할 예정입니다. 개발 배경 “네카라쿠배 개발자와 함께 Spring으로 인스타그램 서버 만들기” 라는 딥다이브(클론 코딩 챌린지) 에 참여하게 되었다. 챌린지의 주된 목표는 인스타그램 API 개발과 함께 1. Spring Security & JWT 사용 2. CI/CD 파이프라인을 구축하여 자동화 배포하는 것이다. 진행 중인 하루냥 프로젝트에서 Spring Security 에 대한 이해도 부족, 젠킨스 자동화 배포 구현 실패 경험으로 스스로 완성해보자는 목표가 있었다. 구현기간 23.03.24 ~ 23.04.13 (3주) 깨달은 점 강의로만 보던 스프링 시큐리티는 직접 구현하다보니 생각보다 더! 많이! 복잡..
1. 새로운 할인 정책 개발 “새로운 할인 정책을 확장해보자.” 👀 기획자 : 서비스 오픈 직전에, 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요. 예를들어, 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원 할인해주는 거에요! 💻 개발자 : 제가 처음부터 고정 금액 할인은 아니라고 했자나욧! 👀 기획자 : 애자일 소프트웨어 개발 선언 몰라요? “계획을 따르기보다 변화에 대응하기를” 💻 개발자 : ….(하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준..
누군가에겐 소소한 나에겐 원대한 개발 목표 1. 알고리즘 뽀개기 - 유형 익히기 (1/6~ing) - 본격 문제 풀기 2. 이력서 & 포폴 - github.io 3. 사이드 프로젝트 - 하루냥 릴리즈 🔥 @23-03-08 Google Play 출시했습니다! 🎉🎉 @23-04-05 v2 버전 고도화 시작 4. 개인 프로젝트 - chat 앱 만들기 @23-02-13 구상중:진행 중인 사이드 프로젝트 안정화 되면 시작 - 깃허브 잔디 프로젝트 - instagram clone 프로젝트 (3/24~ing) 5. 업무 프로젝트 - websocket + webRTC 5. 강의 완강 - docker k8s (1/24~ing) - swift - AWS - 토비의 스프링 부트 (2/19~ing) - springboot-j..
에러 메세지 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.clone.instagram.domain.user.dto.SignUpRequest` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) com.fasterxml.jackson 라이브러리를 사용하여 JSON 객체를 Java 객체로 변환하다가 생기는 에러 원인 com.clone.instagram.domain.user.dto.SignUpRequest 클래스..
개발 환경 IDE : IntelliJ Framework : Spring Boot 3.0.5 JDK -version : openjdk 17 Gradle : Groovy 검색하면 많이 나오는 설정들이 대부분 plugin에 querydsl 설정을 추가하는데 Spring Boot 3 버전 이상부터는 plugin에 querydsl 을 사용하면 제대로 작동되지 않습니다. 반드시 plugins에서 제거해주고 dependencies 에만 라이브러리 추가해주세요. build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.5' id 'io.spring.dependency-management' version '1.1.0' //plugins 에서 ..
캡슐화 해서 객체 생성하는 디자인 패턴 객체를 생성하는 대신 객체의 인스턴스를 반환한다. 생성자를 직접 사용하는 것을 제한할 수 있다. 정적 팩토리 메서드(Static Factory Method)란? 정적(static). 팩토리(factory). 메서드(method) 정적 팩토리 메서드란 객체 생성을 담당하는 정적 메서드라는 의미를 가진다. 생성자 대신에 메서드로 객체를 생성하는 방식이다. 정적 팩토리 메서드를 사용하면 좋은 이유? 1. 이름을 지정해서 코드의 가독성이 높아진다. 정적 팩토리 메서드는 목적에 맞게 명확한 이름을 직접 지정할 수 있다. 반면에 생성자는 클래스 이름만 사용하기 때문에, 동일한 클래스에 여러 생성자가 있는 경우 구분하기 어렵다. public class Drink { privat..
에러 메세지 No ParameterResolver registered for parameter [com.clone.instagram.domain.user.repository.UserRepository userRepository] in constructor [public com.clone.instagram.domain.user.service.UserServiceTest(com.clone.instagram.domain.user.repository.UserRepository,com.clone.instagram.domain.user.service.UserService)]. 원인 Junit5 테스트 코드에서 의존성이 주입되지 않았을때 발생하는 에러 해결방법 1. 테스트 클래스에 @SpringBootTest 테스트..
Spring Security를 적용하기 위해서는 @Configuration 어노테이션이 달린 설정 클래스를 구현해야 하고, 이 클래스에서 SecurityFilterChain을 생성하여 보안 필터 체인을 구성합니다. 이때 보안 필터 체인에서 사용할 Filter 클래스 중 하나로 OncePerRequestFilter 클래스를 선택하여 구현할 수 있습니다. OncePerRequestFilter 클래스를 본격적으로 살펴보기에 앞서서, Spring Security에서 Filter를 구성하기 위해 앞서 정의해야할 것들이 있어 이해를 위해 순서대로 차례로 정리해보겠습니다. @Configuration : 시큐리티 구성을 위한 클래스 기존 방식으로 @configuration 어노테이션이 달린 설정 클래스는 아래와 같이 ..
- Total
- Today
- Yesterday
- 스프링 스케줄링
- array
- QueryDSL
- redisson 분산락
- Java
- JPA
- jvm warm-up 전략
- port
- Kotlin
- 배열
- Cannot construct instance of
- MongoDB
- 추상클래스
- checkout
- 스프링오류
- 자바 어플리케이션 실행 과정
- bucket4j
- Spring Security
- Git
- dto 클래스 생성자
- 티스토리챌린지
- spring boot 3
- FetchJoin
- MultipleBagFetchException
- ChatGPT
- n+1
- Linux
- addFilterBefore
- 오블완
- junit5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |