본문 바로가기

개발일지/TIL

(89)
[ 230622 ] 제대로 이해하고 하자 기술 매니저님과 대화 대용량 트래픽&데이터 처리에 대해서 조언을 구했다. 간단하게 프로젝트를 하면서 배울 수 있으면 좋을 것 같아서 진행 방식과 방향성에 대해서 물어보았다. 그런데 오히려 질문들이 날아왔다. 대용량 트래픽&데이터 처리를 하기 위해 Redis, Kafka를 쓴다고 하는데 그걸 왜 사용하는지 등등이었다. 나의 현실 기술 매니점님께서 물어보신 질문들에 대해서 제대로 된 대답을 한 것이 아무것도 없었다. 그래도 어느 정도 알고 있는 것들도 있다고 생각했는데 말이다. 엄청 반성을 하게 되었다. 아는 것이 제대로 아는 것이 아니었기 때문이다. 기술 매니저님의 조언 어떤 기술을 쓰더라도 제대로 알고 있어야 한다는 것이다. 그리고 그 기술에 대해 자기만의 생각을 가지고 있어야 한다고 했다. 개발적인 지..
[ 230621 ] 공공데이터 포털 200만건 데이터 DB에 넣기 이유 항해 99를 같이 듣는 팀원 분과 사이드 프로젝트를 하기로 했다. 많은 데이터를 처리하는 것을 목표로 잡았다. 그래서 많은 데이터가 필요했고 쉽게 구할 수 있는 공공데이터 포털을 사용하기로 했다. 약 200만 건(약 900M)인 일반 음식점 데이터를 가져다가 사용하기로 했다. 환경 데이터를 저장하기로 한 곳은 AWS의 RDS를 사용하기로 했다. 프리티어 버전으로 MySQL DB 인스턴스를 생성했다. 그리고 사용할 유저와 데이터베이스를 만들고 권한을 부여했다. 첫 번째 문제 사항 각 필드가 가진 최대 길이를 알지 못한다는 것이었다. 테이블을 생성할 때 임의의 길이로 만든다면 일차원 적으로 데이터베이스의 공간 낭비가 일어날 것이다. 또한 데이터를 넣을 때도 데이터의 길이가 맞지 않아 문제가 될 수 있었..
[ 230620 ] HttpServletRequest의 InputStream 문제 문제 사항 Graphql로 들어오는 요청을 구분하여 받기 위해 Filter를 추가했다. Filter에 요청된 Query를 확인하기 위해 InputStream을 사용했다. 데이터가 정상적으로 출력되는 것은 확인할 수 있었다. 하지만 데이터 출력 이후부터 백엔드가 정상적으로 동작하지 않는 문제가 생겼다. [ 문제 코드 ] public class GraphqlAuthenticationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request ,HttpServletResponse response ,FilterChain filterChain) throws ServletExceptio..
[ 230619 ] Chained Exception ? 궁금한 계기 강의를 듣다가 Chained Exception 내용이 나왔다. Exception은 흔히 들어본 반면 Chained Exception 너무나 생소한 단어였다. 검색을 해보며 Chained Exception은 무엇이며 어떻게 사용할 수 있는지에 대해 찾아보기로 했다. 오라클 공식 문서와 블로그를 통해 감을 잡을 수 있었다. Chained Exception 란? 예외 간의 원인과 결과를 연결해 준다. 주로 여러 가지 예외를 큰 분류 예외로 묶어서 다루거나 Checked Exception을 Unchecked Exception으로 포장을 할 때 사용을 한다. 에러가 있을 경우 정확한 원인을 찾을 수 있도록 하기 위해 사용하기도 한다. 예시로 흔히 우리가 IDE에서 에러가 뜰 때 쭉 보이는 메시지들을 ..
[ 230618 ] 사이드 프로젝트 Graphiql 적용하기 적용 이유 친구와 진행하고 있는 사이드 프로젝트에 Graphql를 적용했는데 막상 테스트하기가 쉽지 않았다. 그래서 검색을 해보니 쉽게 테스트할 수 있는 GUI인 Graphiql를 제공한다는 것을 알 수 있었다. 장점 Graphiql은 query를 날려볼 수 있을 뿐만 아니라 schema도 확인을 할 수 있다. 그리고 날려본 쿼리에 대한 History를 확인할 수 있는 등에 몇 가지 기능도 제공을 한다. 이 점은 Front와 협업하는 데에 많은 도움을 줄 수 있을 것이다. 적용 application.yml에 옵션을 추가함으로 쉽게 적용을 해볼 수 있다. [ 추가 옵션 ] spring: graphql: graphiql: enabled: true 결과 "http://localhost:8080/graphiql..
[ 230617 ] Java Spring WireMock 이슈 및 적용 사용 이유 일반적으로 단위 테스트를 짤 때는 mock을 만들어해야 하는 외부와 통신이 들어가는 부분을 제외한다고 책에서 읽어었다. 하지만 이번에 사이드 프로젝트 하면서 친구와 논의를 해 mock을 적용을 해보기로 했다. 이제까지 테스트 코드를 많이 적용해 보지 못했기에 연습도 겸하는 것도 있었다. 의존성 문제 공식 사이트에서 제공하는 방식으로 build.gradle에 의존성을 추가함으로 설치를 했다. 설치 후 JUnit5를 기반한 어노테이션을 사용해 코드를 작성했다. 하지만 테스트를 실행 했을 때 에러가 뜨며 정상적으로 동작하지 않았다. 라이브러리가 정상적 설치가 되었지만 WireMock 관련 클래스를 찾지 못했기 때문이다. [ 추가한 의존성 ] testImplementation "com.github.t..
[ 230616 ] 내가 느낀 페어 프로그래밍 관하여 알고리즘 문제 페어 프로그래밍으로 풀면서... 내가 그동안 겪었던 페어 프로그래밍은 문제를 같이 논의하며 풀어나가는 것이었다. 그 과정에서 서로 배우면서 성장한다는 느낌을 많이 받았다. 그런데 이번 2주차 알고리즘 문제 페어 프로그래밍을 하면서 시간 대비 우리 팀원 모두의 성장에 도움이 되지 않는다는 느낌을 받았다. 각자의 경험치 차이에서 발생하는 현상이었다. 그래서 어떻게 하면 모두에게 도움이 될 수 있을까 고민도 해보고 주변 5년차 개발자 분에게도 조언을 구했다. 조언을 얻고 나서 페어 프로그래밍을 할 때 긴 시간을 가진다고 해서 효율이 있는 것은 아니다. 그래서 때론 각 문제나 이슈에 대해 시간을 정해서 드라이버가 해결해보고 안 될 경우 네비게이터가 답을 제공해야 한다. 네비게이터가 제공한 코드를 ..
[ 230615 ] Java 계산기 메서드 작성하기 만든 이유 강의를 듣고 간단하게 계산기 만드는 과제가 있었다. " 피연산자 (연산자) 피연산자" 형식의 값을 입력받아 계산을 해주었다. 그러다 보니 연속된 연산을 거치기 위해서는 입력을 여러 번 해야 했다. 긴 계산식을 한 번에 받아 처리해 주는 메서드를 작성해 보기로 했다. [ 입력 형식 변경 ] "피연산자 (연산자) 피연산자" -> "피연산자 (연산자) 피연선자 (연산자) 피연산자 ..." Java 코드 작성 숫자, 연산자를 저장하는 Stack 객체를 2개 만들었다. 맨 마지막에 있는 값을 결과로 사용하고 싶어서 FILO형태의 자료구조를 선택한 것이다. 그리고 기본 분기는 operator 중심으로 작성해서 처리했다. 문자를 다룰 때는 변동이 많은 경우 StringBuilder를 사용해 처리했다. St..