분류 전체보기

공부!/OS

Spinlock / Mutex / Semaphore

OS에서 여러 스레드가 공유하는 공유 자원에 대한 동시성 문제를 해결하기 위해 프로그램적으로 사용하는 여러 방안들을 이론적으로 살펴보고, 해당 방법들을 간단한 자바 코드로 작성해보겠다. 그 전에 간단한 용어 소개부터. 공유 자원 : 여러 스레드 / 프로세스가 공유하는 자원. 임계 영역 : 스레드 / 프로세스가 공유 자원에 접근하는 영역. 자바 중심으로 살펴볼 것이기 때문에 실행 단위를 간단하게 스레드로 좁히겠다. 공유 자원에 대해 동시성 문제를 컨트롤하기 위해, 스레드는 임계 영역에 들어가기 전 '락(lock)'을 얻어야 한다. CS에서 동시성 컨트롤은 이 '락 컨트롤'이라 생각해도 무방하다. 락 컨트롤에는 락과 관련해서, 어떻게 스레드들이 락을 얻고, 락을 내려놓고, 어떤 스레드에게 락을 할당할지 결정..

삽질..

2시간 삽질했던 "JpaRepositoryImpl"

하........ 개빡친다... ShortenUrl 엔티티를 저장하는 다음과 같은 JPA Repository를 정의했다. @Repository public interface UrlRepositoryJpa extends JpaRepository { Optional findByShortenUrl(String shortenUrl); } 뭐 별거 없지? 해당 인터페이스는 infrastructure 패키지에 있었고, 결과적으로는 domain 패키지의 UrlRepository를 구현해야했기 때문에 JPA Repository를 구성으로 사용하는 Impl 클래스를 만들었다. @Repository @RequiredArgsConstructor public class UrlRepositoryJpaImpl implements..

공부!/Network

HTTP 버전별 변천사

초간단하게 알아보는 HTTP/0.9부터 HTTP/3까지의 내용 !!! 머릿속에 남겨놓고 싶어서 이런저런 자료를 찾아보았다. 1. HTTP/0.9 : 원시 HTTP HTTP란 Hyper Text Transfer Protocol로써, www를 통해 hyper text를 요청 - 응답 구조로 교환하기 위한 프로토콜이다. 최초의 HTTP는 정말 단순히 "요청"에 대한 "응답"만을 받기 위한 프로토콜이었다. 요청은 형태로 단 한 줄 만이 존재했고 응답 역시 단순 HTML만이 있을 뿐이었다. 헤더? 이딴거 없었다. 또한 응답을 받으면 TCP 커넥션을 바로 끊어버렸기 때문에 사용자가 서버에 여러번 요청을 날려도 매 요청마다 핸드셰이킹 과정을 거쳐야했다. 버전 0.9라는 것도, 지금 와서 최초의 HTTP를 표현하기 위..

JAVA

Optional

어떤 프로그래밍 상황에서든 null checking은 필수다. 존재하지 않는 변수의 메소드나 필드를 참조해서 발생하는 NPE는 깔짝깔짝 나타나 버그를 일으켜 개발자를 짜증나게 한다. 메소드 시작점에서 입구컷을 하거나, @NonNull같은 어노테이션을 사용하거나, null일 경우 아예 직접 인스턴스를 만드는 등의 여러 방법을 사용할 수 있다. 오늘은 그 중 하나인 Optional 클래스를 살펴보겠다!! 1. Optional이 없는 상황 Student 클래스가 있다. @RequiredArgsConstructor public class Student { private final String name; private final int num; public boolean hasSameName(String name..

김부추
'분류 전체보기' 카테고리의 글 목록 (8 Page)