전체 글111 운영체제 스터디 4주차 - 스레드 4.1 Overview 지금까지는 프로세스가 하나의 스레드를 가지는 실행 프로그램으로 가정하고 이야기하였으나, 실제 컴퓨터에서는 하나의 프로세스 안에서 여러 개의 스레드를 컨트롤할 수 있음. 스레드는 경량화된 프로세스(Lightweight Process, LWP)이면서 CPU의 가장 기본적인 단위가 됨. 그렇게 되면 실질적으로 CPU 점유는 프로세스 아이디(pid)가 아닌 스레드 아이디(thread ID)를 기준으로 진행됨. 스레드는 하나의 프로세스 안에서 코드, 데이터, 파일은 공유하지만 / 레지스터셋, 스택, 프로그램 카운터를 별도로 가지게 됨. 즉, 멀티 스레드 프로세스는 아래와 같이 표현 가능할 수 있음. (여기에서 주목할 점은 어떤 것을 공유하고 어떤 것을 따로 처리하는 가. 예를 들어 하나의 .. 2024. 1. 24. 14. Go를 이용한 스크래퍼 리팩토링하기 (10) - Chromedp Dockerize 하기 & GitHub Actions - ECR을 사용한 배포 자동화 저번 포스트까지 Go의 Chromedp 라이브러리를 활용하여 스크래핑 코드를 작성하는 방법을 알아보았다. 이번 포스트에서는 작성한 코드를 docker 이미지를 굽고, 이 이미지를 자동으로 Lambda에 배포하는 방법을 알아보고자 한다. Chromedp 코드 Dockerize 하기 Chromedp 코드를 dockerize 하는 이유는 AWS Lambda 환경에서 스크래퍼 코드가 안정적으로 잘 돌아가게 만들기 위함이다. Lambda 위에서 가상 환경을 만들고 해당 환경 안에서 스크래핑을 진행할 수 있게 하는 것이다. 스크래핑을 위해선 Chrome 프로세스를 띄우고 이 프로세스를 조작하면서 정보를 긁어와야 하는데, Lambda와 같은 FaaS 서비스의 경우 임의의 프로세스를 띄우는 것을 막고 있다. 실제로 그.. 2024. 1. 2. 자바 기초 스터디 4주차 - Stream 사용하기 Stream이란? Java8에서부터 등장한 Stream은 컬렉션 혹은 배열의 요소들에 대한 반복 처리를 효율적으로 처리할 수 있게 하는 기능이다. 과거에는 for나 for each 등을 통해 순차적으로 요소에 접근하며 작업하였기 때문에 코드가 다소 복잡해지거나, 성능이 좋지 못했다. 하지만 Stream이 등장하면서 이를 선언형으로 보다 가독성이 좋으면서도 작성하기도 쉬운 형태로 이를 처리할 수 있게 되었다. Stream의 특징 1. 선언적인 코드 작성 방식 여러 함수형 인터페이스들을 이용하면서 ‘무엇을(what)’ 하는지를 선언하고, 그 내부적인 동작에 대해서는 숨기는 방식으로 코드를 적는다. 아래 코드에서 for문은 어떻게 데이터를 처리할 것인지에 대해서 내부 동작을 하나하나 설정해주었다면, strea.. 2023. 11. 16. 자바 기초 스터디 3주차 - Enum 사용하기 매직 넘버, 매직 리터럴 매직 넘버 혹은 매직 리터럴이란 프로그래밍에서 비즈니스적 의미를 가진 숫자나 문자를 그대로 표현하는 것을 말한다. 아래와 같은 코드가 있다고 치면 "3"이나 "3개의 숫자를 모두 맞히셨습니다! 게임 종료"와 같은 문자들이 매직 넘버 혹은 매직 리터럴이라고 할 수 있을 것이다. if (attempt.get("strike") == 3) { System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); pingPong = false; } 이것들을 사용함으로써 어쩔때는 코드를 좀 더 명확하게 보일 수 있지만, 많은 경우 코드를 읽는 사람을 더 헷갈리게 만들고 코드의 유지보수를 힘들게 한다. 이유는 아래와 같다. 1. 코드 안에서 선언된 숫자나 문자열이 어떤 맥락에.. 2023. 11. 9. 이전 1 ··· 3 4 5 6 7 8 9 ··· 28 다음