my study.

전체 글 89

[자료구조] 스택이란? (Stack)

자료구조에 대해서 어느 정도 알고있다고 생각하지만, 하나씩 정리하며 기억을 단단히 해보고자 합니다. '자료구조와 함께 배우는 알고리즘 입문'을 참고하여 정리하고 있습니다. 스택이란? 스택이란 데이터를 일시적으로 저장하기 위한 자료구조로, 데이터의 입력과 출력의 순서는 후입선출(LIFO, Last In First Out)입니다. 후입선출이란 'Last In' 마지막에 들어간 데이터가 'First Out' 처음에 나오는 형식을 말합니다. 스택에 데이터를 넣는 작업을 푸시(push)라 하고, 스택에서 데이터를 꺼내는 작업을 팝(pop)이라고 합니다. 그리고 푸시와 팝이 이루어지는 위치를 꼭대기(top)라 하고, 스택의 가장 아랫부분을 바닥(bottom)이라고 합니다. Java 프로그램에서 메서드를 호출하고 실..

Study 2022.03.20

[Spring] @RequiredArgsConstructor 이란?

@RequiredArgsConstructor 이란 무엇일까? Spring Boot를 이용한 프로젝트를 진행하면서 빈번하게 사용하는 어노테이션 중에 하나인 @RequiredArgsConstructor 가 있습니다. @RequiredArgsConstructor는 Lombok 이라는 java 라이브러리의 어노테이션 중 하나입니다. @RequiredArgsConstructor는 주로 생성자를 이용한 의존성 주입을 할 때 사용하는데 @RequiredArgsConstructor을 사용할 경우 생성자 생성코드를 대신해주어 깔끔한 코드를 작성하는데 도움을 줍니다. Before @Service public class ProductService { private final ProductRepository productRe..

Study/Spring 2022.03.06

[Java] java의 버전에 대해서 생각

저는 프로젝트를 진행 할 때에 막연하게 java 8은 너무 오래 된 버전 같기도 하고 java 버전 중에 LTS 버전이 무언가 좋다고 들은 것 같았기 때문에 java 8 다음의 LTS 버전인 java 11을 사용하고 있었습니다. 그리고 최근 보았던 면접에서 사용하고 있는 java 버전에 대한 질문을 받은 적이 있습니다. 답변은 java 11버전을 사용하고 있다고 하였는데 그렇다면 java 11버전이 되며 바뀐점이나 특징에 대한 연속 질문이 있었고, 제대로 답변을 하지 못한채 면접이 흘러간 경험이 있습니다. 이후 java 버전에 대해서 알아보기 시작했고 그 내용을 제가 알게된 것과 느낀 점을 적어보게 되었습니다. java는 현재 글을 작성하는 2022년 2월 10일 기준 17(LTS) 버전이 나온 상태이며..

Study/Java 2022.02.10

[Spring] null check 잊지 않기, 메모는 바로바로 하기

문제 발견 어제 프로젝트에서 테스트를 진행하던 중 계속해서 해결되지 않던 문제가 있었습니다. 데이터 save를 테스트 하고 있었는데 계속해서 데이터가 들어가지 않는 것 처럼 보이는 상황이었습니다. 그러나 DB를 살펴보니 데이터가 들어가 있었고 save 자체에는 문제가 없었습니다. 위의 과정들을 진행해가며 문제점이 save 자체가 아니라 최근에 변경한 UserResponse로 변환하는 과정에서 error가 발생하는 것으로 판단을 하고 확인을 하기 시작했습니다. 해결 과정 일단 정확한 문제 발생 지점을 찾기 위해서 해당 save 요청이 실행되는 과정을 모두 체크 하였고, 단계 단계 마다 System.out.println(); 을 이용하여 디버깅을 진행하였습니다. 그 결과 생성한 객체를 UserResponse..

Study/Spring 2022.01.31

[Spring] Spring Boot NoUniqueBeanDefinitionException 문제

문제 발생 Github에서 다른 분들이 작업한 프로젝트를 보며 공부를 하던 중 Service를 interface로 만든 뒤 구현을 ServiceImpl로 만든 뒤 사용하는 것을 보게 되었습니다. 저는 Service를 바로 클래스로 구현을 해서 사용하는 중이기 때문에 왜 Service를 interface로 만들어서 사용하는지 궁금했습니다. 그래서 찾아보니 이는 예전부터 Spring을 사용해오던 사람들과 또는 그로부터 Spring을 배우게 된 분들이 주로 사용하게 되는데 예전에 Spring은 proxy를 생성할 때에 interface 타입만을 사용하여 proxy를 생성할 수 있었고 이를 주입받아서 사용해야 했습니다. 하지만 요즘은 class 타입을 이용하여도 proxy를 생성할 수 있고 이를 이용해서 주입받..

Study/Spring 2022.01.30

[Spring] data.sql으로 입력된 데이터 9시간 차이 문제

문제 발생 시간의 범위를 이용해서 데이터를 조회하는 기능을 만드는 도중에 문제점을 발견, 테스트가 실행 될 때에 입력되는 data.sql를 통해서 입력되는 데이터의 시간이 내가 입력한 값과는 다르게 9시간 이후의 시간으로 입력되는 것을 확인했습니다. 예를 들어 `2022-01-01T23:00:00` 으로 입력을 했다면 실제 DB에는 `2022-01-02T08:00:00` 의 시간으로 데이터가 입력되어 있던 상황이었습니다. 해결 과정 처음에는 시간이 이상하게 입력되었다는 사실만을 보았지만, 시간들을 살펴보니 일관성 있게 9시간의 시차가 존재하는 것을 발견 했습니다. 그래서 'Spring Boot mysql 9시간 시차' 같은 키워드로 검색을 해보았고, 간단한 해결 방법을 찾게 되었습니다. Spring Bo..

Study/Spring 2022.01.28

[Spring] Spring Boot data.sql 적용 안됨 문제

문제 발생 테스트 코드를 작성하며 테스트를 진행하고 있는데 여러개의 조회나, 조건을 이용한 조회를 이용할 때에 사용하기 위한 데이터를 먼저 넣어 놓으려고 data.sql 파일을 작성을 했지만, data.sql의 쿼리들이 실행되지 않는 문제가 발생하였습니다. 해결 과정 구글에 'Spring Boot data.sql not working' 을 검색해보니 저와 유사한 문제가 일어난 사람들이 많았습니다. 주된 답변으로는 Spring Boot 2.5x 버전 부터는 `spring.jpa.defer-datasource-initialization: true` 가 필요하다는 것 이었습니다. 저는 해당 코드를 추가했고, 그래도 여전히 data.sql은 실행되지 않고 있었습니다. 그래서 더 찾아보니 다른 답변 중에는 `sp..

Study/Spring 2022.01.28

[DataBase] 일관성과 지속성의 차이

데이터베이스의 트랜잭션을 공부하다 보니 정확하게 이해가 안 가는 부분이 생겼습니다. 트랜잭션의 특징에 대한 부분이었는데 트랜잭션의 일관성과 지속성에 대한 부분이었습니다. 인터넷에서 찾아본 한국의 많은 곳에서 두 가지를 각각 아래처럼 설명하고 있습니다. 일관성( Consistency ) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미합니다. 지속성( Durability ) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다. 두 가지의 설명을 읽어보면 뭔가 다른 듯 하면서도 결국 같은 이야기를 하는 것이 아닌가 라는 생각을 떨쳐낼 수가 없었습니다. 트랜잭션이 성공하면 계속해서 유지되어야 한다..? 가 결국 같은 말 같았기 때문입니다. 그래서..

Study/DataBase 2022.01.19

[DataBase] 트랜잭션 정리

개발을 하게 되면서 데이터베이스를 다루어야 한다면 트랜잭션이라는 단어를 접하게 됩니다. 트랜잭션이란 간단히 설명하자면 '데이터베이스의 상태를 변화시키는 작업의 단위'라고 할 수 있습니다. 데이터베이스를 다룰 때에 이 트랜잭션에 대한 깊은 이해가 필요한데 왜 작업의 단위에 대해서 이해가 필요한지 이유를 적어보도록 하겠습니다. 먼저 어떠한 데이터베이스를 사용할 때에 우리가 인지하지 못한 오류가 발생하는 경우가 존재합니다. 가장 많이 쓰이는 예제인 은행거래의 상황을 살펴보며 이해 보겠습니다. - A가 B에게 50,000원을 계좌 이체해주기로 하였습니다. - 그리고 A가 B에게 계좌 이체를 요청하였고 은행 애플리케이션에서 계좌 이체 작업이 진행됩니다. 1. A의 계좌에서 50,000원이 차감됩니다. ( - ) ..

Study/DataBase 2022.01.03

[프로그래머스] 문자열 압축, python

코딩테스트 연습 - 문자열 압축데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문programmers.co.kr 정확히 분류를 어떻게 해야할 지 모르겠는데, 특정 알고리즘을 사용해야 하는 느낌은 없었기에 구현 문제라고 생각이듭니다. 간략히 문제를 설명해보겠습니다. 1. "aabbaccc"의 문자열을 같은 문자 기준으로 "2a2ba3c"와 같이 압축할 수 있습니다. 하지만 "abcabcdede"와 같은 문자열은 하나도 압축이 불가능합니다.2. 위와 같은 문제점 때문에 하나 단위가 아닌 여러 개의 문자를 합쳐서 압축하는 방법을 사용해봅니다. 이를테면 "abcabcdede"..