전체 글
-
[데이터베이스] Trigger 트리거데이터베이스 2024. 10. 6. 19:50
Trigger는 MYSQL 에서 테이블에서 어떤 이벤트가 발생 했을 때 자동으로 실행되는 것을 말한다 이벤트 리스너라고 이해하면 된다 다시 말해,어떤 테이블에서 특정한 이벤트가 발생했을때 (연산 inser, delete, update 등등) 실행시키고자 하는 추가 쿼리 작업들을 자동으로 수행할 수 있게끔 트리거를 미리 설정해 두는 것이다(테이블에 부착되는 프로그램 코드) MYSQL은 View에 트리거 부착이 불가능하다고 한다 트리거 종류 행 트리거 테이블 안의 영향을 받은 행 각각에 대해 실행 된다변경 전 행이나 변경 후 행은 OLD, NEW 라는 가상 줄 변수를 사용하여 읽을 수 있다여기에서 OLD 는 이름의 뜻처럼 예전 데이터 라는 의미이며 delete로 삭제되 데이터나 update로 바뀌기전의..
-
[운영체제] 뮤텍스(Mutex)와 세마포어 (Semaphore)운영체제 2024. 9. 21. 03:59
뮤텍스와 세마포어는 멀티스레드 환경때문에 나왔다 왜 나왔냐?-> 동시성 문제 때문에 나왔다-> 데드락 문제 동시성 문제동시성 문제는 여러 스레드가 동시에 접근할 때 발생할 수 있는 충돌을 말한다 데드락(deadlock)두개 이상의 스레드가 서로 다른 자원을 점유하고 서로 상대방의 자원을 기다릴때 교착 상태가 발생 할 수 있다 예를 들면 여러 스레드가 하나의 데이터베이스에 동시에 update 연산을 시도할 경우에 데이터 일관성에 문제가 생길 수 있다 이를 방지하기 위해 뮤텍스와 세마포어가 필요하다 뮤텍스(Mutex)? 한번에 하나의 스레드만 특정 자원에 접근 할 수 있도록 제어하는 동기화 객체이다자원에 접근하기 전 뮤텍스를 획득 하고 자원 사용이 끝나면 해제하는 방식이다 세마포어(Semaphore..
-
[Solitour] Builder 패턴을 써야할까?개발 ing 2024. 9. 21. 03:11
이 글은 Solitour 프로젝트를 진행하면서 내가 느낀 의문점과 공부했던 내용을 공유하기 위해 작성한 것이다. Solitour 프로젝트에서 나는 백엔드 개발을 담당했고, 같은 역할을 맡은 동료와 함께 협업하였다. 프로젝트를 진행하는 중 동료 개발자의 코드를 살펴보는데, Entity 클래스와 DTO 클래스에 @Builder라는 어노테이션이 사용된 것을 발견했다.’이게 뭐지?’라는 생각이 들었고, 곧바로 “Builder 패턴”에 대해 알아보기 시작했다. Builder 패턴이란? Builder 패턴은 객체를 생성하는 다양한 방법 중 하나로, 생성 과정에서 필요한 필드들을 유연하게 주입할 수 있는 방식을 제공한다. 이 패턴은 복잡한 객체를 간편하게 생성하고, 가독성을 높이는 장점이 있다. 객체 생성 방식에는..
-
[자료구조] 이진 탐색 트리자료구조 2024. 9. 11. 12:05
이진 탐색 트리는 Binary Search Tree 즉, BST라고 한다각 노드의 자식 노드가 최대 2개인 트리 사용하는 이유는 데이터의 효율적인 정렬검색삽입삭제 모두 가능하게 하는 구조가 있다 자세한 이유 1. 정렬된 데이터의 효율적인 검색 평균 O(log n) 시간 복잡도로 데이터를 검색할 수 있다 2. 동적 데이터 집합 관리데이터가 계속 추가, 삭제되는 동적인 환경에서도 효과적삽입, 삭제도 O(log n)의 시간 복잡도를 가진다 3. 중위 순회를 통한 정렬된 데이터 접근중위순회는 항상 정렬된 순서로 데이터에 접근하게 해준다 정렬된 데이터를 순차적으로 처리할때 유용하다 4. 범위 탐색 및 순차 접근 용이특정 범위의 데이터를 빠르게 검색범위 내의 데이터를 효율적으로 순차적으로 탐색하는데 적합하다 5..
-
[Spring JPA] entity의 생성일, 수정일 어떤식으로 할까Spring JPA 2024. 9. 11. 10:49
ERD 설계 하고 entity 매핑을 하려고 한다 테이블에는 생성일, 수정일 칼럼이 있다 나는 이번 Solitour 프로젝트를 하면서 이 칼럼들을 자동으로 관리 할 수 있는 방법이 없을까? 라는 궁금증이 들었다 이런 궁금증이 들었던 이유는 다음과 같다일반적으로생성일은 create API 요청에 만들어지는데 해당 entity 객체를 생성할때 마다 LocalDateTime.now()로 생성자에서 설정한다 수정일은 보통 update API 요청 시 수정일을 setter를 통해 LocalDateTime.now()로 갱신 한다 이러한 반복적인 코드들을 줄일 수 있는 방법이 없을까? 라는 고민을 하였고 JPA에서 이를 어떻게 처리하는지 공부하게 되었다 방법은 아래와 같다 방법 설정 1 @EntityListene..
-
[네트워크] Socket 이란?네트워크 2024. 9. 1. 03:03
네트워크에서 데이터를 주고받기 위한 통신의 끝점을 의미한다즉, 소켓은 컴퓨터 프로그램이나 애플리케이션이 네트워크상에서 다른 프로그램과 통신하기 위해 사용하는 인터페이스 이다OSI 7계층 중에서 응용 계층 즉, 7계층 에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐서 전송 계층으로 데이터를 전달해야 한다다시 말해 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스역할을 하고 두 호스트를 연결한다 소켓의 3요소IP 주소서버등을 식별하기 위한 고유한 주소포트 번호(Port)동일한 IP 주소 에서 여러 애플리케이션이 네트워크 통신을 할 수 있도록 특정 애플리케이션을 식별하는 숫자프로토콜(Protocol)통신 방식이나 규칙을 정의하는 네트워크 프로토콜 이렇게 세가지 요소는 함께 사용되어 소켓을 ..
-
[자료구조] 신장 트리자료구조 2024. 8. 31. 22:14
위 이미지를 보면 왼쪽은 그래프이고 오른쪽 세개는 왼쪽에 대한 신장트리이다 그래프 상에서 모든 노드가 사이클 없이 연결된 부분 그래프를 뜻함이러한 부분 그래프는 여러개 존재 할 수 있다여러 개의 부분 그래프 중 모든 정점이 최소 간선의 합으로 연결된 부분 그래프모든 정점을 포함하는 트리그럼 왜? 트리라고 할까-> 트리는 그래프 중에서 특수한 경우에 해당하는 자료구조이다즉, 사이클이 존재하지 않는 방향 그래프이다 사이클? : 순환 사이클이 존재하는 그래프를 만약 dfs 탐색을 한다고 하자 그러면 계속 무한으로 탐색을 할 것이다 하지만 사이클이 존재하지 않는다면 모두 다 탐색을 하면 끝나겠죠! 최소 신장 트리 (MST, Minimum Spanning Tree)신장 트리중에서 가중치 합이 가장 최소인 ..
-
[알고리즘] Kruscal 크루스칼 알고리즘알고리즘 2024. 8. 31. 22:13
최소 신장 트리 (MST, Minimum Spanning Tree) 를 만들기 위한 대표적인 알고리즘 중 하나이다 특징 1. 그리디 알고리즘크루스칼 알고리즘은 그리디 알고리즘의 일종으로 매 순간 최적의 선택을 하면서 전체 최적해를 찾는다이 말은 즉, 간선의 가중치가 가장 작은 것부터 차례대로 선택하여 최소 신장 트리를 구성 2. 간선 중심!간선의 가중치에 기반하여 간선을 선택한다그래서 간선을 정렬한 후 가장 가중치가 작은 간선부터 선택하는 방식이다 3. 간선 수가 적을 때 효율적간선의 수가 정점의 수에 비해 적을때 크루스칼 알고리즘이 효율적으로 동작한다왜냐하면 전체 간선을 정렬한 후 선택하는 방식이기 때문이다 과정1. 초기 상태는 정점은 서로 연결되어 있지 않는 상태이다2. 간선을 하나씩 추가하면서 ..