profile
서버 프로그래머

[C#] Exception: Collection was modified

주요 자료구조로 사용되는 List, Dictionary에 대해, 어느 상황에서 Collection was modified가 발생하는지 확인그리고 어떻게 해결할 수 있는지 확인Dictionary의 경우 Add, List의 경우 Add, Remove에서 발생Dictiona

2022년 11월 29일
·
0개의 댓글
·

[Go] select를 활용한 비동기 프로그래밍

버퍼 없는 채널 사용시 쓰기, 읽기가 동시에 일어나지 않으면 블락이 발생할 수 있음select를 통해 비동기로 구현아래 예시는 이번 주제를 설명하기에 적절하지 않을 수 있음 (채널과 고루틴 없이 충분히 구현 가능)하지만 핵심 부분만 간단하기 설명하기 위함실제 참고한 코

2022년 10월 23일
·
0개의 댓글
·

[Go] Channel send/receive 순서 보장

go 언어 프로그래밍 연습을 위해, 대기열 시스템을 구현수강신청이나 게임 로그인 대기열 등작업은 멀티쓰레드 환경에서 요청할 수 있다동일한 작업은 처리되기 전까지 다시 요청할 수 없다대신 앞에 남은 대기열을 알려준다 (ex. 수강신청 또는 게임 로그인 대기열)작업이 완료

2022년 9월 27일
·
0개의 댓글
·

[Go] Error, Panic 핸들링 (stacktrace)

개요 런타임중 panic이 발생했을 경우, stacktrace가 출력되고 프로그램이 종료됨 panic은 다른 언어의 Exception과 유사 recover 및 추가 작업을 통해 프로그램 종료 없이 stacktrace 출력 구현 recover는 다른 언어의 try

2022년 9월 18일
·
0개의 댓글
·

[C#] String 메모리 사용 확인

C- 자주 사용하는 string 값을 변수에 넣어두면 메모리 관리에 더 효율적일지 확인문자열 보간이 기존 string.Format보다 살짝 메모리, 성능이 좋음문자열 재사용은 효과 없음

2022년 9월 17일
·
0개의 댓글
·

[TypeScript] API 서버 템플릿

기존 node.js의 javascript와 문법 및 사용법이 얼마나 다른지, 간단한 API 서버를 구현하면서 학습https://github.com/natae/TypeScript_APIServer 참고golang 웹서버와 유사한 느낌을 받음https:/

2022년 9월 15일
·
0개의 댓글
·

[C#] Linq 성능 테스트

Linq 클래스의 Where, Find 등 함수에 람다식을 파라미터로 전달하여 특정 데이터를 탐색 할 수 있음Linq 없이 for, foreach로 탐색하는 경우와 성능 차이 확인Linq.csProgram.cs데이터 수 및 반복 횟수가 적을 경우 FindAll()이 성

2022년 9월 9일
·
0개의 댓글
·

[PHP] php-fpm, nginx 도커 빌드

도커로 php-fpm, nginx를 각각 다른 컨테이너에 세팅할 경우, 어떻게 요청을 전달하는지 확인docker-compose는 사용하지 않음php-fpm 세팅 1) php 소스 파일 2) 도커 파일nginx 세팅 1) nginx 설정 파일 2) php 소스 파

2022년 9월 5일
·
0개의 댓글
·

[C#] xUnit 유닛 테스트

C - MSTestMS에서 기본으로 제공NUnitJava의 JUnit을 C - xUnitNUnit을 개선xUnit을 선택한 이유가장 유명한 것이 NUnit인데, 이를 개선했다는 점에서 기대종속성이 자유로움확장성이 좋음Visual Studio 2022에서 "보기>테스

2022년 9월 4일
·
0개의 댓글
·

[C#] StringBuilder 분석

C- StringBuilder는 내부적으로 어떻게 메모리를 관리하는지 확인코드 양이 많기 때문에 주석 제외하고, 필요한 부분만 분석String을 저장을 위해 기본적으로 char\[]를 사용하며 청크 기본 용량는 16, 최대 용량은 8000주석에 따르면, 청크 최대 용량

2022년 8월 30일
·
0개의 댓글
·

[Go] 고루틴 동시성 성능

고루틴을 통해 동시성 처리시 항상 성능이 좋은지 확인작업이 간단한 경우, 고루틴으로 동시성 처리를 하면 성능이 오히려 떨어짐고루틴이 go 키워드에서 즉시 시작하는게 아닌, 스케줄링 되는 방식이 원인으로 추정작업이 비교적 복잡한 경우(=시간이 걸리는 경우), 성능 측면에

2022년 8월 28일
·
0개의 댓글
·

[C#] for, foreach 성능 비교

개요 예전에 for가 foreach 보다 성능이 좋다는 글을 종종 본 적 있음 .NET6에서 직접 확인 코드 Program.cs Loop.cs Recorder.cs 출력 결론 메모리 사용량 및 시간 성능은 차이가 없는 것으로 보임

2022년 8월 27일
·
0개의 댓글
·

[Go] 직렬화 성능 비교

golang에서 다양한 직렬화 벤치마크 테스트간단한 특징 (golang 기준)gob: 기본 패키지에 포함, 다른 언어에서 지원 안함bson: mongoDB 패키지의 일부protobuf: protoc, protoc-gen-go 등 준비할 게 많음messagepack: 무

2022년 8월 24일
·
0개의 댓글
·

[C#] 얕은 복사, 깊은 복사

개요 .NET에서 제공하는 MemberWiseClone()와 대입의 차이 확인 효율적인 깊은 복사를 위한 Serialization 활용 코드 출력 결론 대입의 경우 기존 객체를 동일하게 가르키는 포인터를 생성함 모든 수정사항이 동일하게 반영됨 MemberWise

2022년 8월 21일
·
0개의 댓글
·

[Go] 얕은 복사, 깊은 복사

개요 golang에서 얕은 복사, 깊은 복사 구현 실제 메모리 주소를 출력하여 차이 확인 코드 study/copy.go main.go 추가 설명 깊은 복사는 신규 변수에 기존 변수의 멤버를 일일히 복사하는 방식과 직렬화를 이용해 복사하는 방식이 있음 위 코드는 후자

2022년 8월 19일
·
0개의 댓글
·

[Go] 제네릭, 빈 인터페이스 성능 비교

개요 Go 1.18 버전부터 제네릭을 지원함 제네릭과 유사하게(?) 사용하기위해 빈 인터페이스를 사용했었는데, 제네릭과 직접 성능 비교 빈 인터페이스 방식은 실제 사용하려면 추가적인 타입 변환이 필요하기 때문에, 제네릭이 우세할 것 같음 코드 interface_qu

2022년 8월 17일
·
0개의 댓글
·

[Go] 인터페이스와 포인터 리시버

개요 함수의 일반 리시버와 포인터 리시버의 차이에 대해 여거에 인터페이스까지 사용한다면? 코드 결론 구조체 함수가 일반 리시버의 경우 call by value, 포인터 리시버의 경우 call by reference로 동작 구조체 선언을 일반이든, 포인터든 구조체 함

2022년 8월 15일
·
0개의 댓글
·

[Go] 가비지 콜렉션

개요 golang은 가비지 콜렉션으로 인한 성능 저하를 최소화 하기 위해 압축과 세대별GC를 사용하지 않음 java, C# 등 가상머신 기반에서는 압축과 세대별GC를 사용함 압축: 가비지 콜렉션 이후 메모리 단편화를 막기 위해 메모리 빈공간 없이 당겨오는 작업

2022년 8월 13일
·
0개의 댓글
·

[Go] 변수 메모리영역

코드 출력 추론 전역 변수와 로컬 변수의 메모리 주소대가 완전히 다름 ex. 0x1023~, 0x140001~ 메모리 영역은 일반 변수, Slice 포인터 변수, 포인터 변수 세 영역으로 나뉨 ex. 0x10239~, 0x102364~, 0x102363~ map,

2022년 8월 11일
·
0개의 댓글
·

[Go] 자료구조 구현

개요 golang에서 네이티브로 지원하지 않는 자료구조를 구현 다양한 타입 지원을 위해 빈 인터페이스 사용 이후 제네릭과 비교했을 때, 제네릭에 비해 성능이 떨어짐 https://velog.io/@natae/golang-generic-vs-empty-interf

2022년 8월 10일
·
0개의 댓글
·