일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 함수형 인터페이스
- 문자열 불변성
- Thread Library
- 롬복주의점
- OS
- functional interface
- 문자열 리터럴
- python-socketio
- hiberbate
- 쓰레드 라이브러리
- custom annotation
- ReflectUtils
- task_struct
- sql-mappler
- none이미지
- java.util.function
- strict stubbing
- Thread Multiplexing
- Spring
- spring-data-jpa
- django-crontab
- 운영체제
- 도커
- 프로세스
- AOP
- @Header
- rainbow table
- Process
- SystemCall
- FunctionalInterface
- Today
- Total
목록전체 글 (35)
JH's Develog

롬복은 getter&setter, toString등의 bolierplate 코드들을 어노테이션 하나로 줄여주어 생산성을 향상 시켜주는 자바 진영의 대표적인 라이브러리 입니다. 그러나 롬복은 편한만큼 조심해야할 부분이 많은데요 그 부분에 대해서 알아보겠습니다. 프로그래머의 의도를 피하는 동작(1) Item 클래스를 예시로 들어보겠습니다. 사용자가 Item의 필드에 final을 붙일 때 name이라는 필드는 한번 초기화 된 후 변하지 않기 때문에 null값으로 초기화 되기는 기대하지 않을 것 입니다. 그러나 @Builder에 의해 적용된 빌더 패턴으로 인해 name은 의도하지 않은 null 값으로 초기화 될 수 있습니다. 물론 프로그래머의 실수인지 아닌지 논쟁의 여지가 있는 부분이지만 롬복을 사용할 때 주의..

application.properties 파일에 환경변수를 설정하고 코드에서 값을 가져오는 방법을 알아보겠습니다. 의존성은 다음과 같습니다. dependencies { ... annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' } 먼저 application.properties에 설정 값들을 추가합니다. @ConfigurationProperties 어노테이션이 핵심입니다. application.properties 파일에서 키 값이 "my"인 설정값을 추가했기 ..

@Component Component 어노테이션은 클래스에 붙어서(Class-level) 이 클래스를 Custom Bean으로 만들어줍니다. ComponentScan을 통해서 @Component가 붙은 클래스는 필요한 의존성을 모두 주입받고 스프링 컨테이너에 등록되며, 등록하려는 Bean의 클래스 소스가 편집가능한 경우에 사용됩니다. Component에는 @Controller, @Service, @Repository라는 스테레오 타입 어노테이션들이 있으며 목적에 맞게 선택하여 사용할 수 있습니다. @Bean Bean 어노테이션은 메서드에 붙는 Method-level 어노테이션이며 인스턴스화 하는 코드가 수동으로 작성됩니다. 빈의 인스턴스 코드와 클래스의 정의가 분리된 구조이기 때문에 외부 라이브러리나 써..

도커 컨네이너를 서비스로 등록하여 부팅시 자동으로 실행되도록 설정해보겠습니다. 라즈비안 OS환경에서 실행했으며(우분투에서도 동일하게 동작합니다.) Django 웹서버로 만든 도커 컨테이너를 사용하겠습니다. 먼저 /etc/systemd/system 폴더에 .service파일을 작성해주어야 합니다. 서비스 파일명은 자유롭게 설정해주면 되며 저는 "docker-django.service"로 설정하였습니다. //커멘드 sudo vim /etc/systemd/system docker-django.service //docker-django.service 파일 [Unit] Description=My Django Server Wants=docker.service After-docker.service [Service] ..
안드로이드에서 API 요청을 보낼때는 주로 retrofit2 라이브러리를 사용합니다. 토큰과 같은 정보들은 Request의 헤더에 포함되어서 서버로 전달되어야 하므로 헤더를 추가하는 방법을 알아보겠습니다. 헤더를 추가하는 방법에는 두가지가 있는데, 하나는 API 인터페이스에 직접 @Header 어노테이션을 붙인 파라미터를 추가하는 방법이고 다른 하나는 Interceptor를 사용하는 방법입니다. @Header 어노테이션 활용 import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query interface ItemListAPI { @GET("/api/itemlist") fun getItemList( @Header("token") to..

이전 포스팅에 이어지는 글입니다. https://jhkimmm.tistory.com/14 [OS] 쓰레드란? - 쓰레드와 Parallelism/Concurrency 쓰레드란? 프로세스는 실행 중인 프로그램(text segment)이며 작업의 단위이고, 쓰레드는 프로세스 내부에 있는 일련의 Execution이며 하나의 프로세스는 하나 이상의 쓰레드를 가질 수 있습니다. 그 jhkimmm.tistory.com 유저레벨 쓰레드라고 해도 결국 실행하려면 시스템 콜을 사용해서 커널의 도움을 받아 프로세서에 할당 되어야 할텐데, 이전 포스팅에서 다룬 내용 처럼 유저 쓰레드와 커널 쓰레드가 분리되어 있다면 커널은 유저 쓰레드를 어떻게 다뤄야할까요? 여기에는 여러가지 모델이 있습니다. Multiplexing User ..

쓰레드란? 프로세스는 실행 중인 프로그램(text segment)이며 작업의 단위이고, 쓰레드는 프로세스 내부에 있는 일련의 Execution이며 하나의 프로세스는 하나 이상의 쓰레드를 가질 수 있습니다. 그리고 각 쓰레드는 프로세스 내부에서 code, data, files는 공유하지만 각자의 Program Counter, Stack, Register를 가집니다. 그렇다면 왜 쓰레드를 사용할까요? 쓰레드는 light-weight 프로세스라고 할 수 있으므로 프로세스를 생성하는 것보다 Overhead가 적고 높은 Parallelism(병렬성)으로 인해 높은 퍼포먼스를 기대할 수 있습니다. 프로세스의 생성은 resource-intensive하므로 Parallel하게 같은 task를 수행할 때 새로운 프로세스..

람다식에 대해 잘 모른다면 아래 포스팅을 참고하길 바랍니다. [JAVA] 람다식 Lambda Expression JDK1.8 부터 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 될 수 있게 해주었습니다. 람다식 덕분에 자바는 기존의 자바를 거의 변경하지 않고도 함수형 언어의 장점을 잘 접목 jhkimmm.tistory.com 람다식에 대한 기본적인 내용을 학습했다면, 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓은 java.util.function 패키지에 대해서 알아보아야 합니다. 매번 새로운 함수형 인터페이스를 정의한다면 재사용성이나 유지보수 측면에서 좋지 않으므로, 가능하면 이 패키지의 인터페이스를 사용하는 것이 좋습니다. 가장 기본적인 함수형 인터페이스 함..