본문 바로가기

전체 글

Java 8 멀티코어 CPU 대중화와 같은 하드웨어적인 변화는 Java의 변화에 영향을 미치게 되었고, Java는 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하기 위해 노력했다. 🙄 Java 8은 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항을 기반으로 한다. ✔ Java 8에서 제공하는 새로운 기술 스트림 API 메서드에 코드를 전달하는 기법 인터페이스의 디폴트 메서드 ✔ Java 8 설계의 밑바탕을 이루는 세 가지 프로그램이 개념 😎 스트림 처리 스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. A, B, C, D = 파이프 라인 데이터 -> A -> B -> C -> D -> 결과 데이터 Java 8에서는 java.util.stream 패키지에.. 더보기
[AWS Chatbot] CodeDeploy 배포 결과 Slack 알림 연동 CodeDeploy로 프로젝트를 자동 배포하고 결과를 슬랙 알림으로 받기 위해서 Aws Chatbot을 사용하기로 결정했다. Aws Chatbot을 사용하는 가장 큰 이유는 역시 무료로 사용할 수 있기 때문이다. 실습 1. AWS Chatbot 생성 AWS 페이지에서 AWS Chatbot을 입력한 후, Client 설정으로 Slack을 선택한다. 이후, Slack 워크 페이스를 연결한다. 새 채널 구성 버튼을 클릭한다. 사용하고자 하는 항목에 맞게 적절한 값을 선택해서 채널을 생성한다. 2. IAM 정책 생성 AWS IAM으로 이동 후, 정책 - 정책 생성 버튼을 클릭한다. 다음과 같이 정책을 생성한다. 3. CodeDeploy 알림 규칙 생성 AWS CodeDeploy로 이동 후, 애플리케이션 - 알림.. 더보기
[Spring] Rest-Docs 연결 Spring-Rest-Docs 테스트 코드를 기반으로 Restful API 문서 작성을 돕는 도구 Asciidoctor를 사용하여 HTML 등 다양한 포맷으로 문서를 자동 출력할 수 있다. API Spec과 문서화를 위한 테스트 코드가 일치하지 않으면, 테스트 빌드를 실패하게 되어 테스트 코드로 검증된 문서임을 보장할 수 있다. Swagger @ApiOperation 등 코드에는 영향을 주지 않지만, Swagger를 위해서 지속적으로 추가 코드를 작성해야 한다. 명세를 위한 코드들이 너무 많아 가독성이 떨어질 수 있다. 구조가 변경되었을 때, 명세도 같이 변경하지 않으면 초기 명세와 달라질 가능성이 존재한다. 프로젝트를 진행하면서, API 문서 자동화를 위해 Swagger와 Spring-Rest-Docs.. 더보기
[CS] 디자인 패턴(1) 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것을 의미한다. 싱글톤 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 하나의 인스턴스만 가지고 로직을 만드는데 사용하며, 보통 데이터베이스 연결 모듈에서 많이 사용한다. 하나의 인스턴스를 다른 모듈들이 공유해서 사용하므로 인스턴스를 생성하는 발생하는 비용을 줄일 수 있지만, 의존성이 높아진다는 단점이 존재한다. 싱글톤 패턴 예제 public class Singleton1 { private static class singleInstanceHolder { private static final Singleton INSTANCE = new Singl.. 더보기
CloudWatch Logs 사용한 로그 중앙 집중화 CloudWatch Logs를 사용하여, EC2에서 구동 중인 서버의 로그를 Push 시켜 AWS 서비스에서 로그를 중앙 집중화할 수 있도록 하고자 한다. 실습 1. IAM 역할 생성 AWS 서비스에 IAM을 검색한 뒤, 역할 -> 역할 만들기를 클릭한다. AWS 서비스, EC2를 선택하고 다음을 클릭한다. CloudWatchAgentServerPolicy를 검색한 뒤, 선택 후 다음을 클릭한다. 이후, 역할 이름을 입력하고 역할 생성을 클릭한다. 2. EC2 역할 연결 역할을 적용할 인스턴스 우클릭 -> 보안 -> IAM 역할 수정을 클릭한다. 1번에서 생성한 역할을 선택하고 역할을 적용한다. 3. CloudWatch 로그 그룹 생성 AWS 서비스에 CloudWatch를 입력하고, 로그 그룹 -> 로그.. 더보기
[DB] 정규화 정규화 중복을 최소화하게 데이터를 구조화하는 프로세스 중복을 제거, 한 곳에서만 데이터를 관리하게 설계 읽을 때는 항상 원본 데이터를 참조 읽을 때 참조가 발생하기 때문에, 조회의 성능을 포기하고 쓰기의 성능을 올린다. 테이블 설계 관점에서, 조회와 쓰기 사이의 트레이드 오프 비정규화 정규화의 반대 중복을 허용하고 참조 없이 읽기가 가능하다. 쓰기의 성능을 포기하고 읽기의 성능을 올린다. Follow 기능을 구현한다고 가정할 때, Flow Entity를 다음과 같이 만들 수 있다. @Getter public class Follow { final private long id; final private String fromMemberNickname; final private int fromMembeAge; .. 더보기
HashMap vs HashSet HashMap Map 인터페이스의 구현체이다. HashTable과 유사한 자료구조로 데이터를 저장한다. Key-Value 형태로 데이터를 저장하고 Key와 Value의 Mapping을 유지한다. Key 중복을 허용하지 않지만, Value 값의 중복을 허용한다. Key에 하나의 null, Value의 다중 null을 허용한다. HashSet Set 인터페이스의 구현체이다. 내부적으로는 HashMap을 사용하기 때문에 마찬가지로 HashTable과 유사한 자료구조로 데이터를 저장한다. Key의 값으로 객체 그 자체를 저장하고 Value 값으로 HashSet 내부 구현 코드에 미리 선언해둔 Dummy Value를 저장한다. 중복을 허용하지 않는다. 하나의 null 값을 허용한다. 데이터의 순서에 의미를 두지 .. 더보기
[DB] MySQL MySQL은 가장 인기가 많은 오픈 소스 관계형 데이터베이스이다. 높은 접근성과 낮은 비용이라는 장점을 가진다. sql 안식 표준을 지키고 있다. MySQL Architecture MySQL Engine 판단과 명령을하는 두뇌 역할 쿼리 파서 -> 전처리기 -> 옵티마이저 -> 쿼리 실행기 등의 구성 요소로 이루어져 있다. 쿼리 파서 SQL을 파싱하여 Syntax Tree를 만든다. 해당 과정에서 문법 오류 검사가 이루어진다. 전처리기 쿼리 파서에서 만든 Tree를 바탕으로 전처리를 시작한다. 테이블이나 컬럼 존재 여부, 점근 권한 등 Semantic 오류를 검사한다. 쿼리 파서, 전처리기는 컴파일 과정과 매우 유사하고 매번 구문 평가를 진행한다. 옵티마이저 쿼리를 처리하기 위한 여러 방법들을 만들고, .. 더보기