all
67 Back-End
50 Computer Science
5 DevOps
12
Object - 5장 책임 할당하기
2023년 9월 24일
책임 할당 과정은 일종의 trade-off 활동이다. 📖 5.1 책임 주도 설계를 향해 데이터보다 행동을 먼저 결정하라 협력이라는 문맥 안에서 책임을 결정하라 🔖 5.1.1 데이터보다 행동을 먼저 결정하라 객체에게 중요한 것은 데이터가 아니라 외부에 제공하는 행동 객체가 수행하는 행동이란 곧 책임을 의미 데이터는 객체가 책임을 수행하는 데 필요한 재료를 …
Object - 4장 설계 품질과 트레이드오프
2023년 9월 17일
객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동 객체지향 설계의 핵심은 책임 책임을 할당하는 작업이 응집도와 결합도 같은 설계 품질과 깊이 연관되어 있음 📖 4.1 데이터 중심의 영화 예매 시스템 객체지향 설계에서는 두 가지 방법을 이용해 시스템을 객체로 분할할 수 있다. 상태(데이터)를 분…
Object - 3장 역할, 책임, 협력
2023년 9월 10일
객체지향 패러다임 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) 이다. 애플리케이션의 기능을 구현하기 위해 어떤 협력이 필요하고 협력을 위해 어떤 역할과 책임이 필요한지를 고민하지 않은 채 너무 이른 시기에 구현에 초점을 맞추는 것은 변경하기 어렵고 유연하지 못한 코드를 낳는 원인이 된다. 📖 3.1…
Object - 2장 객체지향 프로그래밍
2023년 9월 3일
📖 2.1 영화 예매 시스템 🔖 2.1.1 요구사항 살펴보기 영화 영화에 대한 기본적인 정보 표현 제목, 상영시간, 가격 정보 상영 실제로 관객들이 영화를 관람하는 사건을 표현 상영일자, 시간, 순번 실제로 예매하는 대상은 영화가 아니라 상영임 할인조건 가격의 할인 여부 결정 순서 조건은 상영 순번을 이용해 할인 여부를 결정 기간 조건은 영화 상영 시작 …
Object - 1장 객체, 설계
2023년 8월 27일
로버트 L. 글래스는 이론보다 실무가 먼저라고 주장한다. 어떤 분야든 초기 단계에서는 아무것도 없는 상태에서 이론을 정립하기보다는 실무를 관찰한 결과를 바탕으로 이론을 정립한다. 소프트웨어 개발에서 실무가 이론보다 앞서 있는 대표적인 분야는 소프트웨어 설계/유지보수 이 책은 추상적인 개념과 이론보다는 코드를 통해서 객체지향의 다양한 측면을 설명할 것 📖 …
Unit Testing - 11장 단위 테스트 안티 패턴
2023년 6월 4일
📖 11.1 비공개 메서드와 테스트 취약성 🔖 11.1.1 비공개 메서드와 테스트 취약성 비공개 메서드를 노출하면 테스트가 구현 세부사항과 결합되고 결과적으로 리팩터링 내성이 떨어진다. 비공개 메서드를 직접 테스트하는 대신, 포괄적인 식별할 수 있는 동작으로서 간접적으로 테스트하는 것이 좋다. 🔖 11.1.2 비공개 메서드와 불필요한 커버리지 때로는 비공…
Unit Testing - 10장 데이터베이스 테스트
2023년 5월 28일
목에 대해 리팩터링 내성과 회귀 방지를 최대화해서 최대 가치의 통합 테스트를 개발하는 데 도움이 되는 지침을 알아본다. 📖 10.1 데이터베이스 테스트를 위한 전제 조건 🔖 10.1.1 데이터베이스를 형상 관리 시스템에 유지 데이터베이스 스키마를 일반 코드로 취급하는 것이 첫 번째 단계다 일반 코드와 마찬가지로 형상 관리 시스템에 저장하는 것이 최선 모델…
Unit Testing - 9장 목 처리에 대한 모범 사례
2023년 5월 14일
목에 대해 리팩터링 내성과 회귀 방지를 최대화해서 최대 가치의 통합 테스트를 개발하는 데 도움이 되는 지침을 알아본다. 📖 9.1 목의 가치를 극대화하기 CRM의 통합 테스트를 예제로 사용한다. 모든 프로세스 외부 의존성을 거친다. 이 테스트는 비관리 의존성을 목으로 처리했다. 🔖 9.1.1 시스템 끝에서 상호 작용 검증하기 시스템 끝에서 상호 작용을 확…
Unit Testing - 8장 통합 테스트를 하는 이유
2023년 5월 7일
단위 테스트에만 전적으로 의존하면 시스템이 전체적으로 잘 작동하는지 확신할 수 없다. 단위 테스트는 비즈니스 로직을 확인하는 데 좋다. 📖 8.1 통합 테스트는 무엇인가? 통합 테스트는 테스트 스위트에서 중요한 역할을 하며, 단위 테스트 개수와 통합 테스트 개수의 균형을 맞추는 것도 중요하다. 🔖 8.1.1 통합 테스트의 역할 단위 테스트의 요구사항을 하…
Unit Testing - 7장 가치 있는 단위 테스트를 위한 리택터링
2023년 4월 23일
📖 7.1 리팩터링할 코드 식별하기 기반 코드를 리팩터링하지 않고서는 테스트 스위트를 크게 개선할 수 없다. 리팩터링 방향을 설명하고자 코드를 네 가지 유형으로 분류하는 방법을 소개한다. 🔖 7.1.1 코드의 네 가지 유형 모든 제품 코드는 2차원으로 분류할 수 있다. 복잡도 또는 도메인 유의성 코드 복잡도(code complexity) 코드 내의 의사 …
데이터 중심 애플리케이션 설계 - 7장 트랜잭션
2023년 4월 16일
어떤 저자들은 2단계 커밋에서 유발되는 성능이나 가용성 문제 때문에 생기는 비용이 너무 커서 이를 지원할 수 없다고 주장했다. 우리는 항상 트랜잭션 없이 코딩하는 것보다 트랜잭션을 과용해서 병목지점이 생기는 성능 문제를 애플리케이션 프로그래머가 처리하게 하는 게 낫다고 생각한다. - 제임스 코벳 외, 스패너: 구글의 전역 분산 데이터베이스(2012) 트랜…
Unit Testing - 6장 단위 테스트 스타일
2023년 4월 8일
📖 6.1 단위 테스트의 세 가지 스타일 단위 테스트는 세가지 스타일이 있다. 출력 기반 테스트 상태 기반 테스트 통신 기반 테스트 🔖 6.1.1 출력 기반 테스트 정의 SUT에 입력을 넣고 생성되는 출력을 점검하는 방식. 전역 상태나 내부 상태를 변경하지 않는 코드에만 적용되므로 반환 값만 검증하면 된다. 출력 기반 단위 테스트 스타일은 함수형이라고도 …
데이터 중심 애플리케이션 설계 - 5장 복제
2023년 4월 3일
📖 5.0. Part2. 분산 데이터 분산 데이터베이스 필요한 이유 확장성 내결함성/고가용성 지연 시간 스케일업, 수직 확장, 용량 확장 공유 메모리 아키텍처 : CPU, 메모리, 디스크를 하나의 운영체제로 결합. 단점 가파른 비용 증가. 병목 현상으로 업그레이드만큼의 효용성 보장 못 함. 제한적인 내결함성 하나의 지리적인 위치 제한 스케일 아웃, 수평 …
Unit Testing - 5장 목과 테스트의 취약성
2023년 3월 26일
목과 테스트 취약성 사이에는 깊고 불가피한 관련이 있다. 📖 5.1 목과 스텁 구분 🔖 5.1.1 테스트 대역 유형 테스트 대역 모든 유형의 비운영용 가짜 의존성을 설명하는 포괄적인 용어 스턴트 대역에서 유래됨 테스트를 편리하게 하는 것 Mock 외부로 나가는 상호 작용(SUT가 상태를 변경하기 위한 의존성 호출)을 모방하고 검사하는 데 도움이 됨. 스파…
데이터 중심 애플리케이션 설계 - 4장 부호화와 발전
2023년 3월 26일
만물은 변한다. 그대로 있는 것은 아무것도 없다. 시스템의 원활한 실행을 위해선 양방향으로 호환성을 유지해야함. 하위 호환성 : 새로운 코드는 예전 코드가 기록한 데이터를 읽을 수 있어야 함. 상위 호환성 : 좀더 어려움. 예전 코드는 새로운 코드가 기록한 데이터를 읽을 수 있어야 함. 📖 4.1. 데이터 부호화 형싱 프로그램은 보통 두가지 형태로 표현된…
데이터 중심 애플리케이션 설계 - 3장 저장소와 검색
2023년 3월 19일
데이터베이스가 데이터를 저장하는 방법과 데이터를 요청했을 때 다시 찾는 방법을 알아보자. 애플리케이션에 적합한 엔진을 선택하려면 저장소 엔진 내부에서 일어나는 일을 대략적으로라도 알아야한다. 📖 3.1. 데이터베이스를 강력하게 만드는 데이터 구조 로그(log) : append-only 데이터 파일. 일반적으로 파일 추가 작업은 매우 효율적이다. 로그에서 …
Unit Testing - 4장 좋은 단위테스트의 4대 요소
2023년 3월 12일
📖 4.1 좋은 단위테스트의 4대 요소 자세히 살펴보기 회귀 방지 리택터링 내성 빠른 피드백 유지 보수성 🔖 4.1.1 첫번째 요소: 회귀 방지 회귀는 소프트웨어 버그다. 코드를 수정한 후(일반적으로 새 기능을 출시한 후) 기능이 의도한 대로 작동하지 않는 경우 프로그램의 코드베이스가 커질수록 잠재적인 버그에 더 많이 노출된다. 그렇기 때문에 회귀에 대해…
데이터 중심 애플리케이션 설계 - 2장 데이터모델과 질의언어
2023년 3월 9일
📖 2.1. 관계형 모델과 문서 모델 관계형 데이터모델 데이터는(SQL의 테이블) 관계(relation)로 구성 각 관계는 순서없는 튜플(tuple)의 모음 🔖 2.1.1. NoSQL의 탄생 JSON 유사 형식의 문서로 데이터를 저장 및 쿼리하도록 설계된 비관계형 데이터베이스 대규모 데이터셋이나 높으 쓰기 처리량 달성이 관계형에 비해 유리함 무료 오픈 소…
Unit Testing - 3장 단위 테스트의 구조
2023년 3월 5일
📖 3.1 단위 테스트를 구성하는 방법 🔖 3.1.1 AAA 패턴 사용 준비(Arrange), 실행(act), 검증(assert) 세 부분으로 나눌 수 있다. 모든 테스트가 단순하고 균일한 구조를 갖는 데 도움이 된다. 일관성이 가장 큰 장점 중 하나다. 유지보수비용 ⬇️ 준비 테스트 대상 시스템(SUT)과 해당 의존성을 원하는 상태로 만든다. Given …
Unit Testing - 2장 단위 테스트란 무엇인가?
2023년 2월 19일
고전파와 런던파를 구분짓는 정의는? 📖 2.1 단위 테스트의 정의 단위테스트의 속성 작은 코드 조각(단위)을 검증 빠르게 수행 격리된 방식으로 처리하는 자동화된 테스트 ➡️ 런던파와 고전파를 구분할 수 있게 해주는 차이 🔖 2.1.1 격리 문제에 대한 런던파의 접근 테스트 대상 시스템을 협력자에게서 격리하는 것을 일컫는다. 하나의 클래스가 다른 클래스 또는…
Unit Testing - 1장 단위 테스트의 목표
2023년 2월 12일
단위 테스트는 단순히 테스트를 작성하는 것보다 더 큰 범주이며, 단위 테스트에 시간을 투자할 때는 항상 최대한 이득을 얻도록 노력해야한다. 테스트에 드는 노력 ⬇️ 이득 ⬆️ 📖 1.1 단위 테스트 현황 이제 대부분의 프로그래머는 단위 테스트를 실천하고 중요성을 알고 있다. 예전의 논쟁이었던 '단위 테스트를 작성해야 하는가?'는 '좋은 단위 테스트를 작성하는…
JPA Auditing
2022년 2월 13일
JPA Auditing 대부분의 테이블은 공통적으로 관리되는 시스템생성일자, 시스템생성자.. 등의 컬럼이 존재합니다. JPA를 적용할 때, Entity Class에 해당 컬럼을 계속해서 선언할 필요가 있을까요? 그래서 Spring Data JPA에서 Auditing 기능을 제공합니다. 01. Entity Member Entity에 Audit 기능을 적용해…
04.API Gateway
2021년 11월 15일
04.API Gateway 이전 포스팅에 이어, MSA에서의 API Gateway 를 알아보겠습니다. API Gateway의 종류에는 Spring Cloud Gateway 와 Spring Cloud zuul 등이 있지만 그에 따른 차이는 추후 다루겠습니다. ☄API Gateway 1. 개요 다수의 서비스로 구성된 MicroService 들에서 각 서비스…
03.Service Discovery - Eureka
2021년 11월 12일
03.Service Discovery - Eureka 이전 포스팅에 이어, Service Discovery 인 Eureka에 대해 다뤄보겠습니다. ☄Service Discovery Micro Service를 구성하는 서비스들의 목록과 위치(IP, Port)가 동적으로 변하는 환경(오토 스케일링, 컨테이너 기반의 배포 등) 하에서 서비스들을 효율적으로 관리…
02.Client Side Load Balancer - Ribbon Client
2021년 10월 5일
02.Client Side Load Balancer - Ribbon Client 이전 포스팅에 이어, Client Side Load Balacer 인 Ribbon Client에 대해 다뤄보겠습니다. ☄Server Side Load Balancer vs Client Side Load Balancer MSA를 활용하기 전 우리가 흔히 사용하는 로드 밸런서는 …
01. Circuit Breaker - Hystrix
2021년 10월 1일
01.Circuit Breaker - Hystrix MSA 전환 프로젝트에서 사용하는 기술을 정확히 알고자 정리해 보았습니다. 첫번째는 서킷브레이커인 Hystrix에 대해 다뤄보겠습니다. ☄Circuit Breaker 란 서킷브레이커는 전기 기기에서 과부하나 과전류가 들어왔을 때 메인 기기를 보호하기 위해 흔히 쓰는 회로 차단기를 의미함. 주가 등락 폭이…
02. Gradle의 Task
2021년 9월 17일
02. Gradle의 Task Gradle은 명령에 의해 테스크(task) 을 수행할 수 있다. 🛠Task 01. 기본 build.gradle에서 테스크의 처리를 기술해두면, 그것을 gradle 명령으로 호출 실행 시킬 수 있다. 02. doFirst와 doLast doFirst : 최초에 수행하는 액션 doLast : 최후에 수행 하는 액션 03. 매개…
01. Gradle의 탄생과 build.gradle
2021년 9월 15일
01. Gradle의 탄생과 build.gradle 지금까지 Maven을 이용한 프로젝트를 진행해왔지만, Gradle을 이용하는 빈도가 늘어나는 만큼 공부하고자 정리해보았습니다. ☄Gradle 이란? Groovy라는 언어를 기반으로 만들어진 빌드 도구이다. Groovy는 Java 가상 머신에서 실행되는 스크립트 언어 Java와 마찬가지로 소스 코드를 작성…
JAR vs WAR
2021년 9월 10일
JAR vs WAR 백기선님과의 런치 Spring Study 중에 나왔던 내용이었고, 저도 대충만 알고 있던 내용이라 정리해 보았다. ☄JAR JAR(Java Archive)은 .jar 확장자를 가지며 라이브러리, 리소스 및 메타데이터 파일을 포함할 수 있다. .class 파일의 압축 버전과 컴파일된 Java 라이브러리 및 애플리케이션의 리소스를 포함하는…
이펙티브자바 3판 12장 정리
2021년 9월 2일
12장 직렬화 객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고(직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는(역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장한 후 나중에 역직렬화할 수 있다. 목차 아이템85. 자바 직렬화의 대안을 찾으라 아이템86. Serializable을 구현할지는 신중히 결정하라. 아…
Spring Data JPA에서 save 와 saveAll 비교
2021년 8월 27일
Spring Data JPA에서 save 와 saveAll 비교 프로젝트를 중 다건 데이터를 업데이트 하기 위해, 자연스럽게 saveAll 메서드를 쓰고 있었다. 그런데 문득 save와 saveAll 메서드의 차이가 궁금해져 정리해 보았다. 🔎 예시코드 https://www.baeldung.com/spring-data-save-saveall 을 참고하여 …
Java 버전별 특징
2021년 8월 23일
Java 버전별 특징 흔히 말하는 모던자바(8 이후 버전)의 큰 특징과 변경 및 추가사항들을 정리해보았다. ☄Java 1.8 Stream API lambda expression Optional LocalDateTime 인터페이스 내 default, static 메소드 추가 32비트 마지막으로 지원 ☄Java 9 HttpClient 인터페이스 내 priva…
이펙티브자바 3판 11장 정리
2021년 8월 8일
11장 동시성 스레드는 여러 활동을 동시에 수행할 수 있게 해준다. 하지만 신중히 프로그래밍 해야 한다. 목차 아이템78. 공유 중인 가변 데이터는 동기화해 사용해라 아이템79. 과도한 동기화는 피하라 아이템80. 스레드보다는 실행자, 태스크, 스트림을 애용하라 아이템81. wait와 notify보다는 동시성 유틸리티를 애용하라 아이템82. 스레드 안전성…
Travis CI vs Jenkins
2021년 7월 30일
Travis CI vs Jenkins 0. CI의 목표 CI(Continuous Intgretion, 지속적 통합)는 코드를 공유 저장소에 자주 통합하는 것을 기반으로 하는 소프트웨어 개발 방식이다. 그 목표는 개발 과정에서 발생할 수 있는 문제를 보다 빠르고 쉽게 식별하는 것이다. 디버깅 소요시간 감소 코드 품질 향상 1. Travis CI 깃헙 소유…
04.도커 컴포즈(Docker compose)
2021년 7월 28일
04. 도커 컴포즈(Docker compose) 1. 도커 컴포즈란 docker compose는 다중 컨테이너 도커 어플리케이션을 정의하고 실행하기 위한 도구이다. 도커 컴포즈는 복잡한 설정을 쉽게 관리하기 위해 Yaml 파일에 정의한다.(docker-compose.yml) 2. docker-compose.yml version: 도커 컴포즈의 버전 ser…
03.도커 명령어(Docker cli)
2021년 7월 26일
03. 도커 명령어(Docker cli) 도커의 기본 명령어들과 의미를 알아보자! 1. docker run docker: 도커 클라이언트 언급 run: 컨테이너 생성 및 실행 이미지 이름: 컨테이너를 위한 이미지 command: 해당 명령어를 호출함.(ls... 등) ex) 물론 hello-world 이미지는 디렉토리가 없어 제대로 동작하지 않는다! 작…
02.도커(Docker)와 하이퍼바이저(Hypervisor)
2021년 7월 26일
02. 도커와 하이퍼바이저 프로젝트를 진행하며 어렴풋이 알고 있었던 도커를 명확하게 이해하고자 여름휴가 중에😭 정리해봅니다. 1. 하이퍼바이저(Hypervisor) 1-1. 가상화 기술이 나오기 전 한대의 서버를 하나의 용도로만 사용하고 남는 서버 공간을 그대로 방치함. 하나의 서버에 하나의 운영체제, 프로그램만을 운영하여 안정적이지만 비효율적이었다. 1…
01.도커(Docker)는 무엇일까?
2021년 7월 26일
01. 도커는 무엇일까? 프로젝트를 진행하며 어렴풋이 알고 있었던 도커를 명확하게 이해하고자 여름휴가 중에😭 정리해봅니다. 1. 도커를 쓰는 이유❓ 컨테이너는 결국 환경에 상관없이 어플리케이션을 실행하게 해준다. 예를 들어보자! 도커 없이 redis를 다운받고자 하면 레디스 공식사이트에 가보면 아래와 같은 명령어를 입력하라고 한다. 물론 wget이라는 명…
Spring Data JPA의 save vs saveAndFlush
2021년 7월 2일
Spring Data JPA의 save 와 saveAndFlush의 차이점 최근에 JpaRepository의 save와 saveAndFlush의 차이점이 무엇이냐는 질문을 받았고, 공부한 것을 정리해 보았다! 01. Flush❓ 플러시(Flush)란 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것이다. 02. save vs saveAndFlush sav…
Spring Filter와 Interceptor
2021년 6월 26일
Spring Filter와 Interceptor 🛠Filter J2EE 표준스펙인 필터(Filter)는 Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 스프링 컨테이너가 아닌 톰캣과 같은 웹컨테이너(WAS)에 의해 관리가 되므로 디스패처 서블릿으로 가기 전에 요…
Spring Bean 과 Bean Scope
2021년 6월 19일
Spring Bean 과 Bean Scope Spring에서 흔히들 들어봤을 Bean의 정의와 더 나아가서 Bean Scope를 정리하고 이해해보자. ❓ Bean이란 Bean은 간단히 말하자면, Spring IoC 컨테이너에 의해 관리되는 객체이다. ✔ 왜 하필 이름이 bean일까 Spring Framework는 Enterprise Java Beans(겨…
Spring @Component와 @Bean 차이
2021년 6월 18일
Spring @Component와 @Bean 차이 프로젝트에서 Spring Batch를 이용한 개발을 하다가 @Component와 @Bean의 차이가 궁금해서 간단하게 정리했다. @Component @Bean 용도 직접 컨트롤이 가능한 Class들을 Bean으로 등록하고 싶은 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은…
스프링과 스프링부트 차이(Spring vs Spring Boot)
2021년 6월 17일
Spring vs Spring Boot Spring과 Spring Boot의 차이를 간단히 정리해 보자. 1. 개요 현재 비교하고자 하는 Spring이라는 단어는 Spring Framework이다. 물론 실무에서는 Spring Boot, Spring 생태계 전체 등 여러가지 의미로 혼합되어 쓰이곤 한다. Spring Boot는 Spring Framewo…
이펙티브자바 3판 10장 정리
2021년 6월 16일
10장 예외 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못 사용하면 반대의 효과만 나타난다. 목차 아이템69. 예외는 진짜 예외 상황에만 사용하라 아이템70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 아이템71. 필요 없는 검사 예외 사용은 피하라 아이템72. 표준 예외를 사용…
이펙티브자바 3판 9장 정리
2021년 5월 24일
9장 일반적인 프로그래밍 원칙 이번 장에서는 자바 언어의 핵심 요소에 집중한다. 지역변수, 제어구조, 라이브러리, 데이터 타입, 그리고 언어 경계를 넘나드는 기능인 리플렉션과 네이티브 메서드를 다룬다. 마지막으로는 최적화와 명명 규칙을 논한다. 목차 아이템57. 지역변수의 범위를 최소화하라 아이템58. 전통적인 for 문보다는 for each 문을 사용하…
스트림 프로세싱이란?
2021년 5월 19일
스트림 프로세싱이란? 스트림 프로세싱은 스트리밍 데이터가 레코드나 정의된 단위에 따라 순차적으로 처리되는 것을 의미한다. 스트리밍 데이터: 복수의 데이터 소스(Data Source)로부터 연속적으로 생성되는 데이터 레코드(대부분 KB 단위 크기) 스트림 프로세싱은 일정량 또는 일정기간 동안 데이터를 모아서 한꺼번에 처리하는 일괄처리(Batch Proces…
이펙티브자바 3판 8장 정리
2021년 5월 17일
8장 메서드 이번 장의 내용 중 상당부분은 메서드뿐 아니라 생성자에도 적용된다. 목차 아이템49. 매개변수가 유효한지 검사하라 아이템50. 적시에 방어적 복사본을 만들라 아이템51. 메서드 시그니처를 신중히 설계하라 아이템52. 다중정의는 신중히 사용하라 아이템53. 가변인수는 신중히 사용하라 아이템54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 …
JPA 기본 키 매핑
2021년 5월 15일
JPA 기본 키 매핑 프로젝트를 중 직접 할당방식을 쓰다가 IDENTITY 전략으로 바꾸게 되어서 스터디를 진행하며 공부한 것을 정리해보았다. 🔑 기본키 매핑 방식의 종류 JPA에서 기본 키를 생성하는 방식은 아래와 같다. 직접 할당: 기본 키를 애플리케이션에서 직접 할당한다. 자동 생성: 대리 키 사용 방식 IDENTITY: 기본 키 생성을 DB에 위임…
이펙티브자바 3판 7장 정리
2021년 5월 12일
7장 람다와 스트림 자바8에서 함수형 인터페이스, 람다, 메서드 참조, 스트림 API가 추가되었다. 목차 아이템42. 익명 클래스보다는 람다를 사용하라 아이템43. 람다보다는 메서드 참조를 사용하라 아이템44. 표준 함수형 인터페이스를 사용하라 아이템45. 스트림은 주의해서 사용하라 아이템46. 스트림에서는 부작용 없는 함수를 사용하라 아이템47. 반환 …
아파치 플링크(Apache Flink)
2021년 5월 11일
아파치 플링크란? 플링크(Flink)는 독일어로 민첩함을 뜻하는 단어로 베를린 TU대학교에서 시작된 아파치 프로젝트이다. Exactly-once의 이벤트 처리를 보장하는 네이티브 스트림방식으로, 지연 발생이 적고 처리량은 높으며 비교적 사용하기 쉬운 이점이 있다.일괄처리 기능도 제공하지만 스트림 프로세싱을 목적으로 주로 사용한다. 플링크의 특징과 차별점 …
아파치 카프카(Apache Kafka)의 용어 및 특징
2021년 5월 10일
아파치 카프카란? 카프카는 링크드인에서 개발한 대용량, 대규모 메시지 처리 시스템이다. ⚙Pub-Sub 구조 카프카는 Publisher / Subscriber 모델을 사용한다. publisher는 메세지를 topic을 통해서 카테고리화하고, 해당 topic을 subscribe 함으로써 메세지를 읽어 올 수 있다. 자 그렇다면, Kafka의 용어에 대해서 …
이펙티브자바 3판 6장 정리
2021년 5월 5일
6장 열거 타입과 애너테이션 자바에는 특수한 목적의 참조타입이 2가지가 있다. 클래스의 일종인 열거타입 인터페이스의 일종인 애너테이션 목차 아이템34. int 상수 대신 열거 타입을 사용하라 아이템35. ordinal 메서드 대신 인스턴스 필드를 사용하라 아이템36. 비트 필드 대신 EnumSet을 사용하라 아이템37. ordinal 인덱싱 대신 Enum…
이펙티브자바 3판 5장 정리
2021년 4월 21일
5장 제네릭 제네릭은 jdk1.5 부터 사용할 수 있다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때 마다 형변환을 해야 했다. 1.5 부터는 제네릭을 사용하면 컬렉션에 담을 수 있는 타입을 컴파일러에게 알려주며, 컴파일러가 알아서 형변환 코드를 추가한다. 또한 엉뚱한 객체를 넣는 코드가 있다면 컴파일 타임에 차단해준다. 목차 아이템26. 로 타입…
이펙티브자바 3판 4장 정리
2021년 4월 7일
4장 클래스와 인터페이스 추상화의 기본 단위인 클래스와 인터페이스는 자바 언어의 심장과도 같다. 그래서 자바 언어에는 클래스와 인터페이스 설계에 사용하는 강력한 요소가 많이 있다. 이번 장에서는 이런 요소를 적절히 활용하여 클래스와 인터페이스를 쓰기 편하고, 견고하며, 유연하게 만드는 방법을 안내한다. 목차 아이템15. 클래스와 멤버의 접근 권한을 최소화…
이펙티브자바 3판 3장 정리
2021년 3월 28일
3장 모든 객체의 공통 메서드 Object에서 final이 아닌 메소드(equals, hashCode, toString, clone, finalize)는 모두 재정의를 염두에 두고 설계되었다. 이 메소드들을 잘못 구현하면 대상 클래스가 일반적인 규약을 준수한다고 가정하고 만들어진 클래스(HashMap, HashSet 등)에서 오동작이 일어날 수 있다. 목…
이펙티브자바 3판 2장 정리
2021년 3월 21일
2장 객체생성과 파괴 목차 아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라 아이템2. 매개변수가 많다면 빌더를 고려하라 아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라 아이템5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 아이템6. 불필요한 객체 생성을 …
Thread Safe란?
2021년 3월 18일
Thread-Safe 흔히 자연스럽게 쓰고 있고 자주 들어본 Thread-Safe의 정의와 이를 위한 방법들을 정리해보았습니다. Thread Safe란❓ 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근되어도 프로그램의 실행에 문제가 없음을 뜻한다. 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, …
RDBMS vs NoSQL
2021년 3월 15일
RDBMS 와 NoSQL의 차이 mongoDB의 공식 Document를 참고해서 정리하였습니다. 🎈 RDBMS의 역사와 NoSQL의 탄생배경 관계형 데이터베이스(RDBMS)는 40년 넘게 사용되었다. 데이터 구조가 훨씬 더 단순하고 정적인 시대에는 충분했다. 그러나 기술과 빅 데이터 응용 프로그램이 발전함에 따라 기존의 SQL 기반 관계형 데이터베이스는 …
트랜잭션 격리수준(Transaction의 Isolation Level)
2021년 3월 3일
Transaction의 Isolation Level 01. Transaction Isolation Level(트랜잭션 격리수준) 이란❓ 동시에 여러 트랜잭션이 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있는 수준 DB 엔진은 ACID 원칙을 희생해 동시성을 얻을 수 있는 방법을 제공한다. 바로 Transaction의…
JPA(Java Persistence API)의 장점
2021년 2월 25일
JPA(Java Persistence API)의 장점 최근 프로젝트에서 시니어분들의 MyBatis(SQL Mapper 방식)와 JPA(ORM)의 사용에 대한 의견충돌이 있었다.(JPA 승!!) 이를 보고, 궁금하기도 하고 빨리 해보고 싶어서 JPA의 장점을 김영한 님의 강의와 공부를 통해서 알아보았다. 01. JPA란❓ Java Persistence AP…
Java 컴파일 과정(Java Compile)
2021년 2월 20일
Java 컴파일 과정(Java Compile) Java의 컴파일 과정을 자세히 알아보자 01. Compile의 정의 ❓ compile이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. 컴퓨터가 이해할 수 있는 기계어로 번역하는 작업이다! 02. Compile 순서 ⏩ 자바 소스코드(.java)를 작성 자바 컴파일러(Java Comp…
Java 묵시적 형변환(Promotion) vs 명시적 형변환(Casting)
2021년 2월 18일
묵시적 형변환(Promotion) vs 명시적 형변환(Casting) Java에서 서로 다른 데이터 타입끼리 연산이 필요한 경우 타입변환이 필요하다. 타입변환의 종류에는 **묵시적 형변환(Promotion)**과 **명시적 형변환(Casting)**이 있다. 1. Promotion Promotion은 자동으로 형변환이 일어나는 것이다. 작은 메모리 크기의…
Web Server vs WAS
2021년 2월 16일
Web Server vs WAS Web Server와 Web Application Server의 차이점을 알아보자! 1. Web Server Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적컨텐츠(이미지, html 문서)를 제공하는 어플리케이션이다. WAS를 거치지 않고 바로 자원을 제공함. 동적 컨텐츠 제공을 위한 요청을 전달…
트랜잭션(Transaction)과 트랜잭션의 특성(ACID)
2021년 2월 10일
트랜잭션(Transaction)과 트랜잭션의 특성(ACID) 학습조직을 진행하던 중, DB isolation level에 대해 알게 되었다. 하지만 DB isolation level에 대해 공부하기 전에!! ✔트랜잭션에 대해 명확히 알고자 정리해보았다. 1. 트랜잭션이란? 트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는…
HTTP 메소드(Method)의 종류와 속성
2021년 1월 25일
HTTP 메소드(Method)의 종류와 속성 개발자라면 당연히 알아야 되는 HTTP 메소드에 대해 정리를 해보았다. HTTP 메소드의 종류는 총 9가지가 있다. ⏬HTTP 메소드 종류 GET: URL에 해당하는 자료의 전송을 요청함. 주로 조회할 때 사용 POST: 데이터 요청을 처리하고, 메시지 바디를 통해 서버로 데이터를 전달한다. 주로 등록할 때 사…
프로세스와 스레드
2021년 1월 23일
프로세스와 스레드 우리가 흔히 개발하다보면, 멀티 프로세스, 멀티 스레드 등의 용어를 흔히 접할 수 있습니다. 저 또한 추상적으로(?) 이해만 하던 것을 명확하게 알기 위해서 정리해 보았습니다. 1. 프로세스 실행 중인 프로그램 OS로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 실행됨 Code + Data + Heap + Stack 영역으로 이…
세션(Session)과 쿠키(Cookie)
2021년 1월 10일
세션(Session)과 쿠키(Cookie) 세션과 쿠키는 둘다 웹 통신간 유지 및 저장하려는 정보를 저장하기 위해 사용하는 것들이다. 🖥 세션(Session)과 쿠키(Cookie) 사용이유 HTTP 프로토콜의 특징이자 약점(connectionless, stateless)을 보완하기 위해서 사용 💡 connectionless: 클라이언트가 요청을 한 후 응…