본문 바로가기

전체 글249

[쉽게 배우는 운영체제] ch.4 CPU 스케줄링 - 연습 & 심화 문제 연습 문제 1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받는지? 프로세스 제어 블록(Process Control Block) 2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태 준비 상태(Ready Status) 3. 프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태 대기 상태(Blocking Status) 4. CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업 실행 상태(Runnung Status) 5. 유닉스에서 Ctrl+Z 를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는지? 휴식 상태(Pause Status) 6. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황 문맥 교환(Context Switchin.. 2022. 11. 4.
[쉽게 배우는 운영체제] ch.3 프로세스와 스레드 - 연습 & 심화 문제 연습 문제 1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받는지? 프로세스 제어 블록(Process Control Block) 2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태 준비 상태(Ready Status) 3. 프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태 대기 상태(Blocking Status) 4. CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업 실행 상태(Runnung Status) 5. 유닉스에서 Ctrl+Z 를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는지? 휴식 상태(Pause Status) 6. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황 문맥 교환(Context Switchin.. 2022. 11. 2.
[쉽게 배우는 운영체제] ch.2 컴퓨터의 구조와 성능 - 연습 & 심화 문제 연습 문제 1. CPU의 구성? 명령어를 해석하고 실행하는 장치 산술논리 연상 장치 제어 장치 레지스터 2. 폰노이만 구조의 가장 중요한 특징 모든 프로그램이 메모리에 올라와야 실행이 가능하다는 점 3. 버스의 종류 제어 버스 제어장치와 연결된 버스 주로 제어 명령을 전달 양방향으로 작업 완료, 오류 신호 등등 주소 버스 메모리 주소 레지스터와 연결 위치 정보(주소)를 전달 단방향 데이터 버스 메모리 버퍼 레지스터와 연결 양방향 4. 단방향 버스 한 방향으로만 신호를 전송할 수 있는 버스 신호를 "줄" 경우에 사용 5. 다음 실행할 명령어의 주소를 가지고 있는 레지스터 프로그램 카운터 (PC) 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려줌 주소를 카리키므로 명령어 포인터(Instruction .. 2022. 11. 1.
[만들면서 배우는 클린 아키텍처] Chapter6. 영속성 어댑터 구현하기 CH 6. 영속성 어댑터 구현하기 1. 의존성 역전 서비스가 영속성 기능을 사용하기 위해 포트 인터페이스를 호출 육각형 아키텍처에서 영속성 어댑터는 주로 아웃고잉 어댑터 => 앱에서 호출하기 때문, 반대의 경우는 없다. 포트는 앱과 영속성 사이의 간접적 계층 영속성 문제에 신경쓰지 않고 도메인 코드 개발 목적 영속성 계층에 코드 의존성을 없앰 이럴 경우, 영속성 코드를 변경하더라도 코어 코드에 영향이 없음 런타임에도 여전히 앱이 영속성 코드에 의존하고 있다. 인터페이스 계약을 만족하는 한 영속성 코드 수정은 문제가 없다. 2. 영속성 어댑터의 책임 입력을 받는다. 주로 도메인 엔티티, DB 연산 전용 객체 입력을 데이터베이스 포맷으로 매핑한다. JPA Entity 객체 매핑 JPA를 제외한 기술도 고려 .. 2022. 10. 31.
[만들면서 배우는 클린 아키텍처] Chapter5. 웹 어댑터 구현하기 CH.5 웹 어댑터 구현하기 1. 의존성 역전 Web Adaptor = Incomming Adaptor 외부로부터 요청 받음 => 애플리케이션 코어 호출 => 무슨 일을 해야할지 알려줌 애플리케이션 계층은 웹 어댑터가 통신할 수 있는 포트를 제공 서비스는 포트 구현 & 웹 어댑터가 이 포트를 호출 제어 흐름 왼쪽 => 오른쪽 웹 어댑터가 유스케이스를 직접 호출할 수 있지만 간접 계층을 넣음 포트 (간접 계층)는 외부와 통신할 수 있는 곳에 대한 명세서 어떤 통신이 일어나는지 명확하게 알 수 있음. Outgoing Port 이 포트는 웹 어댑터에서 구현하고 애플리케이션 코어에서 호출해야 한다. 웹 어댑터는 인커밍 & 아웃고잉 어댑터가 될 수도 있다고 한다. 2. 웹 어댑터의 책임 거시적 관점 HTTP 요청.. 2022. 10. 30.
스터디 결성 같은 길을 가고 있는 고등학교 동창과 그 후배와 제가 뭉쳐서 스터디를 진행하기로 결정했습니다. ​ 지금은 취업이 최우선인지라 ​ 제가 지금 진행하고 있는 것 코딩 테스트 준비 (알고리즘) 자소서와 포트폴리오 수정 테스트 코드 작성 및 배포 준비 면접 질문 용 CS 공부 및 깃헙 정리 ​ 이 외에도 선택을 더 할 수 있을게 없을까하다가 시간을 뺏기지 않고 더 공부한 흔적을 남길 수 있을 유용한 책들을 짬짬히 보기로 생각했습니다. 그 과정에서 혼자 진행하는 것보다 같이 읽어 시간을 줄이고 각자 느낀 것을 바탕으로 의견 공유 방식으로 스터디를 진행하면 더 효율적이란 생각이 들었습니다. ​ 고등학교 친구 중에 열심히 하는 친구가 있길래 스터디 제안을 했고, 어제 스터디 관련 구체적인 일정을 잡으며 깃헙 Orga.. 2022. 10. 30.
[Set & List] 성능 차이 코딩 테스트를 준비하며 백준을 풀고 있었습니다. https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 바로 이 문제인데요? 생각보다 간단한 문제이고 쉽게 풀었는데, 계속 시간 초과가 났었습니다.. 원인이 무엇인고, 하고 봤습니다. 첫 번째 문제 입력한 숫자 만큼 정수를 받아서 자료구조에 저장하고 contains로 비교할 생각이었습니다. 당연히 정수이므로 Integer로 제네릭을 선언했는데, 이게 변환과.. 2022. 10. 29.
[감상문] Effective Java를 읽고 나서 책을 읽은 이유 자바 공부를 하면서 한번 쯤 도전해보고 싶었던 책 중에 하나가 바로 이펙티브 자바다. 워낙 어렵기로도 소문이 났고, 그 만큼 자바의 정수라고 불리우길래 자바 서적 중 가장 가치가 높게 느껴졌었다. ​ 백엔드 챌린지 교육을 들으며 멘토님이 수 많은 교육 영상과 책들을 추천해주셨는데, 그 중에 언어 실력의 기준이 되는 척도가 이펙티브 자바라고 하셨다. 책 읽을 시간 없다는 핑계로 미루고 미루다가 바로 지르기로 결심했다. ​ 새 책을 사기에는 가격이 부담스럽기 때문에, 이번 기회에 당근 마켓을 이용해보기로 했다. 다행히 가까운 동네에 판매자 분이 계셔서 비바람을 가르며 거래 장소로 갔다. 네고까지 해주시고 개발자 취준 응원까지 해주셔서 나의 첫 당근 거래에 매우 따스함을 느꼈고, 스타트가 좋을.. 2022. 10. 26.
[Refactor] 패키지 구조와 의존성 두 번째 프로젝트의 코드 작성이 거의 끝났고, 테스트 코드 작성을 앞두며 코드 리뷰를 받았다. 가장 큰 골자는 아무래도 참조 관계이다. 패키지 구조를 Layered에서 약간의 DDD(애매하지만 ㅎㅎ) 를 곁들인 구조로 변경했다. 그 과정에서 패키지 간 의존성에 대해서 고민해보고 작명하는 것과 설계하는 시간이 정말 오래 걸렸다. 코딩을 공부하면 할 수록 작은 것에 시간을 오래 들이게 되는 걸 느낀다. 어제는 패키지 이름을 짓는데 반나절이 걸렸다. 회사에서는 변수명 짓는 걸로도 회의를 한다고 하니 약간 실감이 나기도 한다. 이렇게 디테일하게 채워나가면 그 만큼 내 실력이 된다고 믿습니다. 최상위 구조 auth : 인증, 인가 처리 스프링 시큐리티 이용 스프링 컨테이너까지 도달하지 않는 필터 위주이기 때문에 .. 2022. 10. 14.
[6주차] (Led Matrix) Capston Challenge 문제 1 마지막 행만을 On 문제 이해 애노드 타입을 이용 row : high, col : low 일때 led on 되는 것을 명심하자 코드 int pin[17] = { -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 }; int col[8] = { pin[9], pin[10], pin[11], pin[12], pin[13], pin[14], pin[15], pin[16] }; int row[8] = { pin[1], pin[2], pin[3], pin[4], pin[5], pin[6], pin[7], pin[8] }; void setup() { // put your setup code here, to run once: for (in.. 2022. 10. 13.
[5주차] (Timer Counter Interrupt) Capston Challenge 문제 2-1 LED, Buzzer 사용 2초 간격으로 교대로 점멸 스위치가 눌릴 경우 Buzzer 동작 delay() 를 사용해서 코드 작성 문제 이해 문제 그대로 코드를 작성 코드 int switch_state; int int_sw = 2; int LED1 = 22; int LED2 = 24; int BUZZER = 8; int LED1_state = HIGH; int LED2_state = LOW; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(BUZZER, OUTPUT); } void loop() { flush(); switch_state = digitalRead(2); if (switch_state == HIGH) { d.. 2022. 10. 9.
[2주차] (External Interrupt) Caston Challenge 4 ※ Caston Challenge 2번, 3번 문제는 하드웨어적 구성이기 때문에 생략하겠습니다. 문제 - 스위치 1은 Falling Edge로 - 스위치 2는 Rising Edge로 설정 - AVR 명령어(PORT 입출력)를 사용하여 Interrupt 실험 - 스위치 1 Debounce 회로를 설계 - 스위치 2 일반 회로로 설계 - 스위치 1 LED 4개가 LSB 부터 하나씩 누적하여 On, LCD에는 1행에는 “Falling Edge” Display하고, 2행에는 현재 LED가 몇개 On 되었는지 개수를 Display - 스위치 2 LED 4개가 MSB 부터 하나씩 이동하면서 On, LCD에는 1행에는 “Rising Edge”라고 Display, 2행에는 MSB 기준으로 첫번째 LED를 1이라고 했을.. 2022. 10. 5.
[Redisson] 트랜잭션 문제 발생 및 해결 지난 포스트 [Redisson]을 이용한 분산 Lock 구현 & 동시성 문제 해결 내 프로젝트의 Payment를 개발하면서 가장 기본 중에 기본이 되는 문제를 직면했었다. 그것은 바로 동시성 문제! 스프링부트의 내장 서버는 기본적으로 톰캣, 언더토우 등등의 WAS로 돌아가는데 이 sweeeetgoguma.tistory.com 지난 포스트에서 Redisson을 이용하여 동시성 문제를 해결하는 코드를 구현했다. 프로젝트 리팩토링이 거의 끝나가 조회 API를 구체화하여 몇 개 추가하던 도중, 스레드 100개의 동시 요청을 직접적으로 받는 과정을 확인하고 싶어졌다. 그래서 실험해봤다. 결과는?? 처참하다.. 무엇이 문제였을까 트랜잭션 처리가 씹혔다. @GetMapping("/test") public void t.. 2022. 10. 1.
[Redisson]을 이용한 분산 Lock 구현 & 동시성 문제 해결 내 프로젝트의 Payment를 개발하면서 가장 기본 중에 기본이 되는 문제를 직면했었다. 그것은 바로 동시성 문제! 스프링부트의 내장 서버는 기본적으로 톰캣, 언더토우 등등의 WAS로 돌아가는데 이 WAS는 멀티스레드 기반으로 동작한다. A라는 상품 (재고 3개) 을 [가]군이 2개 구매하려 한다. 동시에 [나]군이 2개 구매하려 한다. 미세하게 나마 0.00001초의 차이가 있을 수 있다. 결국 각각의 스레드가 같은 상품의 재고를 조회한다. 원래대로라면 한 명은 못 사야 정상이다. 위 문제를 해결하기 위한 방법이 뭐가 있을까? 1. Synchronized 자바로 해결하는 방법이다. Thread-Safe 하기 때문에 매우 좋아보이나, 서버가 증설될 경우 의미가 없어진다. 2. Database Lock D.. 2022. 9. 27.
결제 API 리팩토링 - [2] (feat. WebClient) https://sweeeetgoguma.tistory.com/entry/%EA%B2%B0%EC%A0%9C-API-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-1-feat-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B 결제 API 리팩토링 - [1] (feat. 전략 패턴) 결제 API를 리팩토링 시작하며 외부 API를 연동 부분에 대해서 생각해봤다. 기존에도 카카오페이를 이용했었고, 지금도 카카오페이를 이용할 것이지만, 추가적으로 다른 결제 API를 연동할 수 있 sweeeetgoguma.tistory.com 지난 포스팅에 이어서 작성하겠습니다~ 실제 결제 API를 호출하기 위해서는 httpClient 기반의 모듈이 필요하다. 기존에는 동기방식, 멀티스레드를 이용.. 2022. 9. 22.
반응형