본문 바로가기

전체 글74

컨테이너 보안 1. 컨테이너 보안 위협 컨테이너는 응용프로그램과 프로그램이 의존하는 모든 것을 하나로 묶어서 실행하는 호스트와 격리한다. 이 격리는 다른 컨테이너와도 의존성을 분리한다. 컨테이너에서 공격이 가능한 경로는 다양하다. 응용 프로그램 코드 취약점 컨테이너 이미지 설정 오류 이미지 레지스트리 공격 호스트 취약점 비밀 정보 노출 네트워킹 컨테이너 탈출 취약점 보안에는 몇 가지 기본 원칙이 있다. 최소 권한 심층 방어: 여러 겹의 보안 경계 공격 표면 축소: 공격이 들어올 수 있는 구멍 자체를 줄인다. 폭발 반경 제한: 공격이 들어오더라도 영향을 미칠 수 있는 부분을 줄인다. 직무 분리 2. 리눅스 시스템 호출, 접근 권한, 능력 리눅스 시스템에서 보안의 토대는 파일 접근 권한이다. 리눅스 세상에는 “모든 것은 .. 2023. 7. 14.
실무에 바로 쓰는 Go 언어 핸즈온 가이드 1. 커맨드 라인 애플리케이션 작성 함수에서 read, write를 할 때 인자로 reader와 writer를 받아와서 하는 게 좋다. 직접 Stdin, Stdout 변수를 참조하면 유닛 테스트 작성이 매우 어렵다. 모든 성공적이지 않은 실행은 종료시 os.Exit()를 이용해서 0이 아닌 종료 코드를 반환해야 한다. 사용자 정의 에러를 잘 활용하자. var errPosArgsSpecified = errors.New("Positional arguments specified") ... c, err := parseArgs(os.Stderr, os.Args[1:]) if err != nil { if errors.Is(err, errPosArgSpecified) { fmt.Fprintln(os.Stdout, e.. 2023. 7. 12.
리팩터링 - 마틴 파울러 인상깊게 보았던 부분은 볼드 + 색깔을 변경해 두었다. Chapter 2: 리팩터링 원칙 리팩터링 하기 전과 후의 코드가 동일하게 동작해야 한다. 소프트웨어를 개발할 때 목적을 분명히 하자. ‘기능 추가’인지, ‘리팩터링’인지. 리팩터링의 궁극적인 목적은 개발 속도를 높임에 있다. Chapter 3: 코드에서 나는 악취 주석을 달아야 할 부분은 무조건 함수로 만들자. 함수를 짧게 만들어 보자. 매개변수 목록을 줄이자. 매개변수 목록이 길어지면 그 자체로 이해하기 어려울 때가 많다. 전역 데이터를 주의하자. 전역 데이터는 코드베이스 어디서든 건드릴 수 있고, 값을 누가 바꿨는지 찾아내기 어렵다. 프로그램을 모듈화할 때에는 코드를 여러 영역으로 나눈 후 영역 안의 상호작용은 늘리고 영역 사이 상호작용은 줄이.. 2023. 7. 5.
객체지향의 사실과 오해 유일하게 변하지 않는 것은 모든 것이 변하지 않는다는 사실뿐이다. - 헤라클레이토스 처음에 객체지향을 배웠을 때에는 Java를 배우면서 같이 배웠던 개념인지라, 클래스, 상속, 다형성 등을 Java 문법에 빗대어 배웠다. 그래서 객체지향의 본질적인 의미보다는 Java에 적용된 개념과 어떻게 구현하는지를 중심으로 배웠던 것 같다. 하지만 이 책에서는 우리가 널리 알고 있는 앨리스의 예제를 들어서 객체지향에 대해 잘못 알고 있던 개념들을 바로잡아준다. 우리가 중요하게 생각해야 했던 것이 상속같은 지엽적인 내용이 아니라, 객체 사이의 상호작용을 통해 이루어지는 시스템이었던 것임을 깨달을 수 있었다. 시스템 내에서 객체는 책임을 가지고 다른 객체와 소통(협력)을 한다. 같은 책임을 가진다면 다른 객체로 대체할 .. 2023. 7. 2.