3-애자일

애자일은 불확실성이 높은 일에 대해서 애초에 이것이 불가능하다고 본다. 애자일이 불확실성을 다루는 방식은 좀 더 짧은 주기로 더 일찍 피드백을 받는 것으로 정리할 수 있다. 학습과 협력은 불확실성이 큰 상황에서 좋은 대응전략이 된다. 애자일의 씨앗 고객에게 매일 가치를 전하라 매일: 불확실성이 높을수록 학습 빈도가 자주 있어야 한다. 고객에게: 이해당사자와 협력 할 떄 가치를 전하면 협력이 쉽다. 애자일 도입 성공 요인 분석 애자일의 성숙도가 높은데 성공도가 낮은 조직은 없었다. 애자일의 성숙도가 낮더라도 프로젝트 성공에 도움이 될 수 있다....

2024-09-15 · 2 min · 232 words

3-시스템 설계 면접 공략법

효과적 면접을 위한 4단계 접근법 1단계: 문제 이해 및 설계 범위 확정 성급하계 최종 설계를 내놓으면 잘못된 시스템을 설계할 가능성이 높아진다. 엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바를 질문을 하는 것, 적절한 가정을 하는 것, 그리고 시스템 구축에 필요한 정보를 모으는 것이다. 요구사항을 이해하는데 에는 아래와 같은 질문들을 생각해볼 수 있다. 구체적으로 어떤 기능들을 만들어야 하나? 제품 사용자 수는 얼마나 되나? 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마나 되리라 예상하는가?...

2024-09-15 · 3 min · 427 words

3-설계 원칙

SOLID 원칙의 목적은 중간 수준의 소프트웨어 구조가 아래와 같도록 만드는 데 있다. 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SOLID 원칙 SRP(단일 책임 원칙): 하나의 모듈은 하나의, 오직 하나의 액터에 대해서만 책임져야 한다. OCP(개방-폐쇄 원칙): 기존 코드를 수정하기보다는 반드시 새로운 코드를 추가하는 방식으로 시스템의 행위를 변경할 수 있도록 설계해야만 소프트웨어 시스템을 쉽게 변경할 수 있다. LSP(리스코프 치환 원칙): 상호 대체 가능한 구성요소를 이용해 소프트웨어 시스템을 만들 수 있으려면, 상위 타입 자리에 하위 타입으로 치환할 수 있어야된다....

2024-09-15 · 4 min · 824 words

3-물리 계층 데이터를 전기 신호로 변환하기

물리 계층의 역할과 랜 카드의 구조 피지컬 계층: 데이터를 전송하기 위해 시스템 간의 물리적인 연결을 하고 전기 신호의 변환 및 제어하는 역할을 담당한다. 1계층은 전기 신호를 0과 1의 비트열을 전기 신호, 전기 신호를 0과 1의 비트열로 변환하는 역할을 한다. 전기 신호에는 아날로그 신호와 디지털 신호가 있다. 아날로그 신호는 전화 회선이나 라디오 방송에서 사용되는 신호다. 컴퓨터는 네트워크를 통해 데이터를 송수신할 수 있도록 랜 카드가 메인 보드에 포함되어있다. 랜 카드가 데이터를 전기 신호로 변환해준다....

2024-09-15 · 3 min · 442 words

3-데이터로 작업하기

JDBC를 사용해서 데이터 읽고 쓰기 관계형 데이터를 사용할 경우 자바 개발자들이 가장 많이 사용하는 두 가지 방법은 JDBC와 JPA다. 스프링의 JDBC 지원은 JdbcTemplate 클래스에 기반을 둔다. JdbcTemplate은 JDBC를 사용할 때 요구되는 모든 형식적이고 상투적인 코드없이 개발자가 관계형 데이터베이스에 대한 SQL 연산을 수행할 수 있는 방법을 제공한다. connection 생성, statement 생성 connection, statement, result set 닫기 SQLException 예외 처리 SQLException은 checked 예외지만 대부분의 흔한 문제들은 catch 블록에서 해결될 수 없으므로 현재 메서드를 호출한 상위 코드로 처리를 넘겨야 한다....

2024-09-15 · 3 min · 473 words

3-데이터

이 장에서는 간접 쿼리 최적화를 다룬다. 세 가지 비밀 인덱스가 도움이 되지 않을 수 있다 인덱스는 성능에서 핵심이지만 좋은 인덱스라도 쿼리가 느릴 수 있다. 인덱스 없이는 성능을 달성할 수 없지만 무한한 데이터 크기에 대해 무한한 영향력을 제공한다는 의미는 아니다. 인덱스 스캔의 경우 테이블의 행 수가 증가할수록 인덱스 스캔을 사용하는 쿼리에 대한 응답 시간도 늘어나므로 반드시 지연 시간이 발생한다. 더 이상 최적화할 수 없으면 간접 쿼리 최적화를 한다. 행 찾기의 경우 아래 나열된 것 처럼 한 행만 일치하는 인덱스 조회 접근 유형이 아니라면, rows 필드에 주의를 기울여야 한다....

2024-09-15 · 7 min · 1454 words

3-단위 테스트 구조

단위 테스트를 구성하는 방법 AAA 패턴 사용 AAA 패턴은 각 테스트를 준비(arrange), 실행(act), 검증(assert)이라는 세 부분으로 나눌 수 있다. 준비 구절: 테스트 대상 시스템(SUT)과 해당 의존성을 원하는 상태로 만든다. 실행 구절: SUT에서 메서드를 호출하고 준비된 의존성을 전달하며 출력 값을 캡처한다. 검증: 결과를 검증한다. SUT의 반환 값이나, SUT 협력자의 최종 상태, SUT가 협력자에 호출한 메서드 등으로 결과를 검증할 수 있다. Given-When-Then 패턴과 차이점은 없다. 유일한 차이점은 프로그래머가 아닌 사람에게 Given-When-Then 구조가 더 읽기 쉽다는 것이다....

2024-09-15 · 5 min · 1046 words

2-함께

소프트웨어 관리자의 개선 우선순위 조엘 테스트: 조엘 스폴스키라는 사람이 만든 ‘개발팀 평가 테스트’ 소스 컨트롤을 사용하는가? 한 번에 빌드를 만들어낼 수 있는가? 일일 빌드를 만드는가? 버그 데이터베이스를 가지고 있는가? 새로운 코드를 작성하기 전에 버그를 고치는가? 최신 업데이트된 스케줄이 있는가? 스펙(제품 명세)이 있는가? 프로그래머가 조용한 작업환경에 일하는가? 돈이 되는 한 최고의 툴을 사용하는가? 테스터가 있는가? 채용 면접 때 후보가 코드를 짜게 해보는가? 복도 사용성 테스트를 하는가? 이 테스트의 문제점은 관리자나 경영진이 각 질문의 맥락을 이해하지 못한 채 단순히 12가지 질문에 예라고 답하는 것을 목표로하는 경우가 있다....

2024-09-15 · 4 min · 799 words

2-파드와 디플로이먼트로 컨테이너 실행하기

모든 컨테이너는 파드(pod)에 속하는데, 파드란 쿠버네티스가 하나 또는 그 이상의 컨테이너를 관리하는 데 사용하는 단위다. 파드는 다른 리소스가 관리하고, 이런 고수준 리소스는 컨테이너의 세부사항을 추상화 시킨다. 이 방법으로 자기수복형(self-healing) 애플리케이션이나 바람직한 상태(desired-state) 워크플로가 가능해진다. 쿠버네티스는 어떻게 컨테이너를 실행하고 관리하는가 컨테이너는 일반적으로 애플리케이션 구성 요소 하나를 실행하는 가상화된 환경 가리킨다. 쿠버네티스는 이 컨테이너를 또 다른 가상 환경인 파드로 감싼다. 파드는 컴퓨팅의 단위로, 클러스터를 이루는 노드 중 하나에서 실행된다. 파드는 쿠버네티스로 관리되는 자신만의 가상 IP 주소를 가지며 이 주소로 가상 네트워크에 접속된 다른 파드, 심지어 다른 노드에서 실행되는 파드라도 통신을 주고 받을 수 있다....

2024-09-15 · 3 min · 442 words

2-코틀린 기초

기본 요소: 함수와 변수 Hello, World! 함수를 선언할 때 fun 키워드를 사용한다. 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 함수를 최상위 수준에서 정의할 수 있다. 꼭 클래스 안에 함수를 넣어야 할 필요가 없다. 배열도 일반적인 클래스와 마찬가지다. 코틀린에는 자바와 달리배열 처리를 위한 문법이 따로 존재하지 않는다. System.out.println 대신에 println이라고 슨다. 코틀린 표준 라이브러리는 여러 가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 wrapper를 제공한다. 줄 끝에 세미콜론을 붙이지 않아도 좋다....

2024-09-15 · 5 min · 1029 words

2-컴퓨터의 구조와 성능 향상

컴퓨터의 기본 구성 하드웨어의 구성 CPU: 명령어를 해석하여 실행하는 장치다. 메모리: 작업에 필요한 프로그램과 데이터를 저장하는 장소로, 바이트 단위로 분할되어 주소로 구분한다. 입력장치: 외부의 데이터를 컴퓨터에 입력하는 장치다. 천공카드, 키보드, 마우스, 스캐너 등 출력장치: 컴퓨터에서 처리한 결과를 사용자가 원하는 형태로 출력하는 장치다. 프린터, 모니터, 스피커 저장장치: 메모리보다 느리지면 저렴하고 용량이 크며, 전원이 꺼져도 데이터가 영구히 저장되는 장치다. 버스: 컴퓨터 부품들이 연결하는 통로. 일정한 규칙에 따라 각 장치에 데이터를 전송하는 역할을 한다....

2024-09-15 · 11 min · 2334 words

2-인덱스와 인덱싱

성능 향상과 관련 없는 딴짓 레드헤링(Red Herring): 목표로부터 주의를 딴 데로 돌리는 상황 MySQL 성능을 향상하기 위한 방법을 찾을 때 일반적으로 두 가지 레드헤링이 있다. 하드웨어를 구매하는 것 MySQL 튜닝 더 좋고 빠른 하드웨어! MySQL 성능이 만족스럽지 않을 때 성능 향상에 도움이 되는지 확인하기 위해 스케일업부터 시작하지 말라. 이 경우가 합리적인 2가지 상황 하드웨어 성능 부족으로 명백하게 느린 경우 예) 500GB의 데이터에 1GB의 메모리를 사용하는 경우 애플리케이션의 사용량이 급증하고 있으며, 하드웨어 스케일업이 애플리케이션 실행에 있어 안정성을 담보하기 위한 임시 방편인 경우 단순 스케일업은 아무것도 배우지 못하며, 고사양의 하드웨어 구매로 문제를 대강 뭉개는 데 익숙해질 것이다....

2024-09-15 · 12 min · 2441 words

2-웹 애플리케이션 개발하기

정보 보여주기 스프링 웹 애플리케이션에서는 데이터를 가져오고 처리하는 것이 컨트롤러의 일이다. 브라우저에 보여주는 데이터를 HTML로 나타내는 것은 뷰가 하는 일이다. 도메인 설정하기 도메인: 애플리케이션의 이해에 필요한 개념을 다루는 영역 class Ingredient(val id: String, val name: String, val type: Type) { enum class Type { WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE } } data class Taco(val name: String? = null, val ingredients: List<String>? = null) 컨트롤러 클래스 생성하기 컨트롤러: HTTP 요청을 처리하고, 브라우저에 보여줄 HTML을 뷰에 요청하거나, 또는 REST 형태의 응답 몸체에 직접 데이터를 추가한다....

2024-09-15 · 4 min · 741 words

2-벽돌부터 시작하기 프로그래밍 패러다임

소프트웨어 아키텍처는 코드로부터 시작한다. 프로그래밍 언어는 쉴 틈 없이 쏟아져나왔으며, 프로그래밍 패러다임도 몰아쳤다. 패러다임: 프로그래밍을 하는 방법으로 대체로 언어에 독립적이다. 패러다임은 어떤 프로그래밍 구조를 사용할지, 그리고 언제 이 구조를 사용해야 하는지를 결정한다. 패러다임 개요 구조적 프로그래밍: 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 무분별한 점프는 프로그램 구조에 해롭다는 사실을 제시했다. 객체 지향 프로그래밍: 제어흐름의 간접적인 전황에 대해 규칙을 부과한다. 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역변수가 오랫동안 유지될 수 있음을 발견했다....

2024-09-15 · 3 min · 540 words

2-단위 테스트란 무엇인가

‘단위 테스트’의 정의 단위 테스트는 작은 코드 조각을 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트다. 격리 문제는 단위 테스트의 고전파와 런던파를 구분할 수 있게 해주는 근원적 차이에 속한다. 격리 문제에 대한 런던파의 접근 런던파에서는 테스트 대상 시스템을 협력자에게서 격리한다. 하나의 클래스가 다른 클래스 또는 여러 클래스에 의존하면 이 모든 의존성을 테스트 대역(test double)으로 대체해야 한다. 장점 테스트가 실패하면 코드베이스의 어느 부분이 고장 났는지 확실히 알 수 있다. 객체 그래프를 분할할 수 있다....

2024-09-15 · 5 min · 933 words

2-네트워크의 기본 규칙

네트워크의 규칙 프로토콜: 네트워크 내의 컴퓨터 간에 통신 방법에 대한 규칙이나 표준 OSI 모델과 TCP/IP 모델 회사마다 사용하는 기술들을 통일 시키기 위해서 표쥰 규격을 정했다. 이를 OSI 모델이라고 한다. 네트워크의 기본 구조를 7개의 계층으로 나눠서 표준화했다. 7계층: 애플리케이션 계층 이메일, 파일전송, 웹사이트 조회 등 애플리케이션에 대한 서비스를 제공한다. 6계층: 프레젠테이션 계층 문자 코드, 압축, 암호화 등의 데이터를 변환한다. 5계층: 세션 계층 세션 체결, 통신 방식을 결정한다. 4계층: 트랜스포트 계층 신뢰할 수 있는 통신을 구현한다....

2024-09-15 · 2 min · 273 words

2-기본으로 돌아가기

C 에서 문자열의 문제점 널 문자를 찾아서 문자열 끝까지 가보기 전에는 끝을 알아내는 방법이 없다. 문자열 내부에는 어떤 0값도 포함할 수 없으므로, JPEG 그림과 같은 비정형 이진 자료 Binary Large OBject(BLOB)를 C 문자열 내부에 저장할 수 없다. C 문자열이 이런 방삭을 채택한 이유 유닉스와 C 언어를 고안했을 무렵 사용한 PDP-7 마이크로프로세서 때문이다. PDP-7은 ASCIZ 문자열 타입을 지원하는데, ASCIZ에는 ‘끝이 Z(ero)인 ASCII’라는 의미를 가진다. ASCIZ의 문제점 strcat을 구현하는 과정이 러시아 페인트공 알고리즘을 사용하고 있다....

2024-09-15 · 2 min · 266 words

2-개략적인 규모 추정

2의 제곱수 모든 프로그래머가 알아야 하는 응답지연 값 메모리는 빠르지만 디스크는 아직도 느리다. 디스크 탐색은 가능한 피하라. 단순한 압축 알고리즘은 빠르다. 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라. 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고받는 데는 시간이 걸린다. 가용성에 관계된 수치들 고가용성(high availability): 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력 100%는 시스템이 단 한 번도 중단된 적이 없었음을 의미한다. 대부분의 서비스는 99%에서 100%사이의 값을 갖는다....

2024-09-15 · 2 min · 230 words

1-쿼리 응답 시간

성능은 곧 쿼리 응답 시간 쿼리 응답 시간: MySQL이 쿼리를 실행하는 데 소요되는 시간 같은 의미: 응답 시간, 쿼리 시간, 실행 시간, 쿼리 지연 시간 소요 시간: MySQL이 쿼리를 받았을 떄 시작되고 셜과 세트를 클라이언트에 전송한 시점까지의 경과 시간 핵심 지표 갑작스럽게 벌어진 MySQL 성능 저하 현상은 여러 가지를 고려해야 해서 해결 방법을 파악하기 어려울 수 있다. 또한 MySQL 전문가가 아닌 응용 프로그램 엔지니어라면 이 문제가 크게 느껴질 수 있다....

2024-09-15 · 9 min · 1917 words

1-코틀린이란 무엇이며, 왜 필요한가

코틀린의 주요 특성 대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳 코틀린을 활용할 수 있는 가장 일반적인 영역 서버상의 코드 안드로이드 디바이스에서 실행되는 모바일 애플리케이션 코틀린은 개발 과정에서 수행해야 하는 모든 과업에 있어 폭넓게 생산성을 향상시켜준다. 정적 타입 지정 언어 정적 타입: 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드와 메서드를 사용할 떄마다 컴파일러가 타입을 검증해준다. 성능: 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없으므로 메서드 호출이 더 빠르다....

2024-09-15 · 4 min · 671 words