목록Language & Framework/Spring (27)
고딩왕 코범석
안녕하세요! 이번 포스팅은 JPA에서 OneToMany 양방향 관계에서 자식 객체를 부모 객체에서 다뤘을 때 겪었던 이슈를 포스팅해보고자 합니다. 우선, 준비할 엔티티 객체는 다음과 같습니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) @Builder public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "PRODUCT_ID") private Long id; @Builder.Default @OneToMany( mappedBy..
안녕하세요! 이번 포스팅은 제가 jasypt를 사용하고 겪은 이슈에 대해 공유드리려 합니다. Jasypt? Jasypt는 홈페이지에서 다음과 같이 설명합니다. Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works. 직역해보면 개발자들의 프로젝트를 기본적으로 암호화 해줄수있게 해주고 보안적인 지식이 깊지 않더라도 쉽게 적용할 수 있는 자바 라이브러리 라고 합니다. 사용 방법 우선 build.gradle에..
안녕하세요! 이번 포스팅에서는 AOP에 대해 포스팅해보려고 합니다. 김영한 님의 스프링 핵심 원리 - 고급편을 참조하여 정리했습니다! 🙆🏻♂️ Aspect(관점)와 AOP Aspect는 부가 기능과 부가 기능을 어디에 적용할지 정의한 것입니다. 어드바이저(포인트컷 + 어드바이스)도 개념상 하나의 Aspect라 볼 수 있습니다. 관점이라는 말 대로 애플리케이션을 바라보는 관점을 하나의 기능에서 횡단 관심사 관점으로 달리 보는 것이라고 할 수 있습니다. 메서드에 공통으로 들어가는 로직(트랜잭션 호출, 로깅 등등..)이라고 이해하면 될 것 같습니다. 이렇게 Aspect를 사용한 프로그래밍 방식을 AOP(Aspect-Oriented-Programming)이라고 합니다. 🖥 AOP 적용 방식 1. 컴파일 시점 ..
안녕하세요! 이번 시간에는 빈 후처리기에 대해 포스팅해보겠습니다. 해당 포스팅은 스프링 핵심 원리 - 고급편 을 정리한 포스팅입니다. 우선, 저는 빈 후처리기를 강의를 통해 처음 들었습니다. 프록시 객체를 생성하면서 문득 들었던 생각이 있었는데, 그럼 Component Scan 대상 객체의 프록시를 Configuration 없이 스프링 컨테이너에 등록할 수는 없을까? 였습니다. 🤔 빈 후처리기??? 스프링은 빈으로 등록된 객체를 생성하고, 컨테이너에 등록합니다. 빈 후처리기는 객체를 빈으로 등록하기 전에 조작하는 객체 이며, 다음과 같은 라이프사이클을 가집니다. 생성 : 스프링 빈 대상이 되는 객체를 생성 전달 : 생성된 객체를 빈 저장소에 등록하기 직전, 빈 후처리기로 전달 후처리 작업 : 전달된 스프..
안녕하세요! 이번 포스팅에서는 1편에 이어 로그인, 로그아웃, 토큰 재발급, 권한 체크를 위한 간단한 회원 정보 조회를 구현해보겠습니다. 보다 자세한 코드는 제 깃허브 를 참조해주세요! JWT 기반으로 요청 및 토큰이 만료되었을 경우에 대한 플로우를 그림으로 표현해보았습니다. 이 과정에 필요한 기능은 다음과 같습니다. 로그인 (accessToken을 발급 받고, refreshToken을 Redis에 저장하기 위해) 로그아웃 (accessToken의 남은 유효기간 동안 redis에 logoutAccessToken을 저장하여 해당 토큰으로 접근 하는 것을 금지시키기) 토큰 재발급 (토큰은 유효 기간이 있기 때문에, 기간이 지났을 경우를 위해 redis에 저장한 refreshToken의 남은 만료 기간에 따라..
안녕하세요! 이번 시간에는 Spring Security와 Redis를 활용하여 JWT 기반 로그인 기능을 구현해보겠습니다. 저는 예전에 Spring Security로 JWT만 주는 부분까지 구현한 적이 있습니다. 하지만 Redis를 활용하여 Refresh 토큰을 주는 기능과 로그아웃을 구현하지 못했습니다. 이번에 소마에서 저와 같이 프로젝트한 백엔드 동료가 Redis를 활용해 refresh, logout까지 구현을 해서 시큐리티 복습을 겸해 포스팅을 진행하겠습니다. 보다 자세한 코드는 제 깃허브 를 참조해주세요! 우선, 이번 포스팅에서 개발할 기능은 다음과 같습니다. 설정과 기본 프로젝트 셋팅 회원가입 설정과 기본 프로젝트 셋팅 build.gradle plugins { id 'org.springf..
안녕하세요! 이번 포스팅에서는 Querydsl로 하나의 부모 객체에 있는 여러 자식들을 DTO로 받아보는 시간을 가져보겠습니다. 우선, 예제에 사용될 엔티티 클래스들과 구조를 살펴보겠습니다. 그림으로 먼저 확인한 다음 엔티티 코드를 보겠습니다. 하나의 회원은 여러 주소를 가질 수 있고, 여러 게시글을 가질 수 있는 구조입니다. 이 구조를 바탕으로 전체 회원들의 주소와 게시글들을 DTO로 가져오는 예제를 만들어보겠습니다. 코드를 보면 명확하게 이해될겁니다 :) Member.java @Entity @Getter @NoArgsConstructor(access = PROTECTED) @AllArgsConstructor(access = PROTECTED) @Builder public class Member { @..
안녕하세요! 이번 포스팅에서는 JPA에서 Insert를 할 경우 여러 데이터들을 어떻게 한번의 네트워크 통신으로 Insert하는지 알아보겠습니다. 사전 준비 JPA 프로젝트 MySQL 그리고, 디렉토리와 코드들은 다음과 같습니다. applicatoin.yml spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: driver-class-name: com.mysql.cj.jdbc.Driver Api.java @RestController @RequiredArgsConstructor public class Api { private final ArticleService articleService; private fina..