MVC, 템플릿 엔진 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리 스프링 부트 템플릿엔진 기본 viewName 매핑 resources:templates/ +{ViewName}+ .html @ResponseBody 원리 HTTP의 BODY에 문자 내용을 직접 반환 viewResolver 대신에 HttpMessageConverter 가 동작 기본 문자처리: StringHttpMessageConverter 기본 객체처리: MappingJackson2HttpMessageConverter byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음 스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 @Compo..
Deadlocks CPU를 받지 못 하는 waiting process에 의해 발생할 수 있는 이벤트를 기다리는 것으로 영원히 일어나지 않는 상태 Deadlock Prevention - 보수적, 자원 효율 ↓ (프로세스 시작 전 자원 확보) Deadlock Avoidance - deadlock에 접근, 자원 활용도 조금 더 높음 Deadlock Detection - deadlock 발생 시 무시 → 어느 부분에서 발생했는지 알려줌, 어떤 경우에 발생하는지 알고 코드를 변경하는 것이 필요함 (다른 패턴으로 바꾸기) Recovery from Deadlock - deadlock 발생 시 어떻게 회복 시킬 것인지에 대한 것 system calls, locking 등을 통해 발생할 수 있음 System Model ..
Classical Problems of Synchronization Bounded-Buffer Problem Producer, Consumer - Buffer의 full / empty, same slot에 접근 3개의 Semaphore (n개의 buffer) Semaphore mutex : 같은 영역에 Producer, Consumer 중 하나만 접근하도록 만들어주는 semaphore, 초기화 : 1 Semaphore full : 버퍼가 꽉 차있는지를 나타냄, 초기화 : 0 Semaphore empty : 빈 슬롯을 나타냄, 초기화 : n full = 0, empty = n, mutex = 1 Producer do { ... /* produce an item in next_produced */ ... w..
주문 조회 V4: JPA에서 DTO 직접 조회 OrderApiController @GetMapping("/api/v4/orders") public List ordersV4() { return orderQueryRepository.findOrderQueryDtos(); } OrderQueryRepository private final EntityManager em; /** * 컬렉션은 별도로 조회 * Query: 루트 1번, 컬렉션 N 번 * 단건 조회에서 많이 사용하는 방식 */ public List findOrderQueryDtos() { // 루트 조회(toOne 코드를 모두 한번에 조회) List result = findOrders(); //루프를 돌면서 컬렉션 추가(추가 쿼리 실행) result...
critical section (임계구역) 여러 프로세스들이 동시에 접근할 수 있는 부분 race condition (경쟁 상태) 임계구역에 여러 프로세스가 동시에 접근해 예측할 수 없는 결과가 산출되는 상태 mutual exclusion (상호 배제) 한 번에 한 프로세스가 접근할 수 있도록 만들어주는 기법 프로세스를 동시에 실행 → 공유 데이터에 대한 동시 접근으로 인해 데이터 비일관성이 발생할 수 있음 프로세스가 처리하는 순서를 지켜야 함 데이터의 일관성을 유지하려면 협력 프로세스의 정상적인 실행을 보장하는 메커니즘이 필요! Producer, Consumer critical section에서 race condition이 발생하는 예 동기화가 필요할 때는? Buffer가 full/empty same ..
CPU-burst CPU-burst와 I/O-burst는 교대로 동작! 대부분의 프로세스는 CPU-burst가 짧고, CPU를 적게 사용하는 프로세스들이 많음 CPU Scheduler Non-preemptive (비선점) 자발적으로 CPU를 양도하는 상태, 공평성 x running → waiting : I/O를 발생시키면 자발적으로 CPU를 넘겨주어야 함 terminates : 프로세스 종료시 문제 : real time process는 프로세스가 끝나는 deadline을 맞추기 위해 CPU를 빼앗아 와서라도 수행을 해야 함! → preemptive Preemptive (선점) 강제로 CPU를 빼앗기는 상태, 할당된 시간 끝나면 CPU를 빼앗김 → 일반적으로 많이 사용 running → ready : 프로..
실행 파일이 메모리에 로드 → 프로그램(수동적)이 프로세스(능동적)가 됨 프로세스 메모리 배치 Process State new : 프로세스가 생성됨 (컴파일한 후 디스크에 저장) running : CPU를 받아서 수행 중인 프로세스 waiting : I/O와 같은 이벤트가 일어나기를 기다림 ready : 프로세스가 CPU가 할당되기를 기다리는 상태 terminated : 프로세스 실행 완료 Diagram of Process State new → ready : disk에서 메인 메모리로 이동 ready → running : scheduler dispatch(준비 상태의 프로세스 중 하나를 선택하여 실행시킴) 수행 scheduler : 메인 메모리에서 누구를 선택할 것인가 dispatcher : 스케줄러에게..
Operating System Services 사용자 인터페이스 거의 모든 운영체제는 사용자 인터페이스를 제공 GUI(그래픽 사용자 인터페이스)는 I/O를 지시 CLI(명령어 라인 인터페이스)는 명령을 사용하며 특정 형식으로 명령을 입력 받아 사용됨 CLI, command interpreter는 직접 명령 입력을 허용함 shell - 유저의 명령어를 받아들여서 실행시킬 수 있도록 만드는 프로그램 프로그램 수행 OS가 메인 메모리로 프로세스를 가져오고, CPU를 할당해 실행 에러가 발생되면 소프트웨어 인터럽트를 발생시킴 I/O 작업 사용자가 입출력 장치를 직접 제어할 수 없어 운영체제가 입출력 수행의 수단을 제공 파일 시스템 관리 파일을 읽고 쓰거나, 생성하고 삭제 할 수 있어야 하고 파일에 대한 정보를 ..
Process 수행 중인 프로그램을 의미, 메모리에 있고 CPU를 할당받지 않아도 프로세스이고, 메모리에 옮겨진다면 수행할 수 있는 프로세스가 된다. Processor CPU와 같은 하드웨어를 의미 OS → 유저와 하드웨어 사이에서 매개체 역할을 하는 소프트웨어 (kernel 부분) OS의 목표 사용자 프로그램을 수행하고 사용자 문제들을 해결하기 쉽게 만들어 줌 컴퓨터 시스템을 사용하기 편리하게 만들어 줌 (중간에서 API 제공) 효율적인 방법으로 컴퓨터 하드웨어를 사용하게 함 source program compiler가 machine language로 변경해 target program로 만들어 줌 disk(수행 속도 : ms)에 저장 OS가 메인 메모리(수행 속도 : µs)로 올림 OS가 메인 메모리의..
날짜 추출하기 함수 내용 DATE_FORMAT(날짜, 'FORMAT') 날짜를 해당 포멧으로 변환 DATE(날짜) 날짜를 '연도-월-일'로 변환 YEAR(날짜) 날짜의 연도 반환 MONTH(날짜) 날짜의 월 반환 NOW(), CURRENT_TIMESTAMP() YYYY-MM-DD HH:MM:SS CURDATE(), CURRENT_DATE() YYYY-MM-DD CURTIME(), CURRENT_TIME() HH:MM:SS 날짜 비교하기 1. 날짜 차이 함수 함수 내용 DATEDIFF(날짜1, 날짜2) 날짜1 - 날짜2 차이를 일수로 반환 TIMESTAMPDIFF(단위, 날짜1, 날짜2) 날짜1 - 날짜2 차이를 선택한 단위로 반환 TIMEDIFF(날짜1, 날짜2) HH:MM:SS TIMESTAMPDIFF..