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-사용자 수에 따른 규모 확장성

단일 서버 모든 컴포넌트가 한 대의 서버에서 실행되는 간단한 시스템 설계 사용자는 도메인 이름을 DNS에 질의하여 IP 주소로 변환한다. DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 되므로, 우리 시스템의 일부가 아니다. DNS 주소 결과로 IP 주소가 반환된다. 해당 주소로 HTTP 요청이 전달된다. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다. 웹 앱: 비즈니스 로직, 데이터 저장을 위해 서버 구현용 언어(자바, 파이썬 등)를 사용하고, 프레제테이션용으로는 클라이언트 구현용 언어(HTML, 자바스크립트 등)을 사용한다....

2024-09-15 · 7 min · 1406 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

@Async 사용하기

목표 @Async을 사용하는 이유를 이해한다. @Async의 사용 방법을 이해한다. @Async란? bean의 메소드에 @Async를 붙이면 별도의 스레드로 메소드가 실행된다. 호출한 쪽에서는 메소드 호출이 완료되기까지 기다리지 않는다. @Async 사용 방법 configuration @Async를 사용하기 위해서는 configuration에 @EnableAsync 를 추가해야된다. @EnableAsync @Configuration class AsyncConfig @EnableAsync의 옵션 annotation: 기본값으로는 @Async를 사용하지만 커스텀 애노테이션을 사요하고 싶을 때 사용할 수 있따. mode: advice의 종류를 나타낸다. PROXY와 AspectJ가 있다. proxyTargetClass: 프록시 모드를 사용할 때만 사용된다. CGLIB과 JDK가 있다. order: AsyncAnnotationBeanPostProcessor가 적용될 순서를 설정한다....

2024-09-15 · 2 min · 344 words

호스트 네임 vs 도메인 네임

도메인 네임: 넓은 의미로는 네트워크 상에서 컴퓨터를 식별하는 호스트명을 가리키며, 좁은 의미에서는 도메인 레지스트리에게서 등록된 이름을 의미한다. 호스트 네임: 네트워크에 연결된 장치들에게 부여되는 각각의 고유한 이름입니다. 우리가 도메인 주소를 생성하고 나면 서비스를 구분하기 위해 별도의 서브 도메인을 사용하기도 합니다. https://velog.io/@minjae-mj/호스트-네임과-도메인-네임

2024-09-15 · 1 min · 40 words

현재 시각 가져오기

CURRENT_TIMESTAMP 를 호출하면된다. SELECT CURRENT_TIMESTAMP AS current_date_time; ----------------------- 2019-02-23 20:02:21.550 (1 row affected) 참고 자료 https://www.sqlservertutorial.net/sql-server-date-functions/sql-server-current_time-function/

2024-09-15 · 1 min · 16 words

해당 문자열이 숫자인지 확인하는 방법

isNaN 함수를 사용하면 숫자가 아닌 경우 true, 아니면 false가 나온다. 참고 자료 https://stackoverflow.com/questions/175739/how-can-i-check-if-a-string-is-a-valid-number

2024-09-15 · 1 min · 13 words

하나의 쿼리에 여러 record 업데이트

목표 쿼리 하나로 여러 record의 값을 서로 다르게 업데이트 한다.(INSERT 문처럼) 방법 SQL에서 따로 제공하는 문법은 없다. CASE 문을 통해 구현해야 된다. UPDATE BANDS SET PERFORMING_COST = CASE BAND_NAME WHEN 'METALLICA' THEN 90000 WHEN 'BTS' THEN 200000 ELSE PERFORMING_COST END WHERE BAND_NAME IN('METALLICA', 'BTS'); 참고 자료 https://www.geeksforgeeks.org/how-to-update-multiple-records-using-one-query-in-sql-server/

2024-09-15 · 1 min · 47 words

필드의 리스트 순서 보장 문제

JPA를 사용하고 있을 때 DB가 리스트의 순서를 계속 유지시켜 줄 것이라고 믿으면 안된다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Room { @OneToMany(mappedBy = "room") private final List<User> users = new ArrayList<>(); ... } 이를 해결하기 위해, 유저가 방에 입장하는 시각을 따로 저장하여 그 순서를 보장하는 형태로 구현을 했다.

2024-09-15 · 1 min · 49 words