전체 글

개발 공부하는 블로그
·알고리즘
✨ 문제https://www.acmicpc.net/problem/10989n개의 수를 입력받아 오름차순으로 정렬하여 출력하는 문제이다.배열에 입력받은 수를 저장하고 Arrays.sort를 사용하여 정렬 후 출력하니 시간초과가 떠서방법을 찾아보던 중 Counting Sort 알고리즘을 알게 되었다.   ✨Counting Sort (계수 정렬) 알고리즘- 정렬 알고리즘 중 하나로, 데이터 간의 비교를 하지 않고, 각 데이터의 빈도수를 이용해 정렬한다.- 정수 데이터의 값의 범위가 제한적일 떄 매우 효율적이다.- 동작 방식카운트 배열 초기화데이터가 가질 수 있는 최대값(k)에 따라 크기가 k + 1인 카운트 배열을 생성한다.각 인덱스는 데이터의 특정 값을 나타내고, 해당 인덱스의 값은 데이터에서 그 값이 몇 ..
·Spring
✨ 개요도서 엔티티의 soft delete 구현 방식을 고민하던 중, @SQLDelete와 엔티티 내에 메소드를 구현하는 방식을 두고 비교하였다.도서 엔티티에는 삭제 시각을 저장하는 deletedAt, 삭제한 관리자 id를 저장하는 deletedBy 필드가 있는 상황이었다.지난 프로젝트에서 사용했던 @SQLDelete를 사용하려 했으나, 지난번과 다르게 이번에는 deletedBy라는 필드가 있었기 때문에 다른 방식을 찾아보게 되었다.   ✨ @SQLDelete vs 엔티티 내부 메소드@SQLDelete를 사용하는 경우에는 쿼리가 간소화되며 JPA에서 제공하는 자동화된 방식으로 엔티티의 상태 변경을 자동으로 처리할 수 있다.하지만 @SQLDelete는 update 쿼리만 지원하므로 추가적인 로직을 구현하기..
·알고리즘
✨ Java에서 가장 효율적으로 최소값을 찾는 방법알고리즘을 풀면서 여러 정수 중에서 최소값을 구할 수 있는 가장 효율적인 방법을 찾게 되었다.for문으로 직접 비교하는 방법, Stream API를 이용하는 방법, Collection.min()을 사용하는 방법이 있었고, 셋다 시간복잡도는 O(n)으로 동일했다.Arrays.sort로 정렬 후 가장 마지막 인덱스의 값을 가져오는 방법도 괜찮아 보였으나 시간복잡도가 O(nlogn)이어서 제외하였다.근데 시간복잡도는 동일하나, 세가지 방법 중에서 직접 비교하는 방법이 가장 효율적이라고 하여 그 이유에 대해 정리해 보려한다.   ✨ for문으로 직접 비교하는 방법public static int findMin(int[] arr) { int min = arr[..
·Spring
✨ PUT vs PATCHput과 patch 모두 리소스를 수정할 때 사용하는 HTTP Method이다. 둘의 차이점은 put은 리소스의 전체 내용을 수정할 때 사용하고, patch는 리소스의 일부 내용만 수정할 때 사용한다는 정도로 알고 있는데, 좀 더 자세히 둘의 차이점과 실제 예시를 정리해보겠다. ✨ 멱등성멱등성이란 어떤 대상에 같은 연산을 여러번 실행해도 변하지 않는 성질을 말한다. 예를 들어 곱하기 연산을 한다고 가정하면, 어떤 수에 * 1하는 연산을 여러번 실행했을 때, 몇번을 실행하던지 그 결과는 동일하다. 이 연산은 멱등성이 보장된다고 할 수 있다. 다른 예로 더하기 연산을 한다고 하면, 어떤 수에 + 1하는 연산을 여러번 실행했을 때, 항상 동일한 결과를 반환하지 않는다. 이 연산은 멱등..
·Spring
✨Pageable vs @RequestParam페이징을 구현하던 중 페이징과 정렬에 관한 정보를 파라미터를 Pageable로 받아오는 방식과 @RequestParam으로 받아오는 방식의 차이점에 대해 찾아보게 되었다.   ✨ PageablePageable은 Spring Data JPA에서 제공하는 기능으로 페이징과 정렬 정보를 자동으로 처리한다. 컨트롤러에서 Pageable을 파라미터로 받으면. Spring이 요청 파라미터에서 page, size, sort을 자동으로 매핑해준다.파라미터를 자동으로 매핑해주기 때문에 코드가 간결해진다는 장점이 있다.그리고 Pageable에서 지원하는 sort 파라미터를 이용해 동적으로 정렬 조건을 설정할 수 있다.   ✨ @RequestParam@RequestParam을 ..
·Spring
✨ Map vs DTOSpring Security로 login을 구현하며 사용자에게 login 정보를 받아올 때 Map을 사용하여 받아왔는데데이터 전달 시 Map이나 DTO를 많이 사용하는데 Map보다는 DTO 사용이 더 권장된다고 한다.   ✨ Map과 DTO의 장단점MapMap은 키-값 형태의 자료구조로 동적으로 필드를 추가하거나 제거하는 것이 가능하여 데이터 구조가 유연하다는 장점이 있다.Map의 value은 Object 타입이다. 때문에 잘못된 타입의 데이터가 들어와도 컴파일 에러를 발생하지 않아 데이터 검증이 어려워진다.가독성이 떨어진다는 단점도 있다. 내부 구조를 알 수 없기 때문에 필드가 어떤 의미를 갖고 있는지 파악하기 어렵다.또한 Map의 데이터를 사용하기 위해서는 타입 캐스팅이 필요하기..
·알고리즘
✨ 문제https://www.acmicpc.net/problem/10988알파벳 소문자로 이뤄진 문자열을 입력받아 팰린드롬인지 판별하는 문제이다.팰린드롬인 경우 1, 아닌 경우 0을 리턴해야한다.팰린드롬은 eye처럼 앞으로 읽어도 뒤로 읽어도 똑같은 단어를 말한다.   ✨ StringBuilder.reverse()문자열 관련 클래스 중 reverse하는 메소드를 가진 클래스가 있을 것 같아 찾아보니 StringBuilder에 reverse 메소드가 있었다. StringBuffer에도 reverse 메소드가 존재하는데, StringBuffer는 멀티쓰레드에 안전하도록 동기화되어 있는데, 동기화가 성능을 떨어뜨린다. 그래서 멀티쓰레드 프로그램이 아닌 경우에는 StringBuffer에서 동기화만 빠진 Stri..
·알고리즘
✨ 문제https://www.acmicpc.net/problem/15552BufferedReader, BufferedWriter를 사용하여 입력값을 받아 출력하는 문제이다.BufferedReader, BufferedWriter를 사용해본 적은 있지만 내가 아는건 Scanner보다 BufferedReader를 사용했을때 속도가 더 빠르다는 점 뿐이고 제대로 된 정의는 잘모르기 때문에 개념을 먼저 공부했다.   ✨ BufferedReader와 BufferedWriterBufferedReader는 Reader 클래스를 확장한 것으로 문자 입력 스트림을 버퍼를 사용하여 효율적으로 읽기 위한 클래스이다.마찬가지로 BufferedWriter는 Writer 클래스를 확장한 것으로 문자 출력 스트림을 버퍼를 사용해 효..
✨ 문제 The K Weakes Rows in a  Matrix You are given an m x n binary matrix mat of 1's (representing soldiers) and 0's (representing civilians). The soldiers are positioned in front of the civilians. That is, all the 1's will appear to the left of all the 0's in each row.A row i is weaker than a row j if one of the following is true:The number of soldiers in row i is less than the number of soldier..
·Spring
🔔 참고 블로그 🔔 위 블로그를 참고해 CodeDeploy 설정을 하던 중에 EC2 IAM Role과 CodeDeploy IAM Role을 생성하게 되는데,나는 CodeDeploy가 일방적으로 EC2에 배포를 한다고 생각하고 있었는데EC2 IAM Role을 왜 생성하는가 대해 찾아보다가 CodeDeploy Agent의 존재에 대해 알게되었다.   ✨ CodeDeploy와 CodeDeploy Agent가 배포를 진행하는 과정일단 내가 하려는 CI/CD 흐름은 Github Actions가 S3에 빌드 파일을 업로드하고 CodeDeploy에게 배포 요청을 보내면 CodeDeploy가 S3에 업로드된 빌드 파일을 EC2에 배포하는 것이다.  🔔 CodeDeploy with 배포 지침 👉🏻 CodeDep..
yeooniyeoon
개공블