Java

    Java - EOF

    EOFEOF(End of File)는 읽고 있는 파일의 끝에 도달했을 때의 상태를 의미한다.App에 따라 데이터 처리, 파일 검증 등의 작업이 필요할 수 있기 때문에 File을 읽을 때 EOF 감지는 필수다. 아래 사이트에서 Java에서 EOF를 감지하는 여러 방법을 소개하고 있는데그중 Scanner와 BufferedReader에 대해 정리할 것이다.https://www.baeldung.com/java-file-detect-end-of-file ScannerScanner는 java.util 패키지의 클래스로 EOF를 감지 및 대처할 수 있는 hasNext() 메서드를 제공한다.EOF 상태면 false를 반환하기에 아래와 같이 활용할 수 있다.String readWithScanner() throws IOE..

    Spring Security - SSCM

    SSCMSSCM(Spring Security Crypto Module)은 키 생성(Key generators)과 암호화 및 복호화 기능(Encryptors)을 포함한다. 이 모듈은 보안 관점에서 중요한 데이터 보호를 돕기 위해 다양한 암호화 및 해시 기능을 제공한다.이들에 대해 알아보자. Key generatorsKey generators는 암호화 혹은 해싱 알고리즘에 필요한 특정 종류의 키를 생성하는 데 사용되는 객체이다. 키를 생성하는 인터페이스는 아래 두 가지가 있다.StringKeyGeneratorBytesKeyGenerator StringKeyGeneratorStringKeyGenerator의 모습은 아래와 같다.public interface StringKeyGenerator { Strin..

    Spring Security - PasswordEncoder

    이번엔 UserDetailsService의 단짝인 PasswordEncoder에 대해 알아보겠다.PasswordEncoder 형태PasswordEncoder 모습은 아래와 같다.public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches(CharSequence rawPassword, String encodedPassword); default boolean upgradeEncoding(String encodedPassword) { return false; } }encode(...): 제공된 문자열을 인코딩해 반환matches(...): 인코딩 된 문자열과 기본 비밀번호를 비교upgrad..

    Spring Security - UserDetails, UserDetailService

    이전에 Spring Security의 Architecture와 매우 가볍게 일부 사용법을 다뤄보았다.이번엔 UserDetailsService를 깊게 알아보자. User Details Service 상세위 그림엔 User Details Service만 나와있지만 상세하게 보면 인터페이스가 더 구분된다.UserDetailsService는 이름으로 사용자를 검색하는 역할을 하는 인터페이스로 인증을 완료하는데 필요하다.UserDetailsManager는 사용자에 대한 CRUD 작업을 담당하는 인터페이스이다.두 인터페이스는 인터페이스 분리 원칙(ISP: Interface Segregation Principle)을 지킨다.이를 각각 구현함으로써 유연성이 향상된다.UserDetails는 Spring Security의..

    Spring Security - Spring Security 겉핥기

    프로젝트를 다루면서 Spring Security를 알아보자.Spring Security 동작 확인Spring Tool Suite 4SpringBoot 3Java 17이번엔 간단히 REST endPoint에 접근하는 것으로 Spring Security를 알아볼 것이다.xml에 필요한 종속성은 아래와 같다. org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security  이후 endPoint를 위한 Controller를 구현해 보자.@RestControll..

    Spring Security - Spring Security를 공부하는 이유

    오늘부터 Spring Security in Action, Second Edition을 활용해 Spring Security를 공부할 것인데 먼저 학습 이유와 목적을 정리하고자 한다. Security를 공부하는 이유SW 개발은 크게 시스템에 주어지는 입력에 대한 출력에 대한 기능적 요구사항(Functional Requirements)과 보이지 않는 시스템의 속성이나 제약 사항에 대한  비기능적 요구사항(Non-Functional Requirements)으로 구분된다. (성능, 신뢰성, 보안성, 가용성 등)  사용자의 입장에선 기능적 요구사항이 직관적으로 보이기에 SW Application을 개발할 때, 특히 개발 학습 초기에 이에 중점을 두는 경우가 많지만 비기능적 요구사항이 더욱 결정적일 수 있기에 이도 ..

    Java - Short Circuit

    Short Circuit(쇼트서킷)에 대해 알아보자. Short Circuit Short Circuit(쇼트서킷)은 짧은 순회라는 의미로 여러 개의 조건을 검색할 때 앞에서 답이 정해졌으면 뒤의 조건을 확인하지 않는 것이다. 아래는 Short Circuit 동작을 알 수 있는 예시이다. if문 조건으로 a == 0 이거나 ++a == 1인 경우 a의 값을 출력하도록 했다. public class Main { public static void main(String[] args) { int a = 0; if(a == 0 || ++a == 1) { System.out.println("result : " + a); } } } ++a 코드가 있음에도 불구하고 결과는 1이 아닌 0이다. 그 이유는 a == 0이 이..

    Java - 배열 복사와 반복, clone()과 arraycopy() 속도 비교

    코딩테스트 문제를 풀던 중 배열을 여러 번 반복해야 하는 상황이 생겼다. String 자료형의 경우 repeat 메서드를 활용하면 되지만 배열은 이런 메서드가 없다. 해당 정보를 찾을 겸 배열의 복사와 반복에 대해 내용을 정리하고자 한다. 얕은 복사(Shallow Copy) 복사라고 말하기도 애매한 경우이다. public class Main { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; int[] copyArr = arr; } } int[] arr = {1, 2, 3, 4, 5}; 코드를 통해 메모리 heap 영역에 배열 데이터가 저장된다. 변수명 arr은 배열 데이터의 주소 정보를 가지고 있다. int[] copyArr ..