분류 전체보기
-
[돌다리 두들기기] Builder 패턴개발/JPA 2024. 4. 24. 14:43
JPA 엔티티에서 롬복의 @Builder 패턴을 사용할 경우 @AllAgrsConstructor와 @NoArgsContructor를 붙여야 한다. JPA 스펙에서 엔티티 클래스는 기본 생성자를 가져야 하며, @Builder에서 코드를 만들 때 필드를 받아서 객체를 생성하는 생성자를 필요로 한다. @Builder 패턴에서 생성되는 코드는 다음과 같다. 롬복의 코드와 똑같진 않지만 기본 흐름은 다르지 않다. public class Person { private String name; private int age; public static class PersonBuilder { private String name; private int age; ..
-
정리된 인증 과정개발/etc 2024. 4. 16. 16:42
별도의 인증 서버는 두지 않는다프론트엔드를 Next.js로만 구현하려고 했고 이는 키클록 인가 서버 혹은 스프링으로 인가 서버를 두게 되면 페이지를 Next.js로 개발하는 것에 한계가 있다. 키클록 인가 서버는 자체 페이지를 쓰거나 프리마커로 커스텀 하는 방식을 써야 하며, 스프링 인가 서버는 프레임워크에서 로그인 페이지를 렌더링해야 한다. 타임리프를 쓰면 되긴 하지만 이번 프로젝트에서는 직접 토큰을 다뤄보는 연습을 해보자.리소스 서버에서 토큰을 발행한다JJWT 라이브러리를 사용해서 토큰을 발행하고 클레임을 추출한다토큰 정책액세스 토큰의 만료 기간을 짧게 가져가고 리프레시 토큰의 만료 기간을 길게 가져가는 방식액세스 토큰이 유출됐을 때의 대안인데 리프레시 토큰이 유출되면 관리자가 무효..
-
[Window] 데이터베이스 접속 후 새로운 데이터베이스와 새로운 유저와 새로운 권한DB/PostgreSQL 2024. 4. 8. 15:23
터미널로 접속할 때 psql만 입력하면 컴퓨터의 사용자 아이디로해 해서 로그인 안내가 출력된다. PS C:\Users\taetae> psql taetae 사용자의 암호: 이 암호는 기억이 안 나서 기존에 존재하는 postgres 계정으로 접속했다. 이를 위해서 -U(대문자)를 붙이면 된다. (참고로 맥 기준으로 설치 후 최초 접속인 경우에 psql postgres로 비밀번호 없이 접속할 수 있었다. 윈도우는 기억이 안 남) PS C:\Users\taetae> psql -U postgres postgres 사용자의 암호: 접속을 완료하면 버전이 출력되고 명령 프롬프트가 뜬다. 다음은 14.8 버전 기준으로 유저, 데이터베이스 생성 및 권한 부여 명령어다. 1. 새로운 유저를 만든다(공식문서) postgre..
-
[JPA][Archiving] in_clause_parameter_padding 옵션개발/JPA 2024. 3. 3. 12:38
이 글은 nhn cloud 기술 블로그에 올라온 글을 그대로 가져왔습니다. (원본 링크) Java ORM 기술의 표준 명세인 JPA가 소개된 지 참 오래되었지만, 국내 현실상 대규모 시스템에서 적용되어 사용된 운영 경험이 충분히 쌓이지 않고 공유되지도 않는 것 같습니다. 대부분 JPA를 사용한다고 하면 Hibernate를 구현체로 사용하게 됩니다. 제가 담당하는 서비스 역시 Spring Data JPA를 활용하고 있고 JPA 구현체로 Hibernate를 사용하고 있습니다. 개발과 서비스를 운영하면서 겪은 일 중에 SQL의 in 절과 관련해서 발생한 문제를 해결하면서 알게 된 옵션과 그로 인한 효과를 소개해 드리고자 합니다. 증상 운영 중인 서버가 이유 없이 응답이 느려집니다. 그리고 가비지 컬렉션을 너무..
-
Update개발/JPA 2024. 3. 3. 12:35
특정 필드만 업데이트 하려는 목적으로 코드를 작성하지만 JPA가 작성하는 query를 보면 해당 레코드 전체를 업데이트 한다. 이는 JPA가 어플리케이션을 로딩할 시점에 PreparedStatement로 해당 엔티티의 update query를 미리 만들어둔다고(참고 인프런 김영한님 답변). 해당 내용은 공식 문서에서 찾게 되면 해당 내용를 업데이트 하겠다. 어쨌든 오동작이나 최적화 문제는 아니라는 것을 알고 있자. 굳이 필요하면 @DynamicUpdate를 하이버네이트가 변경된 필드에 대해서는 업데이트하도록 할 수 있다. 아직 개발을 오래 한 건 아니지만 '굳이' 해야 되는 일은 대부분 안 해도 되는 거더라.
-
[Security6] Factory method 'securityFilterChain' threw exception with message: This object has already been built개발/Spring Security 2024. 2. 26. 01:52
시큐리티에서는 생전 처음 보는 버그가 종종 나와 미소 짓게 한다. 5버전과 달리 6버전에서는 설정 클래스가 상속하는 클래스가 없고 메소드 빈 방식으로 설정 작업이 이뤄지기 때문에Authentication Manager(이하 매니저)를 얻는 방식이 기존과 다르다. 여기서 소개할 방법은 사용자가 정의한 Authentication Provider(이하 프로바이더)를 추가하기 용이한 방법이다. 이 설정에서는 필터, 프로바이더를 새로 정의해서 등록한다. @Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.csrf(AbstractHttpConfigurer::disable); http.addFilterBefor..
-
[IntelliJ] 타임리프 및 클래스 변경 핫 리로드 적용하기개발/etc 2024. 2. 24. 01:13
application.yml spring thymeleaf: cache: false devtools: livereload: enabled: true restart: enabled: true 디펜던시에 devtools도 꼭 추가해주자. IntelliJ 메뉴 상단 Run -> Edit Configurations Modify optinos를 클릭해서 On 'Update' action과 On frame deactivation 에서 Update classes and resources를 해주면 된다. 새로고침 하면 타임리프와 클래스의 변경사항을 감지해서 서버 리스타트 혹은 리로드를 한다.