본문 바로가기
반응형

전체 글286

[네트워크 입문] 기업용 네트워크의 전체 구성 “📖 해당 내용은  『풍부한 그림과 사진으로 배우는 네트워크 쉽게, 더 쉽게』(저자: 미카미 노부오 저자)을 참고하여 작성하였다.” 네트워크의 전체 구성네트워크는 여러 기술이 결합된 구조이므로, 개별 요소만 배우기보다는 전체적인 구성을 먼저 이해하는 것이 중요하다. 기업 네트워크는 규모에 따라 대규모 거점, 중규모 거점, 소규모 거점으로 구분되며, 각 규모에 따라 네트워크 설계 방식이 달라진다.대규모 거점 (본사 및 대형 지사)본사 또는 대형 지사에 해당200명 이상(또는 200포트 이상)이 연결서울, 대전, 부산 등 주요 도시에 위치네트워크 트래픽이 많고 구조가 복잡함필요한 네트워크 요소대용량 스위치 및 라우터방화벽 및 고급 보안 솔루션데이터센터 및 클라우드 연동중규모 거점 (일반 지점, 중형 사무실.. 2025. 2. 5.
[네트워크 입문] 네트워크 전반에 대한 이해 “📖 해당 내용은  『풍부한 그림과 사진으로 배우는 네트워크 쉽게, 더 쉽게』(저자: 미카미 노부오 저자)을 참고하여 작성하였다.”  가정용 네트워크 vs 기업용 네트워크, 무엇이 다를까? 가정과 기업에서 사용하는 네트워크는 규모와 목적이 다르기 때문에 차이가 존재한다.가장 큰 차이점으로는 사용하는 애플리케이션의 종류와 네트워크의 물리적 규모가 있다.가정용 네트워크는 개인적인 인터넷 사용이 주 목적이며, 기업용 네트워크는 업무를 원활하게 수행하기 위해 보다 복잡한 구조를 가진다.1. 가정용 네트워크란?가정용 네트워크는 일반 가정에서 사용하는 인터넷 네트워크를 의미한다.주로 광회선(FTTH), ADSL, 케이블 인터넷을 이용하며, 라우터(공유기)를 통해 유·무선 네트워크를 구성한다.가정용 네트워크의 특징.. 2025. 2. 5.
[C언어] pthread 라이브러리를 이용해서 스레드에게 signal 보내기 Sending a Signal to Thread멀티 쓰레드 환경에서 시그널을 보내는 방법과 이를 다루는 코드 예제를 알아본다.기본 환경아래는 간단한 멀티 쓰레드 환경을 구현한 코드이다.세 개의 쓰레드가 각각 thread1, thread2, thread3 함수를 실행하며, 각 함수는 무한 루프 내에서 메시지를 출력한다. void* thread1(void *data){ while(1){ printf("thread 1\n"); sleep(2); }}void* thread2(void *data){ while(1){ printf("thread 2\n"); sleep(2); }}void* thread3(void *data){ while(1.. 2025. 1. 28.
[C언어] Deadlock(교착상태) 원인과 해결법 Issues in Multithread app (DeadLock)멀티스레드 환경에서 나올수 있는 문제들 : 교착상태 Dining-Philosophers Problem철학자-젓가락 문제는 멀티스레딩 환경에서 데드락(Deadlock)을 설명하기 위해 자주 사용되는 고전적인 문제이다.문제 설명:철학자는 생각과 식사 중 하나만 할 수 있다.식사를 하기 위해서는 양쪽 젓가락 두 개를 들어야 한다.젓가락은 철학자와 이웃 사이에서 공유된다.한 철학자가 들고 있는 젓가락은 다른 철학자가 사용할 수 없다.식사를 마치면 철학자는 두 젓가락을 내려놓는다.Deadlock데드락이란 서로 다른 스레드(또는 프로세스)가 자원을 점유한 상태에서 서로의 자원을 기다리며 무한정 대기하는 상황을 말한다.Deadlock이 발생하는 이유:H.. 2025. 1. 28.
[C언어] pthread 라이브러리를 이용한 스레드 동기화 Threads Synchornization  Multi Thread에서 전역 변수, 힙 영역, malloc 등은 Data Sharing을 한다.다음 코드는 입력한 초만큼 전역 변수 cnt가 증가하는 예제이다.volatile: 컴파일러 최적화 방지. cnt 변수를 레지스터가 아닌 메모리에서 직접 읽고 쓰게 만듦volatile int cnt;void* do_loop (void *loop){ while(1) cnt++; return NULL;}int main(int argc, char *argv[]){ int status, sec; pthread_t thread_id; cnt = 0; sec = atoi(argv[1]); if (pthread_create(&threa.. 2025. 1. 28.
[C언어] 스레드의 개념과 pthread 라이브러리 Thread 개요실행의 최소 단위이고 함수를 실행한다.자체적인 논리적인 control flow를 가진다.각각 쓰레드는 자체의 스택과 지역변수를 가지지만 다른 쓰레드에게 보호받지 않는다.각각 쓰레드는 자체의 TID(thread ID)를 가진다.각각 쓰레드는 프로세스의 context에 실행되며 global data와 같은 코드를 공유한다.통상적으로 프로세스보다 더 오버헤드가 작다(경량화).가상 주소 공간 비교왼쪽은 프로세스가 2개일 때이고, 오른쪽은 하나의 프로세스 영역에서 User stack에 Thread1, Thread2가 할당되는 것을 볼 수 있다.같은 프로세스의 data, code, heap 공유독자적인 stack, PC, 레지스터를 할당받음.fork vs exec vs pthread_createfo.. 2025. 1. 28.
[Linux] Swap memory를 이용해서 메모리 부족 해결 (aws ec2) Swap 메모리는 RAM이 부족할 때 HDD의 일부를 RAM처럼 사용하는 방식으로, 시스템 안정성을 높이는 데 유용하다. AWS 권장 기준에 따르면, RAM이 2GB 이하일 경우 Swap 공간은 RAM 용량의 2배를 설정하는 것이 좋다. 예를 들어, RAM이 1GB인 t2.micro 환경에서는 Swap 메모리를 통해 2GB를 추가하여 총 3GB 메모리로 확장 가능하다.Swap 메모리 생성 및 활성화1. Swap 파일 생성 sudo dd if=/dev/zero of=/swapfile bs=128M count=16of: 파일 경로bs: Block 사이즈count: Block 개수→ 위 설정은 128MB * 16 = 2GB Swap 메모리를 생성. 2. 권한 설정 및 활성화sudo chmod 600 /swap.. 2025. 1. 25.
[Spring Boot jpa] 다중 LEFT JOIN 시 MultipleBagFetchException 발생 문제 문제테스트 중, 다음과 같은 쿼리에서 MultipleBagFetchException이 발생함:@Query("SELECT h FROM House h " + "LEFT JOIN FETCH h.rooms r " + "LEFT JOIN FETCH r.roommates " + "LEFT JOIN FETCH h.pins " + "WHERE h.id = :houseId")Optional findHouseDetailsById(@Param("houseId") Long houseId);MultipleBagFetchException은 Hibernate에서 여러 개의 @OneToMany 관계를 fetch join할 경우 발생하는 문제로, 한 번의 쿼리로 여러 개의 컬렉션(List)을.. 2025. 1. 25.
[Spring Boot] Record 객체를 이용하여 DTO 작성 Java record란?Java record는 Java 14에서 도입된 기능이다. 주로 데이터 전달 객체(DTO)와 같은 불변 객체를 정의할 때 사용된다. record는 클래스를 정의할 때 필드, 생성자, 접근자, toString(), equals() 및 hashCode() 메서드를 자동으로 생성하여 코드가 간결해진다. 주요 특징은 다음과 같다: 1. 불변성 (Immutability):record는 기본적으로 불변 객체이다. 생성 후 상태를 변경할 수 없다. 2. 자동 생성되는 메서드들:record는 필드를 기반으로 toString(), equals(), hashCode(), getter 메서드를 자동으로 생성한다. 3. 간결한 문법:record는 클래스를 정의하는 것보다 간단한 문법을 제공한다.기존 c.. 2025. 1. 25.
[Spring boot jpa] 연관된 엔티티 불러올때 LazyInitializationException 발생하는 문제 해결 지연 로딩하려 할 때 세션/entityManager이 닫혀 LazyInitializationException이 발생하는 문제 @OneToMany 관계에서 fetch의 기본값은 LAZY이다.@OneToMany(mappedBy = "house", cascade = CascadeType.ALL)private List rooms = new ArrayList();원인지연 로딩(Lazy Loading) 관련 오류FetchType.LAZY는 엔티티 관계에서 연관된 다른 엔티티를 지연 로딩 방식으로 로딩하겠다는 의미이다.그러나 지연 로딩을 사용하는 엔티티가 프록시 객체로 반환되기 때문에, 실제로 해당 엔티티가 사용될 때까지 로딩되지 않는다.이 때문에, 관계된 엔티티가 사용될 때 LazyInitializationExce.. 2025. 1. 25.