backend/springboot 8

지연 로딩과 조회 성능 최적화

간단한 주문 조회 V1: 엔티티를 직접 노출 OrderSimpleApiController package jpabook.jpashop.api; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.repository.*; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotatio..

backend/springboot 2024.04.19

Session을 사용한 로그인 구현

세션(Session) 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술 쿠키는 사용자의 정보를 사용자 컴퓨터 메모리에 저장하지만 세션은 서버측에 저장 세션을 사용한 로그인 구현 개념 로그인 성공 시 세션을 하나 생성 이 세션의 Key 값은 UUID(중복되지 않는 랜덤값, 예측 불가)로 설정 Value 값에 사용자 정보 넣음 생성한 세션을 서버측 세션 저장소에 보관 세션의 Key값(UUID)을 쿠키를 통해 사용자에게 전달 사용자는 로그인 성공 이후 다른 요청을 할 때마다 이 쿠키를 서버에 같이 보내줌 서버 측에서 사용자에게 쿠키를 통해 UUID 값을 받는다면 전달받은 UUID를 Key 값으로 갖는 세션을 서버측 세션 저장소에서 검색 세션 저장소에..

backend/springboot 2024.04.16

Cookie를 사용한 로그인 구현

쿠키(Cookie) 사용자가 웹사이트 접속시 사용자의 개인 장치에 다운로드되고 브라우저에 저장되는 작은 텍스트 파일 웹사이트는 이 쿠키를 사용해 사용자의 장치 인식하고 일부 데이터 저장하기도 함 쿠키를 사용한 로그인 개념 쿠키를 사용하여 로그인 구현 기능 가능 로그인 성공 시 서버가 쿠키에 사용자 정보 넣어줌 클라이언트 측에서는 다음 요청을 할 때마다 이 쿠키를 서버에 같이 보내줌 서버에서는 이 쿠키를 확인해 로그인했는지와 유저 정보, 권한 등 확인 가능 쿠키 생성 방법 new Cookie() 메서드 통해 쿠키 생성 쿠키 생성 시 Key, Value 값 넣어줄 수 있음 Cookie cookie = new Cookie("userId", String.valueOf(user.getId())); 방금 만든 쿠키..

backend/springboot 2024.04.16

로그인 구현 방법 세팅

로그인 예제 기능 정리 1. 회원가입 loginId, password, passwordCheck, nickname 입력 loginId, nickname 중복 회원가입 불가 password와 passwordCheck가 다르면 회원가입 불가 Thymeleaf Validation을 사용하여 에러 메세지 출력 (Field Error) 회원가입 성공 시 권한은 USER로 설정 2. 로그인 loginId나 password가 틀리면 로그인 불가 Thymleaf Validation을 사용하여 에러 메세지 출력 (Global Error) 3. 로그아웃 4. 유저 정보 출력(인증) 로그인한 유저의 loginId, nickname, role(권한) 출력 로그인하지 않은 유저가 접근 시 로그인 페이지로 이동 5. 관리자 페이..

backend/springboot 2024.04.16

99클럽 코테 스터디 7일차 TIL - springboot 변경 감지와 병합

영속성 컨텍스트 엔티티를 관리하는 논리적인 개념 어플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 같은 역할 엔티티를 메모리에 저장, 엔티티의 생명주기 관리, 엔티티와 DB 간의 작업 캐시해서 처리 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티 (DB에 한 번 갔다와서 식별자 존재) 수정하는 방법 - 변경 감지 기능, 병합(merge) 사용 변경 감지 기능 사용 @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다. findItem.setPrice(itemParam.get..

backend/springboot 2024.04.07

도메인 모델 패턴, 트랜잭션 스트립트 패턴

도메인 모델 패턴 도메인을 모든 사람이 이해하고 공유 가능하도록 단순화시킨 모델 DDD(Domain Driven Design) 개발 방식을 따르는 패턴 서비스 계층에 비즈니스 로직이 거의 없고 엔티티 내부에 비즈니스 로직을 구현해 엔티티의 객체지향 활용 엔티티 안 비즈니스 로직이 구현되어 있어 DTO와 엔티티의 차이를 쉽게 파악 가능하지만 각 객체들의 관계를 정립해야 하며 DB 사이 매핑 관계를 더 고려해야함 도메인 모델 패턴을 적용한 코드 (김영한 실전 스프링부트와 JPA와 활용1 중 일부) @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order {..

backend/springboot 2024.04.04

99클럽 코테 스터디 1일차 TIL - springboot 의존성 주입

의존성 주입 스프링 컨테이너에서 객체 Bean을 먼저 생성해두고 생성한 객체를 지정한 객체에 주입하는 방식 1. 필드 주입 public class MemberService { @Autowired MemberRepository memberRepository; ... } 외부에서 접근 불가능 필드의 객체 수정 불가능 -> 권장되지 않음 (왠만하면 사용하지 말자) 2. 생성자 주입 public class MemberService { private final MemberRepository memberRepository; @Autowired public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepositor..

backend/springboot 2024.04.01