#JPA영속텍스트, #TIL
# @Controller vs @RestController 차이 및 동작방식
@Getter@Setter@RequiredArgsConstructor@ToString@EqualsAndHashCode 를 한꺼번에 설정해주는 어노테이션
\- @NoArgsConstructor파라미터가 없는 기본 생성자를 생성\- @AllArgsConstructor모든 필드 값을 파라미터로 받는 생성자를 만듦\- @RequiredArgsConstructorfinal이나 @NonNull인 필드 값만 파라미터로 받는 생성자
toString() 메소드를 자동으로 생성해준다. exclude : 특정 필드를 toString() 결과에서 제외시킨다.
Spring security
CustomSecurityFilter와 앞으로 MySelectShop에서 적용할 JwtAuthFilter의 차이점 미리 읽어보기 🔥 우리의 프로젝트에서는 토큰을 사용해서 인증/인가를 구현했습니다. 따라서 지금 실습환경과는 다르게 Filter 에서 ID, PWD가 아
텍스트이 글을 공부를 위해 스파르타코딩에서 가져온 본 글입니다.스프링 시큐리티 설정을 이용해 일반 사용자가 '관리자용 상품조회 API' 에 접속 시도 시 접속 불가 페이지가 뜨도록 구현프론트templates > forbidden.htmlUserController.jav
🍃Spring Security Documentation🍃참고 WebSecurityConfig (springboot 2.7이상)💜 스프링 시큐리티는 요청이 들어오면 Servlet Filter Chain을 자동으로 구성한 후 거치게 된다. Filter는 Client요
회원가입, 로그인 후 토큰이 발급되면 생성된 토큰을 Header에 담아 게시글 작성, 댓글 작성 등 할때마다 각 API Header Authorization에 수동으로 넣어줘야하는 수고스러움이 있었다. 그래서 매번 그럴 수는 없어 방법을 찾는데 구글에서는 토큰을 바디에
🍃Spring Security Documentation🍃참고 WebSecurityConfig (springboot 2.7이상)🍃 pring security - CSRF란?, http.csrf().disable() ?@Bean으로 등록된 webSecurityCust
application.propertiesh2-console 사용 및 resources 접근 허용 설정하기Custom Login Page 적용하기UserController.java
User.java\*\*UserRoleEnum.java\*\* UserRepository.java\*\* UserDetailsImpl.java\*\* UserDetailsServiceImpl.java\*\*UserDetailsImpl 은 유저와 유저네임, 패스워드도
💜회원 등록 시 '비밀번호'는 사용자가 입력한 문자 그대로 DB 에 등록하면 안 됩니다. '정보통신망법, 개인정보보호법' 에 의해 비밀번호 암호화(Encryption)가 의무입니다.양방향 암호 알고리즘암호화: 평문 → (암호화 알고리즘) → 암호문복호화: 암호문 →
스프링 시큐리티는 SecurityContext에 인증된 Authentication 객체를 넣어두고 현재 스레드 내에서 공유되도록 관리하고 있다. 세션을 사용하는 방식과 jwt 같은 토큰을 사용하는 방식에 따라서 시큐리티 설정과 처리방식이 매우 다양한 로직을 띄는데..간
API 접근 권한 제어 이해 👉 '일반 사용자'는 관리자 페이지에 접속이 인가되지 않아야 합니다!!회원 상세정보 (UserServiceImpl) 를 통해 "권한 (Authority)" 설정 가능권한을 1개 이상 설정 가능"권한 이름" 규칙 a. "ROLE\_"
401,403이 들어오면 commence랑 handle함수가 작동하여 결과를 objectMapperdmfh 스트링값으로 반환하여 Client에게 값을 보낸다. WebSecurityConfig CustomAccessDeniedHandle.javaCustomAuth
💜 스프링 시큐리티는 요청이 들어오면 Servlet Filter Chain을 자동으로 구성한 후 거치게 된다. Filter는 Client요청이 전달되기 전후의 URL패턴에 맞는 모든 요청에 필터링 역할을 한다. 예) CSRF, XSS 등 보안 검사를 통해 올바른 요청
이번 블로그 만들기 프로젝트에서 연관관계의 중요성을 알게 되어 복습 겸 추후 보기 위해 글을 남긴다. 블로그 User와 Post 의 관계를 보면 User 1명이 여러개의 post를 가질 수 있다. TABLE_POSTS 테이블에 존재하는 user_id 컬럼을 통해 POS
이번 블로그 만들기 프로젝트에서 연관관계의 중요성을 알게 되어 복습 겸 추후 보기 위해 글을 남긴다. 블로그 User와 Post 의 관계를 보면 User 1명이 여러개의 post를 가질 수 있다. TABLE_POSTS 테이블에 존재하는 user_id 컬럼을 통해 POS
백엔드 코드를 테스트 하기위해 포스트맨을 사용하게 되는데 , 그때마다 매번 회원가입을 하는 것 이 불편하다고 생각 되었는데 , 팀원에 의해 알게된 좋은 방법이 있어공부 겸 추후 필요시 참고하기 위해 정리했습니다. 두가지 방법이 있다. 간단히 CommandLineRunn
본 글을 @Query 에 대해 공부를 위해 참고에 적힌 출처에 의해 작성했습니다. 기본적으로 CRUD 메서드 제공만약 JpaRepository 가 제공하지 않는 기능들을 사용해야할 때는 어떻게 할까?예를 들어 사용자 PK가 아닌 이름으로 조회하고 싶을 때, 사용자 이
키워드 검색 등 커스텀하여 검색하려면 쿼리의 네임메서드만으로는 부족하여 @Query 어노테이션을 이용해 커스텀한 검색기능 구현을 했다.PostsRepository 파라미터 바인딩쿼리에 작성되는 특정 속성을 매개변수로 매핑하는 것을 말한다.이름 기준 바인딩은 =: 연산
Dto를 다 끌고 오지 말라고 했는데 대안은???? > Dto → . toEntity() 만약에 서비스로직에서 new Product(request, sellerId) 이면 new Product(request,sellerId) 를
유저서비스 - 프로덕트레포 ( 유저가 상위레벨로 보이는데, 유저서비스에서 프로덕트레포를 많이 쓴다면 유저서비스 말고프로덕트서비스에 하는게 좋다. )order 의 경우 orderrepository,productrepository,userrepository를 다부르게 되는
변경 전 변경 후변경 전변경 후
본 글은 공부를 위해 망나니개발자 에서 퍼온 글입니다 . Spring의 예외 처리 흐름 앞서 설명하였듯 다음과 같은 예외 처리기들은 스프링의 빈으로 등록되어 있고, 예외가 발생하면 순차적으로 다음의 Resolver들이 처리가능한지 판별한 후에 예외가 처리된다.Excep
Entity 클래스를 작성할 때 어노테이션을 많이 씁니다.아래와 같이 많이 쓰게 되는데요.이 어노테이션에서 문제 3가지가 보입니다. 이를 개선하기 위해 해결방법을 정리해봅니다.Setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의
클라이언트에게 보내줄 에러 코드를 정의해야 한다.에러 코드는 애플리케이션에서 전역적으로 사용되는 CommonErrorCode와 특정 도메인에 대해 구체적으로 내려가는 UserErrorCode로 나누고, 인터페이스를 이용해 추상화한다.먼저 다음과 같이 CommonErro
Entity 클래스를 작성할 때 어노테이션을 많이 씁니다.아래와 같이 많이 쓰게 되는데요.이 어노테이션에서 문제 3가지가 보입니다. 이를 개선하기 위해 해결방법을 정리해봅니다.Setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의
JUnit5, Hamcrest 및 Mockito JUnit5: Hamcrest: JUnit의 테스트 작성을 보다 문맥적으로 자연스럽고 우아하게 할 수 있도록 도와주는 Matcher 라이브러리입니다. JUnit5부터는 Hamcrest 관련 라이브러리가 포함되어 있지 않
본글을 학습을 위해 정리한것으로 혹시 틀린곳이나 수정할 부분이 있으면 말씀해주시면 감사하겠습니다. Repository : 특별한 기능을 제공하는 인터페이스가 아닌 마크 인터페이스입니다. 이 인터페이스가 Repository 용도로 사용될 것이라는 것을 알리는 용도로
본 글은 공부를 위해 참고에 적힌 블로그에서 퍼온 글입니다. 우선 예제로 사용될 Car 클래스를 살펴보자.Car 클래스에는 equals만 재정의해두었다.equals를 재정의했기 때문에 Car 객체의 name이 같은 car1, car2 객체는 논리적으로 같은 객채로 판단
본 글을 공부를 위해 참고자료를 참고하여 작성된 글입니다. 데이터베이스 테이블 사이에 관계는 외래 키가 기본 키에 포함되는지 여부에 따라 식별 관계와 비식별 관계로 구분한다.식별 관계부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계
Auditing 을 사용하면 엔티티를 누가 언제 생성/마지막 수정 했는지 자동으로 기록되게 할 수 있다.메인 애플리케이션 위에 @EnableJpaAuditing 추가엔티티 클래스 위에 @EntityListeners(AuditingEntityListener.class)
본 글을 개인공부를 위해 참고자료에서 가져온 글입니다.Hypermedia As The Engine of Application State 의 약자간단히 말해서 다음 요청을 위한 하이퍼링크가 제공되어야 한다!!!💁♀️ 얼만큼? 클라이언트 화면이 필요 없을 만큼!!서
업로드중.. 게시글 |---- 댓글 |---- 댓글 |---댓글 |-- 댓글 이런 구조로 댓글에 댓글을 달수 있도록 계층구조를 구현 시도했다. 시도 : commentResponse에 자
⁉️ readOnly=true 쓰면 변경이 안된다?? 호출해보기 호출하면 런타임입셉션 날것임 @Transactional쓰는이유?? 지연로딩 만약에 @ 트랜잭셔널 안쓰면 한줄씩 호출할때 DB connection을 열고 반납하고, 또 열고 반납함으로 리소스를 효율적으로
@Valid 에 유효하지 않은 값을 넣을 때 어떤 결과가 발생할까? 포스트맨으로 확인 결과 Status 400 에러와 must not be Blank라는 @valid디폴트 메시지가 출력 되었다. 하지만 must not be Blank 넣으면 아래와 같이 실패하게 된다.
assertThatThrownBy()로 작성한 코드에, 에러가 안나서 생긴 문제였다.assertThatThrownBy() 대신, assertThatCode() 를 사용하자.assertThatThrownBy()는 예외가 던져지지 않으면 바로 실패하고, 에러메세지도 나타나
프로그램 전역에서 사용되기 때문에 모든 스레드에서 static필드를 공유하게 됩니다. 이때 한 스레드에서 값을 변경할 경우 다른 모든 스레드에서 영향을 받을 수 있다. \-> 동시성 문제를 야기함전역적으로 관리되기 때문에 기본적으로 thread safety하지 않으며
인메모리 데이터 베이스로 디스크 검색보다 자료 접근이 훨씬 빠른 것이 큰 장점입니다. 단점은 매체가 휘발성이기 때문에 DB 서버가 꺼지면 모든 데이터가 유실된다는 단점이 있습니다.테스트 용으로 주로 사용한다.spring boot 에서스프링 부트에는 H2 데이터베이스가
querydsl단독으로 쓸 때는 아니고, spring data jpa와 같이 쓰는 경우이다.💻 개발 환경OS: Ubuntu20.04 (wsl)IDE: IntelliJJdk: openjdk 17버전Gradle언어: GroovyGradle 콘솔 사용법./gradlew c
엄밀히 이야기하면 객체에는 양방향 연관관계라는 것이 없습니다. 서로 다른 단방향 연관관계 2개를 애플리케이션 로직으로 잘 묶어서 양방향인 것처럼 보이게 할 뿐입니다. 반면에 데이터베이스 테이블은 외래 키 하나로 양쪽이 서로 조인할 수 있습니다. 따라서 테이블은 외래 키
1. 순수 jpa 에서 QueryDsl 활용 하기 1-1준비 1-1-1. JpaQueryFactory 를 직접 주입해주는 방법 MemberJpaRepository 장점 : 테스트 할때 EntityManager만 주입해주면된다. 1-1-2. JpaQueryFecto
첫 번째로 우리는 웹 어플리게이션에서의 “예외”에 대하여 다시 한 번 인지할 필요가 있다.웹 어플리케이션에서의 에러를 프론트엔드와 백엔드 모두가 잘 알지 못하면,서비스하는 환경에서 발생하는 에러에 대해서 제대로 대응 할 수 없다.두 번째는 우리는 aop를 배웠던 만큼,
[Spring]Data JPA, Auditing적용 및 Auditing 직접 구현하기
Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다.데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소입니다.Spring Data Redis는 Sprin
spring security 와 jwt 토큰을 이용한 로그인, 로그아웃 구현 후 첫 로그인시 발생 해당 오류는 ECDSA 알고리즘을 사용할 때, private key를 사용해야 한다는 것을 알려주는 오류이다. 그래서 다시 작성한 코드를 봤더니 HMAC hash 알고리
스프링부트 : 2.7java 11 인텔리 제이 email을 username(id) 로 설정함
외부 API 통신 구현 이 곳에서 미세조정값, 명령프롬프트 등 조절하여 테스팅이 가능하다. 원하는 결과가 나오면 view code버튼을 클릭하여 해당 결과에 대한 코드를 얻을 수 있다. 이를 프로젝트에 적용 시키면 자동응답기능이 가능해진다. gpt-3.5-turbo 모
파일업로드 다운로드를 공부하면서 짠 로직이다. 파일 내용 화면 출력FileInputStream 는 InputStream 를 상속받았으며, 파일로 부터 바이트로 입력받아, 바이트 단위로 출력할 수 있는 클래스이다. FileInputStream 를 생성할 수 있는 방법으로
참고https://wrkbr.tistory.com/542
"키:값" 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 포맷이다. 본래는 자바스크립트 언어로 부터 파생되어 자바스크립트 구문 형식을 따르지만 플랫폼과 언어 독립형 데이터 형식이다. 따라서 프로그래밍언어나 플랫폼에서 독립적이므
문자열이 특정구분자로 (이를 Delimeter 라 한다.)로 연결되어 있으면 2가지 방법으로 문자열을 쪼갠다.java.util.TokenizerString.split1 과 2의 차이는 1은 정규표현식, 2는 문자로 구분을 한다는 것이다. countTokens() : r
\[Spring] QueryDsl gradle 설정 (Spring boot 3.x , 2.x ) (1)\[Spring] 23.06.05 QueryDSL 란 (2)\[Spring] 23.06.07 QueryDsl 프로젝션과 결과 Dto로 반환하기 (3)\[Spring]
QueryDSL은 자바에서 사용하는 SQL 쿼리를 보다 편리하게 작성할 수 있도록 도와주는 라이브러리입니다. QueryDSL은 Fluent API를 제공하여 코드를 읽기 쉽고 유지보수하기 쉬운 형태로 쿼리를 작성할 수 있도록 합니다.쿼리 타입(Q타입) 생성: Query
장점 : 테스트 할때 EntityManager만 주입해주면된다. QueryDsl3Application 이것을 @RequiredArgsConstructor 을 사용하면 아래와 같이 코드가 줄어든다. 장점 : 코드가 줄어든다. 단점 : 별도의 스프링빈 등록이 필요하고, 테
Spring Data Jpa 는 Spring Data 에 존재하는 프로젝트 중 하나로 JpaRepository interface를 제공해 줍니다.JpaRepository 는 Spring Common에서 제공해주는 PagingAndSortingRepository, C
Spring MVC에서 스케줄러를 설정하는 방법은 크게 두 가지가 있습니다.XML 설정 파일을 이용한 방법애노테이션을 이용한 방법그 중 애노테이션을 이용한 방법으로 스케쥴링을 구현하였습니다. 시작 전 아래와 같이 폴더 및 파일 생성을 해줍니다. @Configuratio
프로그래밍에서는 실행 시(runtime) 발생할 수 있는 오류 2가지 오류(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예) 메모리 부족( OutOffMemoryError) , StackOverFlowError 등예외(exception)
프로그래밍 언어나 라이브러리에서 제공하는 예외 클래스 외에도 사용자가 필요에 따라 새로운 예외를 정의할 수 있습니다. 이를 사용자 정의 예외(CustomException)라고 합니다. 이 클래스는 특정한 예외 상황을 식별하고 처리하기 위해 개발자가 직접 정의합니다.일관
Spring은 기본적으로 jsp 등 동적인 페이지와는 달리 정적리소스인 (html, css, js, image) 에 대한 접근을 막습니다. 정적리소스를 사용하기 위해서는 dispatcher-servlet.xml에 <mvc:resources> 를 추가함으로써 접근을
🎈 1. 📍 1-1. 📍 1-2. 🎈 2. 📍 2-1. 📍 2-2. 로그 찍기 pom.xml 라이브러리 추가 src\main\resources폴더 아래에 log4jdbc.log4j2.properties 파일 생성후 아래 코드 추가하기 root-
자바 특수문자, 괄호, 백슬래시, 따옴표 출력하기 참고 자바 정규표현식 Pattern, Matcher