반응형

전체 글 28

[Java] Math.ceil(), Math.round(), Math.floor() 대체

Math 라이브러리가 제공하는 올림, 반올림, 내림 연산은 명확하지만 대용량 처리에 있어서는 다소 속도가 느리다.이를 대체할 수 있는 함수를 소개한다.올림, Math.ceil() 대체public static long ceiling(long numerator, long denominator) { return (numerator + denominator - 1) / denominator;}반올림, Math.round() 대체public static long round(long numerator, long denominator) { return (numerator + denominator / 2) / denominator;}내림, Math.floor() 대체public static long floo..

ahnnyung ,/Java 2024.09.11

[Spring] Spring Security

개요 Application의 보안(Authentication & Authorization)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 인증과 인가에 대한 부분을 Filter 흐름에 따라 처리하고 있다. 보안과 관련해서 체계적으로 다양한 옵션들을 제공해주고 있다. Authentication & Authorization Authentication은 인증 (로그인), Authorization은 인가(접근 허용)을 의미한다. Authentication은 그야말로 접근자(사용자)의 신원을 확인하는 프로세스이고, Authorization은 누가 무엇을 할 수 있는지 결정하는 규칙이다.Spring Security는 기본적으로 인증(Authentication)절차를 거친 후에 인가(Autho..

ahnnyung ,/Spring 2022.03.25

[StringBuilder] StringBuilder.reverse() 이용해서 문자열 뒤집기

Javascript문법 공부중 this.message = this.message.split('').reverse().join('') 라는 얄미운 문법을 발견. 'Java엔 저런게 없을까' 라는 생각과 바로 시작 된 구글링. Java 또한 StringBuilder의 reverse() 메소드를 이용하여 뒤집는게 가능하다. 어떻게 보면 더 간결할지도. 그렇다면 뜯어봐야지 우선 타고타고 들어가보니 AbstractStringBuilder의 reverse() 메소드를 호출해준다. 우선AbstractStringBuilder의 value와 count는 현재 StringBuilder에 들어와있는 문자 배열과 그 길이를 의미한다. 다음이 reverse() 메소드이다. 우선 n을 count - 1 로 잡아주고 (아마도 va..

ahnnyung ,/Java 2021.11.29

[Java] 람다식(Lambda Expression)의 개념 및 사용방법

1) 람다식이란 Java 의 Lambda Expression(이하 람다식)은 Java 8에서 공식적으로 추가되었다. 다음은 w3school에서 설명되어있는 람다식이다. A lambda expression is a short block of code which takes in parameters and returns a value. Lambda expressions are similar to methods, but they do not need a name and they can be implemented right in the body of a method. 람다 표현식은 매개변수를 받아 값을 반환하는 짧은 코드 블록입니다. 람다 표현식은 메서드와 유사하지만 이름이 필요하지 않으며 메서드 본문에서 바로 ..

ahnnyung ,/Java 2021.07.29

[SSAFY] SSAFY 6기, 시작

계기 신청 이유는 간단했다. 2021년 전반기 15번의 코딩테스트 탈락과 8번의 서류탈락의 고배를 마신 나는 지칠 대로 지쳐있었다. 장기화되는 코로나 상황속에서 상실감과 무기력감에 빠져 말하는 감자가 되어버린 나는 새로 고침 버튼이 필요했다. 때마침 운이 좋게 SSAFY에 대한 정보를 접했고, 바로 준비하게 되었다. 준비과정 지원서 접수 (2021.05.14) 전공자였던 나로서는 다행히 관련 경험이 있어 에세이를 어렵지 않게 써 내려 갈 수 있었다. 자세한 내용은 'SSAFY 지원서'를 키워드로 검색하면 선배 기수들의 후기를 통해 잘 설명되어있다. 에세이를 작성할 때 나만의 팁을 공개한다면... 두괄식으로 작성을 하면서 결과를 뒷받침하는 과정을 나열하고, 이를 뒷받침하는 근거를 명확하게 서술하는 방식으로..

Diary/SSAFY 2021.07.03

[OS] CPU Scheduling algorithm

선점? 비선점? 선점(preemptive): 우선순위가 높은 작업이 오거나, 해당 작업이 더 우선되어야 한다고 판단되면 해당 작업에게서 CPU를 빼앗을 수 있다. 비선점(non-preemptive): 일단 CPU를 할당받으면 해당 프로세스가 끝날때까지 CPU를 빼앗기지 않는다. Scheduling algorithm FCFS(Fisrt come First Served) 특징 선입선출 비선점형스케줄링 비효율적 단점 응답시간이 길어질 수 있음Convoy Effect(호위 효과) 👉🏻 Short process behind long process, 처리시간이 오래걸리는 프로세스가 먼저 할당되어버리면 그 작업이 끝날 때 까지 다른 프로세스들은 마냥 기다리는 현상 SJF(Shortest Job First) 특징 CP..

ahnnyung ,/etc. 2021.04.15

[Java] Arrays.sort() & Collections.sort() 비교

// new Random().nextInt로 초기화된 Array로 가정 int[] intArray = new int[50000000]; for (int i = 0; i < intArray.length; i++) { intArray[i] = new Random().nextInt(Integer.MAX_VALUE); } // 비교를 위한 List 생성 List list = Arrays.stream(intArray).boxed().collect(Collectors.toList()); startTime = System.nanoTime(); Collections.sort(list); endTime = System.nanoTime(); System.out.println("#1 " + TimeUnit.MILLISECO..

ahnnyung ,/Java 2021.03.19

[Java] System.nanoTime()으로 자바 코드 실행에 걸린 시간을 측정

long startTime; // 시작시간. nanoSec long endTime; // 종료시간. nanoSec long estimatedTime; // 걸린시간. nanoSec double seconds; // 최종시간. Sec startTime = System.nanoTime(); // 시간을 체크할 자바 코드 삽입 // ... endTime = System.nanoTime(); estimatedTime = endTime - startTime; // 걸린시간 연산 seconds = estimatedTime / 1000000000.0; // nanoSec to Sec System.out.println("Response Time " + seconds);

ahnnyung ,/Java 2021.03.19

[JPA] FetchType.Lazy로 인한 JSON 오류 (InvalidDefinitionException: No serializer found for class)

발단 Front에서 엔티티를 저장하는 과정에서 처음 데이터를 저장하는 순간에는 올바르게 작동하지만 수정(edit)하고 저장할 때에는 에러(HttpStatus 500)를 리턴한다는 문제가 발생했다. (다만 DB상으로 데이터는 수정된 값이 올바르게 저장되었다.) 우선 오류 전문. 10:55:18.202 hanzariApp ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested ex..

[Java] Java 8 Stream이란?

Stream이란? Java8부터 지원하는 Stream은 컬렉션, 배열등에 대해 저장되어있는 요소들을 하나씩 참조하며 반복적인 처리를 가능케하는 기능이다. 이러한 Stream을 이용한다면 불필요한 for문과 그 안에서 이루어지는 if문등의 분기처리를 쓰지않고도 깔끔하고 직관적인 코드로 변형할 수 있다. Stream 특징 Stream은 데이터를 변경하지 않는다. - Stream은 원본데이터로부터 데이터를 읽기만 할 뿐, 원본데이터 자체를 변경하지 않는다. Stream은 일회용이다. - Stream은 한 번 사용하면 닫혀서 재사용이 불가능하다. 필요하다면 정렬된 결과를 컬렉션이나 배열에 담아 반환할 수 있다. Stream은 작업을 내부 반복으로 처리한다. - Stream을 이용한 작업이 간결할 수 있는 비결중..

ahnnyung ,/Java 2021.01.19