profile
Spring, Java, Vue, Docker 풀스택 개발로그 입니다.

이벤트 발행으로 비즈니스 로직 분리하기

서비스를 만들다 보면, 처음에는 단순한 crud로 시작했던 API도 점차 복잡한 연관 관계가 생기고, 동시에 처리해야 할 일들이 생긴다. 그리고 더욱 복잡한 기능을 구현하기 위해 외부 모듈이나 시스템을 연동하여 사용하면서 하나의 요청에 함께 묶여 수행되는 로직이 점차

2020년 10월 1일
·
0개의 댓글

JPA로 인덱스 사용하기

배경 데이터베이스는 조건문으로 검색할 때, 테이블 전체를 full scan으로 탐색한다. 이러한 탐색 방식은 데이터가 많아지면 많아질 수록 비효율적인 방식이라는 것을 알 수 있을 것이다. 이러한 비효율을 해소하기 위해 인덱스 테이블을 활용할 수 있다. 인덱스는 B-Tree 자료구조를 사용해서 구성된다고 한다.B-Tree알고리즘이 궁금하다면 여기를 참고하...

2020년 9월 26일
·
0개의 댓글

Test Double - Mocks, Stubs, Fakes

배경 테스트 격리 관련 발표를 하면서 이런 질문을 받았다. > Mock Object를 사용해서 테스트 격리를 할 수 있다면, Fake Object로도 테스트 격리할 수 있나요?? 나는 Fake Object에 대한 지식이 없는 상태였고, 당연히 직접 사용해본 적이 없

2020년 9월 23일
·
0개의 댓글
post-thumbnail

스프링 MVC

Root WebApplicationContext를 상속받은 DispatcherServlet이 Servlet WebApplicationContext를 만든다.Root WebApplicationContext는 다른 DispatcherServlet에서 공용으로 사용할 수 있

2020년 9월 13일
·
0개의 댓글
post-thumbnail

Item 17. 변경 가능성을 최소화하라

Java 라이브러리는 대표적으로 String, BigInteger, BigDecimal 같은 불변 클래스를 제공한다.가변 클래스보다 설계, 구현, 사용이 쉽다.오류가 생길 여지도 적고, 훨씬 안전하다.객체의 상태를 변경하는 메서드(변경자, setter)를 제공하지 않는

2020년 9월 9일
·
0개의 댓글
post-thumbnail

Item 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

위 public 클래스처럼 단순히 데이터만 모아 놓은 클래스가 존재한다고 가정해보자.현재 필드가 모두 public열려 있기 때문에 외부에서 누구든지 언제든지 접근해서 데이터를 변경할 수 있다.이는 객체지향의 핵심원리인 캡슐화를 위반하게 된다.또한 API를 변경하지 않고

2020년 9월 9일
·
0개의 댓글
post-thumbnail

우아한 테크코스 레벨3 회고

우아한 테크코스 레벨 3 과정을 시작하고 프로젝트를 진행하기 위해 팀 빌딩 시간이 있었다.개인 별로 프로젝트 기획서를 내고, 투표를 통해 최종 프로젝트 10작을 선정했다. 나는 아이디어가 비슷한 '소니'와 함께 주제를 병합했고, 다행히도 최종 프로젝트에 선정될 수 있었

2020년 9월 5일
·
0개의 댓글
post-thumbnail

고아객체란?

JPA를 사용해서 개발을 하다보면, 연관 관계 맵핑 관련해서 고아 객체라는 용어를 들어봤을 것이다.고아 객체란 무엇인가?고아 객체를 학습하기 전에 영속성 전이를 먼저 알 필요가 있다.특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶을때

2020년 9월 4일
·
0개의 댓글
post-thumbnail

테스트 격리(Test Isolation)

우리는 테스트들이 서로 순서에 상관없이 독립적으로 수행되어야 한다는 것을 알고 있다. 마틴 파울러도 자신의 블로그에 비결정적 테스트의 문제점에 대해서 언급하며 그 원인으로 테스트 격리가 부족하게 될 때 비결정적 테스트가 된다고 했다. Therefore I find it

2020년 9월 4일
·
0개의 댓글
post-thumbnail

Item 15. 클래스와 멤버의 접근 권한을 최소화하라

시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발 가능시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅 가능. 다른 컴포넌트로 교체하는 부담도적음성능 최적화에 도움을 준다.소프트웨어 재사용성을 높인다. 외부에 의존하지 않고 독자적으로 동작할 수

2020년 9월 4일
·
0개의 댓글
post-thumbnail

Item 14. Comparable을 구현할지 고민하라

Comparable 인터페이스를 구현하면, compareTo 메서드를 구현해야한다.compareTo는 Object의 메서드가 아니며, equals와 두가지가 다르다.compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제너릭하다.compareTo를

2020년 9월 4일
·
0개의 댓글
post-thumbnail

Hashtag 생성 전략

배경 DEVBIE 서비스를 개발하면서 면접 질문 게시판을 구현하는 이슈를 맡았다.

2020년 8월 31일
·
0개의 댓글
post-thumbnail

Item07. 다 쓴 객체 참조를 해제하라

메모리 누수 스택과 같이 메모리를 스스로 관리하는 자료구조는 메모리 누수에 주의해야 한다. 스택에서 꺼내진 객체들은 그 객체들의 다 쓴 참조(obsolete reference)를 여전히 가지고 있기 때문에 가비지 컬렉터가 회수하지 않는다. 다 쓴 참조란 앞으로

2020년 8월 3일
·
0개의 댓글
post-thumbnail

Item12. toString을 항상 재정의하라

우리가 작성한 클래스에 작합한 문자열을 반환하는 경우는 거의 없다. (클래스 이름@16진수로표시하해시코드)toString은 "간결하면서 사람이 읽기 쉬운 형태의 유익한 정보"를 반환해야한다.toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"toSt

2020년 7월 25일
·
1개의 댓글
post-thumbnail

객체 지향 입문 (복습)

릴리즈가 늘어날 때마다 한 줄을 만드는데 드는 비용이 증가한다.변하지 않는 것은 오직 변한다는 사실이다.변화 대응하는 비용을 낮추고, 빠르게 대응하는 것이 필요하다.1\. 절차지향직관적으로 데이터의 흐름을 파악할 수 있다.중간에 데이터 갯수나 타입이 변경되면 전체 흐름

2020년 7월 24일
·
0개의 댓글
post-thumbnail

Item11. equals를 재정의하려거든 hashCode도 재정의하라

해당 클래스 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킨다.논리적으로 같은 객체로 인식하고 싶을 때, 해시코드가 다르다면 다른 객체로 인식한다.라는 코드가 주어졌을 때,를 한다면 실제로는 null을 반환하게 된다.HashMa

2020년 7월 22일
·
0개의 댓글
post-thumbnail

Item09. try-finally 보다는 try-with-resources를 사용하라

자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야하는 자원이 많다.전통적으로 많이 쓰이는 방식이다.만약 자원을 하나 더 쓴다면?만약 기기에 문제가 생기면, firstLineOfFile 메서드 안의 readLine 메서드가 예외를 던지고, close가 실패한다

2020년 7월 21일
·
0개의 댓글
post-thumbnail

Item08. finalizer와 cleaner를 사용하라

finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다.오동작, 낮은 성능, 이식성 문제의 원인이 되기도 한다.몇가지 쓰임새가 있긴하지만, 기본적으로 "쓰지 말아야"한다.finalizer 수행 중 에러가 발생하면, 처리할 작업이 남았더라

2020년 7월 19일
·
0개의 댓글
post-thumbnail

Item06. 불필요한 객체 생성을 피하라

String s = new String("bikini");실행될 때마다 String 인스턴스를 새로 만든다.생성자에 넘겨진 "bikini"와 이 생성자로 만들어내려는 String 인스턴스는 완전히 똑같다.String s = "bikini";하나의 String 인스턴스를

2020년 7월 14일
·
0개의 댓글
post-thumbnail

Item05. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

두 방식 SpellChecking을 위한 모두 사전을 단 하나만 사용하고 있다. (실전에 여러 용도에 따른 사전이 필요하다.)SpellChecker가 여러 사전을 사용할 수 있도록 만들면 어떻게 해야 할까?단순하게 생각한다면 필드에서 final 한정자를 제거하고 다른

2020년 7월 14일
·
0개의 댓글