
사이드 프로젝트에서 게시물 검색을 할 수 있는 기능이 필요했다. 관계형 DB로만 구현할지 ElasticSearch를 도입할지 고민을 많이 했었다.일단 둘의 차이점부터 설명하겠습니다먼저 관계형 DB를 활용하는 방법입니다. 장점은 매우 명확하게 단순하게 구현을 할 수 있습
현재 운영중인 서비스가 배포되기 QA를 하던 중에 결제 시스템에서 동시에 결제 요청을 할 시, 중복 결제가 되는 문제가 발생하였고 이 문제를 풀어보기로 했다. 고민한 방법은 총 3가지이며 비즈니스 로직 변경, 트랜잭션 격리수준 향상, 데이터베이스 락 적용 이렇게 방안이

노쇼핑 앱 마이너 업데이트 중에서 앱 화면에 배너를 다는 요구사항이 들어왔었다. 맨 위인 탭 바와 필터를 적용하는 곳 아래에 배너를 위치시켜야했고 홈 화면에서 스크롤을 올릴 시, 배너는 사라지게 만들어야하는 작업이다.React-native에서 배너를 만들 때 swipe
사실 트러블 슈팅이라고 하기엔 좀 어이없는? 트러블 슈팅이였지만 적어봅니다..시뮬레이터로 결제 테스트를 하던 와중에 갑자기 결제가 제대로 되지 않은 문제가 발생했다. 분명히 잘 작동하던 로직들이였는데 무슨 문제인가 싶었고 로그를 찍어둔게 있어서 확인해봤다.결제완료 시점
카카오 알림톡 도입이유 회사에서 현재 프로젝트의 MVP를 세웠을 때 많은 부분들이 자동화가 빠져있고 CS적으로 처리하려고 했고, 이럴 때 사용하기 좋은 툴 같은 것은 없을까 생각했을 때 카카오 알림톡이라는 기능을 이야기했고 우리가 CS로 일일히 추적할 수 없는 부분을
부트캠프 이후 정말 오랜만에 블로그를 써본다. 캠프 이후 운좋게 한달인턴 프로그램을 신청해서 뽑힌 후, 출근한지 이제 2달 반 넘어가는 시점동안 블로그에 내가 학습한 것들을 충분히 쓸 수 있었지만 미루고 미루다 보니 이제 처음 쓰게 된다spring으로 시작했지만 어쩌보
출근하기 전에, datetime 쪽 파싱 에러가 났다고 전달을 받았다저장을 할 때 빈 값으로 들어가는 문제가 생겼고 출근하자마자 디버깅을 해보기로 했다.프로그램 디버깅을 하기 전에, 크롤링하는 사이트에 들어가서 확인을 해봤다.내가 만든 로직에서 사이트마다 게시물 시간을

해당 로직에서 save하기 전 user의 상태에는 휴면유저가 아닌 활성화 유저로 값이 들어오는 것을 확인했지만, DB는 바뀌지 않는 오류가 계속 생겼다. 디버그를 돌리면서 들어오는 값을 전부 검증했지만 문제가 없었기 때문에 참 의아했었지만, 의외로 엉뚱한 곳에서 문

yml 파일에 initialize-schema를 always로 해두면 Meta Table이 자동생성 되어야한다.하지만 테이블을 찾지 못하는 오류가 발생해서 DB를 보면이렇게 생성이 되지 않는 것을 볼 수 있다.이러한 문제를 찾아봤는데 Spring Batch 3.0.0
스프링 배치(Spring Batch)는 대용량 데이터 처리 작업을 쉽게 관리하고 실행할 수 있게 해주는 스프링 프레임워크의 모듈입니다. 주로 대량의 데이터 처리, 배치 작업 및 일괄 작업을 자동화하고 효율적으로 처리하는 데 사용됩니다.Job: 배치 작업의 최상위 컨테이
쿼리 최적화는 데이터베이스 쿼리의 성능을 향상시키는 과정입니다. 주요 목표는 쿼리 실행 시간을 단축하고 리소스 사용을 줄이는 것입니다. 인덱스 사용: 적절한 인덱스를 생성하여 데이터 검색 속도를 높입니다.실행 계획 분석: 데이터베이스의 쿼리 실행 계획을 검토하여 비효율
암호화된 비밀번호를 비교하기 위해서는 passwordEncoder.matches() 메서드를 사용해야 합니다.해당 메서드는 Spring Security에서 제공하는 PasswordEncoder 인터페이스의 일부입니다.rawPassword는 사용자가 입력한 평문 비밀번호

회원가입을 할 때, 이메일 인증 확인이 된 사람만 회원가입을 완료할 수 있게 코드를 짜고 싶었다.그렇게 하기 위해서는 먼저 회원가입 창에서 이메일 인증 전 상태와 인증 확인이 된 상태를 나눌 필요가 있었고, 그 정보를 저장해둘 데이터베이스도 필요했다. 인증 상태를 나누
모듈 내부의 요소들이 서로 관련되어 있는 정도하나의 모듈이 단일 목적 또는 책임을 얼마나 잘 수행하는지를 나타냄높은 응집도는 모듈의 독립성과 재사용성을 향상시킴유지보수성과 이해도를 높임변경의 영향을 최소화하고 테스트를 용이하게 함우연적 응집도모듈 내 요소들 사이에 아무

Spring Framework에서 제공하는 HTTP 클라이언트 라이브러리다. RESTful 웹 서비스를 호출하는 데 사용된다.동기식 작동: RestTemplate은 기본적으로 동기 방식으로 작동다양한 HTTP 메서드 지원: GET, POST, PUT, DELETE 등
TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 인터넷 프로토콜 스위트의 전송 계층에서 사용되는 두 가지 주요 프로토콜입니다. 연결 지향적: 데이터 전송 전에 연결을 설정합니다.신뢰성: 데이터 손실
정의: 웹 서버가 사용자의 브라우저에 저장하는 작은 텍스트 파일입니다.저장 위치: 클라이언트 측(사용자의 컴퓨터)에 저장됩니다.생명주기: 만료 기간을 설정할 수 있으며, 브라우저가 종료되어도 유지될 수 있습니다.용량: 일반적으로 4KB 정도로 제한됩니다.보안: 클라이언
목적: 리소스 조회특징요청 본문(body)을 가지지 않음URL에 데이터를 포함하여 전송 (쿼리 파라미터)멱등성(idempotent): 여러 번 호출해도 결과가 동일예시: GET /users?id=123목적: 새로운 리소스 생성특징:요청 본문에 데이터를 포함멱등성이 없음
@Transactional은 스프링 프레임워크에서 제공하는 어노테이션으로, 주로 데이터베이스 트랜잭션 관리를 위해 사용된다. 이 어노테이션을 사용하면 메서드나 클래스가 트랜잭션 내에서 실행되도록 설정할 수 있다. 트랜잭션은 일련의 데이터베이스 작업들을 하나의 단위로 묶

Lazy Loading은 연관된 엔티티를 실제로 필요할 때까지 로드하지 않는 전략이다. 즉, 연관된 엔티티에 접근할 때 해당 데이터를 데이터베이스에서 가져온다.지연 로딩을 위한 프록시 사용: JPA는 연관된 엔티티에 대한 프록시 객체를 생성하고, 실제 데이터에 접근할