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-네트워크의 기본 규칙

네트워크의 규칙 프로토콜: 네트워크 내의 컴퓨터 간에 통신 방법에 대한 규칙이나 표준 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

1-자라기

현실 세계에는 학교 학습보다 야생 학습이 더 많이 필요하다. 야생 학습의 특징 대부분 협력적이다. 대부분 비순차적이다. 대부분 자료에 한정이 없다. 대부분 명확한 평가가 없다. 대부분 정답이 없다. 대부분 목표가 불분명하고 바뀌기도 한다. 불확실성이 높을수록 야생 학습이 중요하다. 당신은 몇 년 차? 경력, 그 견딜 수 없는 무거움 경력 연차라는 것으로부터 이 사람이 초급인지 아닌지 정도의 정보만 기대할 수 있다. 초급이 아닌 사람들에 대해서는 경력 연차가 오히려 혼동을 불러일으키는 발못된 정보로 작용할 수 있다....

2024-09-15 · 8 min · 1610 words

1-운영체제의 개요

운영체제 소개 운영체제의 역할 자원 관리: 컴퓨터 자원(키보드, 네트워크 카드, 사운드 카드 등)을 요청한 애플리케이션들에게 적절한 순서로 자원을 배분하고 적절한 시점에 자원을 회수한다. 자원 보호: 악의적이거나 미숙한 애플리케이션, 사용자으로부터 자원을 보호하는 역할을 한다. 다른 영역의 자원을 침범하여 데이터를 수정하거나 삭제를 막아준다. 하드웨어 인터페이스 제공: CPU, 메모리, 키보드, 마우스와 같은 하드웨어가 제조사에 신경쓸 필요없이 사용할 수 있도록 하드웨어 인터페이스를 제공한다. 하드웨어 인터페이스 지원은 드라이버를 설치해야 가능한데, 대부분의 드라이버는 운영체제를 설치할 때 자동으로 설치된다....

2024-09-15 · 6 min · 1139 words

1-안정성

가변성을 제한하라 상태를 구현하는 방법 var 프로퍼티 사용 mutable 객체 사용 (MutableList, MutableSet 등) 상태를 가질 때 문제점 상태를 추적해야되기 때문에, 프로그램을 이해하고 디버그하기 힘들어진다. 시점에 따라서 값이 달라질 수 있으므로, 코드의 실행을 추론하기 어려워진다. 멀티스레드 프로그램일 때는 적절한 동기화가 필요하다. 모든 상태를 테스트해야 하므로, 테스트하기 어렵다. 상태 변경이 일어날 때, 이러한 변경을 다른 부분에 알려야 하는 경우가 있다. 코루틴: 프로그램의 실행 흐름을 일시적으로 중단하고, 나중에 중단한 시점부터 실행을 재개할 수 있는 멀티 태스킹 기법....

2024-09-15 · 11 min · 2253 words

1-시작하기 전에

쿠버네티스 이해하기 쿠버네티스는 컨테이너를 실행하는 플랫폼 컨테이너화된 애플리케이션의 시작, 롤링 업데이트, 서비스 수준 유지, 수요에 따른 스케일링, 보안 접근 등 다양힌 기능을 제공한다. 쿠버네티스의 핵심 개념 애플리케이션 정의에 사용되는 API 애플레케이션이 실제로 동작하는 클러스터 클러스터는 도커 같은 컨테이너 런타임이 동작하는 여러 대의 서버가 모여 하나의 논리적 단위를 구성하는 것을 의미한다. YAML 파일에 애플리케이션을 기술하고 이 파일을 쿠버네티스 API에 전달하면, 쿠버네티스가 파일게 기술된 애플리케이션 구성을 이해하고 클러스터 현재 상태와 비교한다. 파일에 기술된 바람직한 상태와 현재 상태에 차이가 있따면 컨테이너를 추가 또는 제거한다....

2024-09-15 · 2 min · 320 words

1-스프링 시작하기

스프링이란? 스프링 애플리케이션 컨텍스트(Spring application context): 애플리케이션 컴포넌트들을 생성하고 관리하는 컨테이너. 빈(bean): 스프링에서 관리하는 애플리케이션 컴포넌트 빈의 상호 연결은 Depedency Injection이라고 알려진 패턴을 기반으로 수행된다. 스프링 애플리케이션 컨텍스트가 빈의 생성과 관리를 자체적으로 해주며, 모든 빈을 생성, 관리하고 빈을 필요로 하는 다른 빈을 주입한다. 지금까지의 스프링 버전에서는 XML 파일을 사용해서 빈을 상호 연결하도록 스프링 애플리케이션 컨텍스트에 알려줬다. 최신 버전에서는 자바 기반의 configuration이 더 많이 사용된다. @Configuration은 이것이 각 빈을 스프링 애플리케이션 컨텍스트에 제공하는 구성 클래스라는 것을 스프링에게 알려준다....

2024-09-15 · 4 min · 770 words

1-소프트웨어 늪지대

공룡과의 승부 오늘날에도 소프트웨어 프로젝트들을 괴롭히는 난제들은 거의 편하지 않았다. 소프트웨어 프로젝트가 실패하는 가장 큰 요인은 요구사항의 문제(시스템을 잘못 정의하거나, 요구사항이 구체적인 구현을 하기에 모호하거나 너무 자주 바뀌어서 결국 시스템 디자인을 엉망으로 만들어 버리는 일들)과 관려이 있다고 하단다. 포트란이 개발되었을 때 사람들은 이제부터 컴퓨터 프로그래밍을 할 필요가 없을 것이라고 생각했다. 그러나 컴퓨터는 문제 정의를 자동화하는 것은 불가능하다. 문제를 정의하기 위해 필요한 것이 바로 프로그래밍이고, 이런 관점에서 본다면 프로그래밍은 절대로 사라지지 않을 것이다....

2024-09-15 · 7 min · 1369 words

1-소개

소프트웨어를 올바르게 만드는 일은 어렵다. 소프트웨어를 제대로 만들려면 적정 수준의 지식과 기술이 겸비해야 한다. 소트웨어를 제대로 만들면 아주 적은 인력만으로도 새로운 기능을 추가하거나 유지보수할 수 있다. 변경은 단순해지고 빠르게 반영할 수 있따. 결함은 적어지고 잦아든다. 설계와 아키텍처란 설계와 아키텍처 사이에는 차이가 없다. 아키텍처는 고수준의 무언가를 가리킬 떄 흔히 사용되는 반면, 설계는 저수준의 구조 또는 결정사항 등을 의미할 떄가 많다. 저수준의 세부사항과 고수준의 구조는 모두 소프트웨어 전체 설계의 구성요소다. 이 둘을 구분 짓는 뚜렷한 경계는 없다....

2024-09-15 · 2 min · 262 words

1-새로운 인프라 환경이 온다

컨테이너 인프라 환경이란 컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경이다. 컨테이너: 하나의 운영체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가벽고 빠르게 동작한다. 모놀리식 아키텍처 모놀리식 아키텍처: 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능을 통합돼 있는 구조를 의미한다. 장점: 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편하다. 단점: 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진 수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커진다....

2024-09-15 · 2 min · 405 words

1-단위 테스트의 목표

단위 테스트 현황 기업용 애플리케이션 개발 프로젝트는 제품 코드와 테스트 코드 비율을 1:1에서 1:3 정도 된다. 테스트 작성에 그치지 않고 노력 대비 최대의 이익을 이끌어내는 방식으로 단위 테스트를 작성하는 것이 중요하다. 단위 테스트의 목표 코드 조각을 단위 테스트할 수 없으면 설계 품질이 낮은 것이지만, 코드 조각을 단위 테스트할 수 있다고 설계 품질이 좋은 것은 아니다. 단위 테스트 목표는 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다. 테스트를 작성하지 않으면 코드 베이스에서 무언가를 변경할 때마다 소프트웨어 엔트로피가 증가한다....

2024-09-15 · 4 min · 694 words

1-네트워크 첫걸음

네트워크의 구조 네트워크: 컴퓨터를 두 대 이상 연결하여 서로 데이터를 전송할 수 있는 통신망 인터넷: TCP/IP 프로토콜을 사용하는 세계 규모의 네트워크다. 전 세계의 컴퓨터를 서로 연결하여 정보를 교환할 수 있도록 만든 하나의 컴퓨터 통신망이다. 패킷: 네트워크 통신을 할 때 사용되는 작게 분할되는 데이터의 기본 단위다. 패킷으로 나누지 않고 한 번에 큰 데이터를 그대로 보내면 네트워크의 대역폭을 너무 차지해서 다른 패킷의 흐름을 막을 수도 있기 때문이다. 패킷이 순서대로 도착하지 않을 수도 있고, 패킷이 누락될 수도 있기 때문에 패킷에는 번호를 붙인다....

2024-09-15 · 2 min · 313 words

1-Vuejs에 대한 소개

Vue.js에 대한 소개 MVVM(Model-View-VIewModel) 패턴을 표방하고 있다. Model: 애플리케이션 도메인의 데이터 및 동작을 캡슐화하는 비즈니스 객체 View: 사용자가 보게되는 데이터 ViewModel: 모델과 뷰를 동기화하는 객체 코어 라이브러리는 ViewModel에 집주오디어있다. 코어 라이브러리를 제외하고도 Router나 Vuex 같은 라이브러리르 개발/배포하고 있다. 가상 노드 구성을 통해 매우 좋은 성능을 보여준다. 디렉티브: HTML에 사용되는 특별한 기호. 정의한 기능 혹은 연결된 변수의 값에 따라 DOM 엘리먼트를 변화시킨다. 디렉티브 중 v-model과 같은 디렉티브는 스크립트 코드의 변수와 양방향으로 바인드되어 실시근으로 DOM 엘리먼트에 변화를 줄 수 있다....

2024-09-15 · 2 min · 368 words

@RequestMapping같이 url을 파싱할 수 있는가

PathMathcer 또는 AntPathMatcher 를 사용하면 된다. 참고 자료 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html

2024-09-15 · 1 min · 9 words

@Profile, @ActiveProfile

profile 설정에 따라 다른 Bean을 사용하고 싶다면 @Profile을 사용할 수 있다. profile 설정에 따라 테스트를 끄고 켜고싶다면 @ActiveProfile을 사용할 수 있다. 참고 자료 http://wonwoo.ml/index.php/post/1933

2024-09-15 · 1 min · 24 words