Web

    EP3. 검증1 - Validation

    지금까지 만든 웹 어플리케이션은 사용자가 입력하는 모든 상황을 대비할 수 없습니다. 예를들어, 사용자가 가격을 입력하는 곳에 알파벳을 입력하거나 그냥 입력 창에 공백을 넣게되면 에러페이지로 연결이 되며 기존에 작성했던 데이터는 다 사라지게 됩니다. 만약 우리가 회원가입시 이런 상황을 겪게 된다면 당연히 이 사이트를 더이상 이용하고 싶지 않을 것입니다. 검증은 클라이언트에서도 가능하고 서버에서도 가능합니다. 클라이언트 검증은 포스트맨 등으로 조작할 수 있으므로 보안에 취약합니다. 하지만 서버만으로 검증하면, 즉각적인 고객 사용성이 부족합니다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버에서 검증하는 과정은 필수입니다. API방식을 이용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 넘..

    [Java] 람다식

    람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다식 (Lambda expression) 람다식은 메서드를 하나의 '식(expression)'으로 표현한 것입니다. 즉, 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 '익명 함수(anonymous function)'이라고도 부릅니다. 메서드와 함수의 차이 위의 설명에서 '함수'라는 용어를 사용했습니다. 원래 자바의 객체지향개념에서는 '함수' 대신 '메서드'라는 용어를 사용합니다. 메서드는 기본적으로 함수와 비슷한 의미이지만, 특정 클래스에 반드시 속해야 한다는 제약을 가지고 있습니다. 그래서 자바에선 함수와는 다른 '메서드'라는..

    [Java] 제네릭

    제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 제네릭 JDK 1.5에서 처음도입이 되었습니다. 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시에 타입체크 해주는 기능입니다. 장점 객체의 타입을 컴파일시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어듭니다. (타입 안정성 : 의도하지 않은 타입의 객체가 저장되는 것을 막는다는 뜻) 제네릭 클래스 선언 클래스 Box가 아래와 같이 정의되어있으면 class Box { Object item; void setItem(Object item) { this.item = item; } Object getItem() { return item; } } Object 부분을 T로 바..

    [Java] I/O

    스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 스트림(Stream) 스트림은 바이트 단위로 데이터를 운반하는데 사용되는 연결통로 입니다. 스트림은 데이터의 흐름을 한쪽 방향으로 흐르는 물에 비유해서 붙여진 이름입니다. 즉, 스트림은 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없습니다. 그래서 입력과 출력을 동시에 수행하려면 입력스트림, 출력스트림 모두 2개의 스트림의 필요합니다. 스트림은 먼저 보낸 데이터를 먼저 받게 되어 있는 큐(queue), FIF..

    EP2. 메세지와 국제화

    메시지 현재 HTML의 상품명, 가격, 수량 등 'label'에 있는 단어들을 하드코딩 되어있습니다. 만약에 '상품명'이라는 단어를 '상품이름'으로 바꾸려면 모든 HTML상의 단어들을 바꾸어주어야합니다. 이런 다양한 메시지들을 한 곳에서 관리할 수 있는 기능을 메시지 기능이라고 합니다. messages.properties item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 addForm.html 국제화 사용자가 접근한 locale에 따라, 혹은 사용자의 선택에 따라 보이는 메세지의 언어도 다르게 설정할 수 있습니다. 이 기능을 국제화 기능이라고 합니다. 메세지에서 설명한 메시지파일(messages.properties)를 나라별로 ..

    [GitHub] Support for password authentication was removed on August 13, 2021. 에러

    여느날과 다름없이 코딩하고 push 하려는데 갑자기 에러가 발생했습니다. 2021년 8월 13일부로 비밀번호 인증이 삭제되고 개인 인증키를 사용해야 한다고 써있습니다. 다들 얼른 해결하고 다시 코딩하러갑시다. 해결방법 github홈페이지에서 개인 인증키를 받아야 합니다. 1. 깃허브 Token 발급받기 깃허브 홈페이지에서 프로필을 클릭하고 setting, 그 다음 Developer settings로 들어가 줍니다. Personal access tokens 클릭 Generate new token 클릭 내가 알아볼 수 있는 token 이름과 필요한 권한에 체크해주고 맨 아래 Generate token을 클릭해줍니다. 토큰발급완료 2. push할때 토큰 같이 입력해주기 이런식으로 push할 리포지토리주소 사이..

    [Java] Enum

    enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet Enum 열거형(enum)은 서로 관련된 상수를 편리하게 선언하기 위해 JDK1.5부터 새로 추가되었습니다. Enum 정의하는 방법 enum 열거형이름 다음에 괄호{}안에 상수의 이름을 나열하면 됩니다. enum 열거형이름 { 상수명1, 상수명2, ... } 예시) 동서남북 4방향 열거형 enum Direction { EAST, SOUTH, WEST, NORTH } Enum 비교방법 '==' 사용 가능 '>' '

    [Java] 애노테이션

    애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했습니다. 그래서 소스코드의 주석 '/** ~ */'에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램인 javadoc.exe 를 만들어 사용했습니다. 아래는 모든 애노테이션의 조상은 Annotation 인터페이스의 실제 소스코드의 일부입니다. '/**'로 시작하는 주석 안에 소스코드에 대한 설명들이 있고, 그 안에 '@'이 붙은 태그들이 보입니다. 미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe가 이 ..

    [Java] 멀티쓰레드 프로그래밍

    학습할 것 Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread 클래스와 Runnable 인터페이스 쓰레드를 생성하는 방식에는 두가지가 있습니다. Thread 클래스 상속 Runnable 인터페이스 구현 Thread 클래스 상속 class MyThread extends Thread { public void run() {} } Runnable 인터페이스 구현 class MyThread implements Runnable { public void run() {} } 차이점 다음의 코드를 통해서 두 방식의 차이점을 알아보겠습니다. package javastudy.ch10; public class ThreadEx1 { public static..

    [Java] 예외

    예외처리 프로그램 오류는 발생시점에 따라 3가지로 나눌 수 있습니다. 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 에러가 발생하면, 프로그램의 비정상적인 종료를 막을 길이 없지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 놓음으로써 프로그램의 비정상적인 종료를 막을 수 있습니다. Exception과 Error의 차이 에러는 일단 발생하면 복구할 수 없는 심각한 오류(메모리부족, 스택오버플로우 등)이고 예외는 발생하더라도 수습할 수 있는 비교적 덜 심각한 것 에러가 발생하면 프로그램은 비정상적인 종료를 하지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 ..