목록분류 전체보기 (18)
쟈미로그
@Query 어노테이션을 사용해서 Native Query, JPQL을 사용하면서 예상치 못한 에러들을 마주쳤었다. 단순히 메소드 위에 Query 어노테이션만 붙여서 쿼리를 작성하면 런타임에러가 발생했다. org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [UPDATE com.jyami.jyamibank.account.domain.account.Account a SET a.balance = a.balance - :amount WHERE a.accountNum = :accountNum AND a.balance >= :amount] at org.hibernate.hql.internal.ast.Qu..
학교에서 내 노트북 검색창에 구글(https://www.google.com)을 검색할 때 일어나는 과정을 자세히 정리해보자!! 들어가기 앞서, 학교 네트워크의 구조는 이렇다고 하자. 학교 네트워크에는 여러 AP(Access Point)가 있고, AP들은 switch에 연결돼있다. switch들은 게이트웨이 역할의 router와 연결돼있고, 이 router는 SK브로드밴드나 KT와 같은 ISP(Internet Service Provider)의 네트워크에 연결돼있다. ``` School network +----+ +--------+ /------\ +--------+ Node ---| AP |---| Switch |---| Router |---| Switch |--- ... +----+ +--------+ ..
1. OSI 7계층 vs TCP/IP 4계층 현대의 실질적인 인터넷 통신은 TCP/IP 4계층을 따르고 있다. TCP/IP는 OSI 모델보다 먼저 개발되었다. 이후에 나온 OSI 모델에는 TCP/IP에 없는 session과 presentation 2개의 계층이 포함됐다. 2. OSI 7계층 Application 계층 최종 목적지. 응용 프로세스와 연관해서 서비스를 수행하는 계층. ex) HTTP, DNS, DHCP, SMTP.. message 단위로 전송한다. Presentation 계층 송/수신자가 공통으로 이해할 수 있도록 데이터 변환/압축/암호화가 이뤄지는 계층. Session 계층 통신을 위한 논리적인 연결을 담당하는 계층. Transport 계층 종단간(end-to-end) 데이터 전달을 목표로..
동기화 과정에서 공유 자원에 접근하는 임계 영역에 대한 관리를 어떻게 해주어야 문제들이 발생하지 않을까? 뮤텍스와 세마포어를 사용하면 공유 자원에 대한 여러 스레드/프로세스의 동시 접근을 막을 수 있다. 1. 뮤텍스 (Mutex) 뮤텍스는 공유 자원에 접근 스레드들의 실행 시간이 서로 겹치지 않게 단독으로 실행되게 하는 방법이다. 말 그대로 상호 배제(Mutual Exclusion)의 약자다. 임계 구역에 들어갈 때 lock을 걸고 나갈 때 unlock해서 접근을 조율한다. 2. 세마포어 (Semaphore) 세마포어는 다수의 프로세스/스레드의 n개의 공유 자원에 대한 접근을 제한하는 방법이다. 뮤텍스와의 다르게 여러 스레드가 동시에 한 공유 자원에 접근할 수 있다! 접근 가능한 스레드 개수를 지정해서 ..
1. 임계영역 (Critical Section) 동일한 자원(공유자원)에 접근하는 코드 영역. 즉, 문제가 발생하지 않게 독점을 보장해줘야 하는 영역이다. 방법 뮤텍스, 세마포어 등이 있다. 해결 조건 상호 배제 : 한 프로세스/스레드가 임계 영역 진입 시 다른 이는 들어갈 수 없음. -> 안될 시 Race Condition 발생 한정 대기 : 특정 프로세스/스레드가 임계 영역에 영원히 들어가지 못하면 안됨. -> 안될 시 Starvation 발생 진행 : 포르세스/스레드 간 임계 영역 진행에 대해 서로 방해할 수 없음. -> 안될 시 DeadLock 발생 2. 경쟁 상태 (Race Condition) 여러 프로세스가 동시에 공유 자원에 접근할 때, 접근 순서에 따라 결과값이 달라지는 상태. 즉, 해당 ..
1. 프로세스와 스레드 프로세스 프로그램이 자원을 할당받고 메모리에 올라가서 실행되고 있는 상태. code, data, heap, stack 영역을 갖는다. 프로세스마다 각자의 공간을 갖는다. = 서로 다른 프로세스 간에 메모리 접근은 허용 불가능하다! (만약 프로세스간 통신을 원한다면 IPC를 이용해야한다.) 따로 동기화 작업이 필요없다. 컨텍스트 스위칭 비용이 크다. 스레드 프로세스 내의 실행 단위. 하나의 프로세스는 반드시 1개 이상의 스레드(메인 스레드)를 갖는다. stack만 따로 할당받고, 나머지 code/data/heap 영역은 공유한다. 동기화 작업이 필요하다. 컨텍스트 스위칭 비용이 적다. 스레드마다 PC 레지스터를 갖는다. (스레드도 결국 컨텍스트 스위칭 되므로) 스레드마다 stack을..
1. 운영체제 (OS) 운영체제는 HW와 응용프로그램 사이에서 인터페이스 역할을 하는 시스템 소프트웨어다. HW를 관리하고, 컴퓨터 시스템의 자원들을 효율적으로 관리하고, 사용자가 컴퓨터를 효과적으로 사용할 수 있도록 환경을 제공해준다. 2. 커널 커널은 메모리에 상주하는 운영체제의 핵심 부분이다. 어떤 응용프로그램이 컴퓨터 시스템에서 수행되려면 메모리에 올라가 있어야 한다. 마찬가지로 운영체제도 소프트웨어로서, 컴퓨터 전원이 켜짐과 동시에 메모리에 올라가야한다. 하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 메모리 낭비가 심해진다. 따라서 운영체제 중 항상 필요한 부분만 메모리에 올리게 되는데 그것이 커널이다! 카널은 운영체제의 핵심 역할인 컴퓨터 자원 관리 역할을 하지만, 사용자와..
1. 버블 정렬 (Bubble Sort) 버블 정렬은 서로 인접한 원소 간에 대소 비교를 통해 차례대로 큰 수를 뒤로 보내는 정렬 방식이다. 시간복잡도(최선/평균/최악) : 모두 O(N^2) 안정 정렬 : YES 제자리 정렬 : YES (swap의 tmp 변수로 인해서 공간복잡도가 O(N)이라서 큰 메모리를 필요로 하지 않는다.) 어떤 경우라도 전체 원소를 비교해야해서 매우 비효율적이다. static int[] num = { 4, 2, 2, 1, 7, 3, 10, 9, 6, 8 }; public static bubble() { for (int i = 1; i num[j..