전체 글 170

JPA 영속성 컨텍스트 entityManager

JPA는 애플리케이션과 DB 사이에 있는 기술이다. 사이에 있음으로써 얻게되는 이점은 명확하다. 또한 가장 중요한 점은 JPA의 모든 함수의 동작은 트랜잭션 안에서만 동작한다는 것이다. 1. 버퍼링 기능이 가능하다.(묶어놓고 트랜잭션이 끝날때 한꺼번에 DB로 쿼리를 날릴수 있다. 2. 캐시가 가능하다.(우선적으로 영속성 컨텍스트내 1차캐시에서 조회를 하고, 없으면 DB에 조회해서 캐시에 저장한다.) persistence-unit 단위로 하나의 Persistence 객체의 Meta Data 를 명시가능하다 name 을 통해 Persistence 객체가 설정정보를 식별할 수 있다. JPA 는 jdbc api 를 직접호출해주기 때문에 이에 대한 기본적인 정보가 명시되어야 한다. Hibernate 같은 경우에는..

카테고리 없음 2024.01.26

@Value 스프링 빈 사이클에 따른 적용불가 오류 해결

이전포스트의 문제해결을 다른 관점으로 해결해 보았다. 해당 부분을 yml을 이용해서 @Value 애너테이션 을 이용하여서 숨길려고 시도해 보았지만 spotifyAPI.clientCredentials().build() 부분에서 로그상에 정상적으로 토큰이 존재하는데도 불구하고 옳지 않은 키 값으로 나왔다. 아무래도 스프링이로 등록될때 절차상에 제가 놓친부분이 있는거 같았다 ! @Slf4j @Component public class SpotifyConfig { private static String CLIENT\_ID; private static String CLIENT\_SECRET; @Value("${spotify.registration.client-id}") public void setClientId(S..

@Value 애너테이션 static 필드에 적용하기.

application.yml에 적어놓았던, 클라이언트 키를 이용해서 접근할려고 하니, 계속 유효하지 않다는 애러가 반복되었다. spring: datasource: url: ${DB_URL} driver-class-name: ${DB_DRIVER} username: ${DB_USER} password: ${DB_PASSWORD} hikari: maximum-pool-size: 20 jpa: properties: hibernate: dialect: org.hibernate.dialect.MySQL8Dialect show_sql: true format_sql: true database: mysql show-sql: true hibernate: ddl-auto: update defer-datasource-ini..

스프링 시큐리티 필터 동작 과정(2024-01-22)

자료 스프링 시큐리티 필터 참고 자료(공식문서) Architecture :: Spring Security 로그인 모식도 스프링 시큐리티 필터 동작 원리 스프링 시큐리티는 클라이언트의 요청이 여러개의 필터를 거쳐 DispatcherServlet(Controller)으로 향하는 중간 필터에서 요청을 가로챈 후 검증(인증/인가)을 진행한다. 클라이언트 요청 → 서블릿 필터 → 서블릿 (컨트롤러) Delegating Filter Proxy 서블릿 컨테이너 (톰캣)에 존재하는 필터 체인에 DelegatingFilter를 등록한 뒤 모든 요청을 가로챈다. 서블릿 필터 체인의 DelegatingFilter → Security 필터 체인 (내부 처리 후) → 서블릿 필터 체인의 DelegatingFilter 가로챈 요..

JWT 와 Session 적용기 (2024-01-22)

I. 서론 JWT와 Session 비교 및 JWT의 장점 소개 II. 본론 Access Token과 Refresh Token의 도입 이유 Refresh Token 은 어떻게 Access Token의 재발급을 도와주는 걸까? Refresh Token Rotation Redis 저장 방식 변경 III. 결론 정리 생각해 볼 수 있는 문제 해결하고자 한 문제 JWT로 인증을 구현한 개발자라면 아래의 문제를 생각해 볼 수 있다. 1. 유효기간이 긴 Refresh Token이 탈취된 경우. -> 이 경우는 간단히 refresh token rotation 을 떠올릴 수 있다. 하지만 아래의 문제까지 커버할 수 있을진 의문이다. 2. 탈취한 Refresh Token으로 정상 유저보다 먼저 Access Token을 재..

@NotNull 비활성화 이슈 (2024-01-15)

문제 해결 PR https://github.com/Playlist-pack/Server/pull/64 ✔️ [Fix] : requestDTO의 @Notnull 기능 정상동작하도록 수정 by ulsandonghun · Pull Request #64 · Playlist-pack/ 기존에 동작하지 않았던 javax.validation.constraints의 @NotNull 어노테이션 기능을 새로운 의존성을 추가하여 동작하게 하였습니다. 해당 DTO에 @NotNull이 붙은 필드에 JSON value가 Null이면, 자바라이브러리 github.com 우선적으로 Request의 DTO에 붙은 @NotNull(쉽게 설명하면 반드시 Null이 아니어야 하는 곳에 Null이 입력되어서 전송되었을 경우, RuntimeE..

모킹 테스트 코드 작성 이슈 (2024-01-15)

플리보따리 에서 자동 로그인 부분을 테스트 코드 작성하던중 의문이 발생했다. 모킹이란 무엇일까 ? 결론부터 말하겠다. "A를 할건데, 이런 상황에선 B, C, D가 실행되어야해" 를 상정해두고 그게 잘 실행 되는지를 검증하는 것 이 문장이다. 즉 코드를 설명 하자면 package com.hositamtam.plypockets.user.controller; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.sprin..

JAVA 를 이용한 웹 크롤링 CSS 선택자

우선 웹 크롤링을 Python이 아닌 java의 라이브러리를 사용하기 위해서 찾아보던 중, BeautifulSoup와 Jsoup 똑같이 특정 html을 긁어오려면 F12를 통한 개발자 도구에서 Css Selector가 필요했습니다. https://wikidocs.net/85739 그중 CSS selector 에 대한 공부가 필요했고, 해당 태그의 문법에 대해서 설명해 드리겠습니다. 우선 문법을 쉽게 이해하기위해서https://rebornbb.tistory.com/entry/Springboot-Jsoup-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81%ED%95%98%EA%B8%B0 위 블로그에서 적은 css select..

카테고리 없음 2024.01.08