전체 글 88

@Validated 테스트 코드 작성

비밀번호 범위를 테스트하자 Member라는 클래스를 작성 public class Member { @NotNull @Length(max = 30) private String memberId; @NotEmpty @Range(min = 8, max = 16) private String memberPwd; @NotEmpty private String memberNM; public Member() { } public String getMemberId() { return memberId; } public void setMemberId(String memberId) { this.memberId = memberId; } public String getMemberPwd() { return memberPwd; } publ..

git 버전관리 하지 않을 파일 설정 .gitignore 적용

버전관리 하지 않을 파일에 대해 설정할 수 있다. 프로젝트의 디렉토리 최상위에 .gitignore 이라는 파일을 만든다. 아래의 규칙으로 설정한다. # build/ 디렉토리에 있는 모든 파일을 무시 build/ # 확장자가 .txt 인 파일 무시 *.txt # .txt 파일들은 모두 무시되지만, test.txt만은 무시하지 않음 !test.txt # 특정 디렉토리에 있는 특정 파일 무시 /test.txt # src/ 하위의 .txt파일만 무시 src/*.txt # 특정 디렉토리와 그 하위 디렉토리 내에 존재하는 모든 .txt 파일을 무시 /**/*.txt # 특정 디렉토리 내에 존재하는 모든 .txt .java 파일 무시 /*.{txt, java} # 특정 디렉토리 내에 있는 java1.txt java2..

프로그래밍/Git 2021.10.09

정규화에 대해서

정규화의 배경 한 릴레이션(테이블)에 여러 엔티티(정보를 저장하고 관리하기 위한 집합적인 것)의 애트리뷰트(칼럼)들이 혼합하게 되면 정보가 중복 저장되며, 저장공간이 낭비하게 된다. 중복된 정보로 인해 이상 현상(Anomaly)이 발생하게 된다 갱신 이상 - 삽입 이상 : 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는것이 불가능하다 - 삭제 이상 : 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능하다 - 갱신 이상 : 반복된 데이터 중에 일부를 갱실 할 시 데이터의 불일치가 발생한다 정규화 작업 정규화 작업이란 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다 - 제 1 정규화 : 속성의 도메인이 오직 원자값만을 포함 - 제 2 정규화 : 부..

프로그래밍/DB 2021.10.08

GET과 POST 비교

GET 요청하는 데이터가 HTTP Request Message 안에 Header의 Path에 담겨서 전송된다.(쿼리 파라미터, 쿼리스트링) url에 담기기 때문에 데이터의 크기가 제한적이고, 보안이 필요한 데이터가 url에 노출되므로 비밀번호를 전송할 때는 적절하지 않다. 보통 GET 방식은 조회나 검색할 때 사용한다. 멱등(Idempotent)이다. 즉, 똑같은 요청을 해도 안전하다. POST 요청하는 데이터가 HTTP Request Message 안에 Body 부분에 담겨서 전송된다. (보안면에서는 GET 방식보다 낫지만 암호화하지 않는 이상 크게 차이는 나지 않는다) POST는 서버의 값이나 상태 변경, 추가하기 위해서 사용된다. 멱등이 아니다. 즉, 똑같은 요청을 보내면 안된다. 부수적인 차이점으..

(복습) static

static은 '클래스의' 또는 '공통적인' 의 의미를 가지고 있다. 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다. - 클래스가 메모리에 로드될 때 생성된다. 메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 클래스 메서드(static 메서드)가 된다. - static 메서드 내에서는 인스턴스 멤버(인스턴스 메서드, 인스턴스 변수)들을 직접 사용할 수 없다. 사용 - 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다. - 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.(메서드 호출시간이 짧아지므로 성능이 향상된다.) class Stati..

프로세스와 쓰레드 2

프로세스 운영체제가 프로그램에 메모리를 할당하여 실행하는 것이 프로세스 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다. 쓰레드 프로세스 내에서 실행되는 흐름의 단위로 하나의 프로세스는 하나 이상의 쓰레드를 갖는다. 같은 프로세스의 쓰레드는 메모리를 공유한다. 쓰레드는 프로세스 내에서 각각 Stack만 할당받고, Code, Data, Heap 영역은 공유한다. 자바에서 쓰레드 스케줄링은 JVM에 의해 이루어진다. 멀티 프로세스 대신 멀티 쓰레드를 사용하는 이유? 자원 효율성 증대 - 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 - 시스템자원 소모가 줄어들게 됨 처리 비용 감소 및 응답 시간 단축 - 프로세스 간의 통신보다 쓰레드 간의..

쓰레드 wait()과 notify()

synchronized로 동기화해서 공유 데이터를 보호하는 것 까지는 좋은데, 특정 쓰레드가 객체의 락을 가진 상태로 오랜 시간을 보내지 않도록 하는 것도 중요 동기화된 임계 영역의 코드를 수행하다가 작업을 더 이상 진행할 상황이 아니면, 일단 wait()을 호출하여 쓰레드가 락을 반납하고, 기다리게 한다. 나중에 작업을 진행할 수 있는 상황이 되면 notify()를 호출해서, 작업을 중단했던 쓰레드가 다시 락을 얻어 작업을 진행할 수 있게 한다. import java.util.ArrayList; class BurgerShop { String[] burger = {"burger1", "burger2", "burger3"}; private ArrayList burgerList = new ArrayList(..

타임리프(thymeleaf) 링크 URL 표현식 @{}

링크 URL 표현식 @{}을 사용해서 페이지를 이동하여 보자 기본적인 방식과 파라미터를 넣었을 때 방식을 알아보자 컨트롤러에서 데이터를 보내자 @GetMapping("/th-ahref") public String thAHref(Model model) { String mem = "members"; model.addAttribute("mem", mem); return "view/th-ahref"; } th ahref th-ast th-map th-text members - 파라미터 넣기 members - 리터럴 대체 사용 || @{} 안에 이동해야할 값을 넣는다. 만약 파라미터를 넣어야 한다면 @{/{param1}/{param2}(param1=${param1}, param2=${param2})} 위와 같은 ..

쓰레드의 동기화

멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해 받지 않도록 하는 것이 필요하다. 따라서 필요한 것이 임계 영역(critical section)과 잠금이다. 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 쓰레드의 동기화(synchronization) 라고 한다. 메서드 전체 synchronized class Sync_test implements Runnable { Account ac = new Account(); @Override public void run() { while (ac.getBalance() > 0) { int money..