전체 글 168

[Java] JUnit의 assertThat보다 assertj의 assertThat을 써야하는 이유

이 글은 JUnit4를 기준으로 작성되었습니다. 테스트 코드를 작성할 때, 크게 두 부분으로 나누어서 생각할 수 있습니다. 1. 실행 단계 2. 검증 단계 실행 단계에서는 사용자 입력을 모방하여 테스트할 로직을 실행시킵니다. 검증 단계에서는 실행 단계가 예상한 대로 동작하는지 검증하게 됩니다. JUnit에서 이 검증 단계를 도와주는 메소드가 바로 org.junit.Assert.assertThat이라는 메소드 입니다. org.junit.Assert.assertThat 공식 문서 org.junit.Assert.assertThat의 기본 형태는 아래와 같습니다. public static void assertThat(T actual, Matcher

Java 2021.10.13

[세미나] Hackle - 개발자를 위한 핵클 Tech Webinar

진행 순서 '장애 리스크 없이 배포하기' by 김용우 라이브 Q&A 배포를 두려워 하는 이유 영향도 : 장애가 발생했을 때, 장애의 영향을 서비스를 사용하는 사람들이 얼마나 받는지 롤백 : 대부분의 장애 상황은 롤백으로 해결 가능하다 = 쉽고 빠른 롤백이 중요함 중요한것 영향도 최소화 & 쉽고 빠른 롤백 안정적이고 자신감있는 배포 기능 플래그 점진적 전달(Progressive Delivery) 기능 출시를 제어 일부 사용자에게만 먼저 기능을 출시 주요 지표를 측정(성능 등) Error Count, Latency, 구매전환율 등 문제가 있으면 롤백 사용자 기준* 기능 플래그 on/off 스위치 Rollout Targeting 특정 사용자, 특정 그룹의 사용자 에게만 호출 점진적 전달 내부 개..

이것저것 2021.10.06

[JPA] JPA Entity 왜 단일키가 좋은가?

대부분 Entity의 키는 단일키로 하는것이 좋다고 설명합니다. 왜 그럴까요? 제가 봤던 책에서는 Entity의 키에 대해서 다음과 같이 이야기 합니다. (스프링 부트와 AWS로 혼자 구현하는 웹 서비스, 저자 : 이동욱) 왠만하면 Entity의 PK는 Long 타입의 Auto_increment를 추천합니다.(MySQL기준으로는 bigint타입) 주민등록번호와 같이 비즈니스상 유니크키 혹은 복합키로 PK를 잡을 경우 난감한 상황이 종종 발생함 1. FK를 맺을 때 다른 테이블에서 복합키를 모두 갖고있거나, 중간 테이블을 둬야하는 상황이 발생 2. 인덱스에 좋은 영향을 끼치지 못함 3. 유니크한 조건이 변경될 경우, PK전체를 수정해야 하는 일이 발생하나씩 살펴봅시다. 1. FK를 맺을 때 다른 테이블에서..

Java/JPA 관련 2021.10.06

[Spring] SpringBoot에서 @RestController의 역할

최근 SpringBoot를 공부하던 중에 Controller에 @RestController만 붙였는데 어떻게 ResponseBody를 JSON으로 자동 변환해주는지 문득 궁금하여 찾아보게 되었다. 혹시 Jackson이? 예전에 Spring을 공부할 당시, Jackson 라이브러리를 사용해서 ResponseBody를 JSON 형태로 변환했던것이 기억 났다. 확인해 보니 역시 그랬다. springboot-starter-web이 참조하는 라이브러리 중에서 spring-boot-starter-json 이라는 라이브러리가 jackson을 사용하고 있었다. 참조하는 라이브러리 중 핵심이 되는 것들은 다음과 같다. jackson-databind : jackson-core 인터페이스 구현체로, jackson의 핵심 기..

Java/Spring 2021.10.05

[NodeJS] Node.js가 빠른 이유

Node.js가 빠르다는 얘기는 많이 들어봤는데, 조금 생각해보면 신기합니다. C/C++처럼 low level을 직접 제어하지도 않고, Java처럼 최적화된 가상머신에서 실행되는것도 아닌데 말이죠. 게다가 Node.js는 싱글 프로세스이고 자바스크립트의 Main Thread는 1개라고 합니다. Main Thread가 1개라는 말은, CPU core중에서 한개만 사용할 수 있다는 말인데 어떻게 빠른걸까요? 그 해답은 none-blocking IO에서 찾을 수 있었습니다. none-blocking IO를 다루기 전 확실히 하고 갈 것은, Node.js는 싱글 스레드가 아니라는 사실 입니다. Node.js 내부의 Event Loop가 싱글 스레드이고, Node.js는 멀티 스레드를 활용하도록 설계되어있습니다...

NodeJS 2021.09.25

[객체지향] 3. POJO JAVA

0. POJO? Plain Old Java Object 다들 한번쯤 다들 한번쯤 들어본 단어이실 겁니다. POJO를 있는 그대로 해석해보면, '순수한 오래된 자바 객체' 정도로 해석할 수 있는데요. 이보다 더 자세히 이해하기 위해서 잠시POJO라는 개념이 등장하게 된 배경을 살펴봅시다. 1. 배경 예전에 많이 사용했던 백엔드 기술 중 EJB라는 기술이 있습니다. 엔터프라이즈급 서버 시스템 개발시 유용한 업무로직이 포함되어있어서 EJB에만 존재하는 클래스를 사용하여 개발된 시스템이 많았다고 하는데요. 하지만 시간이 지나 새로운 기술, 프레임워크들이 등장하며 시스템을 이식해야할 경우가 생겼다고 합니다. 이때, EJB에만 존재하는 클래스를 사용한 부분의 이식의 어려움이 있었고, 이러한 사례들 때..

Java 2021.07.27

[객체지향] 2. 객체지향 설계 5원칙 (SOLID)

0. 압도적 감사...! SOLID 원칙 이라고도 불리는, 객체지향 설계 5원칙은 선배 개발자분들의 시행착오와 고민들로 만들어진 객체지향 설계 가이드라인 입니다. 후배 개발자들이 자신들과 같은 고민을 하여 시간을 낭비하지 않도록 열심히 고민해주신 선배 개발자 분들에게 감사하며, 객체지향 설계 5원칙에 대해 알아봅시다. 1. S - 단일책임원칙 SRP (Single Responsibility Principle) 모든 클래스는 하나의 책임만 가져야 하고, 클래스는 그 책임을 완전히 캡슐화 해야한다는 원칙입니다. 자동차 클래스 (다중 책임) class 자동차 { public void 시동을건다(type) { if (type=="저가형") { this.is엔진동작 = true; } else if (type="고..

Java 2021.07.25

[객체지향] 1. 객체지향

요즘 주로 사용되는 다양한 언어, 프레임워크들은 객체지향 프로그래밍을 지향합니다. 대표적으로 Java-Spring, Python-django, PHP-Laravel 등 다수의 프레임워크들은 객체지향을 기반으로 만들어져있습니다. 심지어 함수형 프로그래밍을 지향하는 Node.js 에서도 상황에 따라 class 사용을 통한 부분적 객체지향을 권장하기도 합니다. 1. 객체지향이란? 모든 사물과 개념을 객체로 정의하여 개발하는 방식 입니다. 모든 객체는 행위와 속성을 가진다는 개념을 바탕으로, 객체를 설계할때는 실제 사물을 기반으로 설계를 합니다. 자동자 객체 속성 : 차종, 현재기어, 속도 ... 행위 : 시동을건다, 속도를높인다, 속도를줄인다, 시동을끈다 ... 그리고 캡슐화, 상속, 다형성, 추상화 등의 특..

Java 2021.07.24

[링크] 견고한 nodejs 프로젝트 설계하기

어떤 언어든 프로젝트를 시작하려고 하면, 어떤 구조가 좋은 구조인가 스스로 고민하게된다. 하지만, 혼자 열심히 고민해서 구조를 설계해도, 개발하다보면 부족한점이 끊임없이 드러난다. 혼자 고민하며 얻는것들도 많겠지만, 그 시간이 너무 길어지지 않도록 해야한다고 생각한다. 특히 설계는 지식 + 경험이라고 생각한다. 그래서 내가 알고있고 경험해본것 이상의 좋은 설계를 혼자 도출하는것은 매우 어렵다고 생각한다. 안그래도 공부할 것들이 많은데 고민을 너무 비효율적으로 하지말자. https://velog.io/@hopsprings2/견고한-node.js-프로젝트-아키텍쳐-설계하기 [견고한 node.js 프로젝트 설계하기 본 글은 Sam Quinn의 “Bulletproof node.js project architec..

NodeJS 2021.07.23