쇼핑몰 프로젝트에서 로그인 기능을 구현하려는데 Session과 JWT 방법 중 무엇을 사용해야 하는가? 로그인 인증 기능이 왜 필요한가? -- 쇼핑몰에서 내 주문내역을 보고싶다면 로그인해서 내가 누구인지 알려주고 그 다음에 나의 주문내역을 확인해야한다. 로그인 페이지로 이동 아이디와 비밀번호를 입력하여 로그인 내 주문내역 페이지로 이동 주문내역 확인 이때 로그인을 계속 인증해주는 기능이 없다면 2번에서 로그인을 하고 다른 페이지로 이동하는 순간 내가 로그인을 했던 정보는 없어지게 된다. 그렇게 되면 4번에서 다시 로그인을 해줘서 나라는 것을 알려주고 나의 주문내역을 확인해야한다. 물론 내부적으로 로그인을 한 순간부터 다른 페이지로 이동할 때마다 로그인 정보를 함께 넘겨주는 코드를 작성하면 로그인 했던 정..
전체 글

데이터를 새로 추가하거나 수정했을 때 당시의 날짜와 누가 했는지도 같이 데이터에 저장하려면 어떻게 해야 할까? Auditing 엔티티를 생성하거나 수정을 할 때 해당 시간과 수행한 사람을 찾기 위해서 사용한다. (생성일, 수정일, 생성자, 수정자) 스프링 데이터 JPA에서 제공하는 Auditing 1. 처음 스프링 부트를 설정해주는 클래스에 @EnableJpaAuditing 어노테이션을 적용시켜준다. @EnableJpaAuditing @SpringBootApplication public class ShoppingApplication { public static void main(String[] arg) { SpringApplication.run(ShoppingApplication.class, args);..
클라이언트에게 데이터만 반환하는 것이 아니라상태 코드도 함께 반환하고 싶을 때 어떻게 할까? 대표적인 방법 두 가지 반환 타입으로 ResponseEntity를 사용하기@RestControllerAdvice와 @ControllerAdvice 어노테이션을 사용하기 ResponseEntity HTTP 응답을 나타내는 클래스(REST API의 응답을 위해 사용하는 클래스)로클라이언트에게 응답의 상태코드, 헤더, 바디(body)를 포함하여 반환한다. 각 응답할 데이터는 status() - 상태코드 작성 공간header() - 헤더 작성 공간body() - 바디 작성 공간를 사용해서 상태코드, 헤더, 바디를 반환한다. status() 안에 상태 코드를 작..

스프링 부트 3에서 QueryDSL을 사용하려면 어떤 설정을 해줘야 할까? QueryDSL 라이브러리 추가하기 보통 스프링 부트 파일을 만드는 스타터스프링(https://start.spring.io/) 사이트에서 Dependencies에서 사용할 라이브러리들을 추가해주지만 QueryDSL은 지원해주지 않는다. 그렇다고 스프링 부트에서 QueryDSL에 대한 버전관리를 안해주는 것은 아니다. 스프링 부트에서 QueryDSL에 대한 버전관리는 해주는데 스프링 부트 스타터에서는 아직 없어서 별도로 직접 추가해줘야 한다. build.gradle 파일에서 dependencies에 QueryDSL 라이브러리를 추가해준다. implementation 'com.querydsl:querydsl-jpa:5.0.0:jaka..

QueryDSL이 무엇인가? QueryDSL이란? 엔티티 클래스를 기반으로 쿼리를 생성하는 도구이다. Entity 클래스를 가지고 동일한 클래스의 Q타입 클래스를 만들어서 해당 Entity를 가지고 QueryDSL을 작성할 수 있게 만든다. QueryDSL을 왜 사용하는가? 쿼리 작성을 자바 코드로 작성하기 때문에 문법 오류 또는 오타가 났을 때 컴파일 시점에서 발견할 수 있고 복잡했던 쿼리나 동적인 쿼리 작성을 편리하게 구현할 수 있다. 자바 코드로 작성하긴 하지만 문법이 SQL과 비슷하기 때문에 비교적 쉽게 학습이 가능하다. JPQL로 작성한 쿼리와 QueryDSL로 작성한 쿼리 비교 Member에서 name이 nijy인 회원을 조회 JPQL public void jpql() { String name..

Git 설정에 대한 명령어는 무엇이 있을까? Git 설정할 때 설정 범위 지정 방법 Git을 설정할 때 global 설정과 local 설정이 있다. global 설정 : 전역 설정으로 Git의 모든 곳(범위)에 적용하는 설정local 설정 : 로컬 설정으로 Git에서 특정 범위에서만 적용하는 설정이다. 설정할 때 global과 local을 지정해 주는 방법 global 설정을 해줄 때에는 config 뒤에 --global을 함께 작성해 주면 된다. local 설정을 해줄 때에는 그냥 --global을 작성하지 않으면 된다. (기본 설정 범위값이 local) 예시git config --global user.name nijy해당 컴퓨터(git)에서 모든 user.name을 nij..

특정 branch에서 과거에 커밋했던 시점으로되돌아가고 싶다면 어떻게 해야 할까? Git에서 HEAD란? 특정 브랜치의 가장 최신 커밋을 가리킨다. 위의 그림을 보면 4개의 브랜치들이 있는데각 끝 부분(브랜치 이름이 작성되어 있는 곳)이 각 브랜치의 HEAD부분이다. git switch (브랜치 명) switch 명령어로 브랜치를 이동할 때 해당 브랜치의 HEAD 부분으로 이동하게 된다. 특정 브랜치 내부에서 과거의 시점으로 이동하기 --브랜치에서 커밋 내역들이 있을 텐데 이동하고 싶은 시점으로 이동할 수 있다. reset과 revert와 다르게 현재 상태를 지우고 과거로 가는 것이 아니라현재 하던 거는 그대로 내버려두고 잠깐 이전의 커밋 시점으로 이동하는 것으로과거 커밋 시점으로 돌아가..

원격 저장소에 있는 내용들을 로컬 저장소에 어떻게 가져올까? 등록된 원격 저장소에서 변경된 코드를 로컬 저장소로 가져와서 적용하기 보통 하나의 원격 저장소를 여러 사람들이 같이 사용(협업)하는 경우에 이용한다. 이미 등록된 원격 저장소에서 누군가 해당 원격 저장소에 업로드를 하여로컬 저장소로 변경 사항을 가져와서 적용시켜줄 때 사용하는 명령어로 fetch와 pull이 있다. fetch 원격 저장소의 최신 커밋을 로컬 저장소로 가져오기만 하는 것으로 해당 커밋을 가져올 때 가상의 브랜치를 만들어서 해당 브랜치에 가져와서 저장한다. git fetch (원격 저장소 이름) (원격 저장소 브랜치 이름)git fetch origin main 해당 원격 저장소에서 해당 브랜치가 최신 커밋된 상황..