전체 글 32

트랜잭션, 데드락 무슨 말일까?

먼저 트랜잭션을 알아야 이해 할 수 있었던 것 같다. Transaction 하나의 작업을 수행하는데 필요한 데이터베이스의 연산을 모아놓은 것으로 데이터베이스 작업의 단위, SQL문의 집합이라고 생각하면 된다. 트랜잭션에서 중요한 것은 트랜잭션 단위로 구분해서 모두 성공하거나 모두 실패해야 데이터베이스의 일관성을 유지할 수 있다. Lock은 동시성을 제어하기 위한 기능이고 Transaction은 정합성을 보장하기 위한 기능이다. Dead Lock - 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황 - 교착상태란 두 개 이상의 트랜잭션이 특정 자원(테이블 또는 행)의 잠금(Lock)을 획득한 채 다른 트랜잭션이 소유하고 있는 잠금을 요구하면 아무리 기다려..

Development/DB 2023.04.04

JPA 기본키 매핑 방식과 키생성 전략은 무엇을 선택해야할까?

자연키(natural key) 비즈니스에 의미가 있는 키 예: 주민등록번호, 이메일, 전화번호 대리키(surrogate key) 비즈니스와 관련 없는 임의로 만들어진 키, 대체키로도 불린다. 예: 오라클 시퀀스, auto_increment, 키생성 테이블 사용 * 자연키 보다는 대리키를 권장 기본키(Primary key) 매핑 방식 직접 할당: @Id 어노테이션만 사용해서 회원의 기본키를 직접 할당 자동 생성: 대리키 사용 방식, 기본키 생성을 데이터베이스에 위임한다. IDENTITY: 자동 증가 컬럼(auto_increment)을 이용한 전략 데이터베이스에 INSERT 쿼리를 실행한 후에 생성된 키를 가져와서 엔티티의 식별자로 사용 MySQL, SQL Server 등에서 사용 단점은 주로 대량의 데이..

Development/JPA 2023.04.03

'이것이 취업을 위한 코딩 테스트다' 유형 개념 정리

복잡도란? 알고리즘의 성능을 나타내는 척도이다. 시간 복잡도: 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래걸리는지를 의미 공간 복잡도: 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미 복잡도를 측정함으로써 우리는 다음의 2가지를 계산할 수 있다. 시간 복잡도: 알고리즘을 위해 필요한 연산의 횟수 공간 복잡도: 알고리즘을 위해 필요한 메모리의 양 * 빅오 표기법: 가장 빠르게 증가하는 항만을 고려하는 표기법 그리디(Greedy) == 탐욕법이란? 현재 상황에서 지금 당장 좋은 거만 고르는 방법 구현(Implementation)이란? 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 완전 탐색: 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 일반적으로 알고리즘 문제를..

InvalidDefinitionException

나의 프로젝트 시작 후 REST API를 만드는 과정에서의 첫 에러 등장! 에러 내용: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.hotelJava.accommodation.dto.AccommodationResponseDTO and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]) at com.fasterxml.jackson..

Development/Error 2023.03.06

Git 협업을 해보자

1. 협업할 Repository를 Fork 떠서 나의 Repository로 가져오자 2. Fork 뜬 나의 원격 Repository에 있는 프로젝트를 Clone해서 나의 로컬 PC에 만들자 git clone {나의 Repository URL} 3. 원본 소스코드가 있는 곳의 위치(Upstream)를 미리 등록해주자 git remote add upstream {협업할 Repository의 URL} 4. 기능 단위 개발 작업을 위해 Branch를 따주자 git checkout -b {생성할 브랜치 명} 5. 코드 작업 후 Add, Commit 후 나의 Repository에 Push 해주자 git push origin {생성한 자신의 브랜치 명} 6. 본인 계정 깃허브 저장소에 접속해서 Compare & p..

Development/Git 2023.03.03

빌드 도구(Build Tool)와 Gradle

앤트(Ant) XML 스크립트를 기반으로 하고 최근에 나온 빌드 도구들과 달리 자동으로 라이브러리를 업데이트 하는 기능이 없기 때문에 현재는 주로 레거시 시스템에서만 사용되고 있다. 메이븐(Maven) 자바 프로젝트의 라이프 사이클(Life Cycle)을 XML 파일로 정의하여 빌드, 테스트, 배포 등을 자동화하는 빌드 도구 POM(Project Object Model)을 이용하여 프로젝트 정보, 라이브러리, 의존성 등을 정의하고 이를 기반으로 빌드 프로세스를 수행한다. 중앙 저장소(Central Repository)라는 중앙화된 라이브러리 저장소를 제공하여 필요한 라이브러리와 의존성을 쉽게 관리할 수 있다. 그래들(Gradle) 자바를 비롯한 다양한 언어로 작성된 프로젝트를 관리할 수 있는 Groov..

Development/Tool 2023.02.20

Git Pull Requests의 Merge 전략

Merge 브랜치에서 작업한 내용을 메인 브랜치로 통합하는 가장 일반적인 방법 장점: 이전의 커밋 히스토리를 그대로 유지하기 때문에 변경 이력이 정확하게 기록된다. 다른 브랜치에서 동시에 작업하는 경우 충돌이 발생할 수 있지만, 이를 강제하여 코드의 일관성을 유지할 수 있다. 단점: Branch가 많아지고 Commit도 많아지면 Commit History가 복잡해질 수 있다. Squash Merge 여러 개의 Commit을 하나로 합친 후 Merge하는 전략 장점: Merge Commit이 남기 때문에 Merge가 되었다는 사실을 알 수 있다. Commit History가 깔끔해진다. 단점: Merge된 브랜치의 변경 내역이 하나의 Commit으로만 남기 때문에 어떠한 과정으로 변경되었는지에 대한 Hi..

Development/Git 2023.02.19