동시성 제어 (낙관적 락, 비관적 락, 분산 락)
·
Spring
낙관적 락(Optimistic Locking)란?낙관적 락(Optimistic Locking)은 데이터베이스나 멀티스레드 환경에서 여러 사용자가 동일한 데이터를 수정할 때 발생할 수 있는 충돌을 관리하는 방법 중 하나입니다. 낙관적 락은 충돌이 자주 발생하지 않을 것이라고 가정하고, 충돌을 감지하여 처리하는 방식으로 동작합니다. 이 방식은 보통 비전 번호(Versioning)나 타임스템프를 이용해 구현됩니다. 낙관적 락 작동 원리데이터 조회: 사용자가 데이터를 조회할 때 해당 레코드의 현재 버전 정보를 함께 가져옵니다. 이 버전은 레코드가 수정될 때마다 증가하거나 변경됩니다.데이터 수정: 사용자가 데이터를 수정하려고 할 때, 수정하려는 레코드의 현재 버전과 사용자가 처음 조회할 때 가져온 버전 정보를 비..
Trello 개발 KPT 회고
·
Spring/미니 프로젝트(Trello)
KPT 회고KEEP, 다음 프로젝트로 가져갈·  추가 구현에서 경험한 동시성 처리, Redis를 이용한 캐시의 이점, 쿼리와 인덱스를 이용한 최적화, 젠킨스와 도커를 이용한 CICD까지 직접 구현하진 않은 부분일지라도 팀 노션에 작성된 부분을 통해 간접 경험을 하거나 동료의 구현 모습을 보면서 좀더 본인의 기술을 디벨롭 할 수 있는 경험. ·  의견 차이를 커뮤니케이션을 통해 극복하는 자세를 유지하면 좋다. 대부분의 개발이 단체로 이뤄지기 때문에 의견을 수용하고, 배우는 자세를 유지하는것은 매우매우 좋음. ·  동시성 처리에서 분산락, 낙관락, 비관락을 활용한 다양한 동시성 처리 방식을 적용해보았고, 각 방법이 특정 메서드에 얼마나 적합한지 확인하는 과정을 거침. ·  외부 API 호출을 통한 알림 기능..
동시성 테스트를 위한 Jmeter 사용법
·
Jmeter
일단 Jmeter란?Apache JMeter™ 애플리케이션은 오픈 소스 소프트웨어로, 기능적 동작을 로드 테스트하고 성능을 측정하도록 설계된 100% 순수 Java 애플리케이션입니다. 원래는 웹 애플리케이션을 테스트하기 위해 설계되었지만 그 이후로 다른 테스트 기능으로 확장되었습니다.-Apache Jmeter 공식 홈페이지-https://jmeter.apache.org/ Apache JMeter - Apache JMeter™Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure perfo..
aws 보안 문제로 인한 push reject 해결법
·
GitHub 오류 및 명령어 정리
yml파일에 aws 시크릿 키가 그대로 적여있는걸 까먹고 커밋을 해버려서 GitHub Push Protection에 의해 push가 차단되는 문제가 발생되었다. 해당 이슈는 GitHub의 보안 기능으로, 소스 코드에 포함된 민감한 정보가 푸쉬되는 것을 막아줍니다. - GitHub Push Protections이란?:GitHub Push Protection은 비밀번호, API 키, 암호화 키 등 민감한 데이터를 GitHub에 실수로 푸시하는 것을 방지하기 위한 보안 기능입니다. GitHub는 이러한 민감한 데이터를 탐지하여 사용자에게 알리고, 푸시를 차단하여 보안을 강화합니다. 해결 방법환경 변수로 AWS 키 관리키를 소스 코드에 직접 포함하는 것은 보안상 매우 위험합니다. 이를 해결하기 위한 대안으로 환..
aws s3 yml 오류
·
AWS/AWS 트러블 슈팅
error creating bean with name 's3Config': Injection of autowired dependencies failed 오류는 Spring Boot 애플리케이션에서 의존성 주입에 문제가 발생했음을 나타냅니다.  1. yml 파일 확인 그래서 yml 파일에서 AWS 관련 설정이 올바른지 확인 확인해봤는데 cloud는 spring 밑에 위치해 있어야 aws 키 값, 지역, bucket 이름이 확인이 가능하다. 또한 @Value 값의 위치도 yml과 동일하게 설정해야 한다. 동일하게 값을 바꾸고 나면 문제 없이 돌아간다.
Transactional 관심사의 분리를 통해 로그 기록 남기기
·
Spring
일단 코드 설명을 하기 앞서 왜 transactional 로그 기록을 남길 때 common 패키지로 분리해서 관리해야 하는지 설명하도록 하겠습니다. 1. 관심사 분리(Separation of Concerns)manager 패키지는 주로 매니저 등록, 수정, 삭제와 같은 비즈니스 로직을 다룹니다. 하지만 로그 관리는 모든 모듈에서 공통적으로 사용될 수 있는 기능이기 때문에 별도의 common 패키지로 분리하여, 비즈니스 로직과 로그 관리 로직을 명확히 구분하는 것이 좋습니다.예를 들어, manager뿐만 아니라 user, product 등 다양한 서비스에서 로그를 사용할 수 있다면, 각 서비스에서 중복된 로그 관리 코드를 작성하지 않고, common 패키지의 공통 로그 관리 기능을 재사용할 수 있습니다.2..
QueryDSL을 이용한 검색 기능
·
Spring/QueryDSL, JPQL
조건은 다음과 같습니다.검색 조건검색 키워드로 일정의 제목을 검색이 가능해야 한다.제목은 부분적으로 일치해도 검색이 가능해야 한다.일정의 생성일 범위로 검색할 수 있어야 한다.일정을 생성일 최신순으로 정렬이 가능해야 한다.담당자의 닉네임으로도 검색이 가능해요.닉네임은 부분적으로 일치해도 검색이 가능해야한다.다음의 내용을 포함해서 검색 결과를 반환해야한다.일정에 대한 모든 정보가 아닌, 제목만 넣도록 해야 한다.해당 일정의 담당자 카운트가 가능해야 한다.해당 일정의 총 댓글 카운트가 가능해야 한다.검색 결과는 페이징 처리. QueryDSL 구현순서 1. Entity 작성 이미 comment와 user간의 연관관계가 이어져 있기에 추가적으로 수정할 필요는 없었다.package org.example.exper..
QueryDSL
·
Spring/QueryDSL, JPQL
객체 관계 매핑 프레임워크는 Enterprise Java의 핵심입니다. 이는 객체 지향 방식과 관계형 데이터베이스 모델 간의 불일치를 보완합니다. 또한 개발자가 더 깔끔하고 간결한 지속성 코드와 도메인 로직을 작성할 수 있도록 합니다. -QueryDSL 공식 홈페이지중 baeldung의 QueryDSL 목적https://www.baeldung.com/intro-to-querydsl 즉 QueryDSL은 Java 언어로 작성된 쿼리를 위한 타입 안전 쿼리 생성 라이브러리입니다. SQL, JPA, MongoDB 등 다양한 데이터베이스와의 상호작용을 지원하며, 개발자가 보다 직관적이고 안전하게 데이터베이스 쿼리를 작성할 수 있도록 도와줍니다. 주요 특징타입 안전성 QueryDSL은 쿼리의 문법과 데이터 타입을..
JPQL
·
Spring/QueryDSL, JPQL
JPQL (Java Persistence Query Language)은 JPA(Java Persistence API)에서 엔티티 객체를 기반으로 데이터베이스 쿼리를 작성하기 위해 사용되는 쿼리 언어입니다. JPQL은 SQL과 유사하지만, 데이터베이스 테이블이 아닌 엔티티 클래스와 필드를 대상으로 쿼리를 작성한다는 점에서 차이가 있습니다. JPQL의 특징 및 개념 객체 지향 쿼리 언어JPQL은 엔티티 객체를 대상으로 쿼리를 작성합니다. 즉, SQL처럼 테이블을 대상으로 하는 것이 아니라, 클래스와 객체를 대상으로 합니다.SQL에서는 SELECT * FROM users와 같이 테이블을 조회하지만, JPQL에서는 SELECT u FROM User u와 같이 엔티티 객체 User를 대상으로 쿼리를 작성합니다.S..
단위테스트, 통합테스트
·
Spring
단위 테스트 (Unit Test) 정의 단위 테스트는 소프트웨어의 가장 작은 단위(클래스, 함수, 메서드 등)를 개별적으로 테스트하여, 이들이 예상대로 동작하는지 확인하는 테스트입니다. 특징  • 테스트 범위: 각 개별 함수, 메서드, 또는 클래스와 같은 작은 코드 조각을 테스트합니다. • 목적: 코드의 각 단위가 올바르게 동작하는지 확인하여, 버그를 초기에 발견하고 수정하기 위함입니다. • 독립성: 단위 테스트는 외부 종속성(예: 데이터베이스, 파일 시스템, 네트워크 등)을 가정하지 않고 독립적으로 실행됩니다. 외부 종속성을 모의 객체(Mock)나 스텁(Stub)으로 대체하여 테스트를 수행할 수 있습니다. • 빠른 실행: 단위 테스트는 빠르게 실행되며, 대개 전체 테스트의 실행 속도가 빠릅니다. • 테..