전체 글195 [리팩토링 2판] Chapter 2 리팩터링 원칙 TL:DR;리팩토링의 본질을 잊지말자. 리팩토링은 개발 기간을 단축하고자 하는 것이다.리팩토링의 동력은 경제적인 효과를 늘 생각하자.리팩터링 정의리팩터링의 정의[명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법[동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.리팩터링과 재구성누군가 “리팩터링하다가 코드가 깨져서 며칠이나 고생했다”라고 한다면, 십중팔구 리팩터링한 것이 아니다. 이는 기존 동작이 보존되지 않았기 때문이다.코드베이스를 정리하거나 구조를 바꾸는 모든 작업을 재구성이라는 포괄적인 용어로 표현하고, 리팩터링은 재구성 중 특수한 한 형태로 본다.한 번에 바꿀 수 있는 작업을.. 기타 2024. 8. 12. [리팩토링 2판] Chapter 1 리팩토링: 예시 (리팩토링의 리듬) Chapter 1. 리팩터링: 첫 번째 예시TL:DR;리팩토링의 첫번째 단계는 기존 로직에 대한 테스트 코드를 작성하는 것이다. 그리고 단계별로 리팩토링할 때마다, 다시 실행하여 테스트가 깨지지 않는지 확인한다.리팩토링을 효과적으로 하는 핵심은, 단계를 잘게 나눠야 더 빠르게 처리할 수 있고, 코드는 절대 깨지지 않으며, 이러한 작은 단계들이 모여서 상당히 큰 변화를 이룰 수 있다는 사실을 깨닫는 것이다.좋은 코드를 가늠하는 확실한 방법은 얼마나 수정하기 쉬운가다. 코드를 수정하기 쉬운 정도야말로 좋은 코드를 가늠하는 확실한 방법이라고 믿는다. 코드는 명확해야 한다. 코드를 수정해야 할 상황에, 고쳐야 할 곳을 쉽게 찾을 수 있고 오류 없이 빠르게 수정할 수 있어야 한다. 건강한 코드베이스는 생산성을 극.. 기타 2024. 8. 5. [MySQL] 쿼리 튜닝을 위한 인덱스 활용의 모든 것 오늘은 백엔드 API 성능 개선을 위해 핵심적인 요소 중 하나인 인덱스를 통한 쿼리 튜닝 방법에 대하여, 학습한 내용들을 정리해보겠습니다. 먼저 기본적인 내용부터 다뤄보겠습니다.인덱스인덱스의 정의여러분은 색인에 대해 들어보셨나요? 색인(index)이란 책이나 학술서, 연구 재료가 될 서적의 내용 중에서 중요한 항목, 술어, 인명, 지명 등을 뽑아 본문 어느 쪽에 있는지 쉽게 찾아볼 수 있도록 쪽 번호와 함께 별도로 배열하여 놓은 목록입니다.인덱스란 마치 책의 색인(index)처럼, 데이터를 빠르게 찾기 위해 데이터가 위치한 위치를 나열한 별도의 데이터 구조입니다. 보통 데이터베이스 테이블의 특정 열(Column)에 대한 검색 속도를 향상시키기 위해 사용하죠.인덱스의 종류이러한 인덱스에도 여러 종류가 있습.. DB/MySQL 2024. 7. 4. [Kotlin] 코루틴(Coroutines) 기초에 대해 알아보자 (1) suspend [Language/Java] - [Kotlin] 자바와 코틀린의 공통점과 차이점[Language/Java] - [Kotlin] 코루틴(Coroutines)에 대해서 알아보자이전 글을 통해 코루틴에 대해 알아보았습니다. 이번에는 코루틴 기초에 대해서 자세하게 알아보도록 하겠습니다.suspend 함수와 일반 함수의 차이점먼저 suspend fun으로 선언되는 일시 중단 함수는 함수 내에 일시 중단 지점을 포함할 수 있는 특별한 함수입니다. 코루틴은 특정 시점에서 작업을 일시 중단하고, 다른 코루틴을 실행하도록 허용한 후 나중에 해당 작업을 재개할 수 있습니다. 일시 중단 함수는 코루틴에서 실행되는 일시 중단 지점이 포함된 코드들을 재사용할 수 있는 코드의 집합으로 만드는 역할을 합니다.import kotli.. Language/Java & Kotlin 2024. 6. 15. [Kotlin] 코루틴(Coroutines)에 대해서 알아보자 [Language/Java] - [Kotlin] 자바와 코틀린의 공통점과 차이점블로그엔 자주 안올렸지만 요새 코틀린 공부를 열심히 하고 있습니다. 지난번에는 자바와 코틀린의 공통점과 차이점에 대해서 알아보았습니다. 기본 문법은 자바스크립트와 문법적으로 유사한 부분이 있어, 금방 이해되는 부분이 많았지만 코루틴부터는 제대로 공부하지 않으면 안될 것 같아, 블로그에 열심히 정리하도록 하겠습니다.공식 라이브러리Kotlin CoroutinesKotlin SerializationKotlin Lincheck먼저, 코루틴을 사용하려면 별도의 라이브러리를 설치해야 합니다. (아래 버전은 예시입니다)implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1".. Language/Java & Kotlin 2024. 6. 14. [Java] 여러 개의 Java 버전이 설치되어 있을 때, Java 버전을 자동으로 변경하는 방법 여러 개의 Java 버전이 설치되어 있을 때, Java 버전을 자동으로 변경하는 방법 중 하나는 SDKMAN을 사용하는 것입니다.방법 1: SDKMANSDKMAN은 여러 버전의 SDK(Software Development Kit)를 관리하는 도구입니다. 다음은 SDKMAN을 사용하는 방법입니다:SDKMAN 설치curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"설치 가능한 자바 버젼 검색 sdk list javaSDKMAN을 통해 Java 설치: SDKMAN을 사용하여 여러 Java 버전을 설치할 수 있습니다. 예를 들어, Java 21과 Java 17을 설치하려면 다음 명령어를 사용합니다:sdk install j.. Language/Java & Kotlin 2024. 6. 4. [Kotlin] 자바와 코틀린의 공통점과 차이점 오늘의 질문자바와 코틀린의 공통점과 차이점요약공통점: JVM에서 실행, 객체 지향 프로그래밍, 풍부한 표준 라이브러리, 안드로이드 개발, 비동기 프로그래밍 지원.차이점: 언어의 간결성, null 안정성, 확장 함수, 코루틴, 데이터 클래스.적용할 점데이터 클래스 관련 : 앞으로 DTO는 Record로 만들어 불필요한 롬복 어노테이션을 제거해보자.공통점JVM에서 실행: 두 언어 모두 JVM에서 실행되어, 동일한 바이트코드로 컴파일됩니다. 이는 자바와 코틀린 코드를 동일한 프로젝트에서 사용할 수 있게 해줍니다.객체 지향 프로그래밍 지원: 두 언어 모두 객체 지향 프로그래밍 패러다임을 지원하며, 클래스, 상속, 인터페이스 등을 사용할 수 있습니다.풍부한 표준 라이브러리: 자바와 코틀린 모두 광범위한 표준 라이.. Language/Java & Kotlin 2024. 5. 26. [MySQL] Online DDL 활용 방법 문제상황MySQL에서 90만 건이 넘는 데이터가 적재된 테이블에 칼럼을 추가하려고 했다. 보통 데이터가 많지 않으면 1초 이내로 완료된다. 그런데, 데이터 양이 많아서 DDL 반영까지 10분 가량 시간이 소요됐다. 문제는 그 동안, 테이블에 락이 걸려, 테이블에 대한 쓰기 작업이 일시적으로 중단되는 현상이 발생됐다.락이 걸리는 이유락이 걸리는 이유는 뭘까? 데이터 일관성을 보장하기 위함이다. 테이블의 스키마를 변경하는 작업은 데이터베이스의 구조를 수정하는 것으로, 이 과정에서 테이블에 대한 읽기 및 쓰기 작업을 일시적으로 중지하여 데이터 일관성을 유지한다.스키마 변경 작업이 완료될 때까지 다른 작업들이 해당 테이블에 접근하지 못하도록 하는 것이다. 이는 동시성 문제를 방지하고 데이터베이스의 일관성을 보장.. DB/MySQL 2024. 5. 6. [대규모 시스템 설계 기초 2] 11장. 결제 시스템 파헤치기 오늘은 가상면접사례로 배우는 대규모 시스템 설계 기초 2의 11장 결제시스템의 내용을 어제에 이어 읽고 정리해봤습니다. 본 설계안에서는 하루 총 100만 건의 트랜잭션과 초당 10건의 트랜잭션(TPS)가 처리되며 결제 트랜잭션의 정확한 처리에 초점을 맞췄다.문제 이해 및 설계 범위 확정아마존닷컴과 같은 전자상거래 애플리케이션을 위한 결제 백엔드를 구축한다고 가정한다. 전 세계적으로 사용될 수 있는 애플리케이션이며, 하나의 통화만 사용한다고 가정한다.기능 요구사항대금 수신 : 결제 시스템이 판매자를 대신하여 고객으로부터 대금을 수령한다.대금 정산 : 결제 시스템이 전 세계의 판매자에게 제품 판매 대금을 송금한다.비기능 요구사항신뢰성 및 내결함성 : 결제 실패는 신중하게 처리해야 한다.내부 서비스와 외부 서.. CS/기타 2024. 4. 26. [대규모 시스템 설계 기초 2] 7장. 호텔 예약 시스템 파헤치기 이론들어가기 앞서오늘은 가상면접사례로 배우는 대규모 시스템 설계 기초 2의 7장 호텔 예약 시스템의 내용을 읽고 정리해봤습니다. 호텔 예약 시스템은 해당 내용을 바탕으로 회사 강의 결제 시스템 에 녹여낼 수 있는 부분이 많아보였습니다. 또한 사내 운영 개선 업무를 하면서 적용했던 부분과 연관되는 부분들이 많아 흥미로웠습니다.요구사항 분석5000개의 호텔에 100만 개 객실을 갖춘 호텔 체인을 위한 웹사이트를 구축하라.결제는 예약 시, 전부 진행한다.결제는 호텔 웹사이트 혹은 앱에서만 가능하다.10% 초과 예약이 가능해야 한다.객실 가격은 그날 상황에 따라 유동적이어야 한다.비기능 요구사항높은 수준의 동시성 지원 : 성수기, 대규모 이벤트 기간에 고객이 많이 몰릴 때, 동시성 이슈를.. CS/기타 2024. 4. 23. Redis에 대해 알아보자 (자료구조, Cache) 개요 쿠팡에서 모든 상품이 품절 표시되는 문제가 발생하였다. 레디스 DB 때문이란 발표가 있었다. https://www.digitaltoday.co.kr/news/articleView.html?idxno=212904 Redis(Remote Dictionary Server) Remote : 외부 Dictionary : Key-Value 형태 값 저장소 Server : 서버 Database, Cache, Message Broker로도 사용할 수 있다. In-memory Data Structure Store Supports rich data structures Redis 자료구조 비교군인 Memcached에선 Collection을 제공함. String, Lists, Sets, Sorted Sets, Hashe.. CS/기타 2024. 4. 14. [Spring] 팩토리메서드 패턴 적용해서 확장성 높은 코드 만드는 법 문제상황 게시판 목록 조회 API 게시판 유형 별로 다른 테이블을 조회해야 했다. API를 각각 분리하거나, 하나의 게시판 조회 API에서 Type에 따라 if/else 분기에 따라 다른 요소를 조회해야 했다. 예) 일반게시글, 비밀게시글, 인기글A, 인기글B 기존 레거시 시스템에서는 이러한 유형의 데이터들을 if/else로 Service 레이어에서 각각 다른 Repository (여기선 Mapper)를 사용해서 로직을 처리하였다. @Service @RequiredArgsConstructor public class CommunityBoardService { private final CommunityContentsFactoryService communityContentsFactoryService; @Tra.. Framework/Spring 2024. 3. 7. 이전 1 2 3 4 5 6 7 ··· 17 다음 반응형