본문 바로가기

분류 전체보기51

[JPA] 프록시와 지연로딩 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 필요한 연관관계만 조회해 오는 것이 효과적이다 JPA를 사용하면 객체 그래프를 통해 연관관계를 탐색할 수 있다 엔티티들은 데이터베이스에 저장되어 있다 한 객체 조회 시 연관되어 있는 엔티티들을 모두 조회하는 것 보다는 필요한 연관관계만 조회해 오는 것이 좋다 이를 위해 JPA는 지연로딩 방식을 지원, 하이버네이트(Hibernate)는 프록시 객체를 통해 지연 로딩을 구현한다 다음과 같은 객체 관계를 가질 때, Member를 조회할 시 Team도 함께 조회해야할까? 단순히 회원 이름만 출력한다면 Team까지 조회 쿼리를 날릴 필요가 없다. 이를 위해 지연로딩을 사용한다. JPA에서의 프록시 em.find() 와 .. 2023. 5. 19.
Spring boot 3.x 에서 Java 20 실행 오류, IntelliJ에서 자바 버전 변경 스프링 부트 3.0은 Java17 이상을 사용해야한다. 자바 버전 문제로 고생을 겪고 싶지 않았던 나는 꿋꿋이 Java11을 써왔지만... 새로운 것도 써보긴 해야지! 싶은 마음에 스프링 부트 3.0.6에 Java20 을 사용해본다. 스프링 부트 3.0 주의점 Java 17 이상을 사용해야 한다 javax 패키지 이름을 jakarta로 변경해야 한다 오라클과 자바 라이센스 문제로 모든 javax 패키지를 jakarta로 변경하기로 함 ex) javax.validation -> jakarta.validation 1. 다운받은 JDK를 추가한다 File -> Project Structure -> Platform Settings -> SDKs 2. 프로젝트가 사용할 JDK를 설정한다 File -> Projec.. 2023. 5. 18.
JWT(Json Web Token)를 이용한 로그인 인증에 대하여 졸업프로젝트 시 로그인 구현에 있어서 어려움을 겪었다. 초기엔 쿠키-세션 방식으로 구현하였으나 프론트와의 상의 후 JWT로 바꾸기로 했었고 이 과정에서 JWT와 Spring Security를 조금 공부했었다. 당시 정리한 내용에 살을 붙혀 포스팅 해본다. JWT(Json Web Token) 란? JWT(Json Web Token)은 일반적으로 클라이언트와 서버 통신 시 권한 인가(Authorization)을 위해 사용하는 토큰이다. 토큰 이란 간단히 말하면 로그인 이후 서버가 만들어서 사용자에게 넘겨주는 문자열이다. 이 문자열은 사용자 정보가 암호화 되어있고 이 토큰을 이용하여 인증된 사용자인지 서버가 판단한다. JWT 구조 JWT는 세 파트로 나누어지며, 각 파트는 점로 구분하여 xxxxx.yyyyy... 2023. 4. 5.
[프로그래머스/SQL] 오프라인/온라인 판매 데이터 통합하기 https://school.programmers.co.kr/learn/courses/30/lessons/131537 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3 UNION ALL SELECT DATE_FORMAT(SALES_DATE, "%Y-%m-%d") A.. 2023. 3. 24.
우아한 테크코스 프리코스 회고 작년 10월, 우아한 테크코스 5기 백엔드 과정에 지원을 했다. 1400명의 백엔드 지원자와 함께한 프리코스 과정을 지나 약 200명의 최종 코딩테스트까지 갔지만 아쉽게 떨어져 본 코스 과정을 밟지는 못했다. 프리코스 과정에서도 배운 것이 많았기에 늦게나마 기억을 저장하고자 기록한다. 1주차 onboarding https://github.com/MinjeongKong/java-onboarding/tree/MinjeongKong GitHub - MinjeongKong/java-onboarding: 온보딩 미션을 진행하는 저장소 온보딩 미션을 진행하는 저장소. Contribute to MinjeongKong/java-onboarding development by creating an account on Gi.. 2023. 3. 23.
오브젝트 (역할, 책임, 협력/캡슐화와 응집도에 대하여) 모든 소프트웨어 모듈에는 세 가지 목적이 있다. 첫 번째 목적은 실행 중에 제대로 동작하는 것이다. 두 번째 목적은 변경을 위해 존재하는 것이다. 세번째 목적은 코드를 읽는 사람과 의사소통하는 것이다. — 로버트 마틴, 변경에 취약한 코드란 하나의 클래스가 다른 클래스에 대한 정보(인스턴스, 메소드)를 지나치게 직접 접근할 경우 변경에 취약한 코드가 된다. 지나치게 세부적인 사실에 의존해서 동작할 경우 이러한 세부적인 사실 중 한 가지라도 바뀌면 해당 클래스뿐만 아니라 이 클래스에 의존하는 클래스들도 함께 변경해야한다. 이것은 객체 사이의 의존성과 관련된 문제로, 의존성은 변경에 대한 영향을 암시한다. 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것으로, 애플리케이션의 기능을 구현.. 2023. 3. 23.