분류 전체보기

    [More Effective C#] Chapter 1. 요약

    [ Item 1 : 접근 가능한 데이터 멤버 대신 속성을 사용하라 ] public 필드 대신 프로퍼티를 사용하도록 권장한다. 실제로 .NET 프레임워크의 데이터 바인딩 클래스들은 public 필드 대신 프로퍼티에 대해서만 동작한다. 예를 들어 WPF의 INotifyPropertyChanged, 윈폼 등에 포함된 모든 데이터 바인딩 라이브러리가 그렇다. Java에서는 getter, setter 메서드를 만드는 것 처럼(lombok을 쓰지만..) C# 에서는 { get; set; } 키워드로 간편히 설정할 수 있다는 게 비슷한 점이라고 생각된다. OOP 에서의 캡슐화에 큰 도움이 된다. 프로퍼티는 메서드로 구현되기에 멀티스레딩 환경도 쉽게 지원할 수 있고, Virtual 으로도 설정해줄 수 있다. 멀티스레딩..

    [클라우드 네이티브 패턴] 2. 안정성 패턴

    [클라우드 네이티브 패턴] 2. 안정성 패턴

    안정성 패턴이란? 분산 애플리케이션이 자신의 안정성이나 자신이 속한 시스템의 안정성을 높이는 데 사용되는 패턴이다. 서킷 브레이커(Circuit Breaker) 개요 직역하면 회로 차단기라고 할 수 있다. 퓨즈와 같이 과부하, 누전 등으로 전기 회로를 보호하는 안전장치다. 분산 컴퓨팅 시스템에서의 서킷 브레이커도 동일한 기능을 의미하는 패턴이다. 앞으로도 계속 언급되겠지만 분산된 클라우드 네이티브 시스템은 에러와 실패를 피해갈 수 없다. 서비스는 잘못 설정될 수 있고, 데이터베이스는 망가질 수 있으며 네트워크는 끊어질 수 있다. 내가 만든 애플리케이션에서 사용하는 의존성이 언제든 망가질 수 있다는 가정하에서 서비스를 디자인해야 한다. 그래서 의존성이 망가지는 상황에서 실패를 감지하고 '서킷'을 임시로 개..

    [클라우드 네이티브 패턴] 1. Context 패키지

    [클라우드 네이티브 패턴] 1. Context 패키지

    Go를 이용한 클라우드 네이티브 애플리케이션 레이어 구현과 패턴을 정리하는 시리즈의 시작 앞으로 다룰 많은 예제들은 Go언어에서 제공하는 Context 패키지를 사용하게 되므로 가장 먼저 정리해보려 한다. Go 1.7 버전에서 처음 소개된 이 패키지는 프로세스 간 종료 시점, 취소 신호 및 요청 범위 값을 전달하기 위한 관용적인 수단을 제공한다. 1. Context 구성 type Context interface { // Done 메서드는 Context가 취소되었을 때 닫힌 채널을 반환합니다. Done()

    Docker 각티슈 케이스 - docker container

    Docker 각티슈 케이스 - docker container

    예전에 한창 도커에 재미를 붙이고 공부할 때 썼던 글 덕분에 도커 관련 제품을 협찬받았습니다ㅋㅋㅋㅋ 각티슈 케이스이고 쉽게 조립할 수 있는 제품이에요! 제 블로그 아이콘도 도커인만큼 사무실 책상에도 도커 한마리가 생겼네요! 계속 눈이 갑니다ㅎㅎ 다시 데브옵스 공부를 해야하나... 담에 쿠버네티스 굿즈도 나오면 좋겠네요ㅎ 오랜만에 컨테이너나 하나 띄우러 가겠습니다~ https://incatos.shop/surl/O/11 좋은 상품 제공해주신 인카토스 감사합니다~~

    [Effective C#] C# 언어 요소

    Item 1 : 지역변수를 선언할 때는 var를 사용하는 것이 낫다 코드를 읽을 때 타입을 명시적으로 드러내야 하는 경우가 아니라면 var를 사용하는 것이 좋다. var를 사용하면 변수의 타입과 같이 지엽적인 부분보다 변수의 의미 파악에 더 집중할 수 있다. 그리고 타입을 명시적으로 지정할 경우 타입 안정성이 향상될 것이라 생각하지만 이 또한 사실이 아니다. 개발자가 올바르게 타입을 지정하지 않으면 오히려 타입 안정성이 떨어지기 때문이다. var는 지역 변수에 대한 타입 추론을 사용한다. 이는 동적 타이핑과는 다른 것이다. (C#은 정적 타이핑 언어이다.) 동적 타이핑을 사용하는 언어로는 Python, Javascript 등이 있다. 명시적으로 지정하는게 더 좋은 경우 내장 숫자 타입을 사용하는 경우 숫..

    [회고] 2022년 전체 회고 (개발, 졸업, 취업)

    [회고] 2022년 전체 회고 (개발, 졸업, 취업)

    인생 첫 회고! 2022년의 키워드는..... 개발, 졸업, 취업 이렇게 3개를 뽑을 수 있을 것 같다. 개발은 너무 당연한가? 달마다 뭘 했는지, 아쉬웠던게 있는지를 회상하면서 적어보았다~ # [요약] 자바, 스프링 쿠버네티스 카카오 인턴 구름톤 2기 우수상 졸업과제 은상 취준 배드민턴 스마게 STOVE 인턴 NCSOFT # [1월 - 2월] 2021년에 Python, Django로 백엔드 개발을 처음 접했고 동아리, 공모전, 교내 대회 등등 여러 프로젝트를 해봤던 베이스가 있다 2022년이 된 기념으로 1/1 부터 항상 같이 공부하는 코딩꿈나무 행님과 스프링과 자바 공부를 시작했다. 인프런에서 김영한 강사님의 스프링 강의를 보면서 공부를 했었는데 2달간 거의 매일 보면서 공부를 했다. 덕분에 기초적인..

    [Network Security] 커버로스(Kerberos) 동작 원리 이해하기

    [Network Security] 커버로스(Kerberos) 동작 원리 이해하기

    # 커버로스(Kerberos) 란? 커버로스는 티켓(ticket) 기반의 컴퓨터 네트워크 인증 프로토콜이다. 보안이 보장되지 않은 네트워크 환경에서 유저와 서버가 서로의 신뢰성 확인을 위해 사용한다. 유저와 서버간의 양방향 인증을 제공하고 커버로스 프로토콜의 메시지는 도청과 재전송 공격으로부터 보호된다. 커버로스는 대칭 키(session key)를 주로 사용하며 TTP(Trusted third party, 신뢰할 수 있는 제 3자)를 요구한다. 특정 인증 구간에서 비대칭 키를 이용함으로써 선택적으로 공개 키 암호 방식을 사용할 수 있다. 커버로스는 기본적으로 88번 포트를 사용한다. # 커버로스 도입을 고려할 만한 상황 1. 서비스 서버가 점점 많아지고, 사용자의 수도 많아져서 사용자와 권한에 대한 관리..

    [Java] 가비지 컬렉션(GC, Garbage Collection) 기초

    [Java] 가비지 컬렉션(GC, Garbage Collection) 기초

    시스템에 있는 모든 객체의 수명을 정확히 몰라도 런타임이 대신 객체를 추적하며 쓸모없는 객체를 알아서 제거하는 것 GC의 2가지 기본 원칙 알고리즘은 반드시 모든 가비지를 수집해야 한다. 살아 있는 객체는 절대로 수집해선 안된다. 2번째 원칙이 더 중요하다. 살아 있는 객체를 수집했다간 세그먼트 폴트가 발생하거나 프로그램 데이터가 나도 모르게 변형될 것이다. 따라서 GC 알고리즘은 프로그램이 사용 중인 객체를 절대 수집해선 안된다. STW(Stop-The-World) GC가 실행되어 힙의 메모리를 반환하는 동안에는 GC에 할당된 스레드를 제외한 모든 스레드가 멈추게 된다. 이러한 상태를 Stop the World라고 하고 어떠한 GC 알고리즘을 사용하더라도 STW 상태에 부딪히게 된다. 따라서 GC 튜닝..

    [Docker] m1 mac에서 image build 후 Linux에서 실행하는 방법

    Docker : exec /usr/bin/sh: exec format error 최근 진행중인 프로젝트의 서버를 배포하는 과정에서 생긴 이슈이다. 상황 m1 맥북에서 Spring 이미지를 빌드했다. 내 dockerhub 레지스트리로 푸시했다. 우분투 리눅스 서버에서 내가 만든 이미지를 받아서 컨테이너로 실행했다. ! 에러 ! 도커 컨테이너를 실행하면 내가 지정해준 entrypoint -> command 순으로 명령어가 실행된다. 그런데 명령어 실행이 전혀 안되고 위와 같은 에러만 내뿜었다. Dockerfile의 CMD나 docker-compose 파일의 entrypoint를 수정해봤지만 여전히 같은 에러가 났다. 문제점 m1 맥북은 ARM 아키텍처를 사용한다. 그래서 m1에서 도커 이미지를 빌드하면 ar..

    [Cloud Native] 분산 시스템의 기초 개념들

    [Cloud Native] 분산 시스템의 기초 개념들

    비둘기 책을 읽고 정리한 글입니다 분산 시스템이란? 분산 시스템은 개별 컴퓨터들이 네트워크로 연결되어서 하나의 컴퓨터로 보이는 시스템이다. 분산 시스템의 8가지 일반화 오류 네트워크는 안정적이다 네트워크는 언제든지 불안정해질 수 있다. 서비스들은 서로 다른 장비에 존재하기 때문에 잠재적인 네트워크 장애에 대응할 수 있도록 어플리케이션을 설계해야 한다. 네트워크 지연이 없다 넓은 의미의 네트워크 지연은 데이터를 받을 때까지 걸리는 시간을 의미한다. 서로 다른 장비에 있는 서비스들 간의 통신은 네트워크 지연이 반드시 존재한다. 네트워크 호출, 네트워크 통신 횟수를 줄여야 한다. 클라이언트와 가까운곳에 데이터를 두도록 한다. 이를 위해 캐싱, CDN, 멀티리전 배포 등을 활용할 수 있다. Pub/Sub 방법을..