2025년 계획도 세울 겸 2024년 마지막 회고를 작성해보려고 한다. 좀 늦었지만 이번에도 다이어리랑 캘린더나 보면서 써봐야겠다. 😊4분기(10~12월)3분기와 비슷하게 인프런 강의도 틈틈이 정리하고, 코테 챌린지도 신청해서 백준 문제를 풀어서 올렸다. 인프런에서 할인을 자주 해서 계속 사다 보니 김영한 로드맵 강의를 거의 다 모으게 됐다. 💰 그래도 강의 수로 따지면 절반 정도는 본 것 같아서 다행이다. 김영한 로드맵을 따라가는 방법은 2가지가 있다고 한다. 로드맵 순서대로 쭉 학습하는 것과 실전 강의부터 듣고 이론을 학습하는 것. 이론부터 학습한 뒤 실습을 진행하며 이해하는 게 맞다고 생각해서 로드맵을 따라가고 있었는데, UMC 6th 프로젝트 구현 내용을 정리하고 나서 생각이 바뀌었다. 예를 ..
4개월이나 지나서야 작성하는 UMC 6th 데모데이 후기 글이다. 😅 데모데이 후기만 적기엔 아쉬워서 UMC 6th ERICA 지원부터 활동 과정, 프로젝트 시 주의사항도 함께 적어보려고 한다. UMC 6th ERICA 지원 및 활동 과정지원이번 연도 1~2월에 HTML & CSS & JS 찍먹도 해보고, 창업 부트캠프도 다녀오고 이것저것 해보다가 Java 백엔드 개발자로 진로를 결정했다. 전공에서 웹 개발 관련으로 배운 게 그닥 없어서 2월엔 Spring Boot 강의를 듣고, Java 기초도 다시 정리하면서 공부했던 것 같다. 3월엔 연합 IT 동아리에 들어가려고 멋쟁이사자처럼과 UMC 중에 고민하고 있었는데, 멋사는 백엔드가 Django고, UMC는 Spring Boot & Node.js라 UMC..
저번 글에 이어서 객체지향 쿼리 언어인 JPQL의 문법을 학습한다. [자바 ORM 표준 JPA 프로그래밍 - 기본편] (9) 객체지향 쿼리 언어1 - 기본 문법1. 객체지향 쿼리 언어 소개JPA는 다양한 쿼리 방법을 지원한다. DB에서 특정 조건으로 데이터를 뽑으려면 결국 SQL이 실행돼야 한다. 이전 섹션들에서 JPA가 제공한 em.find() 같은 것 말고도, 검색 조dev-meung.tistory.com 1. JPQL(Java Persistence Query Language)경로 표현식a. 개념경로 표현식은 .(점)을 찍어서 객체 그래프를 탐색하는 것을 말한다. 아래처럼 사용해서 엔티티의 필드를 읽어오거나 엔티티와 연관된 엔티티 필드를 읽어올 수 있다.SELECT m.username # -> 상태 ..
1. 객체지향 쿼리 언어 소개JPA는 다양한 쿼리 방법을 지원한다. DB에서 특정 조건으로 데이터를 뽑으려면 결국 SQL이 실행돼야 한다. 이전 섹션들에서 JPA가 제공한 em.find() 같은 것 말고도, 검색 조건 같은 걸 적용하는 복잡한 쿼리를 어떻게든 짤 수 있어야 한다.- JPQL- JPA Criteria- QueryDSL- 네이티브 SQL- JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용실무에선 대부분 JPQL로 해결할 수 있지만 가끔가다 표준 문법으로 처리할 수 없는 경우가 생기면 다른 쿼리 방법을 사용해야 한다. 아래에서 하나씩 알아보자. JPQL가장 단순한 조회 방법은 지금까지 해온 EntityManager를 통해 find()로 조회하거나, 객체 ..
1. 기본값 타입JPA의 데이터 타입 분류JPA는 최상위 레벨에서 보면 데이터를 크게 두 분류(엔티티 타입, 값 타입)로 나눈다.엔티티 타입@Entity로 정의하는 객체를 말한다.데이터가 변해도 식별자로 지속해서 추적할 수 있다.ex. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식할 수 있다.값 타입int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다.식별자가 없고 값만 존재하므로 변경할 경우 추적할 수 없다.ex. 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체된다. 값 타입은 크게 세 가지(기본값 타입, 임베디드 타입, 컬렉션 값 타입)로 구분한다.기본값 타입자바 기본 타입(int, double)래퍼 class(Integer, Long)..
[JWT를 활용한 로그아웃, 회원탈퇴, 회원 정보 조회 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 로그아웃 및 회원탈퇴 API 구현Access Token과 Refresh Token은 각각 유효 시간이 정해져 있다. [로그아웃 및 회원탈퇴 API]는 유효 시간이 남은 Access Token을 통해 호출할 수 있고, API가 호출되면 해당 사용자의 Access Token과 Refresh Token을 모두 사용할 수 없도록 만들어야 한다.이전 글을 보면 Refresh Token은 Access Token을 재발급할 때만 사용한다. 입력받은 Refres..
[JWT를 활용한 토큰 재발급 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 Refresh Token 생성 및 Redis에 저장아래 글에서 보안상의 이유로 JWT를 Access Token과 Refresh Token으로 나눠서 사용한다고 했다. [팀 프로젝트] 쿠키(Cookie)와 세션(Session), 토큰(Token) 차이 & JWT(JSON Web Token)JWT를 활용한 인증 및 인가(로그인, 로그아웃, 회원탈퇴) 기능 구현 방법에 대해 작성하기 전, 기본 개념부터 정리해두려고 한다. 사실 완벽하게 이해하고 구현했다기보단 최소한의 필요한 게..
[JWT를 활용한 일반 로그인 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 로그인 API 구현하기지금까지 토큰 발급부터 토큰 인증 처리까지 모든 기능을 구현했다. 이제 비즈니스 로직을 완성해 보자. MemberRequestDTO, MemberResponseDTOa. MemberRequestDTO.MemberLoginDTO클라이언트에게 받을 정보의 틀이 되는 class로, 이메일과 비밀번호를 입력받는다.public class MemberRequestDTO { ... @Getter public static class M..
1. 프록시먼저, 프록시를 언제 사용해야 하는지 알아보자. 아래에서 Member를 조회할 때 Team도 함께 조회해야 할까? 회원 이름과 소속 팀 이름을 함께 출력하려면 Member를 조회할 때 Team도 같이 조회하면 좋다. 회원 이름만 출력하면 된다면 Member만 조회하는 게 낫다. 따라서 사용하지 않는다면, 연관관계가 걸려있다고 해도 같이 조회하지 않는 게 성능상으로 더 효율적이다.JPA는 이 문제를 지연 로딩이나 프록시를 통해 해결한다. 프록시보단 지연 로딩을 주로 사용하지만, 프록시 구조를 알아둬야 즉시 로딩과 지연 로딩에 대해 깊이 이해할 수 있다.// 회원과 팀 함께 출력public void printUserAndTeam(String memberId) { Member member = ..
1. 상속관계 매핑대부분의 RDB는 객체와 달리 상속 관계를 지원하지 않는다. 대신 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다. 따라서 상속 관계를 매핑하려면, 객체의 상속 구조와 DB의 슈퍼타입 & 서브타입 관계를 매핑해야 한다. 슈퍼타입 & 서브타입 논리 모델링을 실제 물리 모델로 구현하는 방법은 아래 3가지로 나눌 수 있다. 전략을 바꾸려면 코드에 손댈 필요 없이 애노테이션에서 전략만 수정하면 된다. DB 입장에서 어떤 방법으로 구현하더라도 JPA에서 다 매핑할 수 있다.조인 전략 = 각각을 테이블로 변환한다.단일 테이블 전략 = 하나의 통합된 테이블로 변환한다.구현 클래스마다 테이블 전략 = 서브타입을 테이블로 변환한다.애노테이션전략 / 기본값@Inheritance(stra..