본문 바로가기
반응형

분류 전체보기157

[golang] go context의 활용2(go context사용법 및 예제2) 저번 게시글에서는 context를 활용하여 불필요한 트래픽을 제어하고, 클라이언트에게 즉시 리턴을 내려주는 방법에 대해 정리했습니다. [golang] go context의 활용1(go context사용법 및 예제1) 이번 게시글에서는 go context를 활용하는 방법을 정리 합니다. 1. go context란 golang을 사용하다보면, 메서드를 호출할때 context를 아규먼트로 요구하는 경우가 종종 있습니다. context를 아규먼트로 넘 frozenpond.tistory.com 이번 게시글에서는 컨텍스트, 고루틴, 채널을 활용하여 비동기 큐를 만드는 예제입니다. 1. 요구사항 (1). 비동기 큐에 각 자릿수의 합을 구해달라는 요청을 쌓을수 있어야한다.(Producer) (2). 요청을 FIFO형식.. 2021. 12. 9.
[golang] go context의 활용1(go context사용법 및 예제1) 이번 게시글에서는 go context를 활용 예제를 정리합니다. 1. go context란 golang을 사용하다보면, 메서드를 호출할때 context를 아규먼트로 요구하는 경우가 종종 있습니다. context를 아규먼트로 넘겨서 사용할때, 주의해야 할 점과 직접 context를 활용한 개발을 할때 어떻게 활용하는지 간단한 예제를 만들어봤습니다. go context가 처음이라면 해당 게시글에 어떤 기능들이 있는지 간단히 정리해놨습니다. [golang] golang 컨텍스트(context)란 이번 게시글에서는 golang의 context에 대해 정리합니다. 1. context란 운영체제를 공부할때 들었던 컨텍스트 스위칭(문맥교환으로 외웠던)에 사용된 용어 입니다. 고랭의 context도 비슷합니다. 상태나.. 2021. 12. 7.
[golang] go context란 이번 게시글에서는 golang의 context에 대해 정리합니다. 1. context란 운영체제를 공부할때 들었던 컨텍스트 스위칭(문맥교환으로 외웠던)에 사용된 용어 입니다. 고랭의 context도 비슷합니다. conext패키지는 고루틴의 문맥관리(상태나 흐름을 관리해주기 위한)를 위한 패키지입니다. 고루틴 로직에 결함이 생겨 끝나지 않는 무한루프가 생기는걸 방지하거나, 진행되는 문맥을 강제로 종료시키거나, 해당 문맥이 더이상 유효하지 않을때 불필요한 로직을 진행시키지 않게 하는 등 문맥을 관리하는데 사용됩니다. 2. context 인터페이스 type Context interface { Deadline() (deadline time.Time, ok bool) Done() 2021. 12. 6.
[golang] golang 채널(channel) 사용법, 사용예제 이번 게시글에서는 channel 에 대해 정리합니다. 1. channel이란 일반적인 프로그래밍언어의 스레드는 전역화된 변수나, heap에 메모리를 잡거나 콜백을 제공하는 라이브러리를 이용해서 동기화작업 및 데이터를 공유하는 경우가 많습니다. 그러나 고 언어는 일반적인 스레드가 아닌 고루틴을 사용하며 channel이라는 고루틴끼리의 통로를 이용하여 동기화작업이나 데이터를 교환합니다. 고루틴의 channel은 일반적인 동기화 방식보다 저렴하며, 스레드에 안전하다는 장점이 있습니다. 2. channel을 통한 동기화 및 데이터교환 package main import ( "fmt" "time" ) func main() { ch := make(chan string) go doSomething(ch) result.. 2021. 12. 6.
[개발상식] 유저레벨스레드(Green Thread) vs 커널레벨스레드(Native Thread) 이번게시글에서는 유저레벨 스레드와 커널레벨 스레드에 대해 정리합니다. 스레드는 유저레벨 스레드(Green Thread)와 커널레벨스레드(Native Thread)로 나뉩니다. 각 스레드의 차이점을 확인하고, java, c#, python, golang은 어떤식으로 동작하는지 간단하게 정리해보겠습니다. 1. 유저레벨 스레드(Green Thread) 그린 스레드라고도 불리는 유저레벨 스레드는 VM이나, Library등에서 관리되는 스레드입니다. 프로그래밍언어를 사용해서 Thread 라이브러리를 당겨와 스레드를 만들면 유저레벨 스레드가 생성됩니다. 유저레벨 스레드는 커널레벨 스레드와 1:1방식 n:1방식 혼합방식 등으로 연결됩니다. 2. 커널레벨 스레드(Native Thread) 실제 일의 주체입니다. 커널레.. 2021. 12. 1.
[개발상식] 메모리란(DISK IO가 느린 이유, 램이 사용되는 곳) 이번 게시글에서는 메모리에 대해 정리합니다. 이번 게시글은 조금 특이합니다. DISK IO가 느린이유는 SW를 공부하시는분이, 램이 사용되는곳은 HW를 공부하시는 분이 궁금해 할만한 주제입니다. 저는 IT회사에서 일하고있고, IT 기술블로그를 운영하고있지만 전공이 컴퓨터공학이 아니라 전자통신공학입니다. 지금은 SW만 공부하고 있지만 학부생시절에는 HW를 더 많이 배웠습니다. 학부생시절 여러 트랜지스터의 물성과 만드는 법을 배우고, 이게 램이라고 까지만 배우니 휘발성이라 쓸모없어보이는 램이 왜 그렇게 인기가 많은지 궁금했었습니다. 이 둘을 통합하는 글을 꼭 한번 적고싶었는데 이제 어느정도 설명할 수 있을것 같아 작성합니다. HW 관점에서 메모리를 해석한 후 SW에 적용하겠습니다. 어느쪽을 전공했어도 최대한.. 2021. 11. 25.
[kubernetes] 쿠버네티스 QOS란 이번 게시글에서는 쿠버네티스 QOS에 대해 정리합니다. 1. QOS란QOS란 Quality of Service의 약자로 팟들은 생성될때 QOS중에 하나를 할당받습니다. 추후 쿠버네티스는 QoS 클래스들을 확인하고 팟을 스케줄링하고 자원을 관리합니다. 2. QOS의 종류GuarantedBurstableBestEffortQOS는 총 3가지로 분류되고 위에서부터 쿠버네티스가 더 중요하게 생각합니다. Guaranteed 팟을 Guranteed QOS 클래스가 할당되도록 하려면 아래 조건을 만족해야합니다.파드 내 모든 컨테이너는 메모리 상한과 메모리 요청량을 가지고 있어야 한다.파드 내 모든 컨테이너의 메모리 상한이 메모리 요청량과 일치해야 한다.파드 내 모든 컨테이너는 CPU 상한과 CPU 요청량을 가지고 있어.. 2021. 11. 25.
[개발상식] 데이터 모델링(스키마설계 하는법, DB설계 하는법) 이번 게시글에서는 데이터 모델링 과정에 대해 정리합니다. dba가 아니더라도 RDB를 사용하는 사람이라면 최소한 알고 있어야되는 약식 스키마설계(데이터모델링) 방법은 rdb를 사용하는 사람이라면 꼭 알아야 합니다. 1. 데이터모델링(스키마설계)란 데이터 모델링이란 복잡한 현실 세계에 존재하는 데이터를 단순화 시켜 표현해 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정입니다. DBA없이 일반 백엔드 개발자끼리 모여서 RDB를 사용하는 개발을 진행하게 되면 db설계 툴을 이용해서 1:n 같은 관계를 고민하고, 테이블설계를 하고 결과를 컨플루언스같은 문서에 올리고, orm의 entity나 sql의 결과를 매핑해올 vo를 구축할 생각을 먼저하며 DB설계를 시작합니다.(erwin 같은것들이 무겁고 불편해서 아에 테.. 2021. 11. 22.
[개발상식] tdd란 (tdd 예제, tdd하는법) 1. tdd란 test driven development의 약자로 테스트코드를 작성하여 프로그램이 잘못되었음을 증명하고, 잘못된 부분을 수정하여 목표에 부합할 만큼 참으로 만드는 개발 방법론입니다. 최종적으로 올바르지 않음을 증명하는데 실패하게되면(내가 설계한 모든 잘못된점을 수정하면) 비로소 올바름이 된다는 게 해당 tdd의 사상입니다. 그러나 테스트코드는 작성하여 버그가 있음을 보여줄뿐, 버그가 없음을 보여줄 수는 없습니다. 다만 tdd를 통해 미리 생각해낸 생기는 버그는 모두 잡아낼 수 있습니다. 최근에는 테스트코드가 동작을 테스트하기위해 사용될 뿐 아니라, jenkins 등의 ci 도구를 사용할때 test코드의 성공여부를 확인해 all green 인 경우에만 pr을 통과시키거나 운영브랜치로 mer.. 2021. 11. 16.
반응형