본문 바로가기

전체 글

(50)
[CS] 인터럽트 총정리 매번 헷갈리는 운영체제의 실행 모드, 인터럽트, 스케줄링, 그리고 시스템 콜의 관계를 하나의 흐름으로 정리해보겠습니다. 1. 두 가지 실행 모드 (보호 체계)운영체제는 시스템을 보호하기 위해 CPU 실행 권한을 나눕니다. 사용자 모드 (User Mode): 일반 앱 실행. 하드웨어 직접 접근 불가.커널 모드 (Kernel Mode): OS 실행. 모든 자원 접근 및 제어 가능.전환 도구: 사용자 모드에서 커널 모드로 가기 위한 유일한 통로가 바로 인터럽트(Interrupt)입니다. 2. 인터럽트의 분류 (발생 원인과 시점)인터럽트는 누가, 언제 일으키느냐에 따라 크게 두 축으로 나뉩니다. 분류비동기 인터럽트 (Asynchronous)동기 인터럽트 (Synchronous)다른 이름하드웨어 인터럽트소프트웨어..
[클린 아키텍처] 3부 SOLID 설계 원칙 ** 클린 아키텍처 소프트웨어 구조와 설계의 원칙 책을 읽고 작성한 글입니다. SOLID 원칙이란?SOLID 원칙은 함수와 데이터 구조를 클래스로 배치하고, 이 클래스들을 어떻게 결합할지에 대한 원칙입니다.여기서 "클래스"는 OOP에만 국한된 개념이 아니라 데이터 + 함수 구조를 의미합니다. SOLID 원칙은 모듈/컴포넌트 내부 수준(코드 레벨보다는 상위)에서 적용되며, 그 목적은 다음과 같습니다. 변경에 유연한 소프트웨어이해하기 쉬운 소프트웨어많은 소프트웨어 시스템에서 사용 가능한 컴포넌트 기반 구조 SOLID는 긴 역사를 거쳐 수많은 변경 끝에 다음 다섯 가지 원칙으로 정립되었습니다. SRP (Single Responsibility Principle): 소프트웨어 "각 모듈"의 변경 이유는 하나여야 ..
[클린 아키텍처] 2부 프로그래밍 패러다임 ** 클린 아키텍처 소프트웨어 구조와 설계의 원칙 책을 읽고 작성한 글입니다. 2장 내용을 소개하기에 앞서 1장 내용을 간략하게 정리하자면, 설계와 아키텍처우리는 흔히 "아키텍처"라고 하면 세부사항과는 분리된 고수준의 무언가를 생각하고,"설계"라고 하면 저수준의 구조 혹은 세부사항을 생각합니다. 하지만 집을 설계한다고 했을 때 아키텍트가 도면을 설계하면서 고수준의 결정사항부터 시작하여 무수히 많은 저수준의 세부사항까지 알아야하고이 모든 사항이 집 전체 설계의 구성요소가 되듯이,소프트웨어 설계에서도 저수준의 세부사항과 고수준의 구조를 구분 짓는 경계는 뚜렷하지 않습니다. 그렇다면 "잘 만든 소프트웨어"란 무엇일까요? 결론부터 말하면 아래와 같습니다. 기능이 정상적으로 동작하는 것 추가 구현 요청사항이나 수..
[Spring] JWT access/refresh token 인증 구현 (with redis) JWT access/refresh token 구현하기 (with redis) ⚙️ 개발 환경 aws linux2 ec2 + docker (github action 자동배포) springboot gradle java 17 redis 현재 진행하고 있는 프로젝트에서 github action + docker를 통해 cicd 구축을 해놓은 상태이기 때문에, 배포 서버에서 workflow를 수정하고 docker-compose를 통해 redis 환경을 구축하는 것까지 진행했다. 전체 코드는 여기서 확인할 수 있다. 기존에 구현했던 회원가입, 로그인 코드에 jwt access/refresh token 인증 방식을 적용했다. 📍 인증 순서 클라이언트의 로그인 요청 id/pw 검증 후 access/refresh toke..
[Spring] 배포 서버의 도커 컨테이너에 크롤링 환경 구축하기 배포 서버의 도커 컨테이너에 크롤링 환경 구축하기 ⚙️ 개발 환경 AWS Linux2 EC2 Java 17 Gradle Spring boot 크롤링 소스코드는 여기서 확인할 수 있습니다. 현재 비공개 레포로 되어있어 추후에 다른 글로 정리해서 올리도록 하겠습니다. 📍 Dockerfile : 도커 컨테이너에 크롬 브라우저 및 크롬 드라이버 설치 후 배포 FROM openjdk:17.0.1-jdk-slim RUN apt-get -y update RUN apt -y install wget RUN apt -y install unzip RUN apt -y install curl RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd..
[Spring] OSIV와 성능 최적화 OSIV와 성능 최적화 Open Session In View: 하이버네이트 Open EntityManager In View: JPA 📍 OSIV ON spring.jpa.open-in.view : true 기본값 위의 기본값을 뿌리면서, 애플리케이션 시작 시점에 warn 로그를 남김 기본적으로 jpa는 트랜잭션을 시작할 때 db 커넥션을 가져옴 (영속성 컨텍스트) > api가 유저에게 반환될 때까지 살아있음 즉, 고객의 요청에 Response가 갈 때까지 영속성 컨텍스트가 살아있기 때문에 View Template이나 API 컨트롤러에서 지연 로딩이 가능했던 것 지연 로딩은 영속성 컨텍스트가 살아있어야 가능 > 영속성 컨텍스트는 데이터베이스 커넥션을 유지해야 함 하지만 이 전략은 너무 오랜시간동안 db c..
[Spring] API 개발 정리 API 개발 고급 정리 📍 API 개발 정리 엔티티 조회 엔티티를 조회해서 그대로 반환 엔티티 조회 후 DTO로 변환 페치 조인으로 쿼리 수 최적화 컬렉션 페이징과 한계 돌파 컬렉션은 페치 조인시 페이징이 불가능 ToOne 관게는 페치 조인으로 쿼리 수 최적화 컬렉션은 페치 조인 대신 지연 로딩을 유치하고, hibernate.default_batch_fetch_size, @BatchSize로 최적화 DTO 직접 조회 JPA에서 DTO를 직접 조회 컬렉션 조회 최적화 - 일대다 관계인 컬랙션은 IN 절을 활용하여 메모리에 미리 조회해서 최적화 플랫 데이터 최적화 - JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환 📍 API 개발 권장 순서 엔티티 조회 방식으로 우선 접근 페치 조..
[Spring] API 개발 컬렉션 조회 최적화 API 개발 컬렉션 조회 최적화 📍 컬렉션 조회 - 엔티티를 DTO로 변환 : 기본 (V2) Entity @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name="order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") // foreign key가 무엇인지 명시 private Member member; @OneToMany(mappedBy = "order", cascade = Ca..