전체 글

· 개발
간단한 프로젝트를 수행할 때에는 JpaRepository가 제공하는 메서드만으로 충분히 쿼리 구현할 수 있었지만 기능이 복잡해지면서 JpaRepository의 @Query를 사용해 쿼리를 직접 작성해야 하는 경우가 많아졌습니다.@Query는 문자열을 사용해 쿼리를 작성하기에 타입세이프하지 않고 쿼리 작성에도 불편함이 있습니다.그래서 이번 프로젝트에서는 타입세이프 하고 복잡한 쿼리도 편리하게 작성하기 위해 jOOQ를 도입하고 사용해 보았습니다. jOOQ 사용 세팅의존성jOOQ는 spring boot starter에 포함되어 있어 아래와 같이 간단히 의존성을 추가할 수 있습니다.implementation org.springframework.boot:spring-boot-starter-jooq jOOQ Cod..
· 개발
다중 칼럼 인덱스 사용 시 주의점: 다중 컬럼칼럼 인덱스에서 각 인덱스를 구성하는 칼럼은 첫 번째 칼럼부터 차례대로 정렬되고, N번째 인덱스 칼럼은 N-1번째 인덱스의 정렬에 의존해서 정렬된다. 따라서 앞선 인덱스를 통해 추출되는 데이터가 적어지는 방향으로 다중 칼럼 순서를 정의해야 한다. (카디널리티가 높은 순에서 낮은 순) 참고 링크https://studyandwrite.tistory.com/553https://jojoldu.tistory.com/243 where 절, on 절 그리고 실행순서create table ARTICLE_MST( id bigint auto_increment primary key, member_id bigint ..
· 개발
org.webjars:swagger-ui 의존성을 사용하여 Swagger-UI를 만든다면 이미지가 포함된 multipart/form-data 요청에 대해서는 Swagger 스펙을 작성하기 힘들다는 문제가 있습니다.mockMvc .perform( post(URL) .contentType(MediaType.APPLICATION_JSON) .content(content)) .andExpect(status().is2xxSuccessful()) .andDo( document( "postMember", resource( Reso..
· 끄적끄적
지난 1년간 2번의 캡스톤 프로젝트를 리드하며 든 생각 쌍방향 믿음을 구축하자: 일방적인 믿음은 금방 사그라든다. 상대방이 나에게 믿음을 보내준다면 그 기회를 놓이지 말자. 나 역시 그들의 믿음에 보답하기 위해 노력하고 종국에는 서로 믿을 수 있는 사람이 될 수 있도록 관계를 발전시켜나가자. 서로를 파악하고 맞추어 나갈 단계를 구축하자: 서로가 알고 있는 것, 경험한 것, 고민한 것이 모두 다르기에 한 번에 모든 것을 맞출 수 없다. 특히 시행착오를 통해 경험하고 느낀 것은 나에게는 큰 의미를 가질 수 있지만 다른 사람에게는 아무 의미가 없을 수 있다. 그렇기에 단계적으로 서로의 생각을 공유하고 맞추어 나갈 필요가 있다. 함께 개발할 수 있는 환경을 만들기 위해 노력하자: 협업 간 나를 가장 힘 빠지게 ..
· 개발
동시성 문제다수의 스레드가 동시에 공유 자원에 접근할 때 발생한다. 애플리케이션 개발에서의 동시성다중 스레드애플리케이션 개발에 주로 사용하는 스프링 부트의 경우 Tomcat을 내장하고 있다.Tomcat은 다중 요청을 처리하기 위해, 부팅할 때 Thread Pool을 생성한다.애플리케이션에서는 미리 생성한 Thread Pool의 Thread를 통해 유저의 요청을 처리한다.이때 Thread는 동시에 공유 자원에 접근 할 수 있고 그 결과 동시성 문제가 발생할 수 있다. 공유 자원애플리케이션 개발에서 공유자원은 DB에 저장된 정보가 대표적일 것 같다. DB 공유 자원DB에 저장된 정보에 접근하여 정보를 변경할 수 있는 고객이 여러 명이다. 글작성자재목내용조회 수좋아요위와 같은 정보를 저장하고 있는 글 의 경우..
· 개발
들어가며동시성 문제가 일어나는 여러 가지 상황이 있겠지만 저는 2가지 상황을 떠올릴 수 있었습니다.요청에 의해 처리되는 데이터가 중요한 동시성카프카로 동시에 들어오는 중복된 발주를 수신하는 경우검수/검품 이슈 등록 시 더블 클릭, 네트워크 이슈로 인해 중복된 요청이 동시에 들어오는 경우선착순과 같이 순서가 중요한 동시성선착순 쿠폰 차감이번 글에서는 "순서가 중요한 동시성" 문제를 어플리케이션에서 어떻게 해결할 수 있을지 고민한 내용을 정리해보려 합니다.Redisson 분산락다중 어플리케이션 환경에서 동시성 문제 해결하기 위한 솔루션을 검색하며 Redisson을 활용한 분산락에 관한 내용을 접할 수 있었습니다.// 특정 이름으로 락 정의 RLock lock = redissonClient.getLock(ke..
belljun
belljundev