본문 바로가기

분류 전체보기

(44)
컬럼크기 CLOB으로 변경했는데도 에러나는 이유(ORA-01461) 게시글 컬럼의 크기를 VARCHAR2에서 CLOB으로 변경했는데도 계속 Insert에서 에러가 났다. 인서트문을 보니 게시글 본문 컬럼에 nvl이 걸려있길래 혹시나해서 지웠더니 오류가 안난다!찾아보니 nvl이 4000바이트까지라는 얘기도 있고 string으로 변환한다는 얘기도 있어 공식문서를 찾아보았다. 오라클 공식 문서 일부 발췌If expr1 is character data, then Oracle Database converts expr2 to the data type of expr1 before comparing them and returns VARCHAR2 in the character set of expr1.전달값1이 문자 데이터이면 오라클 데이터베이스에서 전달값2를 전달값1의 데이터 타입으로 ..
테스트용 AuditorAware 별도로 만들기 이전 게시글(https://codestreet.tistory.com/93)에서 JpaConfig 클래스 안에 AuditorAware 빈을 생성 -> 랜덤 숫자를 리턴하게 하여 테스트 한 후 다시 운영 코드로 변경하였다.문제는 이후 테스트를 할 때 마다 테스트용 코드로 바꿨다가 다시 운영용 코드로 바꿔야 해서 번거로웠다는 점이다.AuditorAware에서는 리퀘스트 헤더에서 엑세스 토큰을 추출해 내고 그 안의 사용자ID값을 뽑아내어 CreatedBy 또는 LastModifiedBy의 값으로 지정한다. 단위 테스트 시에는 리퀘스트 헤더에 접근이 불가능하기 때문에 아래와 같이 HttpServletRequest를 정의할 수 없다고 뜬다.***************************APPLICATION FAI..
Auditing 사용해서 데이터 관리하기 JPA의 Auditing 기능을 사용하면 DB에 데이터 입력, 수정 시의 시간, 입력자 정보를 자동으로 관리할 수 있다.보통 테이블을 생성하면 데이터 입력일자, 수정일자는 기본으로 넣게되는데 jpa에서 이를 자동으로 관리해준다. @EnableJpaAuditing먼저 jpa의 auditing 기능을 사용하려면 @EnableJpaAuditing 어노테이션을 사용해야한다. Application.java에 클래스 범위의 어노테이션으로 사용하면 인식 가능하지만, junit 테스트 시 @WebMvcTest와 충돌되는 문제가 있기 때문에 따로 JpaConfig라는 클래스를 생성해서 인식되도록 한다.  JpaConfig.javaimport org.springframework.context.annotation.Confi..
jwt 로그인 구현 로그인 구현 순서 :  1. dto와 컨트롤러를 통해 이메일, 비밀번호를 전달받는다LoginRequest.class (DTO)import lombok.Builder;import lombok.Getter;import lombok.NoArgsConstructor;@NoArgsConstructor@Getterpublic class LoginRequest { private String email; private String password; @Builder(builderMethodName = "testBuilder") public LoginRequest(String email, String password) { this.email = email; this.password = password; }} Log..
Filter 추가 후 HTTP가 무조건 200으로 전달되는 에러(filterChain.doFilter) 필터를 추가한 후 컨트롤러가 제대로 작동하는지 다시 테스트를 해보니, 원래 201로 전달되어야 하는 테스트가 200으로 전달되면서 실패로 떨어졌다.  문제의 필터import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;import org.springframework.web.filter.OncePerRequestFilter;import com.t..
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1 yml 파일에 한글 주석이 들어가서 발생한 에러.그냥 주석을 영어로 바꿔서 해결했다
jwt 토큰 정보 읽어오기 & 예외처리 1. 토큰 분석(parse)토큰을 생성할 때 사용한 secret Key를 전달하여 JwtParser를 생성하고, JwtParser의 parser() 함수를 이용하여 토큰을 분석한다.private Jws parseToken(final String token) { return Jwts.parser() //.setSigningKey(secretKey) -> deprecation .verifyWith(secretKey) .build() //.parseClaimsJws(token)// -> deprecation .parse(token) .accept(Jws.CLAIMS); }verifyWith(Key key) : jwt 생성 시 사용한 시크릿 키build() : JwtPa..
jwt token 생성 JWT 토큰 암호화 알고리즘에는 HS256과 RS256이 주로 사용된다.JWT 라이브러리의 암호화 알고리즘 기본값은 HS256 이므로 이에 맞게 secret key를 생성하자. HS256(HMAC with SHA256) : 원본 메시지와 공유된 메시지를 비교하여 변조 여부를 확인하는 것이 MAC(Message Authentication Code)이며, HMAC는 해시 메시지를 이용한다. SHA는 해시를 이용한 암호화 알고리즘으로 256길이의 해시값(64자리 문자열)을 생성하며, 단방향 암호화로 원본 복구가 불가능하다. 즉, SHA256 해시값을 이용하여 메시지 변조 여부를 확인하는 알고리즘이다. 따라서 JWT 토큰을 생성하기 위해선 SHA256 해시값을 HMAC 알고리즘에 적용하여 SECRET KEY를 ..
JUnit5 테스트 중 Failed to load ApplicationContext 에러 전문더보기java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.support.DependencyInjectionTestE..
@NotBlank 이용해서 dto값 검증하기 1. build.gradle에 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-validation’ 2. 컨트롤러에 @Validated 추가public ResponseEntity signUp(@Validated @RequestBody MemberSignUpRequest request) { return ResponseEntity.status(HttpStatus.CREATED).body(new MemberSignUpResponse(memberService.signUp(request))); } 3. dto에 @NotBlank 추가import javax.validation.constraints.NotBlank;import lombok.Bui..