클린코드(CleanCode)를 읽고 간략하게 정리한 글입니다. 3장. 함수 1. 작게 만들어라 - 함수를 만드는 첫째 규칙은 "작게" 이고, 둘째 규칙은 "더 작게" 이다. - 함수가 작을수록 좋다는 증거나 자료를 제시하기는 쉽진 않지만, 짧을수록 각 함수가 명백하고 하나의 동작을 한다는 것은 확실하다. 나쁜 예시 public void lotto() { int[] lottoNumbers = new int[6]; Random random = new Random(); // 랜덤번호 생성 for (int i = 0; i < lottoNumbers.length; i++) { lottoNumbers[i] = random.nextInt(45) + 1; // 중복번호 제거 for(int j = 0; j < i; j+..
클린코드(CleanCode)를 읽고 간략하게 정리한 글입니다. 2장. 의미 있는 이름 - 소프트웨어에서 이름은 어디에서나 사용된다. 이름을 잘 지은다면 여러모로 편하다. 1. 의도를 분명히 밝혀라 - 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. - 이름을 주의 깊게 살펴 더 나은 이름으로 개선한다면 코드를 읽는 사람은 조금 더 편하다. - 변수, 함수, 클래스 이름은 다음과 같은 질문에 모두 답해야 한다. 존재 이유는? 수행 기능은? 사용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. 1-1. 변수 나쁜 예시 int a; // 사람 수(단위 : 명) - 위 변수를 살펴보면 실제 의도는 사람 수를 표현하지만 a 라는 변수를 보면 아무 의미도..
클린코드(CleanCode)를 읽고 간략하게 정리한 글입니다. 1장. 깨끗한 코드 - 클린 코드의 책의 목표는 아래와 같다. 좋은 코드와 나쁜 코드를 구분하는 능력을 갖춘다. 좋은 코드를 작성하는 방법을 익힌다. 나쁜 코드를 좋은 코드로 바꾸는 실력을 만든다. 1. 코드가 존재하리라 - 코드는 요구사항을 상세히 표현하는 수단이다. - 기계가 실행할 정도로 상세하게 요구사항을 명시하는 직업, 이것이 프로그래밍이다. - 프로그래밍 언어에서 추상화 수준은 점차 높아지겠지만, 코드가 사라지진 않을 것이다. - 고도로 추상화된 언어나 특정 응용 분야 언어로 기술하는 명세 역시 코드이다. 2. 나쁜 코드 - 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고(리팩토링) 생각한 경험이 있다. - 어떠한 ..
1. 인덱스(Index) 1-1. 인덱스란? - 데이터를 좀 더 빠르게 찾을 수 있도록 해주는 도구 조금 더 자세히 설명하자면, Disk에서 발생하는 I/O 시간은 Main Memory 에서 발생하는 I/O에 비해 매우 크다. 인덱스를 설정함으로서 DB의 데이터를 검색시 Diks 의 I/O가 빈번히 일어나지 않도록 하는 것이다. - 속성 값을 기준으로 이미 정렬되어 있으며, 그에 해당하는 레코드 주소가 있어 빠르게 데이터 접근이 가능 - 인덱스 검색을 위한 조건은 WHERE 절에 인덱스로 설정된 컬럼명이 나와야 함 1-2. 장/단점 장점 - 검색 속도가 빨라진다. -> (무조건 그런 것은 아니다.) : 인덱싱보다 전체 테이블 검색(Full Scan)이 더 나은 경우 - 적은 처리량으로 결과를 얻을 수 있..
1. JAXB(Java Architecture for XML Binding) - JAXB는 Java Object 를 XML 로 직렬화 해주거나, XML 을 Java Object 로 역직렬화 해주는 Java API 입니다. 마샬링(Marshalling) : Java Object -> XML 언마샬링(UnMarshalling) : XML -> Java Object - 기본적으로 JDK6 ~ 9 버전에는 JAXB 가 내장되어 있어 라이브러리를 따로 추가할 필요가 없습니다.(JDK 11 부터는 Dependency 추가가 필요합니다) - 최근 Object 는 관련해서는 대부분 JSON(JavaScript Object Notation)을 많이 사용하지만, XML 도 종종 사용되고 있습니다. - JSON 을 다룰 때..
회사에서 신규 서비스 오픈을 앞에 두고 반영 이후 운영 CBT 를 진행하다가, 오류로그가 계속 올라오는 것을 확인하였습니다. 에러 로그를 확인해보니 하나의 로직에서 DB에 Insert(저장) 후에 해당 값을 Select(조회) 하는 과정에서 발생하였습니다. 발생한 이유를 확인해보니 테스트 환경에서는 발견이 안되었는데, 운영 환경은 모두 이중화가 되면서 발생하였다. 로직은 @Transactional 어노테이션으로 트랜잭션을 걸어두었으나 트랜잭션이 끝나기 전에 Insert(저장)은 1번 Session 으로, Select(조회)는 2번 Session 으로 동작 후 Insert하면서 NPE가 발생하고 있었습니다. 위와 같은 에러가 발생했다는 것은 @Transactional 어노테이션이 제대로 동작을 안했다는 것..
해당 글은 인프런에서의 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 강의를 보고 간략하게나마 정리한 글입니다. 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 - 인프런 | 강의 클라우드 분야에서 가장 Hot한 키워드인 Microservice Architecture (MSA)의 전반적인 배경, 다양한 아키텍처 패턴,애플리케이션 유형 , 레거시 전환방법 등을 현장의 목소리로 전달합니다., 클라우드 인 www.inflearn.com 1. 아키텍처 1-1. 아키텍처란? - 목표하는 대상에 대하여 구 구성고 동작 원리, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계 등을 설명하는 설계도 - 아키텍처 특성 가용성, 신뢰성, 시험성, 확장성, 보안, 민첩성, 내고장성, 탄력성,..
해당 글은 인프런에서의 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 강의를 보고 간략하게나마 정리한 글입니다. 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 - 인프런 | 강의 클라우드 분야에서 가장 Hot한 키워드인 Microservice Architecture (MSA)의 전반적인 배경, 다양한 아키텍처 패턴,애플리케이션 유형 , 레거시 전환방법 등을 현장의 목소리로 전달합니다., 클라우드 인 www.inflearn.com 1. 마이크로서비스의 정의 1-1. 모노리스 시스템 - 애플리케이션이 한 덩어리(서버)로 구성. - 단일 프로세스 실행. - 전체 수정, 배포가 되어야 함.(간단한 수정 1건 이어도, 전체 테스트가 필요하고 배포가 이루어져야 함.) - 하나가 실패..
최근에 회사 동료가 코드 검사를 하겠다며 내가 작성한 코드를 보고 리뷰를 했다. 그러던 중 공통 상수로 선언한 클래스와 Enum 클래스를 사용한 것에 대해 이야기를 하였는데, Enum 을 사용하는데 왜 == 로 비교하지 않고, equals 메소드를 사용해서 비교하는가에 대해 이야기를 하게 되었다. 이 문제에 대해서 간단하게 고민해보고 생각한 것을 포스팅해보려고 한다. 1. 코드 상황 - 간단하게 구현된 코드 상태를 작성해보자면 아래와 같습니다.(이해를 돕기 위한 예제 코드입니다.) Controller @RestController public class MemberController { @PostMapping("") public String memberTest(@RequestBody RequestMembe..
Spring 에서 개발을 하면서 예외가 발생되면 @ControllerAdvice 가 선언된 클래스가 동작하여 알맞은 예외타입(RuntimeException, NullPointerException 등)에 메소드가 호출된다. 대부분 프로젝트마다 로깅하는 방법이 정해져있기 때문에, 거의 사용되지는 않겠지만 빠르게 개발하면서 나중에 변경해야지 하고 e.printStackTrace() 로 작성하는 경우가 있다.(작성자 본인이 그렇다...) 전체 에러 메세지는 보기는 싫고, 실제 예외가 발생된 부분(소스 위치)만 로깅하고 싶었는데 구글링해보니 똑같이 생각하신 분이 계셔서 참고하게 되었다.) 이번 글에서는 e.printStackTrace를 말고 getStackTrace 로 간단한 코드를 통해서 확인해보려 한다. 1...