[개발 일기] 2025.03.18 - MultipartFile와 Setter의 관계
·
개발 일기
💡 개요 MultipartFile을 Controller에서 받기 위해선 Setter가 필요하다.  @Setterpublic class ProductRegisterRequest { private String productName; private String productContent; private int price; private MultipartFile file; ...} @RestController@RequiredArgsConstructor@RequestMapping("/api/v1/products")public class ProductController { private final ProductService productService; @PostMapping(..
[개발 일기] 2025.03.17 - Code Kata
·
개발 일기
💡 개요코드 카타(Code Kata)란 프로그래밍 실력을 기르기 위한 연습이다.  오늘은 이 코드 카타에 대해 정리해 보자.  📕 코드 카타(Code Kata)카타의 사전적 의미는 무술의 기본동작을 의미한다.  아마 한국으로 치면 태권도의 품새 같은 거 일듯..?  코딩의 품새구나..!  보통 문제들은 아래의 형식으로 나온다. 10보다 작은 자연수 중 3 또는 5의 배수를 모두 나열하면 3, 5, 6, 9가 나옵니다. 이 배수들의 합은 23입니다.전달된 숫자보다 작은 3 또는 5의 모든 배수의 합을 반환하도록 설루션을 완성하세요.참고사항: 숫자 가 3과 5의 배수인 경우, 한 번만 세십시오.  이걸 for문으로 구현해 보고, for문으로 구현했으면 stream()으로 구현해보고 이러한 과정을 반복 숙..
[개발 일기] 2025.03.16 - Session.invalidate()
·
개발 일기
💡 개요Session.invalidate() 을 하면 세션 저장소에 있는 모든 세션 정보가 삭제될까?  아니면 해당 요청을 한 사용자(스레드) 정보만 삭제될까?  오늘은 이 내용에 대해 정리해보자.   📕 Session.invalidate()invalidate의 사전적 의미는 무효화이다.  invalidate() 메서드도 마찬가지이다.  사용자의 세션 정보를 사용하지 못하게 무효화하는 것이다.  그렇다면 여기서 궁금한 게, invalidate()는 모든 세션 정보를 무효화할 까, 아니면 해당 사용자의 정보만 무효화할까?  정답은 당연하게도 invalidate() 를 호출한 사용자의 정보만 무효화한다.  사실 많은 블로그에서 ‘세션을 완전하게 삭제할 때 invalidate() 사용!’ 이런 식으로 글을..
[개발 일기] 2025.03.15 - LATERAL JOIN
·
개발 일기
💡 개요오늘은 MySQL과 같은 SQL 기반 데이터베이스에서 사용되는 쿼리인 LATERAL JOIN에 대해 정리해보자.   📕 LATERAL JOIN LATERAL JOIN이란 서브 쿼리 내부에서 외부의 컬럼을 참조하고자 할 때 사용하는 방법이다.  역시나 말로는 설명이 어렵다.  다음은 각 사용자가 작성한 게시글 중, 가장 최근에 작성된 게시글을 조회하는 쿼리 예시이다.   회원 테이블 id회원 이름1홍길동2이형석   게시판 테이블 idmember_idboard_titleboard_content11길동이의 일기…21길동이 플레이리스트…32형석이의 성장일기…   LATERAL JOIN 을 사용하지 않은 쿼리 SELECT m.id AS member_id, m.name AS member_na..
[개발 일기] 2025.03.14 - 인메모리는 휘발성이라매
·
개발 일기
💡 개요보통 인메모리는 휘발성이라는 문제를 가지고 있다고 배운다.  물론 나 또한 그렇다.  그런데 Redis에 TTL을 따로 설정하지 않은 데이터를 저장하고 맥북을 껐다가 켜도 데이터는 잘 저장되어 있다.  왜 이럴까?   📕 Redis의 휘발성Redis는 대표적인 인메모리 DB이기도 하지만 데이터를 디스크에 저장하는 기능 또한 제공한다.  ..?  뭔가 이상하다.. 메모리를 사용하지만 디스크도 사용한다..?  맞다. Redis는 하이브리드 형태의 데이터베이스이기 때문에 메모리와 디스크 모두 사용한다.  일반적으로 Redis에 데이터를 저장하거나 조회할 땐 메모리에 접근한다.  하지만 Redis는 휘발성이라는 문제를 극복하기 위해 디스크를 함께 사용하는 지속성(Persistence) 기능을 포함하고..
[개발 일기] 2025.03.13 - @BeforeAll
·
개발 일기
💡 개요오늘은 Spring에서 테스트 코드에서 데이터 셋업에 사용되는 @BeforeAll을 정리해 보자.   📕 @BeforeAll@BeforeAll은 테스트 실행 전에 한 번만 실행되는 메서드에 붙이는 어노테이션이다.  주로 테스트에서 반복적으로 사용되는 데이터를 셋업 할 때 사용된다.  @BeforeAll을 사용하려면 해당 메서드를 static으로 선언하거나, 클래스에 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 어노테이션을 추가해야 한다.   🛠️ static 메서드 사용 @BeforeAllstatic void setup() { // 테스트 실행 전 한 번만 실행됨}  static으로 선언하면 테스트 인스턴스가 생성되기 전에 클래스 레벨에서 실행된..