728x90

2021/11 20

컴포넌트

컴포넌트는 배포 단위다. 자바의 경우 .jar 파일이 컴포넌트가 되고, 루비의 경우 gem 파일이 컴포넌트가 된다. 개발 초창기에는 프로그래머가 메모리에서 프로그램이 어느 곳에 위치할지 정의해야 했다. 아래의 코드를 간단하게 보자. *200 TLS START, CLA TAD BUFR 위에서 설명한대로 예전에는 프로그래머가 메모리에 어느 곳에 위치할지 적어줘야 하므로 Origin 이 필요했다. 프로그램 시작부의 *200 을 주목해보자. 과연 어떤 의미일까? 이는 메모리 주소 200에 로드할 코드를 생성하라고 알려주는 것이다. 내 단순한 추측인데 메모리의 코드영역이 이 영역이 아닐까? 라는 생각이 들게 되었다. 여하튼 현재 우리는 이런 고민을 할 필요가 없었지만, 그 당시에는 아주 큰 고민이였다. 왜냐하면 ..

Architecture 2021.11.17

Kotlin JPA

Kotlin JPA 를 Gradle 기반으로 간단히 설정해보자. https://start.spring.io/ 위의 링크로 이동해서 아래 사진과 같이 옵션들을 골라주자. 고르고 압축풀고 Intellij 를 통해서 열어주자. Kotlin 은 JPA 를 쓰기 위해서 여러가지 설정이 필요한데 그 이유는 첫번째로, JPA 는 기본적으로 클래스를 final 형태로 사용하는데 이는 Hibernate 와 별로 어울리지 않습니다. 그 이유는 JPA 에서는 지연로딩을 하게 될 경우 프록시 객체를 만들어야 하는데 이때 class 에 final 이 있게 되면 프록시 객체를 만들 수 없게 됩니다. 따라서 all-open plugin 을 이용해야 합니다. 뭐, 이런 문제 때문에 data class 를 이용하는 사람들도 있지만 스..

Kotlin 2021.11.16

학습방법 회고

오늘은 그간 프로그래머라는 길을 걸어오면서 어떻게 학습하는지? 꾸준히 할 수 있는 원동력이 뭔지 적어보려고 한다. 처음 컴퓨터공학이라는 걸 배웠을때는 대학교 1~4 학년 때 까지 컴퓨터 공학을 배웠던게 전부였다. 뭐 열심히 다니지도 않았고, 매일 놀러다니기만 했지만 그 당시의 학습법은 단순히 어느정도의 성적만 나오기 위한 공부였던 것 같다. 목적이 단기 목표인 "어느정도의 성적" 이였기에 추구하고자 하는 가치도 낮았고 그에 수반되는 노력도 적어질 수 밖에 없던 것 같다. 그래서 그 당시의 공부 내용들은 크게 머릿속에 잘 남지 않았지만, 그 중 유독 남는 기억들이 있다. 그 당시를 추억하며 생각해볼때, 어떻게 내 머릿속에 남았을까? 를 고민했던 적이 있는데 생각해보니 진짜로 이해하고, 남에게 그걸 설명해..

끄적 2021.11.16

Kotlin object

코틀린에는 object 라는 새로운 키워드가 도입되었다. 자바에는 이 키워드가 없는데 코틀린에서는 object 가 어떤 역할을 하게 되는지 알아보자. 백문이 불여일견 코드를 한번 작성해보자. 위의 코드는 급여를 계산하는 간단한 object 코드이다. 코틀린에는 자바와는 다르게 static keyword 가 존재하지 않는다. 그래서 object 로 선언해서 생성하게 되면 클래스 선언과 동시에 객체가 생성된다. 일단 object 는 싱글톤으로 구현되는 장점이 있다. 어떻게 Singleton 으로 구현되는 것일까? 컨버팅된 자바코드를 한번보자. 위의 코드를 컨버팅한 자바코드이다. 위를 보면 INSTANCE 에 Payroll 객체를 집어 넣는 모습이다. 하지만 위에 만 본다고 해서 전혀 싱글톤이 될거 같지는 않..

Kotlin 2021.11.15

Kotlin 변수 선언

배달의 민족으로 이직하게 되면서 이동하게 되는 팀에서 내년까지 100% 코틀린 마이그레이션이 목표라고 한다. 그래서 코틀린을 공부해야 하는 상황이다. 코틀린은 많이 해본적이 없어서 공부하며 나오는 내용들을 정리하려고 한다. (지금 까지 느낌은 TypeScript 와 무언가 많이 비슷하다..) 변수선언 자바에서는 변수를 선언할때 Type 이 가장 앞에 온다. 예를 들면 아래와 같은 코드와 같은 형태일 것 이다. Person person = new Person 위 코드 처럼 자바에서는 Person 이라는 Type 이 가장 앞에오며, person 이라는 변수가 Person Type 임을 알려준다. 하지만 코틀린에서는 Type 이 변수 뒤에 온다. 예를 들면 코틀린에서의 코드는 아래와 같다. val person..

Kotlin 2021.11.13

OpenAPI 3.0

최근 회사 API DOC 라이브러리를 Swagger 에서 호환할 수 있게 하면서 Swagger 가 OpenAPI 를 준수하고 있다는 것을 처음알았다. 그래서 회사 공고에도 많은 OpenAPI 는 도대체 무엇일까? 라는 생각이 들게 되었다. OpenAPI 3.0? 공식문서에 정의되어 있는 내용은 아래와 같다. "OpenAPI Specification(OAS) 는 RESTful API 에 대한 표준 언어에 구애받지 않는 인터페이스를 정의하여 소스코드 또는, 설명서 또는 네트워크 트래픽 검사 없이도 서비스의 기능을 이해하고 찾을 수 있게 도와줍니다." OpenAPI 는 위의 설명과 같이 RESTful API 에 대한 인터페이스를 생성해야 하므로 지켜야할 몇가지 규칙이 있다. 첫번째로는 OpenAPI 문서는 A..

Web 2021.11.12

Java Stream

스트림 처리 스트림이란? 한번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 프로그램은 입력 스트림에서 데이터를 한개씩 읽어 들이며 마찬가지로 출력 스트림으로 데이터를 한개씩 기록한다. 즉 어떤 프로그램의 출력스트림은 입력스트림이 될 수 있다. 유닉스와 리눅스의 많은 프로그램은 표준입력에서 데이터를 읽은 뒤에, 데이터를 처리하고 결과를 표준 출력으로 기록한다. 예를 들면 아래와 같다. cat file file2 | tr "[A-Z] "[a-z]" | sort | tail -3 위의 예제는 파일의 단어를 소문자로 바꾼 다음에 사전순으로 단어를 정렬했을 때 가장 마지막에 위치한 세 단어를 출력하는 프로그램이다. 해당 명령어가 실행되는 과정은 아래와 같다. 각각의 명령어는 자신의 임무를 수행하고 출력..

Java 2021.11.11

2021-11-09

2021-11-09 회고 요즘 업무를 어떻게 스케쥴링해야되는지에 고민이 많다. 제대로 스케쥴링을 못하는것 같은 느낌이 많아 문제점과 내가 생각한 개선방법들을 적어보려고 한다. 스케쥴링을 너무 빡빡하게 하는 경우가 있다. 내가 하나의 프로젝트에만 참여하지 않는 경우들도 있다. 또는 상비적으로 필요한 시간이 있는 것 같다. 그래서 그 제품만 참여해서 완성하는 기간보다 더 안정적인 시간을 잡아야 하는 것 같다. 내 시간외에도 다른 사람들의 시간도 있으므로 그게 중요하니까 일정관리를 잘해야 하는 것 같다. 노션을 통한 스케쥴링 관리 위에서 말했듯이 스케쥴링 관리의 문제점은 내가 어떤 걸 먼저 하고 어떤 것에 우선순위를 둬야 하는지 몰라서 그런것일 수도 있다고 생각했다. 그래서 앞으로 진행하는 일들은 나만의 TO..

일일회고 2021.11.09

인덱스 스캔 방식

어떤 경우에 인덱스를 이용하는게 좋은지를 판단하기 위해서는 어떻게 인덱스를 이용해서 실제 레코드를 읽어내는지 이해해야 한다. 인덱스를 이용하여 스캔하는 방식에는 대표적으로 3가지 방법이 있다. 인덱스 레인지 스캔 다음 쿼리를 예시로 한번 들어보자 mysql> SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'Gad'; 인덱스 레인지 스캔은 위와 같이 검색해야 할 인덱스의 범위가 결정됬을때 사용하는 방식이다. 위와 같이 루트 노드 -> 브랜치 노드 -> 리프노드 를 거쳐서 인덱스를 통해서 스캔해야할 지점을 찾는다. 이처럼 차례대로 쭉 인덱스를 읽어 스캔하는 것을 인덱스 레인지 스캔이라고 한다. 다만 대부분 인덱스만 읽어서 끝나지 않는다. 위와 같은..

SOLID

좋은 소프트웨어는 Clean-Code 로 부터 시작한다. 좋은 재료를 사용하지 않으면 건물의 아키텍쳐가 좋고 나쁨에 의미가 없다. 반대로 좋은 재료를 사용하더라도 아키텍쳐가 엉망이라면 나쁜 품질의 소프트웨어가 될 수 있다. 그래서 프로그래밍 세상에는 좋은 아키텍쳐를 정의하는 원칙이 필요한데 그것이 SOLID 원칙이다. SOLID 원칙의 목적 SOLID 원칙은 아래와 같은 목적을 지니고 있다. - 변경에 유연하다. - 이해하기 쉽다. - 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SOLID 종류 SRP: 단일 책임 원칙(Single Responsibility Principle) 소프트웨어 시스템이 가질 수 있는 최적의 구조는 시스템을 만드는 조직의 사회적 구조에 커다란 영향을 받는다..

Architecture 2021.11.08
728x90