전체 글

백엔드 프로그래머를 준비하고 있는 대학생입니다 😜 Spring, Java, Git 공부 및 프로젝트 내용을 기록하고 있습니다! 함께 공부하시고 싶으신 분들은 댓글로 함께 소통해요! github : https://github.com/PgmJun
BackEnd/Spring

[JPA] @Modifying 어노테이션 - clearAutomatically, flushAutomatically란?

Spring JPA, @Modifying 어노테이션 clearAutomatically, flushAutomatically JPA를 사용하여 개발하다보면 DB의 데이터를 수정 또는 삭제하기 위해 벌크 연산을 사용해야하는 상황이 종종 발생한다. 이때 여러분들은 @Modifying 어노테이션을 붙여주어야 한다는 이야기를 들어봤을 것이다. 벌크연산이란? 하나의 데이터가 아닌 여러 데이터를 한번에 수정하거나 삭제하는 연산 위 사진과 같이 JpaRepository를 상속받은 Repository 인터페이스의 메서드 중, 벌크연산을 수행하는 메서드의 상단에 @Modifying 어노테이션을 붙여주어야 한다. 실제로 Update 또는 Delete 쿼리에 해당 어노테이션이 붙어있지 않는다면 QueryExecutionRequ..

BackEnd/DB

[Redis] RefreshToken은 왜 Redis를 사용해 관리할까?

1. “왜?” 🤔 우리는 MySQL과 같은 일반 DB를 다룰 줄 아는데 사람들은 왜 굳이 리프레시 토큰을 Redis에 저장하여 사용하는지 이유가 궁금했으며, 왜 다들 Redis를 사용해서 리프레시 토큰을 저장하는 지 궁금했습니다. 2. Redis가 뭔데? 레디스는 디스크가 아닌 메모리에 데이터를 저장하는 In-Memory 방식의 데이터베이스입니다. 2-1. In-Memory? In-Memory 데이터베이스는 MySQL과 같은 다른 일반 DB들처럼 SSD, HDD와 같은 보조기억장치가 아닌, 프로세서가 직접 액세스할 수 있는 컴퓨터의 주 메모리인 RAM에 데이터를 저장합니다. 2-2. 디스크에 저장하는 것과 무슨차이가 있는데? 특정 프로그램을 실행하면, 아래와 같이 컴퓨터는 보조기억장치에 저장된 데이터를 ..

Language/JAVA

[Java] @NotBlank, @NotNull, @NotEmpty 차이

개발 중 RequestDto를 생성할 때, 값 검증을 위해 @NotBlank, @NotNull, @NotEmpty와 같은 어노테이션을 사용하는 경우가 많다. 해당 어노테이션은 Spring Validation 라이브러리에 포함되어있으며, 아래 코드를 build.gralde에 넣어 추가할 수 있다. build.gralde implementation 'org.springframework.boot:spring-boot-starter-validation' UserRequestDto.java public class UserLoginRequestDto { @Email(message = "이메일 형식에 맞지 않습니다") @NotBlank private String email; /*생략*/ } 위는 DTO에 @NotBl..

BackEnd/AWS

[AWS] AWS IAM 생성하기

AWS IAM 생성법 오늘은 AWS의 IAM에 대해서 알아보려고 한다. IAM이란 무엇일까? 🤔 AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하면 사용자가 액세스할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있습니다. 이라고 AWS 페이지에서 설명합니다. 쉽게 말해서 AWS에 접속 및 로그인을 통해 AWS의 기능을 사용하는 것이 아니라, IAM이라는 인증 도구를 사용하여, 사용자가 권한을 부여한 특정 기능에 대해서만 접근할 수 있도록 제어하는 AWS의 열쇠같은 역할입니다. 열쇠는 열 수 있는 문과 그렇지 않은 문이 나뉘어져 있죠! 마찬가지로 AWS의 IAM도 계정의 주인이 ..

Git

[Git] git stash - 개발 중, 브랜치를 변경해서 작업하는 방법

개발 중, 브랜치를 변경해서 작업하는 방법 나는 보통 인텔리제이로 스프링부트 개발을 하는 개발자이다. 개발을 하다보면, "어라? 이거 이쪽 브랜치에서 작업할 게 아닌데..." 라고 생각이 드는 순간이 있다. 오늘 포스팅할 내용을 모른다면 아주 위험한 순간이다. 이때 아무것도 모른 채로 브랜치를 변경하게 되면 커밋하지 않은 모든 작업내용이 증발할 수 있다. 한번 실제 상황을 곁들인 직관적인 예시로 자세히 알아보자 🚨 작업 중, 브랜치 변경 상황 발생 당신은 Error를 관리하는 Enum 클래스에 무수히 많은 내용을 입력했고, 만든 것을 사용할 클래스 하나를 만들었다고 가정하자 그런데 다시보니 해당 브랜치는 Error 설정과 관련된 브랜치가 아니다! 아무것도 모르는 당신은 에러를 포함한 여러 메세지를 관리하..

외부활동/동아리

[SOPT] 솝트 32기 SOPKERTHON 후기(feat. 대상 수상 🏆)

5월 20~21일 참여했던 솝커톤이 너무 좋은 기억으로 남았기에 티켓팅부터 수상까지 당시의 경험을 상세히 기록하고자 이렇게 회고를 적으려합니다. 솝커톤이란? 💬 솝커톤은 대학생들이 모인 국내 최대 규모의 대학생 연합 IT벤처창업 동아리인 SOPT에서 내부적으로 개최하는 해커톤입니다! 큰 가능성과 수준 높은 실력을 가진 사람들이 많이 모이는 튼튼한 동아리인 만큼 내부에서 다양한 행사를 진행하는데, 솝커톤도 그 중 하나입니다. 티켓팅 🎟️ 저는 활동 기수라면 아무나 참가할 수 있다고 생각했는데, 그렇지만은 않았습니다. 솝트는 활동기수(YB, OB)와 비활동 맴버가 존재하는데 비활동 중이어도 참여할 수 있는 행사는 ‘티켓팅’을 통해 참가 신청이 진행되고 있었습니다. (만약 너무 바빠서 언젠가 비활동 맴버로 활..

BackEnd/Spring

[트러블슈팅] [스프링부트] 자바 Collection 객체, @RequestBody로 받기 (feat. Jackson-databind)

문제상황 ⛔️ public class CompetitionAttendRequestDto { private Long cmptId; private Long orgId; private List cmptEventIds; 위와 같이 컬렉션 타입의 변수 List cmptEventIds 를 가진 dto를 @RequestBody를 통해 json으로 데이터를 전달받아 dto클래스로 매핑하는 상황에서 컬렉션 타입 변수에 의해 매핑 관련 오류가 발생 List 타입의 컬렉션 객체를 json으로 받아 매핑할 때, 위처럼 대괄호로 묶어주면 된다고 알고 있었지만 실패 실패한 직후 오류 로그 기본 생성자와 같은 생성자가 존재하지 않는다는 등의 문구가 보여 넣어봤지만 여전히 같은 결과.. 해결 ✅ 몇분동안 삽질하다가 jackson-d..

BackEnd/Spring

[트러블슈팅] [JPA] 변경 감지(Dirty Checking)가 작동하지 않는 경우 해결법 (feat. @Transactional)

JPA Dirty Checking jpa는 변경감지(dirty checking) 라는 기능을 가지고 있다. 이는 영속성 컨텍스트에 올라가있는 엔티티에 대해, 값을 수정하였을 때 해당 트랜잭션이 끝날 때, 변경된 값을 확인하여 DB에 변경 사항을 자동으로 반영해주는 아주 간편한 기능이다. 본인또한 이 기능을 사용하여 Entity의 값을 update 해주려고 하였지만, 왜인지 작동하지 않았다. 그리고 운좋게도 구글링을 통해 그 이유를 알 수 있었다. 문제 상황 위와 같은 데이터의 값을 변경감지를 통해 변경하도록 구현한 코드에서 변경감지가 작동하지 않았던 상황이다. 최리더라는 값을 김리더로 변경하여 update에 보내주면 함께 보낸 PK로 Entity를 조회하고, 조회한 Entity의 orgLeaderName..

PgmJUN
Back world