일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로세스
- task_struct
- 도커
- 문자열 불변성
- Spring
- custom annotation
- hiberbate
- strict stubbing
- 롬복주의점
- AOP
- django-crontab
- python-socketio
- @Header
- 문자열 리터럴
- Thread Multiplexing
- rainbow table
- SystemCall
- FunctionalInterface
- 운영체제
- ReflectUtils
- sql-mappler
- OS
- spring-data-jpa
- Thread Library
- 함수형 인터페이스
- 쓰레드 라이브러리
- Process
- java.util.function
- functional interface
- none이미지
- Today
- Total
목록전체 글 (35)
JH's Develog
JDK1.8 부터 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 될 수 있게 해주었습니다. 람다식 덕분에 자바는 기존의 자바를 거의 변경하지 않고도 함수형 언어의 장점을 잘 접목시키는데 성공할 수 있었습니다. 람다식을 한마디로 표현하자면 "메서드를 하나의 식으로 표현한 것"입니다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1) ); 위 코드에서 (i) -> (int)(Math.random()*5+1) 부분이 바로 람다식인데, 이렇게 람다식을 활용하면 람다식 자체만으로도 메서드의 역할을 대신할 수 있습니다. 게다가 람다식은 메서드의 매개변수로 전달되거나 결과값으로 반환될 수도 있으므로 람다식으로 인해 메서드..

지난 포스팅에 이어서 프로세스에 대해 알아보겠습니다. PCB PCB(Process Control Block)는 프로세스를 표현하기 위한 자료구조이며 커널안에 존재합니다. PCB는 프로세스에 대한 아래와 같은 다양한 정보들을 담고 있습니다. Process state : New, Running, Wait등의 프로세스 상태 Program counter : 다음 인스트럭션의 주소 CPU register CPU scheduling info : Priority, 스케줄링 큐의 포인터, 스케줄링 파라미터들과 같은 스케줄링에 관련된 정보 Memory-management info : base & limit registers, Page table, Segment Table Accounting info : CPU사용량, P..

프로세스란? 프로세스는 실행 중인 프로그램(text segment)이며 작업의 단위입니다. 이뿐만 아니라 다양한 방식으로 표현할 수 있는데 Program Counter가 가리키고 있는 현재의 인스트럭션, 메모리안에 있는 컨텐츠(stack, heap, global variables) 또한 프로세스라고 할 수 있습니다.즉 프로그램은 passive한 개념이고 프로세스는 active한 개념이며 하나의 프로그램으로부터 여러개의 프로세스가 존재할 수 있습니다. 쓰레드와의 차이점 쓰레드는 프로세스 내부에 있는 일련의 Execution이며 하나의 프로세스는 하나 이상의 쓰레드를 가질 수 있습니다. 그리고 각 쓰레드는 프로세스 내부에서 code, data, files는 공유하지만 각자의 Program Counter, S..

도커 이미지를 빌드하다보면 위와 같은 이미지들이 쌓이곤 하는데 일일히 ID입력해서 지우기는 너무 번거롭습니다. 이미지들을 일괄적으로 한번에 삭제하는 방법을 알아보겠습니다. docker rmi $(docker images -f "dangling=true" -q) dangling 필터는 TAG가 없는(none)인 이미지만 필터링 해주므로 -f 옵션으로 dangling=true인 이미지들만 검색한 후 -q 옵션을 통해 이미지의 ID만 가져와서 rmi를 통해 삭제해주는 명령어 입니다. Error response from daemon: conflict: unable to delete (must be forced) - image is being used by stopped container 어떤 이미지들은 위와 같..

OS의 디자인 디자인의 목표는 크게 User goal과 System goal로 나눌 수 있습니다. User goal은 쉬운 사용, 빠른 속도, 신뢰성, 쉬운 학습 등의 사용자 관점 목표이고, System goal은 구현의 용이성, 유지/보수의 쉬움, 유연성, 효율성, 오류에 견딜 수 있는 정도 등의 시스템 관점의 목표입니다. 이들은 Requirements가 확실하지 않고 명확한 해결법을 찾기 어렵습니다. 이때 가이드라인을 잡기 위해서 Mechanism과 Policy 개념을 알 필요가 있습니다. Mechanism은 HOW, Policy는 WHAT에 해당한다고 할 수 있으며 서로 독립적이어야 합니다. 예를 들어 "30일이 지나면 만료되는 패스워드"에서 Mechanism은 '비밀번호를 만료시키는 방법'이라고 ..
라즈베리파이에 Django로 소형 웹서버를 구축해놓고 아두이노로부터 전달 받은 센서값을 node.js로 구현된 웹서버에 실시간으로 전달해주는 프로젝트를 진행 중입니다. Naive한 웹소켓을 직접 사용하는 것 보다는 쉽게 사용할 수 있는 적절한 라이브러리를 찾아보니 Django에는 channels라는 좋은 웹소켓 라이브러리가 존재하지만 현재 진행 중인 프로젝트가 외부의 node.js 서버와 통신을 해야하다보니 인터페이스가 호환을 위해 socket.io를 파이썬으로 구현한 python-socketio 라이브러리를 사용하게 되었습니다. 즉, Django Server - Nodejs Client인 Socket.io(웹소켓)통신을 구현하면 됩니다. Django라는 프레임워크 자체가 request가 들어오면 쓰레드..

Validation이란 어떤 데이터 (주로 사용자 또는 다른 서버의 request)의 값이 유효한지, 잘못된 내용이 있는지 확인하는 단계를 뜻합니다. 예를들어 이메일 주소의 양식은 "email@email.com"의 양식어어야 하는데, 이 양식과 일치하지 않는 값이 들어온다면 해당 값의 저장을 막을 수 있습니다. Validation을 진행하는 방법은 크게 두 가지로 나눌 수 있습니다. i) Java Bean Validation (어노테이션 기반) ii) Spring validator 인터페이스 구현을 통한 validation 먼저 Java Bean Validation부터 살펴보겠습니다. Java Bean Validation 스프링 부트에서는 gradle에 의존성 하나만 추가해주면 간단하게 사용할 수 있습니..

이번 포스팅에서는 Custom Annotation과 @Around를 활용해서 메서드의 실행시간을 측정 해보겠습니다. 커스텀 어노테이션 생성 먼저 Timer라는 Custom Annotation을 생성해줍니다. @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Timer {} @Target은 어노테이션을 붙일 수 있는 대상을 지정하는 역할을 하며 들어가는 파라미터는 다음과 같습니다. ElementType.TYPE : 클래스, 인터페이스, 열거 타입에 어노테이션을 붙일 수 있습니다. ElementType.CONSTRUCTOR : 생성자에 어노테이션을 붙일 수 있습니다. Eleme..