전체 글 149

[spring] MultipartFile을 Bufferimage로 받아서 S3에 업로드하기

기존에는 MultipartFile을 파일로 저장을시킨후에 업로드를 하고 삭제하는 방식으로 진행을 하였습니다. 하지만 첫번째장을 썸네일로 만드는 작업을 하려고하면 잘 안되는 문제가 발생을 하여서 file저장 방식이 아닌 bufferimage로 받아서 파이프라인을 타게끔 변경을 하였습니다. 기존 방법이 궁금하신분은 이 곳을 보고 와주세요. 먼저 껀쮸롤러를 먼저 보겠습니다. @PostMapping public ResponseEntity createProduct( @RequestHeader("Authorization") String accessToken, @RequestPart(value = "file") List multipartFile, @RequestPart(value = "product") @Valid ..

[OS] 프로세스와 스레드

프로세스와 스레드의 차이 프로세스 현재 실행 중인 프로그램 메모리 위에 적재되어 cpu의 할당을 받을 수 있다. 동적 메모리인 힙을 할당받을 수 있다. 프로세스의 구조 text(code): 일반적인 코드 data: 변수 및 초기화된 데이터 stack: 임시 데이터(함수 호출 및 로컬 변수 등) heap: 코드 내에서 동적으로 생성되는 데이터 프로세스는 다른 프로세스의 자원에 접근할 수 없다. 역할에 따른 구분 사용자 프로세스 사용자 코드를 수행하는 프로세스 커널 프로세스 모든 메모리와 프로세스의 명령에 액세스할 수 있는 프로세스 실행 순서 제어 및 다른 프로세스의 접근 제어 사용자 프로세스 생성 프로세스의 상태 변화 New: 프로그램이 메인 메모리에 할당 Ready: 프로그램 초기화 등 모든 준비를 마친..

[OS] 프로세스 동기화

프로세스 동기화 프로세스 동기화란? 서로 협력을 하는 프로세스들이 순서나 규칙을 통해서 공유자원의 일관성을 보장하는 것입니다. 스타크래프트에서 한번 캐면 소멸되는 미네랄이 있습니다. 하지만 그 미네랄을 두고 착실한 2명의 scv가 서로 경쟁을 하면서 미네랄을 캐는데 프로세스 동기화가 되지 않아서 두명의 scv가 사이좋게 미네랄을 들고 있습니다. 이러한 문제를 해결하기 위해서 서로 규칙을 정해서 공유 자원의 신뢰성을 만드는것이 프로세스 동기화 라고 합니다. 경쟁 조건 (Race Condition)이란? 여러 프로세스가 공유 자원을 차지하려고 경쟁을 할때 프로세스가 공유 자원에 접근 순서에 따라 실행결과가 달라지는 경우입니다. 임계 구역 (Critical Section)이란? 프로세스간에 공유자원을 접근할떄..

[OS] 캐시 메모리

캐시 메모리 캐시 메모리란 주기억장치에서 자주 사용하는 프로그램 or 데이터를 저장해 속도를 빠르게 하는 메모리 주기억장치와 캐시 기억 장치 사이에서 정보 옮기는 행위를 사상(매핑)이라고 함 매핑의 3가지 방법 직접 매핑: 메인 메모리를 여러 구역으로 분할하여 캐시 슬롯과 매핑 장점: 절차가 단순하고 신속 단점: 높은 캐시 미스율 연관 매핑: 메인 메모리의 각 블록이 캐시 어느 슬롯이던 적재 가능 장점: 지역성 높은 접근 시 캐시 적중률이 높다. 단점: 구현이 어려워 구현 비용이 상승한다. 집합 연관 매핑: 캐시와 메모리가 M대 1로 대응한다. 장점: 앞의 두 가지 매핑 방법의 장점을 수용 단점: 구현 비용이 비쌈 캐시 메모리 교체 알고리즘의 종류 Random - 교체될 페이지를 임의 선정 - 오버헤드가..

[OS] 사용자 수준 쓰레드와 커널 수준 쓰레드

사용자 수준 스레드와 커널 수준 스레드 쓰레드는 뭐니? 프로세스 내 작업의 단위를 말함 하나가 될 수도 있고, 여러개(멀티쓰레드)가 될 수도 있음! 커널은 뭐니? 컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행된다. 또한, 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어이기 때문에 전원이 켜짐과 동시에 메모리에 올라가야 한다. 하지만, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심함 → 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이 때 메모리에 상주하는 운영체제의 부분을 커널이라..

[OS] 메모리 관리 전략

메모리 관리 전략 메모리 관리가 필요한 이유? 메모리의 성능도 올라가지만 그에따라 소프트웨어의 성능도 올라가므로 메모리 부족현상은 계속 발생이 되었다. 제한된 메모리를 최대한 효율적으로 사용하기 위해서 메모리 관리전략이 필요하다. 효율적인 메모리 관리 3가지 동적적재 모든 프로그램을 적재하는것이 아니라 반드시 필요한루틴과 데이터만 적재하는 기법입니다. 루틴: 어느 프로그램이 실행될때 불려지거나 반복해서 사용되도록 만들어진 코드들 입니다. 동적연결 라이브러리 루틴연결을 컴파일 시점에 하는 것이 아닌 실행 시점까지 미루는 기법입니다. 스와핑 실행중이지 않은 프로세스를 저장장치인 swap영역으로 이동하여 메모리를 확보하는 기법입니다. 잦은 스와핑시에 단점 단편화 잦은 메모리 관리가 일어나면 메모리사이에 틈이 ..