분류 전체보기241 [OS] 동기와 비동기, 블록과 논블럭의 차이 오늘은 동기, 비동기 그리고 블록과 논블록의 차이점에 대해서 알아보도록 하겠습니다. 동기와 비동기의 차이 동기 (synchronous) 정의 요청에 대해 결과값을 기다렸다 처리하는 것을 말합니다. 여기서 요청이란 API, 함수에 대한 호출을 말합니다. 장점 설계가 매우 간단하고 직관적이다. 단점 결과가 주어질 때까지 기다려야 하므로, 여러 요청들을 빠르게 처리할 수 없다. 비동기 (asynchronous) 정의 요청의 결과값을 기다리지 않고 처리하는 것을 말합니다. 장점 요청을 보낸 직후, 바로 다른 작업을 수행할 수 있습니다. 단점 동기식보다 설계가 복잡합니다. 블록과 논블록의 차이 블록 (block) 특징 동기에서 파생된 개념입니다. 정의 동기로 처리될 때, 응답을 대기해야 합니다. 이 때, 쓰레드에.. CS/OS 2023. 10. 16. [Python] Python에서 정렬하는 방법 (sort, sorted, heapq) 파이썬으로 코딩 테스트 문제를 풀다보면, 다양한 상황에서 정렬을 활용해야 합니다. 문제를 손쉽게 풀 수 있도록 도와줬던 sort/sorted 함수 활용 방법에 관해 알아보겠습니다. sort 함수를 활용한 정렬 방법 이용하기 내장함수 리스트.sort 함수 사용 혹은 sorted(리스트) 함수 사용하면 쉽게 정렬할 수 있습니다. 두 함수 간 차이점은 전자는 원본 리스트에 수정이 일어나고, 후자는 수정이 일어나지 않는다는 점입니다. 또한 기본적으로 오름차순으로 정렬됩니다. numbers = [5, 3, 2, 3] numbers.sort() # None 값 리턴 print(numbers) # [2, 3, 3, 5] (원본 배열이 변경됨) new_numbers = sorted(numbers) # 새로운 배열 리턴.. Language/Python 2023. 10. 11. [Java] 동기화란 무엇인가? (1) 상호배제 동기화 방법 (자바에선 멀티 스레드 환경에서 어떻게 동기화를 할까?) 멀티 스레드 혹은 멀티 프로세스 환경에서 동기화를 보장하려면, 실행 순서 제어와 상호 배제가 필요합니다. 실행 순서 제어란 공유 자원에 대한 작업이 순서대로 작업되도록 보장하는 것입니다. 상호 배제란 동시에 접근해서는 안되는 자원(공유 자원)에 하나만 접근하도록 보장하는 것입니다. 자바에선 동기화를 보장하기 위해, 모니터 인터페이스를 제공합니다. 모니터는 프로그래밍 언어 수준에서 동기화를 지원합니다. 자바의 각 객체는 모니터 락을 소유하고 있으며, 각 스레드는 이 모니터 락을 잠그거나 해제할 수 있습니다. 한 번에 하나의 스레드만이 모니터의 잠금을 유지할 수 있습니다. 해당 모니터를 잠그려는 다른 스레드는 해당 모니터에서 잠금을 얻을 .. Language/Java & Kotlin 2023. 10. 3. [GIT] .gitignore가 작동하지 않을 때 대처 방법 .gitignore에 제외하고 싶은 파일을 추가했음에도 반영되지 않는 경우가 있습니다.그럴 땐 .git에 남아있는 캐시 때문인데요, 캐시를 제거해주기 위해선 아래와 같이 입력해주면 됩니다.git rm -rf --cached .캐시를 제거하면 기존에 staging 영역에 있던 파일들이 unstaged 되므로, git add . 를 해줍니다.이상으로 글을 마치겠습니다. CS/Git 2023. 6. 23. [Spring] JPA Auditing을 활용하여 생성/수정시간 자동화하는 방법 서론 오늘은 Spring Boot 환경에서 JPA Auditing을 활용하여 생성/수정시간 자동화하는 방법에 대해서 알아보겠습니다. 본론 BaseTimeEntity란 클래스를 만들어 생성과 수정 시간이 필요한 모든 요소의 상위 클래스로 지정하여, Entity들의 createdDate, modifiedDate를 자동으로 관리하겠습니다. JPA Auditing Entity 클래스의 상단에 @MappedSuperclass를 추가해줍니다. 이를 추가함으로써, JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들(createdDateTime, modifiedDateTime)도 칼럼으로 인식하도록 만듭니다. 또 @EntityListeners(AuditingEntityListner.class.. Framework/Spring 2023. 6. 22. [Java] IntelliJ에서 Junit으로 테스트 환경을 구축하는 방법 서론 오늘은 Java와 IntelliJ 환경에서 테스트 환경을 구축하는 방법과 Junit을 활용해 간단하게 테스트 코드를 작성하는 방법에 대해서 알아보겠습니다. 본격적인 내용에 들어가기 앞서, 먼저 질문을 하나 드리고자 합니다. 우리(개발자)는 왜 작성해야 할까요? 테스트 코드를 작성해야 하는 까닭 자바를 활용한 백엔드에선 테스트 코드 없이 테스팅하기 어렵다. 제 경험을 이야기해보자면, 저는 주로 Javascript를 활용했기 때문에, 제가 작성한 코드의 결괏값을 확인하기 편했었습니다. console로 결괏값을 출력하면 끝이기 때문이죠. 사내에서 프론트엔드 개발할 때도 테스트코드의 필요성에 대해서 크게 체감하진 못했습니다. 반면 백엔드 개발은 테스트 코드 없이 각각의 기능을 테스트하기 어렵다고 느꼈습니다.. Language/Java & Kotlin 2023. 6. 22. [Java] 객체 생성 패턴이란? (빌더패턴, 자바빈패턴, 점층적 생성자 패턴) 서론 롬복의 @Builder 어노테이션과 빌더패턴에 대해 알아보도록 하겠습니다. 본론 개요 빌더 패턴은 객체를 생성할 때 사용하는 디자인 패턴 중 하나로, 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법 중 하나입니다. 객체를 생성하는 클래스와 표한하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공합니다. 빌더 패턴을 사용하는 이유 Builder 패턴은 "복잡한 객체의 구성과 표현을 분리하여 동일한 구성 프로세스가 여러 개의 서로 다른 표현을 생성할 수 있도록" 하는 것을 목표로 합니다. - Gang of Four design patterns 제가 느낀 장점은 한 마디로 객체를 생성할 때, 빠진 값이 없도록 생성하도록 돕는다는 것 입니다. 객체를 생성하는 디자인.. Language/Java & Kotlin 2023. 6. 21. [Architecture] (2) 시스템 요구사항의 종류 서론 이번 글에서는 시스템 요구사항 중 6가지 (성능, 확장성, 신뢰성, 보안, 배포, 기술 스택)에 대해 자세히 알아보겠습니다. Performance 먼저, Performance (성능)에 대해서 알아보겠습니다. 성능은 하드웨어 스펙과 작업량이 주어졌을 때, latency (대기 시간)을 최소화하고 throughput (처리량)을 최대화하는 것을 말합니다. 퍼포먼스 이슈의 원인은 요청이 쌓여서 응답이 느려지는 것이며, 이는 네트워크, db io, os run queue 등 다양한 요소에서 발생할 수 있습니다. 성능 측정 방법과 원칙 성능 측정 방법은 스펙과 작업량을 고정하는 것입니다. 성능을 향상시키기 위해서는 1) 효율성과 2) 동시성, 3) 성능, 4) 확장성의 원칙을 고려해야 합니다. 효율성은 리.. CS 2023. 6. 8. [Architecture] (1) 소프트웨어 아키텍처를 알아야 하는 이유 서론 오늘은 소프트웨어 아치텍처에 관해서 알아보도록 하겠습니다. 소프트웨어 아키텍처, 왜 배워야 할까? 여러분은 개발자와 소프트웨어 엔지니어의 차이를 아시나요? 저는 이 차이가 소프트웨어를 단순히, 개발하는 능력에만 국한되는 것이 아니라, 시스템 요구사항을 분석하고 개발할 수 있는 능력에서 온다고 생각합니다. 일반적으로 소프트웨어를 만들기 위해서는 기획 요구사항과 디자인에 대해 분석하고 개발합니다. 웹 프로그램을 만든다고 하면, 화면 설계에 맞게 UI와 페이지 디자인을 구현하고 DB ERD를 설계하고 백엔드 로직을 작성합니다. 개발은 이렇게 끝날 수 있습니다. 그렇지만 이렇게 한다고해서 시스템 요구사항을 만족시키느냐? 그렇지 않습니다. 대체, 시스템 요구사항이 뭔데? 시스템 요구사항이란 다음 6가지 기준.. CS 2023. 6. 8. [CSS] Pseudo-Element 중 ::before와 ::after에 관해 알아보자 서론 CSS를 사용하다보면, 다양한 Pseudo-Element를 사용하여 스타일링 해야 할 때가 있습니다. 오늘은 CSS Pseudo-Element(수도) 중 ::before와 ::after 관해 알아보는 시간을 갖도록 하겠습니다. Pseudo-Element란 Pseudo-element란 HTML element의 특정 부분에 스타일을 지정할 수 있도록 selector에 추가되는 키워드입니다. selector 만으로 원하는 element를 지정할 수 없을 때 사용합니다. 잠깐, selector에 대해서 모르신다구요? 대표적인 selector가 class selector죠. 아래 예시의 .box와 같이요. selector에 대해서 더 알고 싶으신 분들은 아래 링크를 참고 부탁드립니다. box .box { w.. Web/CSS 2023. 6. 4. [React] CRA(Create React App) 환경에서 env 파일 사용하는 방법 서론 CRA(Create React App) 환경에서는 API 끝점, 키 및 기타 설정과 같은 환경별 구성을 관리하는 것이 확장 가능하고 유연한 애플리케이션을 구축하는 데 매우 중요합니다. 다행히도, CRA는 환경 파일을 사용하여 환경 변수를 처리하는 간단한 방법을 제공합니다. 이 튜토리얼에서는 CRA 프로젝트에서 env 파일을 효과적으로 활용하는 방법에 대해 알아보겠습니다. 1단계: 환경 파일 생성 시작하려면 프로젝트 루트에 새 파일을 만들고 이름을 ".env"로 지정하십시오. CRA는 이 파일을 자동으로 인식하고 개발 중 환경 변수로 내용을 로드합니다. 파일 이름은 점으로 시작해야 하며 파일 확장명이 없어야 합니다. 2단계: 환경 변수 정의 .env 파일 내에서 환경별 변수를 키-값 형식으로 정의할 .. Framework/React & RN 2023. 6. 2. NVM을 활용하여, Node Version을 관리하는 방법 서론 오늘은 NVM을 활용하여, Node Version을 관리하는 방법에 관해서 알아보도록 하겠습니다. 설치 방법 설치 방법에는 2가지가 있습니다. curl로 설치 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash wget으로 설치 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash 그러면 아래와 같은 메세지가 출력됩니다. => Appending nvm source string to /home/lesstif/.bash_profile => Appending bash_completion source string to /hom.. Language/JS(Node.js) 2023. 4. 22. 이전 1 ··· 8 9 10 11 12 13 14 ··· 21 다음 반응형