1. 들어가며패키는 온라인 상으로 선물박스를 만들고 '주고받는' 서비스이다. 패키에서는 선물박스를 접하는 입장에서 유저를 보내는 유저(Sender), 받는 유저(Receiver), 둘 다 아닌 유저(Stranger) 3가지로 구분할 수 있다. 그렇기 때문에 대부분의 기능에 대해 3가지 입장을 모두 고려하여 로직을 설계해야 한다. 그러다보니 하나의 메서드에서 if문이 늘어나고, 이는 한 메서드의 책임이 너무 커지는 문제를 초래하며 가독성도 같이 떨어진다. 이번 포스트에서는 '선물박스 삭제하기' 로직을 대표로 예시를 들어 설명하겠다. 아래는 리팩토링을 진행하기 전 코드이다.if문이 너무 많이 중첩되어 있어 주석 없이 코드를 이해하는데 오랜 시간이 소요된다..public String deleteGiftBox(..
1. 들어가며이번 패키 업데이트에 웹 버전을 출시하여 앱을 설치하지 않은 사람도 웹으로 선물박스를 확인할 수 있도록 할 예정이다.웹 출시 이전에는 아래 플로우에 따라 카카오톡으로 받은 선물박스를 앱에서만 확인할 수 있었다. 클라이언트는 선물박스 만들기 API의 응답값으로 받은 선물박스 ID를 사용하여 선물박스를 열 수 있는 딥링크를 생성한다.생성된 딥링크이 추가된 카카오톡 템플릿을 생성한다.선물박스를 받은 유저는 카카오톡에서 '패키 앱에서 열어보기' 버튼을 눌러 선물박스를 앱에서 확인할 수 있다. 이번 업데이트에서는 2, 3번 과정에서 딥링크 대신 제작한 웹 링크( packyforyou.com?box={giftBoxId} )를 넣고, 웹 사이트 내에 디퍼드 링크를 넣어 웹에서 앱으로 유저를 이동시키도록 ..
1. 문제 상황진행 중인 프로젝트의 테스트 코드의 가독성이 (작성자인 나에게조차...) 가독성이 좋지 않은 것 같아 테스트 코드를 전반적으로 리팩토링하고 있다. 그 중 진행중인 작업 중 하나가 Test Fixture를 클래스로 관리하는 것이다.현재 프로젝트는 각 계층의 의존성을 분리하기 위해 멀티 모듈을 사용하고 있다. Controller와 Service는 api 모듈, Entity와 DAO는 domain 모듈에서 관리하고 있다. 그렇기 때문에 DTO를 반환하는 Fixture 클래스는 api 모듈, 엔티티를 반환하는 Fixture 클래스는 domain 모듈에서 관리하기로 결정하였다. 하지만 아래 사진처럼 api 모듈에서 domain 모듈에 있는 Fixture을 불러올 수 없는 문제가 발생하였다. 2. 문..
1. 트랜잭션 격리성트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.트랜잭션에는 ACID라는 네 가지 특징이 있다. 그 중 격리성(Isolation)은 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 2. 트랜잭션 격리 수준트랜잭션 격리 수준은 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 격리되어 있는가를 나타내는 정도이다.격리성이 커질수록 더 확실한 처리가 가능하지만, 동시에 수행될 수 있는 트랜잭션이 순서대로 처리되므로 속도가 느려지게 된다. ANSI/ISO SQL 표준에서는 격리 수준을 READ_UNCOMMITED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE 4가지로 나누고..
https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 1. 문제 설명 작업을 끝내기까지 필요한 최소한의 피로도를 구해야 한다.작업을 끝내는 것은 1) 모든 광물을 캐거나, 2) 더 사용할 곡괭이가 없을 때까지이다.곡괭이 하나를 선택하면 광물 5개를 연속으로 캘 수 있다.2. 구현 아이디어 1 - 틀렸습니다곡괭이 하나를 선택하면 광물 5개를 연속을 캘 수 있다고 했으니, 주어진 minerals 배열을 5개씩 나누어 생각해보았다.글자색을 다르게 하여 각 ..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 1. 구현 아이디어 1 - 틀렸습니다백준 1931번 회의실 배정 문제나 저번에 포스팅한 과제 진행하기 문제와 비슷한 그리디 알고리즘 유형이다. 이전에 풀었던 기억을 되살려 아래에 적은 순서대로 풀었다.1. 끝나는 시간을 기준으로 book_time을 정렬한다2. 필요한 객실의 수를 관리하는 벡터 rooms를 만든다3. book_time에 있는 원소(elem)들을 순회하며 rooms에 있는 원소(room=rooms[i])와 비교한다 (2중 반복문) 3-1. 만약 elem의 시작하는 시간 >= room의 끝나는..