본문 바로가기
반응형

Develop223

동시성 (Concurrency) vs 병렬성 (Parallelism) 😎 서론 이전 포스팅에서 동시성과 병렬성 차이에 대해서 아래처럼 간략하게 서술했었다. 동시성: 하나의 코어에서 여러 스레드가 번갈아가며 실행 병렬성: 멀티 코어에서 여러 스레드를 동시에 실행 책의 내용을 단어만 좀 바꿔서 인용해온 것이기도 하고 어떤 상황인지 상상이 갔기 때문에 납득하고 넘어갔었다. 근데 트위터에서 디클님이 아래와 같은 내용을 알려주셨다. 내가 서술한 내용이 틀린 것은 아니지만 그 외의 상황에서 더 자주 발생한다고 설명해주셨고 그 상황들에 대해서 궁금해졌다. 그래서 동시성과 병렬성에 대해서 좀 더 구체적으로 공부해보려 한다. ✨ 동시성; Concurrency 동시성은 여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다. 동시에 실행하는 것이 아니라 CPU가 작업마다 시간을 분할해 적절하.. 2022. 9. 10.
[토비의 스프링] Chapter 1. 오브젝트와 의존관계 토비의 스프링을 SQ3R 방식을 도입해 읽는 시도를 하고 있습니다. 목차만 보고 궁금한 점들을 작성한 뒤, 책을 읽고 답변을 정리합니다. ❓ 관심사를 분리해야 하는 이유 👉 요구사항은 끊임없이 변경되고 발전한다. 모든 관심사들이 한 곳에 응집되어 있다면 해당 오브젝트는 끊임없이 변화해야 한다. 추가로 해당 오브젝트를 의존하고 있는 다른 오브젝트에까지 영향이 갈 수 있다. 이 변화의 폭을 최소화하기 위해서 관심사를 최대한 분리해야 한다. ➕ 오브젝트끼리 의존을 제거하면 되지 않을까요? 👉 불필요한 코드의 중복이 많아질 수 있다. 예를 들어 UserDao, BoardDao, CommentDao에서 DB 연동과 관련된 설정이 필요하다고 가정해보자. 모든 Dao에서 DB 연동 코드를 작성할 것인가? DB 연동 .. 2022. 9. 10.
[Java] Thread 이해하기 이 글에서는 Thread 클래스는 'Thread', 개념적 의미의 스레드는 '스레드'로 표기한다. 먼저 프로세스와 스레드의 차이에 대해 잘 모르는 사람들은 이 글을 읽기 바란다. [OS] 프로세스와 스레드 프로그램 어떤 작업을 위해 실행할 수 있는 파일 메모리에 올라가지 않은 Windows의 *.exe 같은 정적 파일 (메모리에 올라가다: 실행을 하려면 OS가 독립적인 메모리 공간을 할당해줘야 함) 프로세스 yeonyeon.tistory.com 스레드를 생성하는 방법으로는 두 가지가 있다. implements Runnable extends Thread 🔻 Runnable vs Thread 더보기 어느 것을 이용해 스레드를 생성하는 것이 좋을까? 어느 쪽이든간에 별 차이는 없지만 Thread 클래스를 상속.. 2022. 9. 8.
[Java] 입출력(I/O)과 버퍼(Buffer) 서론 ByteArrayOutputStream과 BufferedOutputStream의 차이점에 대한 질문을 받았다. 내가 Java의 입출력 시스템과 buffer에 대한 이해도가 떨어진다는 상태를 자각하게 되었다. 이를 공부하는 내용을 작성하려고 한다. 목차 stream이란? InputStream & OutputStream InputStreamReader & OutputStreamWriter buffer란? BufferedInputStream & BufferedOutputStream BufferedReader & BufferedWriter Java의 입출력 java에서의 입출력은 Stream을 통해 이루어진다. 1. stream이란? 데이터를 운반하는데 사용되는 연결 통로 stream 이름의 어원: 데이터.. 2022. 9. 5.
[IntelliJ] gradle project 생성 시 불필요한 파일들이 생기는 현상 IntelliJ에서 gradle project를 생성했는데 위와 같은 불필요한 폴더들이 막 생겨났다. 좀 더 정확히 말하자면 gradle project를 생성했을 때까지는 괜찮았는데 프로젝트를 build시키는 시점에서 이상한 폴더들이 생겨났다. 알고보니 Gradle user home이 제대로 설정되지 않아서 발생한 문제였다. 문제 원인은 Gradle user home이 프로젝트 경로로 설정되어 있어서이다. 해당 경로를 수정하면 해결된다. (아래에서 추가 설명) 그렇다면 위 폴더들은 왜 생겨나는걸까? project를 build시켜 gradle이 동작되면 gradle에 대한 캐시가 생긴다. 그래서 일반적으로는 프로젝트와 무관한 특정 위치에서 이 캐시들을 한꺼번에 관리한다. 이 위치는 별도로 지정하지 않았다면.. 2022. 9. 2.
OAuth vs OpenID 예제로 자주 등장하는 `줍줍`은 현재 진행되고 있는 프로젝트 명으로 슬랙 메시지를 백업해주는 서비스입니다. 이 글을 읽기 전에 인증과 인가의 차이를 알고 있다면 훨씬 이해하기 편합니다. 인증; authentication: 사용자의 신원을 확인 인가; authorization: (신원이 확인된 사용자에게) 자원에 접근할 수 있는 권한 부여 🧾 OAuth 🧾 인가 / authorization 서버 자원 소유자가 클라이언트에게 서버 자원에 대한 액세스 토큰 제공 ex: Slack이 줍줍에게 access token을 발급 해당 액세스 토큰을 통해 리소스 서버에 액세스 가능 ex: access token을 통해 줍줍이 Slack에게 사용자 정보 조회 요청 ✅ OAuth 1.0 vs OAuth 2.0 OAuth 2.. 2022. 8. 31.
[Java] 날짜, 시간 API 😎 서론 최근 LocalDateTime과 같이 날짜나 시간과 관련한 로직을 작성할 일이 많았다. ZoneOffSet? Instant? 부끄럽게도 뭐가 뭔지 모르고 사용했던 것들이 많아 이를 알아보는 시간을 가지려 한다.🙂 😊 Java의 날짜와 시간 API 🔹 time 패키지 ISO 기반 (24시간 시계 시스템 hh:mm:ss) 불변 + thread-safe 🔹 LocalDate / LocalTime / LocalDateTime 시간대 (ZoneOffset, ZoneRegion)에 대한 정보 미포함 LocalDate: 날짜에 대한 정보 LocalTime: 시간에 대한 정보 LocalDateTime: 날짜 및 시간에 대한 정보 `Local... `는 ZoneOffset과 ZoneRegion를 포함하지 않음 .. 2022. 8. 30.
ssh 명령어 편하게 쓰기 🤗 서론 나는 ssh 명령어 치는게 너무 귀찮다! 현재 진행하는 프로젝트에서는 백엔드 개발서버, 백엔드 운영서버, Jenkins 서버, SonarQube 서버 등등등 여러 인스턴스를 접속할 일이 많다. `ssh -i 키.pem ubuntu@IP주소`에서 key 경로를 입력하는 것도 인스턴스마다 IP 주소가 뭐였는지 찾는 것도 너무너무 귀찮았다. 우테코 크루인 봄이 편하게 쓰는 방법을 알려줬다. 🥰 😎 설정 이 방법은 Windows / Mac 상관 없이 사용 가능합니다. 1. ~/.ssh/config 파일 생성 vi 명령어 실행 직후 i를 눌러 편집 모드로 변경 하단의 Host ~~~ 내용 입력 후 esc를 눌러 편집 모드 종료 :wq 를 이용해 파일 저장 후 나가기 이전에 설정한 적이 없다면 파일이 존재.. 2022. 8. 17.
[Mockito] LocalDateTime.now() 테스트하기 목차 서론 static method 조롱하지 않기 테스트 코드 작성 현재 시간을 구하는 클래스 LocalDateTime.now() 모킹 테스트 데이터 변경 Clock 이용하기 최종 선택 1. 서론 😄 `줍줍` 프로젝트에서는 내가 원하는 시간에 리마인드할 수 있도록 슬랙 메시지를 보내주는 리마인드 기능이 있습니다. 이 리마인더 목록을 조회할 때 이미 알림을 보냈던 리마인더는 조회할 필요가 없다고 판단했고 현재 시간을 기준으로 조회하기 위해 LocalDateTime.now()를 호출했습니다. 해당 로직을 어떤 식으로 테스트 코드를 작성할까 고민했던 일에 대해 포스팅해보려 합니다. 2. static method 조롱하지 않기 😡 Why doesn't Mockito mock static methods? Loca.. 2022. 8. 15.
반응형