일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JSON.parse
- react-slick
- 구조 분해 할당
- Mongoose
- 캐러셀
- 객체
- TypeScript
- logstash
- JSON.stringify
- 위크셋
- 참조에 의한 객체 복사
- 위크맵
- 화살표 함수
- JavaScript
- 자바스크립트
- 카카오로그인
- nodemailer
- nestjs
- nest
- MongoDB
- Map
- 이메일 전송
- nextjs
- 로그스태시
- javacript
- DB
- 중첩 구조 분해
- AGGREGATE
- context switch
- 카카오 소셜로그인
- Today
- Total
목록Framework (40)
뚜sh뚜sh
지금 진행하고 있는 프로젝트에서는 config server를 통해 설정 파일의 대부분의 내용들을 주입받고 있다.그러다 보니 빌드할 때 설정값이 없어서 빌드에 실패했다.설정값이 필요한 내용들을 빌드할 때 제외하기 위해 찾아보다가 위의 3가지의 어노테이션을 찾게 되었고 언제 사용하는지 기억하기 위해 정리해 본다! @Profile특정 Spring Profile이 활성화될 때만 해당 빈을 등록해 준다.주로 개발, 테스트, 프로덕션 환경 등에서 서로 다른 빈을 구성할 때 사용한다.@Profile("dev") @ConditionalOnBean특정한 타입의 빈이 존재할 때만 현재 빈을 등록해 준다.특정 구성이나 기능이 다른 빈의 존재 여부에 의존적일 때 사용한다.@ConditionalOnBean(ABean.cl..
@Configuration이란? 클래스 레벨에서 사용되는 어노테이션으로, 스프링 프레임워크에서 빈 정의를 제공하는 설정 클래스이다. 이 설정 클래스는 하나 이상의 @Bean 어노테이션이 붙은 메서드를 포함할 수 있으며, 이 메서드들은 스프링 컨테이너에 의해 관리될 객체(빈)를 생성하고 구성한다. ※ 빈 정의 : 스프링 컨테이너에 의해 생성되고 관리될 객체들의 설정을 말함 @Configuration이 하는 일 1. CGLIB를 이용한 서브클래싱 스프링은 @Configuration이 붙은 클래스를 처리할 때, CGLIB(Code Generation Library)를 사용하여 런타임에 이 클래스의 서브클래스를 동적으로 생성한다. 이 서브클래스는 원본 클래스에 정의된 모든 @Bean 메서드를 오버라이드하여, 이..
Getter 메서드가 없었기 때문에 => JSON 직렬화 문제 : 인스턴스를 JSON 형식으로 클라이언트에게 전송하려고 할 때, 필드에 대한 접근자(getter) 메서드가 없으면 JSON 라이브러리(예: Jackson)가 객체의 필드 값을 읽을 수 없음
resource 패키지 밑에 data.sql 파일을 넣어놓으면 됨
비밀번호는 8자 이상, 16자 이하의 영문, 숫자 및 특수문자를 조합하여 사용해야 할 때 사용하는 정규식 코드 ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,16}$ ^와 $: 정규식의 시작과 끝을 나타냄, 전체 표현식이 전체 문자열과 일치해야 함을 의미 (?=.*[A-Za-z]): 적어도 하나의 영문자(대문자 또는 소문자)가 있어야 함을 의미 (?=.*\d): 적어도 하나의 숫자가 있어야 함을 의미 (?=.*[@$!%*#?&]): 적어도 하나의 특수문자가 있어야 함을 의미, 특수문자 목록은 요구사항에 맞게 조정 가능 [A-Za-z\d@$!%*#?&]: 허용되는 문자 집합을 정의함, 이 경우 영문자, 숫자, 특수문자를 허용 {8,16}: 비밀번..
public boolean matchPassword(PasswordEncoder passwordEncoder, String rawPassword, String encodedPassword) { return passwordEncoder.matches(rawPassword, encodedPassword); } 이전 글에서 비밀번호 암호화 하는 방법을 적었는데 이번 글에서는 그 때 저장했던 비밀번호와 입력값으로 주어지는 비밀번호가 같은 지 비교하려면 아래 코드를 사용하면 됨 같은 비밀번호면 true를 반환하고 다른 비밀번호면 false를 반환함
1. 사용자 정의 에러 응답 클래스 생성 import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public class ErrorResponse { private final int errorCode; private final String errorMessage; } 2. @ControllerAdvice를 사용한 전역 예외 처리기 구현 import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.Controll..
1. 의존성 주입 build.gradle에 아래 코드 추가 implementation 'org.springframework.boot:spring-boot-starter-security' 2. 스프링 시큐리티를 사용하여 웹 보안을 구성하는 데 사용되는 설정 클래스 생성 'SecurityConfig' 클래스는 '@EnableWebSecurity' 어노테이션을 사용하여 활성화되고, 암호화를 위해 BCrypt 알고리즘을 사용하며 기본적인 HTTP 보안 구성을 설정함 package qt.qr_backend.config; import org.springframework.context.annotation.Bean; import org.springframework.security.config.Customizer; im..
package qt.qr_backend.annotation; import jakarta.validation.Constraint; import jakarta.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Constraint(validatedBy = EnumValidator.class) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) @Retention(..
@PostMapping("/signup") public SignupResponse signup(@RequestBody String data) { log.info("서비스 로직 성공"); return new SignupResponse(200, "회원가입이 완료되었습니다."); } 위와 같은 코드를 구현한 다음 Postman을 실행했더니 406 Not Acceptable 에러가 발생했다. 찾아보니 요청 헤더와 응답 헤더에 application/json으로 세팅해줘야 한다고 했는데 난 이미 세팅된 후였다. 그러다 알게 된 사실은 Springboot는 기본적으로 객체를 JSON 형식으로 직렬화하여 클라이언트에게 반환한다는 사실을 알게 됐다. 객체를 직렬화하기 위해서는 객체의 필드에 접근할 수 있어야 하는데 내 ..