모던 자바: 자바 8에서 자바 21까지 심층 가이드
·
Language/Java
해당 글은 아래 링크의 내용을 번역 + 추가한 것 입니다.https://medium.com/java-and-beyond/modern-java-an-in-depth-guide-from-version-8-to-21-by-akiner-alkan-f89b50e13c72 0. 서론자바는 다재다능한 프로그래밍 언어로, 변혁의 여정을 걸어왔습니다.자바 8부터 흥미로운 기능들이 개발자들의 코딩 방식을 바꾸어 놓았습니다.  더 나은 기능을 위한 깔끔한 람다 표현식부터 데이터를 더 쉽게 다룰 수 있도록 해준 Stream API까지, 자바 8은 혁신적인 변화를 가져왔습니다.우리는 자바 21까지의 업데이트를 살펴볼 것입니다.이 현대적인 자바 기능들을 간단한 설명과 실용적인 예제로 풀어가며 함께 여정에 동참해 보세요.이 여정이..
[Java] Function 인터페이스를 활용한 조회 로직 개선
·
Language/Java
1. 상황로아투두 프로젝트를 진행하면서 Member Entity를 조회하는 여러 메소드들이 있었는데,그 중 회원 한명을 조회하는 Get 메소드는 입력받은 파라미터만 다르고 거의 동일한 join 구문과 fetch 로직이 반복되고 있었습니다.이러한 상황에서 새로운 join이 필요하거나 파라미터가 추가될 때마다 모든 관련 메소드를 수정해야 하는 번거로움이 있었죠. [username으로 조회하는 메소드와 id로 조회하는 메소드]@Overridepublic Optional get(String username) { return Optional.ofNullable( factory.select(member) .from(member) ..
[프로그래머스 / Java] 연속 펄스 부분 수열의 합
·
CodingTest/Algorithm
1. 문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [문제 요약]부분 수열의 합 중 가장 큰 값을 구하라 2. 생각1. 코딩테스트는 두 가지 유형이 있지문제가 길어 문제가 요구하는 방향을 이해하면 풀 수 있는 문제와문제가 짧어 뭘 구하라는지 알겠는데 어떻게 구해? 하는 문제이 문제는 후자의 경우... 문제 보자마자 든 생각: 뭐 어떻게 구해?2. 펄스 수열 이용해서 2개의 배열 만드는 것까지는 쉬움3. "수열의 부분 수열의 최댓값" 이거 구하는게 관건같은데...하나씩 다 만들어보기에는 sequence의 길이 제한이 커서 안될꺼같다4. 30분정도 고민해보고 인터넷 찾아봤는데 이미 "카데인 알고리즘"..
[프로그래머스 / Java] 입국심사
·
CodingTest/Sorting & Thinking
1. 문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [문제 요약]모든 사람이 심사를 받는데 걸리는 시간의 최솟값 구하기숫자의 범위가 크다 2. 생각대로 풀기숫자의 범위가 크다 -> 이분 탐색 (코드 설명 주석은 AI 활용)import java.util.Arrays;class Solution { public long solution(int n, int[] times) { // n: 입국심사를 기다리는 사람 수 // times: 각 심사관이 한 명을 심사하는데 걸리는 시간이 담긴 배열 // 심사 시간을 오름차순으로 정렬 Arrays.sort(..
[프로그래머스 / Java] 징검다리 건너기
·
CodingTest/Sorting & Thinking
1. 문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr [문제 요약]최소 몇 명이 건널 수 있는지 구하기숫자가 적힌 배열, 건널 수 있는 길이숫자의 범위가 크다 (원소의 값이 최대 2억) 2. 생각대로 풀기숫자의 범위가 크기 때문에 무작정 반복문을 돌리면 안된다.N명이 건널 수 없다면, N보다 큰 수의 사람들도 건널 수 없음.N명이 건널 수 있다면, N보다 작은 수의 사람들도 건널 수 있음.-> 이진탐색으로 좁혀가면서 N찾기import java.util.*;class Solution { public int solution(int[] stones, int k) { int left = ..
[프로그래머스 / Java] 가장 먼 노드
·
CodingTest/BFS
1. 문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr[문제 요약]1번 노드에서 가장 멀리 떨어진 노드의 갯수 구하기n개의 1~n까지 적힌 노드가 있는 그래프가장 멀리 떨어진 노드: 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드 2. 생각대로 풀기최단 경로 문제 -> 가중치가 없다 -> 시작점이 여러개가 아니다 -> BFSimport java.util.*;class Solution { ArrayList> graph = new ArrayList(); public int solution(int n, int[][] edge) { // 그래프 초기화 for ..
[LOATODO] 회원가입 후 캐릭터 등록 테스트 코드 작성 + 리팩토링
·
Project/LOATODO
1. 서론로아투두는 회원 가입 후 캐릭터 등록을 따로 두고 있습니다.@ApiOperation(value = "1차 회원가입 이후 캐릭터 추가", notes="대표캐릭터 검색을 통한 로스트아크 api 검증 \n 대표캐릭터와 연동된 캐릭터 함께 저장")@PostMapping("/character")public ResponseEntity saveCharacter( @AuthenticationPrincipal String username, @RequestBody SaveCharacterRequest request) { if (username.equals(TEST_USERNAME)) { throw new IllegalStateException("테스트..
[LOATODO] Spring Custom Annotation으로 구현하는 사용자별 중복 요청 제한
·
Project/LOATODO
1. 서론프로젝트를 하다보면 특정 메소드의 로그를 쌓거나,반복적인 요청을 방지하거나,공통 변수를 받거나 등등공통적으로 작동해야하는 기능을 개발해야할 때가 있습니다. 그렇다면 이러한 기능을 어떻게 개발할 수 있을까요?가장 쉬운 방법은 필요한 곳에 하나씩 개발해서 추가하는 것 입니다.하지만 그렇게 되면 중복코드가 많아질 것이고, 코드를 수정해야한다면 모든 코드를 수정해야 하는 불편함이 존재할 것입니다. 이번 글은 그러한 불편함을 줄인 방법에 대해 글을 쓰려고 합니다.  2. 다수 요청 방지 Annoatation 개발2 - 1) Annotation Value 개발@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Rat..
[LOATODO] 스프링 개발자의 NestJS 찍먹 후기
·
Project/LOATODO
1. 나름 안정적인 운영개발을 하다보면, 익숙한 환경을 벗어나 새로운 환경을 시도해보고 싶을 때가 있습니다. 백엔드 개발자가 갑자기 프론트엔드를 한다던가... 앱 개발을 한다던가.... 국비지원 자바로 시작해서 스프링으로 넘어가고,로아투두도 그렇고 현재는 주로 스프링 부트를 사용해 백엔드 개발을 해오고 있습니다. 최근에 느낀점은새로운 프로젝트를 시작해도, 이미 만들어진 틀이 있어spring starter에서 Security, JPA, QueryDSL 등 필요한 라이브러리 가져오고대충 config 파일 만들어서 세팅해주고 도커 파일 만들고 AWS에서 설정 해주면 CI/CD 들어가서 배포까지 깔끔하게 됩니다. 이렇게 하면 t4g.micro EC2를 예약 인스턴스를 구매했다는 가정하에하루에 2달러 내외의 서버..