지연로딩을 기본값으로 설정하라는 대전제 어노테이션 @OneToOne, @ManyToOne 처럼 뒤가 One으로 끝나면 default가 EAGER (즉시) @OneToMany, @ManyToMany 처럼 뒤가 Many로 끝나면 default가 LAZY (지연) orphanRemoval 고아 객체 제거 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private List orderItems = new ArrayList(); Order가 여러 개의 OrderItem 을 들고 있는데, 지금 이 관계에서는 OrderItem이 자식에 가깝다. 그런데 만약 Order가 삭제가 되..

스프링 부트 쇼핑몰 프로젝트 with JPA 카트와 멤버 -> 상식에 기대어 One To One 관계 외래키 => 상대방의 키를 내가 들고 있다 = 외래키를 가지고 있다. => 상대방의 키가 내게 외래키 컨벤션은 정해져 있지만, 명시적으로 적어놓으면 좋다. 데이터베이스 세상에서는 key 값만 외래키로 들고있다면, 객체세상에서는 엔티티 자체를 가진다. (JPA의 관여) @Entity @Getter @Setter @Table(name = "cart_item") public class CartItem { @Id @GeneratedValue @Column(name = "cart_item_id") private Long id; @ManyToOne @JoinColumn(name = "cart_id") private..

https://school.programmers.co.kr/learn/courses/30/lessons/181927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요. 제한 사항 입출력 예 입출력 예 설명 아이디어 크지 않다는 게 같다는 것도 포함이다. 초기 코드 class Solution { public..
@Enumerated(EnumType.STRING) -> Enum을 처리하기 위한 어노테이션 그런데 기본값은 EnumType.ORDINAL => 0, 1로 이루어진 숫자. 이러면 값이 중간에 삭제되거나 순서가 바뀌거나 하면 사고난다. 왜 쿼리Dsl을 쓰는가? 쿼리dsl을 쓰면 쿼리문 중간에 오타 발생률이 현저히 낮아진다. 컴파일 시점에 에러를 잡아내기 때문에 그렇다. JPQL이라면 런타임에서나 발견될만한 에러를 컴파일 단위에서 끌어내려서 먼저 발견. ---------------------- 컴파일 에러와 런타임 에러는 모두 프로그램 개발과 실행 과정에서 발생할 수 있는 문제입니다. 그러나 둘은 서로 다른 종류의 오류이며, 발생하는 시점과 원인도 다릅니다. 컴파일 에러는 소스 코드를 컴파일하는 과정에서 발..
Controller 단에서 @Controller @RequiredArgsConstructor public class ItemController { @GetMapping(value = "/admin/item/new") public String itemForm() { return "/item/itemForm"; } 리턴타입이 String이고, 문자열 리턴이 있으면, 이건 view로 인식한다. templates 가 기본 탐색 경로인데, templates에서 /item 폴더 안에 있는 itemForm을 의미한다. 반환이라기보다는 "파일경로"라고 생각하는 게 더 옳은 판단. 만약 문자열 자체를 반환하고 싶다면? view 이름이 아닌... 그럴 때 메서드 위에 @ResponseBody를 붙인다. -> view이름으..

시큐리티 public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); // 인증에 대한 접근 권한을 판단. // 이제 이걸 쓸 거다. } } - 웹에서 들어온 요청을 가지고 인증 또는 인가에 관련된..

https://school.programmers.co.kr/learn/courses/30/lessons/181839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다. a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다. a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다. a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다. 두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 ..

https://school.programmers.co.kr/learn/courses/30/lessons/181919 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다. 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다. 계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 ..