전체 글

80세까지 코딩하는 것이 목표인 개발자의 골방
· 리눅스
이전 글 https://braindisk.tistory.com/141 리눅스 UTS namespace 이전 글 https://braindisk.tistory.com/140 리눅스 namespace 기본 개념 namespace는 하나의 system에서 수행되지만, 각각 별개의 독립된 공간인 것 처럼 격리된 환경을 제공하는 lightweight 가상화 기술입니다... braindisk.tistory.com IPC namespace란 우선 IPC는 inter-process-communication의 약자이며 프로세스 간 통신을 위한 경로를 의미합니다. Linux에서 사용되는 대표적인 IPC 방식은 Pipe, Signal, Message queue 등이 있습니다. 외부 프로세스와의 통신은 주로 Socket을 사..
· 리눅스
이전 글 https://braindisk.tistory.com/140 리눅스 namespace 기본 개념 namespace는 하나의 system에서 수행되지만, 각각 별개의 독립된 공간인 것 처럼 격리된 환경을 제공하는 lightweight 가상화 기술입니다. 최근 유명한 Container 가상화 기술인 Docker나 LXC의 기 braindisk.tistory.com UTS namespace란 system의 hostname을 namespace 별로 격리시켜 주는 기능입니다. 자세히 말하자면, Linux system call 중 하나인 uname에서 utsname이라는 struct에 정의된 식별자 중 nodename을 isolate하는 것입니다. 일단 이해하기 어려운데요,, Linux system cal..
· 리눅스
기본 개념 namespace는 하나의 system에서 수행되지만, 각각 별개의 독립된 공간인 것 처럼 격리된 환경을 제공하는 lightweight 가상화 기술입니다. 최근 유명한 Container 가상화 기술인 Docker나 LXC의 기반이 되는 기술입니다. namespace는 Hardware resource 레벨의 가상화가 아니고, 단지 각각의 고립된 환경만 제공하는 기술입니다. Linux에서 namespace는 6가지로 분류됩니다. UTS namespace IPC namespace PID namespace NS namespace NET namespace USER namespace namespace 구현하기 Linux에서 namespace를 구현할 때는, clone()이나 unshare() 또는 set..
· 리눅스
Cgroup 기본 개념 Cgroup은 Control Group의 약자로 다수의 Process가 포함되어 있는 Process Group 단위로 컴퓨팅 자원의 사용량을 제한하고 격리시키는 Linux의 기능입니다. 여기서 컴퓨팅 자원은 CPU, Memory, Disk, Network를 의미합니다. Cgroup은 주로 Container의 Resource 제어를 위해서 많이 사용됩니다. 위 그림은 Container와 Cgroup의 관계를 나타내고 있습니다. Container가 생성되면 Container의 Process들을 담당하는 Container Cgroup이 생성됩니다. Container의 모든 Process들은 해당 Container Cgroup에 소속됩니다. Container 내부 Process들이 For..
· 리눅스
기본 개념 유닉스 운영체제에서 chroot는 현재 실행 중인 프로세스와 차일드 프로세스 그룹에서 루트 디렉터리를 변경하는 작업입니다. 이렇게 수정된 환경에서 실행되는 프로세스는 지정된 루트 디렉터리 밖의 파일들에 접근할 수 없으므로 (즉, 일반적으로는 접근이 불가능하므로) chroot 감옥이라고 부릅니다. 사용 목적 chroot는 다음의 목적에 유용하게 쓰일 수 있습니다. 테스트 및 개발 의존성 제어 호환성 복구 권한 분리 예시로 bash를 사용하는 어떤 프로세스를 chroot로 격리하고자 합니다. 격리된 환경에서는 밖의 파일들에 접근할 수 없으므로 해당 격리 환경에 bash를 사용하기 위한 의존성을 주입해주어야 합니다. 먼저 ldd 명령어를 사용하여 /bin/bash의 의존성을 확인합니다. $ ldd ..
· Spring
이 글은 실시간 알림 기능을 구현하기 위해 풀링, 웹소켓, SSE 중에 어떤 방법이 가장 적절한지 비교하는 포스팅입니다. 요구사항은 서버에서 클라이언트에게 실시간 알림을 전송할 수 있으면 됩니다. 웹소켓은 하나의 TCP 접속에 전이중 통신(양방향 통신) 채널을 제공하는 컴퓨터 통신 프로토콜입니다. 웹소켓은 HTTP 포트 80과 443 위에 동작하도록 설계되었으며 HTTP 프록시 및 중간 층을 지원하도록 설계되었으므로 HTTP 프로토콜과 호환이 됩니다. 또한 HTTP 폴링과 같은 반이중방식에 비해 더 낮은 부하를 사용하고 서버와 클라이언트 간의 실시간 데이터 전송을 가능하게 합니다. 웹소켓 프로토콜을 사용하기 위해 웹소켓 핸드셰이크에서 HTTP 업그레이드 헤더를 사용하여 HTTP 프로토콜에서 웹소켓 프로토..
· JAVA
Java NIO(New I/O)의 ServerSocketChannel과 SocketChannel은 블로킹과 논블로킹 방식을 지원합니다. 논블로킹 방식의 특징은 "제어권을 넘기지 않는다"라고 표현할 수 있겠습니다. 논블로킹 방식은 제어권을 넘기지 않기 때문에 함수 실행 흐름이 그대로 유지됩니다. ServerSocketChannel의 accept() 메소드를 예시로 살펴보겠습니다. serverSocketChannel의 accept() 메소드를 실행해도 논블로킹 방식이기 때문에 결과가 바로 리턴됩니다. 따라서 언젠가는 연결 요청이 올 것을 대비해서 무한 루프 내부에서 연결을 기다려야합니다. while(true) { SocketChannel socketChannel = serverSocketChannel.acc..
· JAVA
버퍼는 읽고 쓰기가 가능한 메모리 배열로 NIO에서는 데이터를 입출력하기 위해 항상 사용합니다. NIO의 버퍼는 저장되는 데이터 타입에 따라서 분류할 수 있고, 어떤 메모리를 사용하느냐에 따라서 다이렉트와 넌다이렉트로 분류할 수 있습니다. 데이터 타입에 따른 버퍼 ByteBuffer: byte 데이터가 저장되는 버퍼입니다. MappedByteBuffer: 파일 내용에 랜덤하게 접근하기 위해서 파일의 내용을 메모리와 맵핑시킨 버퍼입니다. CharBuffer ~ DoubleBuffer: 각 데이터 타입이 저장되는 버퍼입니다. 넌다이렉트와 다이렉트 버퍼 버퍼가 사용하는 메모리의 위치에 따라서 넌다이렉트 버퍼와 다이렉트 버퍼로 분류됩니다. 넌다이렉트 버퍼는 JVM이 관리하는 힙 메모리 공간을 이용하고 다이렉트 ..
총평: 별로입니다. 일단 과제 테스트를 시작하면 건드릴 건 핸들러, 서비스, 레포지토리 정도입니다. ArgumentResolver를 구현하기도 합니다. 이미 구현되어 있는 코드를 보고 스타일을 맞춰가면서 코딩하면 편합니다. 개인적으로 apache - commons-lang3 라이브러리 사용은 처음이었는데 편하고 좋았습니다. getter나 setter를 구현하고 constructor를 구현할 때에는 vscode의 [소스 작업..] 을 잘 활용하는게 좋습니다. Lombok이 없기 때문에 시간을 아껴야 하기 때문이죠.... 혹시나 테스트 코드에서 Order가 에러를 뿜으면 import 문제입니다. junit order를 명확하게 import 해주면 해결됩니다. JdbcTemplate을 사용할 때 JPA만 썼어..
@xftg77g
뇌장하드