본문 바로가기

전체 글

(50)
Lock 배경모놀리식으로 개발을 해왔었고, 혼자 테스트를 할 때도 postman을 통해 간단히만 했었습니다. 하지만 앞으로 다닐 회사에서는 서비스에 크든 여러 요청이 들어올 것이고 수정, 삭제가 빈번하게 일어난다면 대체 어떻게 client에게 신뢰성있고 일된 data를 넘겨주게 될까? 의문이 들었습니다. 예를 들어서 DB에 특정 data를 수정하는 API가 들어가서 수정하는 도중에 있는데 또다시 같은 data를 수정하는 API가 들어오게 된다면? 수정하는 도중에 조회 API가 들어오게 된다면? 등등에 관해 의문점이 들어서 이러한 것들은 개발자들이 어떻게 해결할까 구글링을 해보았습니다. 이러한 문제의 보편적인 해결방법이 Lock이라는 사실을 알게 되었습니다. 내용Lock이란? 앞서 말씀드렸듯이, 특정 resourc..
DB 인덱싱 배경Spring boot에서 eneity를 db에 table로 저장하려면 Id가 필수로 포함되어야합니다. 이 Id를 통해 검색을 하게 되면, 다른 속성들에 비해 성능이 잘 나온다는 것은 알고 있었죠. 그런데 꼭 Id로만 검색을 해야 성능이 나오려나? 다른 방법은 없을까? 라는 생각을 하며 구글링과 GPT를 이용해보니 DB인덱싱이라는 것을 알게 되었습니다. 내용DB Index?index 뭘까요? 사전 정의로 보면 목록입니다. 목차를 보지 않고 두꺼운 책에서 특정 내용을 찾으려면 어떻게 해야될까요? 첫 페이지부터 하나하나 보면서 모든 내용을 보고 찾아야 할 것입니다. 너무 비효율적이죠. 하지만 목차를 이용하면 우리는 빠르게 어디에 내용이 있는지 알고 해당 내용을 볼 수 있습니다. 이러한 개념을 DB에도 적용..
TaskScheduler를 이용한 주문 취소 구현해보기 배경요구사항 명세서를 받게 되었을 때 주문을 취소하는 부분에 '5분 이후 취소 불가'라고 되어 있어서 단순히 DB에 저장할 때 생성시간 저장해놓고, 주문 취소 API가 날라올 시 조회 후 생성 시간이 5분 초과면 삭제 못하게 하면 되는거 아닌가? 라고 간단하게 생각하고 구현했습니다. 하지만 고객(튜터)분들이 요구했던 내용과는 조금 달랐죠. 튜터분들의 요구사항은 주문 후 5분까지 DB에 저장되지 않았다가 주문 취소가 없을 시 DB에 저장 쿼리를 보내는 것을 구현해보라는 것이었습니다... 역시 사람은 각자 생각하는게 다르더군요. 또 한번 소통의 중요성과 중간 보고 중요성을 느낍니다! ㅎㅎ 무튼 이런 요구사항을 알고 나니 조금 복잡해졌습니다.. 어떻게 구현해야할까...?  조금 힌트를 얻어보니 tread를 이..
프로그래머스 - 명예의 전당(1) 제가 짠 코드는 항상 시간 복잡도가 엉망인 모양이네요.. 알고리즘에 필요한 것들을 공부해야겠습니다. ㅠ 먼저 제가 짠 코드입니다. public int[] solution(int k, int[] score) { List arrList = new ArrayList(); List ansList = new ArrayList(); for (int i = 0; i arrList.get(0)) { arrList.remove(0); arrList.add(score[i]); Collections.sort(arrList); } ansList.add(arrList.get(0)); } int[] answer = new int[ansList.size()]; for (int i = 0; i  ..
개발자 유튜브 EO채널에 올라온 김영한님의 영상을 보고 여운이 남아 글을 남겨볼게요 ㅎㅎ. 미래에 대한 불안감은 항상 있는 것 같습니다. 내가 정말 좋은 회사에 갈 수 있을까... 이렇게 하는게 맞을까..라는 의문이 항상 있으니 말이죠.. 영한님은 개발자라는 직업은 엔지니어로서 실력을 쌓는 것이 정말 중요하다고 합니다. 흔들리지 않고 꾸준하게 하는 것이 개발자로서 큰 덕목이죠. 전에 회사를 다니면서 느꼈던 거지만 전체에 대한 흐름이나 맥락을 파악하는 것이 중요하다고 느꼈습니다. 문제를 마주했을 때, 내가 왜 일을 해야하고 목적이 뭔지를 파악하고 일을 하는 것이 무작정 눈앞에 닥친 일을 헤치운 것보다 훨씬 좋은 결과를 가져왔던 것 같습니다. 영한님도 똑같이 말씀을 하시네요. 근데 이게 신입때는 정말 하기가 힘들긴..
프로그래머스 - 모의고사완전탐색 제가 작성한 풀이.. 실력도 없지만 자고 일어나서 딱 풀려고 하니 그냥 기능구현에만 매진한 것이 보이긴 한다..public ArrayList solution(int[] answers) { ArrayList answerList = new ArrayList(); int[] p1 = {1, 2, 3, 4, 5}; int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5}; int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; int num1 = 0; int num2 = 0; int num3 = 0; int match1 = 0; int match2 = 0; i..
디버깅 배경개발 입문자인 저는 아직도 코드를 짤 때마다 System.out.println을 써서 여기저기 찍어보는 일이 대다수고, logging정도만 가끔씩 활용해서 문제를 해결하려고 합니다. debugging을 봐도 사실 어떻게 해야될지 잘 모르겠고... 하지만 더이상 이렇게 갈 순 없겠죠? 디버깅을 조금씩 써보면서 문제점을 빠르게 찾고 해결할 수 있는 능력을 길러야 겠습니다. 오늘은 디버깅에 대해 알아보도록 하죠. 내용디버깅의 처음 시작은 프로그램의 흐름을 파악할 수 있는 break point를 활용해 의심가는 지점을 찾는 것입니다.intellij 기준으로 코드 왼쪽편 라인 근처에 빨간색으로 break point를 찍을 수 있죠. 이 break point는 디버깅을 시작하게 되면 멈추게 되는 포인트입니다. ..
HashMap을 이용한 빈도수 측정(숫자 짝궁) 프로그래머스 문제를 풀고 다른 사람의 풀이를 보면서 HashMap의 사용을 머리속에 남겨놓기 위해 글을 씁니다. 프로그래머스 해당 문제는 숫자 짝꿍입니다. 제가 풀이했던 방법은public String solution(String X, String Y) { String answer = ""; ArrayList xArray = new ArrayList(); ArrayList yArray = new ArrayList(); String[] xStringArray = X.split(""); String[] yStringArray = Y.split(""); ArrayList arrayList = new ArrayList(); f..