Floney 12

[플로니] Mysql에서는 이모지를 몇 글자로 인식하나요?🦄🍀🍀

문제 발생다음은 플로니가 출시되고 만난 에러 중 하나이다.로그 파일에 들어가서 보면 Date too long for column 'name' at row 1라는 메시지의 Sql Exception이 터져있다. 문제가 있는 name 컬럼은 가계부 이름 칼럼이고, 우리의 비즈니스 로직 상, 가계부 이름은 10자로 제한 돼 있어 DB도 크기가 varchar(10)으로 설정 돼있었다. 이상한 건, 분명 프런트에서도 가계부 이름을 10자로 제한하고 있을 텐데 에러가 터질 리가 없었다. 그래서 사용자가 요청했던 로그를 보니, 가계부 이름은 10자를 넘지 않았지만, 이모지(🍀)가 들어가 있었다. 그렇게 테스트를 해보았다. DB에서 이모지가 몇글자로 인식되는가? 다음과 같이 ✅❣️ 를 넣으면, 우리 눈엔 두 글자지만 m..

Floney 2024.01.16

[플로니] 에러에 대비하는 서비스 만들기

플로니가 출시되고 약 1달이 흘렀다. 되게 오래된 것 같은데 1달밖에 안된 건가 싶기도 하고..ㅎ 향로님의 홍보( 경쟁력 있는 신입 포트폴리오 (tistory.com) 감사합니다..🫶) 그리고 소중한 지인들에게 강매(?)하고 지인들이 홍보해 준 덕에 다운자 수 약 300명과 가계부 내역은 약 1500개가 쌓이는 기적으로 인해 서비스 운영이라고 할 수 있게 되었다..!🍀🍀 플로니 팀은 런칭 이후 그동안, 재정비 시간, ver1에 대한 수정사항 및 ver2 일정을 의논했다. 그중 재정비 기간 동안, 서버팀은 에러에 대응하는 몇 가지 인프라 환경을 구축했다. 이 부분은 앱 런칭 전에, 운영을 위한 조언받은 것 중 하나였다. 그 당시엔 필요할까 싶었지만, 막상 운영을 하니 터지는 이슈마다, 아 그게 그 말이었구..

Floney 2024.01.05

[플로니] 드디어 런칭했습니다 + 회고 .. 앞으로 나는

12/1일 드디어 만들어오던 앱이 런칭했다. IOS에서 만나볼 수 있어요! 많관부 앱을 만들기로 합류한 게 4/3일이었다 그리고 11/30일 오후 10시쯤 앱을 심사에 올렸다 그리고 다음날 새벽 1시에 accepted 메일을 받았다 약 8개월 동안 참 많은 일이 있었다. 그 이야기를 약간의 소주제로 나누어 두서없이 적어볼까 한다.[어떻게 프로젝트를 구하게 되었나요?] 우선 왜 앱을 만들었니?라고 하는 분들이 많다 예전 회고에도 나올 텐데, 진짜 뻥 안치고 향로님께 멘토링을 받다 멘토님의 한마디 “사용자가 있는 서비스를 해보세요”라는 말 한마디에 시작했다. 자세한 건.. 나의 과거 회고록을 참고하세요(홍보) 2023.07.12 - [이런저런이야기] - 2023년 상반기 회고 학교 에타에 런칭까지 하고 유지..

Floney 2023.12.03

[플로니] 가계부 금액 타입 정하기 (double vs decimal)

1. 우리 가계부는 999억까지 최대 금액으로 입력이 가능하다. 2. 우리 가계부는 다양한 화폐단위를 지원한다. 따라서, 소수점이 필요하다 거의 막바지에 발견했지만 크리티컬한 이슈가 있었다 바로, 화폐 단위를 고려하지 않고 금액 타입을 long으로 설정하는 바람에... 소수점이 불가능해졌다. 따라서 급하게 수정을 해야했다. 사실 처음에 아무 생각이 없이... 정밀도를 고려하지 않고 단순히 실수형이니깐 float로 저장을 했다가 재수정이 요해졌다. float는 정밀도가 7 자리기에, 999억을 저장하게 되면 오차가 발생한다. 정말 기본이 중요함을 여기서 깨닫고 반성 차 글을 써본다 1. float float는 4바이트(32bit)까지 표현이 가능하다. 부호(1bit) + 지수(8bit) + 가수(23bit..

Floney 2023.11.12

[플로니] 데이터 동시성 제어하기

런칭 때가 되니..끝이라고 생각했지만, 처리해야할 게 하나둘 생긴다 오늘은 이러한 이슈를 생각해봐야한다. 만약, 동시에 가계부 내역을 고쳐서 동시성 문제가 생기면 어떻게 하나요???? 우리의 가계부는 공유 가계부라 해당 동시성 문제를 매우매우 신중히 봐야한다. 팀원과 미팅을 통해..일단 동시성 제어가 필요한 코드가 어디인가를 생각해보았다. 처음에 접근은 이랬다. 가계부 내역을 수정하는 과정중에 다른 사람이 가계부 내역이 삭제된다면? 이걸 동시성 제어를 해서, 가계부 내역을 수정할 때 다른 '쓰기'행동을 막아야하는가? 근데 이제 이건 아닌 것 같단 생각을했다. 왜냐하면 각 사용자의 입장에서 생각해보면 '공유'가계부 측면에서 생각하면, 뭔가 어? 왜 내가 수정했는데 수정이 안되고, 삭제 되었어!는 개발자의 ..

Floney 2023.10.08

[플로니] 서버야 왜 자꾸 죽니

최근 플로니 앱의 론칭을 앞두고 베타테스트에 들어갔다. 그래서 그런지..AWS 프리티어를 사용하는 서버가 자꾸 터진다. 여러 원인이 있겠지만 로그는 다음과 같이 찍힌다 결국 같은 백엔드 팀원과 비상 회의가 열렸다. (1) 추측 1 - HIkari pool이 모자란걸 보아, 한 번의 요청에 여러 Pool이 쓰이나? 근데 난 Hikari Pool이 뭔지부터 알아야했다. 1. 전통적인 WAS 와 DB 연결 방법 회사에서 레거시 시스템을 담당하는 중이라 아주 잘 안다 ㅎㅎ.. 보통 드라이버를 로드 하고, conntection을 열어서 query를 직접 날린다 근데, 매 쿼리마다 이렇게 하면 비용이 많이 든다. DB나 웹서버나 서로서로 TCP 커넥션을 생성해야 함 2. Connection Pool Hikari P..

Floney 2023.10.03

[플로니] Spring Batch로 이월 설정 구현하기

플로니가 제공하는 서비스 중 이월 설정이 있다.즉, 매달 1일이 되면, 모든 가계부 중 이월 설정 ON이 되어있는 가계부는 지난달 총 수입 - 지난달 총 지출 = 다음 시작 금액을 계산해서 데이터베이스에 갱신을 해주어야한다. 어떻게 해야할까? 우선 검색을 하다보니 스프링 배치라는 솔루션이 적합해보였다. 스프링 배치는 대용량 일괄 처리의 편의를 위해 설계된 가볍고 포괄적인 배치 프레임워크이다. - 특정한 시점에 스케줄러를 통해 자동화된 작업이 필요한 경우 사용하면 좋다 딱 우리가 필요한 기능에 맞다고 본다 그렇게 몇주간 배치 공식 문서를 보며 공부를 하였고 구현을 하였다. 현재 스프링 부트 2.7.7를 사용하고 있기 때문에 우리의 Spring Batch는 2.7.7를 사용한다. Reader - Proces..

Floney 2023.07.12

[플로니] 초기화된 캘린더 응답 방식 포함 시켜 만들기

우리의 가계부는 월별 조회 기능을 제공하고 있다. 다음과 프론트에서 요청을 하면 - 하루의 총 지출 - 하루의 총수입 - 월별 총지출 - 월별 총수입 의 데이터를 담아 return 해주어야 한다. 이를 위해서 API명세서를 다음과 같이 작성해 주었다. 예를 들어 2023-05-01이 들어오면, DB에서 5월에 등록된 가계부 내역들을 모두 조회해야 한다. 1. 기간 정하기 이를 위해 2023-05-01부터 2023-05-31이라는 기간을 지정해야 했다. LocalDate의 기능 중에는 해당 년-월의 첫날과 끝날을 알려주는 기능이 있다. DateFormatter라는 util 기능을 정의하여, dates라는 map리스트를 만들어주었다. public class DateFormatter { public stati..

Floney 2023.05.30

[플로니] default 설정을 했는데 null이 나와요

최근 시작한 프로젝트에서, Entity의 column값을 default값으로 설정하고픈 일이 굉장히 많아졌다. 예를 들면, 논리적 삭제를 구현할 때에 status를 boolean값으로 default는 True를 지정해주어야 했다. 그런데 원하는 대로 default값이 아닌 null로 들어가는 현상이 많았고, 이에 대한 시행착오를 적어보려고 한다. @ColumnDefault() 일단 이 어노테이션에 어려움을 느낀 사람이 참 많았다. 나도 그렇고, 사람들도 그렇듯이 default가 있어서, @ColumnDefault값을 쓰면, entity에 저장될 때 자동으로 어노테이션 값으로 바뀌는 줄 알았다.@ColumnDefault("true") private Boolean active; 다음과 같은 상황일 때, ac..

Floney 2023.05.09

플로니 - 끝나지 않은 카테고리 삽질기(상속관계 @Builder)

아...지난 화에 이어 카테고리를 드디어 끝내나 했는데, 문제가 발생했다. 설계에 의문을 가질 때 아는 가장 쉬운 방법은 문제가 생기면 잘못된 설계라고 조언을 듣자마자 바로 문제가 생겼다 정답! 일단, 불행 중 다행으로 분리까진 괜찮은 도전 같다 하지만, 가계부 내역 생성을 할 때, OneToMany로 카테고리를 묶으려고 하니 문제가 생긴다. 만약 프론트에서 "선물"이라는 카테고리의 가게부 내역 선택해서 보냈다면, 현재 가계부의 고유한 카테고리는 BookCategory라는 Entity로 모든 가계부의 공통 카테고리는 Category로 정했기에 '선물'이라는 값이 들어오면 이 선물이 어떤 entity인지 BookCategory인지 Category인지 알기 위해 탐색을 두번 거쳐야한다. (1) 기본 카테고리..

Floney 2023.04.30
728x90