오늘은 AWS 강의를 주로 들으면서 시간을 보냈다. AWS 서비스들에 대해 소개되어있는 강좌였는데 듣고나니 앞으로 어떤 걸 더 공부해야할지 어느정도 깨달을 수 있었다. 앞으로 배워야할게 많이 남은 것 같으니 더 열심히 공부해봐야겠다. 여기에는 간단하게 오늘 간단하게 공부해본 이진 탐색 알고리즘에 대해 정리해본다. 1. 이진 탐색 알고리즘1-1. 이진 탐색 알고리즘이란?이진 탐색 알고리즘은 정렬된 데이터에서 원하는 값을 찾는 검색 알고리즘이다. 값을 찾아내는 시간 복잡도가 O( $\log n$)인 알고리즘이다. 이진 탐색 알고리즘의 원리는 아주 간단하다. 먼저 위 사진과 같이 정렬된 데이터가 있어야한다. 우리는 17개의 숫자중에서 '7'을 찾고 싶은 상황이다. 먼저 전체 데이터의 절반(0~16)에 해당하는..
오늘은 본격적으로 강의를 학습하는 주차가 시작되어 하루 종일 강의를 듣고 따라해보며 하루를 보냈다. 강의 듣는 것을 빨리 마치고 과제를 빨리 시작하는 것이 목표이다. 앞으로 부지런히 해야할 것 같다. 여기에는 강의를 들으면서 알게된 JPA의 동작방식에 대해 조금 정리해보았다. 1. JPA와 JPQL 쿼리오늘은 강의를 듣다가 여태까지 JPA를 학습하면서 전혀 알지 못했던 내용을 알게 되었다. 바로 JPQL 쿼리를 이용해 요청을 하게 되면 flush()가 자동으로 호출된다는 것이었다. 그리고 기본 키를 이용한 조회를 제외하고 DATA JPA를 이용한 다른 모든 조회 요청 역시 JPQL 쿼리가 날라간다는 사실 또한 처음 알게 되었다. JPA를 사용할 때 항상 SQL 쿼리가 어떻게 발생하는지 확인했었지만 위와 ..
오늘은 일주일 가까이 이어졌던 프로젝트가 끝나는 날이었다. 오늘은 발표 준비와 더불어 그간 작성한 코드와 명세서를 최종적으로 정리하고 테스트해보는 시간을 가졌다. 그 과정에서 미처 발견하지 못한 문제를 발견하기도 했었는데 이런 정리 과정도 꼭 필요한 과정이기 때문에 게을리하지 말아야 겠다는 생각이 들었다. 여기에는 그간 프로젝트를 진행하며 느꼈던 점을 간단히 정리해본다. 1. 프로젝트 회고먼저 빠듯한 시간이었지만 초기에 계획했던대로 프로젝트를 무리없이 잘 마쳤던 것 같아서 아주 만족스러웠다고 말할 수 있겠다. 첫날 ERD를 완성했을 당시에는 테이블 갯수도 꽤 많고 복잡해서 쉽지 않겠다 라는 생각을 했었다. 하지만 필요한 작업을 세세하게 잘 나누고 역할 분담을 성공적으로 하고난 뒤, 좁은 범위의 문제를 해..
오늘은 내일까지인 프로젝트를 최종 마무리를 하는 시간을 가졌다. 그 과정에서 알지 못했던 버그들도 발견이 되고 수정하는 시간도 있었다. 또한 여태까지 해왔던 것들을 하나하나 정리하는 작업도 하였다. 어떠한 것을 했는지 어떤 고민을 했었는지 어떤 점을 배웠는지 잘 정리하는 것 역시 공부도 되고 중요한 것 같다. 프로젝트 시작 할 때는 이것저것 해보고 싶은게 많이 생기는데 마감기한이라는 것이 있기 때문에 하고 싶었던 걸 모두 하지는 못하게 되는 것 같다. 마감기한에 맞추어 스코프를 적절히 가져가는 것 또한 중요한 것 같다. 여기에는 오늘 하루를 마감하기 직전에 풀어본 알고리즘 문제 풀이 하나를 정리해본다.1. 알고리즘 문제 풀이오늘은 leetcode에 있는 '771. Jewels and Stones' 문제를..
오늘은 여태까지 진행되었던 프로젝트 내용을 정리하면서 주로 시간을 보냈던 것 같다. 여태까지 진행했던 내용들을 한 번 쫙 정리하니 도움이 어느정도 되었던 것 같다. 여기에는 오늘 풀어본 알고리즘 문제 풀이를 하나 정리해본다. 1. 알고리즘 문제 풀이오늘은 leetcode에 있는 '347. Top K Frequent Elements' 문제를 풀어보았다.1-1. 풀어본 문제[문제] 정수 배열 nums와 정수 k가 주어졌을 때, 배열에서 가장 빈번한 요소 k개를 반환하세요. 순서는 상관 없습니다. - 예시 1입력: nums = [1,1,1,2,2,3], k = 2출력: [1,2] - 예시 2입력: nums = [1], k = 1출력: [1] - 제한 사항$1 {\;}{\leq}{\;} nums.length ..
오늘도 진행중인 프로젝트의 코드를 작성하며 시간을 보냈다. 기존에 작성해둔 코드들을 QueryDsl을 이용해 최적화하는 시간을 가졌다. 생각보다 쉽지 않아서 시간이 좀 오래 걸렸다. 여기에 그 내용을 간단하게 적어본다. 1. QueryDsl을 이용한 최적화먼저 나는 프로젝트에서 Course 부분에 대해서 최적화를 담당하였다. 주로 한 일은 N+1 문제가 발생하는 부분을 수정하는 것이었다. 먼저 N+1이 발생하는 부분은 다음과 같다. 코스 전체 조회: 전체 코스를 조회하는 쿼리(1회) + 코스를 개설한 셰프의 정보를 불러오는 쿼리(최대 N회) + 코스의 좋아요 개수를 조회하는 쿼리(N회) 내가 팔로우한 셰프의 코스 조회: 내가 팔로우한 셰프들을 불러오는 쿼리(1회) + 내가 팔로우한 셰프들이 개설한 코스를..
오늘도 프로젝트를 진행하느라 바쁜 하루를 보냈던 것 같다. 나는 AWS S3 저장소를 이용해 프로필 사진 이미지를 저장하는 기능 구현을 맡아서 이 부분을 진행하게 되었다. S3가 무엇인지 정확히 모르는 상태였기 때문에 어떤 서비스인지부터 찾아보게 되었고, 이후 회원가입 및 계정 보안을 위한 설정을 진행했는데 이 과정도 매우 복잡하고 이것저것 설정해야 할 것이 많아 생각보다 오랜 시간이 걸리게 되었다. 설정 이후에 스프링과 연결하여 이미지 업로드를 구현하는 부분은 생각보다 오래 걸리지 않았다. 여기에 그 내용들을 짧게나마 정리해본다. 1. AWS S3 저장소 이용해보기1-1. S3에 대한 간략한 정리AWS S3는 Simple Storage Service(S3, 간단한 저장 서비스)는 객체 스토리지 서비스이..
오늘도 프로젝트 코드 작성과 작성을 위해 이것저것 찾아보면서 하루의 대부분을 보냈던 것 같다. 협업 과정에서 별다른 문제가 생기질 않아서 편하게 코드를 작성할 수 있었던 것 같다. 오늘은 코드를 작성하면서 알게된 복합키 매핑하는 법에 대해 간단하게 정리해보았다. 1. JPA 복합키 매핑하기프로젝트에서 좋아요 기능을 구현하기로 하였고 이를 구현하기 위해 복합키를 사용하기로 하였기 때문에 복합키 매핑에 대해 알아보게 되었다. 기본 키를 이용해 복합키를 구현하는 방법을 찾아본 결과 @EmbeddedId를 이용하는 방법을 알게 되었다. Course에 User가 좋아요를 누를 수 있게 되어있고, 따라서 이 둘의 기본 키인 courseId와 UserID를 조합해 복합키로 이용하는 것이 목표이다. 다음과 같이 코드를..