728x90

분류 전체보기 166

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

MySQL Index

인덱스? 예전 신입 면접 필수질문 리스트에서 봐왔던 데이터베이스의 아주 중요한 지식 중 하나이다. 앞전에도 계속 설명했듯이 InnoDB 를 사용하고 있다면 인덱스에 대한 지식이 정말 중요하다. 일단 Index 가 성능과 밀접한 연관이 있는 이유를 설명하기 위해서는 간단하게라도 디스크 I/O를 설명해야 한다. 랜덤 I/O 그리고 순차 I/O 일단 랜덤 I/O가 일어나면 원하는 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽어오는 작업이 발생한다. 그럼 순차 I/O 는 어떨까? 순차 I/O 도 마찬가지로 원하는 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽어오는 작업이 발생한다. 그런데 두 읽기 방식에는 어떤 차이가 있을까? 바로 System Call 을 몇번 하는가에 차이가 있다. 위에 보이는 그림과 같..

팩토리 메소드 패턴

팩토리 메소드 패턴은 어떤 상황에 자주 쓰일까? 우리가 생성하는 Overloading 을 한 Constructor 는 어떠한 의미를 가지기 힘들다 예를 들면 아래와 같이 말이다. 왜? 어떤 이유로 여러개의 생성자를 만들었는지 작성자 말고는 의도를 파악하기가 힘들다. 좀 더 자세하게 예시를 들어서 공부해보도록 하자. 아래의 코드를 한번보자. 간단하게 배를 나타내는 클래스이다. 우리는 이제 Factory Pattern 을 통해서 고객이 이름과 이메일을 넣어 주문을 넣으면 배를 만들어주는 클래스를 만들것이다. 위와 같은 클래스는 어떤 문제가 있을까? 우리가 만약 상품을 추가한다고 하면 계속해서 if 문을 추가해야 하는 문제점이 발생할 것이다. 계속해서 요구사항에 따른 기존 로직의 코드의 수정이 일어날 것이고,..

DesignPattern 2021.10.30

싱글톤(Singleton) Pattern

이번 시간에는 그간 묵혀놨던 디자인 패턴을 좀 공부해보려고 한다. 요즘 코드를 치면서 느끼는게 이런 디자인 패턴을 잘 몰라서 뭔가 설계를 할때 어려움을 느끼는게 아닌가? 라는 생각도 든다. 뭐 실력 문제 겠지만, 이런 것을 더 배워나가다 보면 앞으로 조금 더 수월하게 설계를 할 수 있을 거란 생각에 공부해 보려고 한다. 싱글톤 패턴 다들 많이 사용해 봤을 것 이고, 유명한 패턴이다. 개념은 인스턴스를 오직 한개만 제공하기 위해 이용하는 패턴이다. 이 패턴이 필요한 이유? 예를 들면 우리가 설정을 하는 메뉴를 여러 인스턴스로 만들게 된다면 인스턴스 마다 설정이 달라지는 등 많은 문제를 발생시킬 수 있다. 어플리케이션에서 오직 한개로 유지해야할 객체를 싱글톤 패턴을 이용해 제공하거나 접근하도록 해야한다. 위..

DesignPattern 2021.10.28

테스트를 어떻게 해야하는가?

개요 최근 어떤 테스트가 좋은 테스트인지? 무엇을 테스트 해야 하는건지에 대한 의문점이 생겼다. 그래서 springcamp.io 에서 발표한 용근님의 발표내용을 정리해보려고 한다. https://www.youtube.com/watch?v=YdtknE_yPk4&t=174 테스트로 얻을 수 있는 것 제일 중요한것은 안정감과 자신감의 상승. 안정감과 자신감은 미래의 나 그리고 현재의 나의 동료들이 느낄 수 있도록 테스트 코드를 작성해야 한다. 무엇을 테스트 할 것인가 예시코드는 로또였는데, 처음에는 로또가 6개를 반환하는 것만 테스트 되어 있었음. 요구사항은 아래와 같은 세가지였다. - 중복 처리 - 순서가 잘 바뀌었는지 - 6개의 수를 반환하였는지 처음에는 작성자가 Set 으로 구현했기 때문에 중복처리 테스..

Test 2021.10.27

MySQL Lock System

Lock(잠금) 이란 무엇일까? 여러 스레드가 하나의 자원에 접근 하는 것을 방지하기 위해 만든 개념이다. 예를 들면 하나의 화장실에 누군가 들어가 있다면 자물쇠로 잠궈두고, 그 사람이 해제하기 전까지 다른 사람은 접근하지 못하도록 하는 개념이 간단하게 Lock 의 개념이다. 이를 통해 우리는 하나의 자원에 대한 동기화를 진행할 수 있다. 데이터베이스 시스템에서도 이와 같은 개념이 필요한데, 왜냐하면 여러 사용자가 하나의 데이터에 대해 실시간으로 동시에 접근할 수도 있기 때문이다. 그래서 데이터를 보존해주기 위해 여러 개념들이 도입되어 있다. 예를 들면 트랜잭션도 하나의 서로 다른 사용자가 데이터에 접근할때 어떻게 보여주는가? 에 대한 개념을 구현한 것 중 하나라고 생각한다. 여하튼 MySQL 에서도 이..

728x90