본문 바로가기

전체 글28

[JPA] Querydsl group by error Querydsl로 group By를 사용하여 쿼리문을 작성하였다. Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'fittingnote.producthit2_.hits' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 정상적으로 동작할거라고 생각했지만 위와 같은 오류가 발생했다. sql_mode의 only_full_group_by 속성이 활성화 되어 있어 현재 group By절과 호환되지 않는다는 문제라고 한다. 해결할 수 있는.. 2023. 1. 20.
[CS] 프로세스와 쓰레드 프로세스란? - 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. - 수행 중인 프로그램 - 수행 중인 프로그램의 인스턴스 - 수행되어야 할 명령들의 활성화 단위 - 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 및 쓰레드로 구성되어 있다. 쓰레드란? - 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것 프로세스가 가질 수 있는 쓰레드의 개수는? - 하나의 프로세스는 가질 수 있는 쓰레드의 개수는 제한되어 있지 않지만 쓰레드가 작업을 수행하는 메모리공간이 필요하기 때문에 프로세스의 메모리 한계에 따라서 생성할 수 있는 쓰레드의 수가 정해진다. 싱글 쓰레드와 멀티 쓰레드의 차이 ex) 채팅 서비스 싱글 쓰레드 - 싱글 쓰레드의 경우 하나의 쓰레.. 2023. 1. 14.
[CS] 트랜잭션이란? 트랜잭션이란? 데이터베이스의 상태를 변환시키기 위해 수행하는 작업의 단위 트랜잭션 ACID 1. 원자성 트랜잭션 내에서 실행한 작업들은 하나의 작업과 같이 모두 성공하든가 모두 실패해야 한다. 2. 일관성 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 3. 고립성 하나의 트랜잭션의 실행은 동시에 실행중인 다른 트랜잭션들의 간섭을 받아선 안된다. 4. 지속성 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야한다 이상현상 1. 삽입이상 튜플 삽입 시 특정 속성에 해당 하는 값이 없어 NULL이 들어가는 현상 2. 수정이상 튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상 3. 삭제이상 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현.. 2023. 1. 6.
[Spring] Spring AOP Logging 공통 관심사 분리 현재 모든 controller 로직에 controller 시작을 알리는 log를 적용하였다. 그저 시작을 알리는 log 이지만 만약 log를 변경해야할시에는 모든 log를 변경해야한다. 또한 트랜잭션 시작을 알리는 log를 작성해야할 경우 controller와 동일하게 모든 서비스 메서드에 log를 작성해야하며 변경할시에 공통 로그를 모두 변경해야한다. 위의 그림에서는 주문을 생성하거나 배달 가능지 조회, 주문한 물품 조회라는 핵심 로직을 가지고 있다. 그렇기에 log는 부가기능으로 생각해볼 수 있다. AOP는 핵심 로직과 부가 로직으로 구성된 로직에서 중복되는 공통관심사항을 따로 분리하여 관리할 수 있다. Pointcut 어노테이션은 필터링할 위치를 지정해주는 것으로 allLogController 메서.. 2023. 1. 4.
[CS] 알고리즘 선택 정렬 현재 데이터의 상태와 상관없이 무조건 모든 원소를 비교하고 위치를 바꾼다. O(N^2)의 시간 복잡도를 가진다. 삽입 정렬 특정한 데이터를 적절한 위치에 삽입한다는 의미로 특정한 데이터가 적절한 위치에 들어가기 이전에 그 앞까지의 데이터는 이미 정렬되어 있다고 가정한다. 두번째 데이터부터 시작한다. 왜냐하면 첫번째는 정렬되어 있다고 판단하고 시작하기 때문 정렬이 이루어진 원소는 항상 오름차순을 유지하고 있다. 삽입 정렬에서는 특정한 데이터가 삽입될 위치를 선정할 때 삽입될 데이터보다 작은 데이터를 만나면 그 위치에서 멈추면 된다. O(N^2)의 시간 복잡도를 가진다. 거의 정렬된 상태라면 최선의 경우 O(N)의 시간 복잡도를 가진다. 퀵 정렬 대부분 프로그래밍 언어의 정렬 라이브러리의 근간이 .. 2022. 12. 30.
[Design Pattern] 추상 팩토리 패턴 적용 현재 구조 주문 서비스에 카드, 포인트, 포인트+카드 결제를 요청받은 type에 따라 결제를 진행하고 주문을 생성하는 로직이다. 문제점 주문 생성 메소드에 결제와 주문의 모든 역할과 책임이 포함되어있다. 추상 팩토리 패턴 서로 연관되어 있는 객체를 인터페이스로 구성하고 팩토리에서 객체를 생성하여 필요한 하위 클래스를 결합해주는 방식 적용 CardService MemberService PaymentAbstractFactory 요청에 따른 결제 type이 포인트, 카드+포인트 결제일 경우 memberService 클래스를 반환해주고 카드 결제일 경우 cardService를 반환해준다. PaymentService OrderController OrderService 그렇게 MemberService는 카드+포인트.. 2022. 12. 25.