0. 이 글을 쓰는 이유 대부분의 spring security 가이드에서는 csrf를 disable하는데 csrf는 뭐고 왜 disable처리하는지 궁금해서 정리하기 위함 1. CSRF란? Cross Site Request Forgery : 사이트간 위조 요청 웹사이트 취약점 공격 방법 중 하나로 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격 2. Spring Security에서는? CSRF에 대한 예방 기능을 제공한다. https://docs.spring.io/spring-security/reference/features/exploits/csrf.html Cross Site Request Forgery (CSRF) :: Spring Security When..
JAVA
0. 이 글을 작성하는 이유 엔티티 테스트 하는 방법에 대해 이게 맞는지는 잘 모르겠으나 내가 하고 있는 방식을 공유하고 정리하기 위함 1. 테스트 프레임워크 및 개발 환경 IntelliJ + spring boot 3.x 버전을 사용하면서 같이 들어있는 junit5를 사용 2. 엔티티의 구조 @Entity @Getter public class Bean { @Id @Column(name = "bean_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Long price; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.A..
0. 이 글의 목적 기존 정수원 님의 강의는 SpringBoot 2.x, Spring-batch 4.x 버전을 사용 중이었으나 최신은 SpringBoot 3.x, Spring-batch 5.x 버전이기에 나는 최신으로 하면서 동작하지 않는 코드와 최신 방법으로 코드를 변형하기 위함 1. Spring Batch의 전략 하나의 Job이 존재하며 이 Job은 여러 Step으로 구성된다. 각 Step에서의 실제 수행은 tasklet에서 이루어진다. 2. 그러면 무엇이 바뀌었는가 우선 StepBuilderFactory와 JobBuilderFactory가 deprecated되었다. 이제 직접 JobBuilder와 StepBuilder를 구현해야 한다. //@EnableBatchProcessing @Configura..
0. 이 글을 작성하는 이유 slack webhook연동에 대한 글을 작성하다 discord에 대한 연동도 작성하면 재미있을 것 같아서 빠르게 메시지 한정으로 작성해 봅니다. 이 글을 읽기 전 이전 글을 읽고 오는 것을 추천합니다. 대부분의 구조를 동일하게 가져갑니다. https://developer-youn.tistory.com/149 spring + slack webhook 연동하기 0. 이 글을 작성하는 이유 서비스를 운영 중 문제가 발생했을 때 slack으로 알람을 주기 위해 webhook이 가장 구현이 편해서 공유하고자 함 1. 준비 과정 실은 아래 2개의 문서를 참고하면 잘 된다. 역 developer-youn.tistory.com 1. 웹훅 추가 슬랙과는 다르게 외부로 노출되지 않으므로 웹후..
0. 이 글에서 정리하고자 하는 내용 - 영속성 컨텍스트란 무엇인지 - EntityManager가 무엇인지 1. 개발 환경 준비 1-1. H2 설치 및 연동 http://h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp h2da..
0. 이 글을 작성하는 이유 서비스를 운영 중 문제가 발생했을 때 slack으로 알람을 주기 위해 webhook이 가장 구현이 편해서 공유하고자 함 1. 준비 과정 실은 아래 2개의 문서를 참고하면 잘 된다. 역시 공식문서가 잘 되어있으면 개발자가 편하다. https://slack.dev/java-slack-sdk/guides/web-api-client-setup Installation | Slack SDK for Java API Client Installation The first step to using the Slack API client is installing the slack-api-client module. This guide shows you how to set up using Maven,..
0. 이 글을 쓰는 이유 강의에서는 SpringBoot 2.x버전과 junit4를 붙여서 테스트를 진행하는데 내 환경은 SpringBoot 3.x버전이라 @RunWith가 먹히지 않았고 @SpringBootTest 어노테이션 하나로 퉁칠 수 있다고 한다. 도대체 왜 그게 가능한지 간단하게 정리를 해보기 위해 이 글을 작성한다. 1. Junit4와 Junit5 그리고 SpringBoot 우선 Spring Boot 2.2.x 버전을 기점으로 이후 버전은 Junit5를, 이전 버전은 Junit4를 기본 테스트 모듈로 제공한다. Junit4는 모노리식 아키텍처로 되어있고 Junit5는 모듈화 된 아키텍처로 되어있다. Junit5의 주요 모듈은 크게 3가지로 Junit Platform, Junit Jupiter,..
0. 이 글을 적는 이유 제곧내..라고 하기엔 좀 없어 보이는데 진짜로 java(jdk 17 기준)에서 List를 대상으로 stream을 사용해 간단한 연산을 진행하는 경우 코드에서는 어떤 일이 발생하는지 궁금해서 메모하기 위함 1. 최초 진입(stream open) 이런 데이터가 있다고 가정을 해보자. List tmpList = new ArrayList(); 그리고 내부에는 데이터가 1부터 100까지 데이터가 있다고 생각해 보자. 이 데이터를 조작하기 위해 아래와 같은 코드를 작성했다. tmpList.stream().filter(i -> i % 2 == 0).map(i -> i * 4).toList(); 그러면 최초에는 stream()을 통해 함수형 프로그래밍을 시작한다. 이 stream함수는 Coll..
0. 이 글을 쓰는 이유 remove, add 등의 연산 속도가 LinkedList와 ArrayList의 구조에 따라 차이가 있는 것은 data structure를 공부하다보면 자연스레 알게된다. 그럼 java코드로는 어떻게 구현이 되어있을지 많이 깊게는 보지 않지만 그래도 좀 보면서 정리하기 위해 작성함 1. ArrayList의 remove /** * Removes the element at the specified position in this list. * Shifts any subsequent elements to the left (subtracts one from their * indices). * * @param index the index of the element to be removed ..
JPA란? Java Persistence API의 약자다. 자바에서 관계형 데이터베이스를 사용하는 데 필요한 기능을 제공하는 ORM기술이다. Spring Data JPA란? 위에서 언급한 JPA를 쉽게 사용할 수 있도록 스프링에서 제공하는 프레임워크다. 쿼리 생성, 페이징, 정렬, 캐싱 등의 기능을 제공해준다. 위에서 JPA가 ORM기술이라고 했는데 Spring Data JPA는 다양한 데이터베이스와의 호환을 도와준다. 공식 문서에서는 아래 예제가 먼저 우리를 반겨주고 있다. public interface CrudRepository extends Repository { S save(S entity); (1) Optional findById(ID primaryKey); (2) Iterable findAll..