본문 바로가기
728x90

개발 일기21

비전공자, 부트캠프 출신 백엔드 개발자의 솔직한 취업 1년 후기 1년 차 목표 달성했나요? - 취업한 지 3주 정도 지났을 때 블로그에 1년 목표를 세웠는데, 부끄럽지만 달성에 실패했다. 두 가지 목표는 자격증 취득이었고 한 가지 목표는 개발 공부에 관한 내용이었다. 자격증 취득부터 얘기하면 아직도 쿠버네티스 공부 중이다. 시험은 작년 사이버 먼데이 때 응시 신청을 해두었고 1년 기한이니 대략 올해 12월 초까지 시험에 2 번 응시할 기회가 있다. 현재로서는 응시 만료 기한 전까지 충분히 공부하고 안전하게 합격할 생각이다. aws의 경우 현재는 전혀 공부할 생각이 없다. 회사에서 오라클 클라우드를 사용하기도 하고 아직까지 클라우드 관련 세팅까지 깊게 관여할 기회나 일이 없기 때문에 완전히 후순위로 밀려버렸다. 나중에 이직하게 되었을 때 해당 회사에서 aws를 사용한다.. 2024. 4. 20.
수만명의 회원 데이터를 데이터베이스에 효과적으로 인서트하기 (2) - bulk & batch insert 💡 지난 글에서는 Spring Data JPA를 활용한 저장 방법 중 save()와 saveAll() 메서드를 비교해 보았다. 당연하게도 saveAll()이 더 빨랐지만 동작 방식은 생각했던 것과 달랐다. 일괄적으로 insert 쿼리가 나갈 것이라고 생각했던 것과는 달리 save와 마찬가지로 단일 insert 쿼리가 나가는 것을 확인할 수 있었다. 이 글에서는 그 이유를 찾아보고 최종적으로 bulk insert로 회원 데이터를 저장했을 때 어느 정도 속도 차이가 나는지를 테스트해보려고 한다. 🥸 기본키 매핑 전략 중 IDENTITY를 사용하면 Bulk Insert를 할 수 없다! JPA에서 IDENTITY 전략을 사용하면 일부 제약 사항이 있다. 이 제약 사항은 IDENTITY 전략이 특정 DBMS에서 .. 2024. 1. 25.
수만명의 회원 데이터를 데이터베이스에 효과적으로 인서트하기 (1) - save() vs saveAll() 💡 현재 회사에서 개발 중인 앱에는 회원 초대 기능이 있다. 회원 초대는 앱과 웹 두 가지 방식으로 이루어진다. 앱에서는 회원의 이름과 전화번호를 일일이 입력하여 초대가 가능하고, 웹에서는 직접 입력 기능에 더하여 별도의 회원 데이터가 있다면 지정된 양식의 엑셀 데이터로 업로드해 초대가 가능하다. 백엔드 서버 회원 초대 api는 내가 만들었는데 초기 개발 당시에는 대용량의 회원 데이터가 업로드될 때의 상황을 고려하지 않았다. 따라서 수백 건의 데이터는 문제없이 업로드가 가능했지만, 천, 만 단위가 넘어가는 상황에서는 매우 느려질 것이 분명했다. 미래에 서비스가 커져 대용량 데이터가 업로드되는 상황이 온다면 분명 문제가 발생할 것이다. 이를 미리 대비하기 위해 공부하고 테스트한 과정을 기록하려고 한다. 📌.. 2024. 1. 23.
HTTP 메서드 POST VS GET 사용에 대한 고찰 💡 회사에서 진행 중인 프로젝트의 api를 만드는 도중에 문득 생각이 들었다. 어..? 이거 생각해 보니 죄다 POST네 이게 맞나? 지금까지 한 번도 생각해보지 않았던 내용인데 그동안 내가 만든 api의 HTTP 메서드는 POST인지 GET인지가 명확했기 때문이다. 내게 고민을 안겨준 요청 메서드의 내용은 쉽게 말해 검증이다. 클라이언트에서 검증할 데이터를 보내면 서버는 검증을 거치고 나서 검증 결과에 따른 데이터를 리턴한다. 이렇게만 보면 서버에 어떠한 변화도 주지 않고 결과만 받으니 GET이 아닌가 싶지만 검증할 데이터를 url에 실기에는 너무 큰 것이 고민의 시작이었다. 예를 들어 member 엔티티의 특정 필드 값 몇 개를 검증한다고 가정해 보자. 서버에서는 해당하는 데이터를 데이터베이스에서 찾.. 2023. 10. 11.
표준화되지 않은 엑셀 데이터를 데이터베이스에 저장하는 방식에 대한 고찰 💡이 글은 회사의 신규 프로젝트 설계 과정에서 생긴 이슈에 대한 의사 결정 과정을 정리한 것이다. 요구사항 여러 단체로부터 회원 명단이 적혀있는 엑셀 데이터를 업로드받고 해당 엑셀 데이터를 기반으로 기본적인 관리 페이지(회원 명단 중 서비스에 가입한 회원에 대한 통계 등)를 제공해야 한다. 필수 조건 엑셀 데이터에 어떤 컬럼이 들어가는지는 알 수 없고 정해져 있지도 않지만 반드시 회원의 이름과 휴대전화 번호는 들어가야 한다. 정리 기획 단계에서 여러 이야기가 오고 갔는데 결론적으로 사용자들의 서비스 경험을 향상시키기 위해 엑셀 데이터의 양식을 표준화하지 않기로 결정했다. 따라서 단체별로 양식이 다른 엑셀 데이터를 업로드받고 그대로 파싱 하여 데이터베이스에 저장해야 한다. 엑셀 데이터의 양식을 표준화하지 .. 2023. 8. 3.
JPA를 사용하여 여러 테이블에서 데이터를 가져오는 방법에 대한 고찰(2) - JPA DTO PROJECTION 지난 글에서 데이터베이스에서 가져올 때 필요한 데이터만 가져와 그대로 DTO에 매핑하여 응답 데이터를 보내는 방식을 설명하다 말았다. 이 부분을 이야기하기 전에 JPA의 DTO PROJECTION에 대해 간단히 설명하고 시작하겠다. JPA DTO PROJECTION 데이터베이스에서 전체 엔터티를 로드하는 것이 아닌 개발자가 지정한 DTO(데이터 전송 객체)로 필요한 데이터를 검색하고 매핑하는 데 사용하는 기술이다. 필요한 데이터만 검색하여 가져오므로 불필요한 데이터의 이동이 없어 성능을 향상시킬 수 있다. 프로젝션(PROJECTION) 방법 생성자를 이용한 프로젝션 필수 필드가 있는 DTO의 인스턴스를 직접 생성한다. 필수 필드는 개발자가 가져오고자 하는 데이터와 매핑할 필드를 말한다. 생성자를 이용한 .. 2023. 7. 26.
JPA를 사용하여 여러 테이블에서 데이터를 가져오는 방법에 대한 고찰(1) 요구사항 예시 💡아래 예시는 회사 프로젝트 작업 중에 생긴 문제에 대한 해결 과정을 각색, 재구성한 것이다. 데이터베이스에는 사용자가 자가 입력한 데이터를 저장하는 7개의 테이블이 있다. 각 테이블에는 사용자가 입력한 자가 입력 정보가 들어있다. 자가 입력하는 내용은 사용자가 하루 동안 섭취한 영양소와 체중에 관한 데이터이다. 예를 들어 단백질 테이블에는 총 4 개의 컬럼( id, user_id, protein, update_time)이 있다. 탄수화물 테이블에는 5개의 컬럼(id, user_id, carbohydrate, update_time)이 있다. 체중 테이블에는 4개의 컬럼이 있다.(id, user_id, morning_weight, night_weight, update_time)이 있다. 이런.. 2023. 7. 26.
1년차 백엔드 개발자가 되기 전까지 계획 세우기 입사 3주 차 생각 정리 입사하고 3주가 지났다. 회사의 비즈니스 방향이나 개발팀의 업무 프로세스 등 완벽하게는 아니지만 어느 정도 파악이 되었다. 회사 규모가 크지 않아 변화도 잦고 체계적이지 않은 부분도 있다고 생각이 들지만 반대로 초기 단계의 스타트업인 만큼 자유롭고 유연한 업무 환경을 가지고 있어 만족하며 다니고 있다. 가장 중요한 것은 회사에서 무엇을 배울 수 있는가와 내 향후 커리어에 얼마나 도움이 되는가에 대한 고민이라고 생각을 하는데 이 부분 역시 지금의 나에겐 더할 나위 없이 좋은 기회라고 여기고 있다. 대부분의 회사에서 첫 한 달은 별도의 업무 배정 없이 회사에서 다루고 있는 기술 공부와 과제를 진행하는 걸로 알고 있는데 우리 회사도 마찬가지이다. 나는 다음 주면 입사 4주 차가 되기 .. 2023. 5. 13.
728x90