본문 바로가기

프로그래밍

(73)
[모던 자바 인 액션] 4장. 스트림 소개 스트림이란? 자바 8에 추가된 기능으로 멀티스레드 코드를 이용하지 않아도 간단하게 병렬로 처리하는 어플리케이션을 구현할 수 있다. 자바8 이전과 이후의 차이 java7 //자바 8 이전 - 2020년 이후 발행된 책을 연도순으로 정렬하여 책 이름을 반환 private static List getBooksNameSortedByYearAfter2020(List books) { //2020년 이후 책 List booksAfter2020 = new ArrayList(); for (Book book : books) { if (book.getYear() >= 2020) { booksAfter2020.add(book); } } //연도순 정렬 Collections.sort(booksAfter2020, new Comp..
[모던 자바 인 액션] 3장. 람다 표현식 람다를 어디에 사용할수 있을까? 함수형 인터페이스 정확히 하나의 추상메서드를 지정하는 인터페이스 함수형 인터페이스로 뭘 할수 있을까? 람다 표현식으로 함수형 인터페이스의 추상메서드 구현을 직접 전달할 수 있으므로 전체 표현식을 함수형 인터페이스의 인스턴스 취급 익명 클래스로도 같은 기능을 구현 가능하다. public class Main { public static void main(String[] args) { Runnable r1 = () -> System.out.println("Hello 1"); Runnable r2 = new Runnable() { @Override public void run() { System.out.println("Hello 2"); } }; process(r1); proce..
[모던 자바 인 액션] 2장. 동작 파라미터화 소프트웨어 엔지니어링에서 요구사항은 항상 변한다. 시시각각 변하는 요구사항을 반영하면서 엔지니어링적인 비용이 가장 최소화될 수 있으면 좋다. 새로 추가한 기능은 쉽게 구현할 수 있어야 하며 장기적인 관점에서 유지보수가 쉬워야 한다. 변화하는 요구사항에 대응하기 간단한 도서관리 애플리케이션의 예시로 원하는 책들을 찾는 프로그램을 개발한다고 가정하였다. Book 클래스는 아래와 같다. public class Book { private String name; //책이름 private String author; //저자 private Integer year; //출판 연도 private String field; //분야 public Book(String name, String author, Integer yea..
JSX JSX 이해하기 JSX는 Javascript XML의 약자로 React 컴포넌트에서 HTML 마크업을 그대로 사용할 수 있게 해주며 Javascript의 확장이다. 특히 react에서는 React.createElement()호출을 반복해야 하는 불편함을 해소해주며 레퍼런스에서도 JSX를 소개할 때 JSX 사용을 권장한다고 한다. 중괄호 내에 자바스크립트 표현 JSX에서 javascript를 표현할 때는 중괄호{}로 감싸야 된다. const name = "yang"; const div = Hello {name}; ReactDOM.render(div, document.getElementById("root")); 여러 엘리먼트 사용 시 하나의 엘리먼트로 감싸야 함 function App() { return (..
패스워드 암호화 패스워드를 왜 암호화해서 저장해야하는가 패스워드는 평문으로 저장하면 안됩니다. 그 이유는 다양하지만 큰 이유는 2가지 정도가 있습니다. 해당 서비스의 관리자가 db에서 모든 사용자의 비밀번호를 볼 수 있으며 db가 털리는 경우 공격자에게 계정 정보가 넘어갈 수 있기 때문 일반적으로 id와 password를 여러곳에서 쓰는 경우가 많아서 추가적인 피해가 발생할 수 있기 때문입니다. PasswordEncoder 스프링 시큐리티에서 비밀번호를 암호화 하도록 단방향 해시를 위한 PasswordEncoder 인터페이스와 구현체들을 지원하는데 그중에서 BcryptPasswordEncoder에대해 알아봅시다. BcryptPasswordEncoder Bcrypt 해시함수를 사용하여 패스워드를 암호화를 할 수 있습니다...
Docker Cli 명렁어 정리 컨테이너 확인 Docker 컨테이너를 조회합니다. docker ps [옵션]-a 옵션 중지된 컨테이너까지 포함한 모든 컨테이너를 출력합니다. 컨테이너 실행 docker run [옵션] 이미지[:TAG] [command] ...-d 옵션 detached mode(백그라운드에서 실행) docker run -it -d openjdk:15 bash 999894c8a85bd306e08b5f15508694821b2638607e8414ef4130003d9b110231 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 999894c8a85b openjdk:15 "bash" 2 seconds ago Up 1 second condescending_haslet..
JWT JWT(Json Web Token)이란? JWT는 인증에 필요한 정보들을 암호화시킨 문자열로 RFC7519 표준입니다. 사용자는 JSON 객체를 HTTP Authorization 헤더에 실어 서버로 보내서 헤더에 포함된 JWT 정보를 통해 인증을 할 수 있습니다. 해싱 알고리즘으로는 HMAC SHA256, RSA등이 사용된다. JWT 토큰의 구성 JWT 토큰은 크게 세 부분으로 나뉘는데 Header, Payload, Signature로 불리며 문자열에서 온점(.)으로 구분됩니다. xxxxxx.yyyyy.zzzzz 헤더(Header) Header는 해싱 알고리즘과 토큰의 타입으로 구성됩니다. { "alg": "HS256", "typ": "JWT" } 정보(Payload) Payload는 토큰에 담을 정보를..
I/O I/O란? Input, Output의 약자로 입출력이라고도 한다. 키보드를 통해 입력을 받거나 System.out.println()과같이 화면에 출력하는 것들이 대표적인 예 Stream 자바에서 모든 입출력은 스트림을 통해 이루어 지는데 여기서의 스트림은 자바8의 스트림과는 다른 개념이다. 스트림은 단방향 통신만 가능하며 하나의 스트림으로 입력과 출력을 동시해 수행할 수 없다. 스트림은 먼저 보낸 데이터를 먼저 받게 되는 FIFO(First In First Out) 구조로 되어있다. NIO? JDK1.4부터 지원하게 된 NIO는 New Input Output의 약자로 채널과 버퍼를 사용하는 새로운 입출력을 지원하게 되었다. Buffer 읽고 쓰기가 가능한 메모리 영역으로 데이터를 다른 곳으로 전송하는 동..