캐시 웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치이다. 웹 요청이 캐시에 도착했을 때, 캐시된 로컬 사본이 존재한다면, 그 문서는 웹 서버가 아니라 캐시로부터 제공된다. - 불필요한 데이터 전송 감소 - 네트워크 병목 감소시킴으로써, 대역폭을 늘리지 않고도 페이지를 빠르게 로딩 - 웹 서버에 대한 요청을 감소시킴으로써 서버는 부하를 감소시킬 수 있고, 빠르게 응답 가능 - 물리적인 거리로 인한 지연 감소 1. 불필요한 데이터 전송 감소 자주 사용하는 페이지에 대해 여러 클라이언트에서 요청이 온다고 하자. 캐시가 없다면 각각의 클라이언트에게 페이지를 모두 제공해야만 한다. 하지만 캐시가 존재한다면첫번째 클라이언트의 요청이 올때, 페이지를 캐시에 저장하고, 뒤이은 요청에 대해서는 캐..
1. 다대일 양방향 연관관계 양방향 연관관계에서는 외래키가 있는 객체가 연관관계의 주인역할을 수행한다. 여기서 주인은 외래키를 생성, 삭제, 수정할 수 있는 외래키 관리자를 의미한다.그리고 다대일 양방향 연관관계에서는 항상 '다(N)' 가 주인의 역할이다. 그리고 하인의 역할을 맡는 객체는 mappedBy라는 속성이 부여되고, 이 mappedBy에는주인의 참조키를 설정해주어야 한다. 아래 코드를 보면 하인의 역할을 수행하는 Team의 mappedBy에는 주인의 참조키의 필드명이 저장되어 있다.그리고 양방향 연관관계에서 중요한 것은 항상 서로를 참조해야 한다는 것이다. 아래 코드를 보면 Member는 Team을 등록할 때, Team에 Member 추가하고,Team이 Member를 등록할 때, Member에..
Spring Boot 실행하는 과정에서 최근에 겪은 오류를 해결한 내용을 정리해보려고 한다. 1, Spring Boor Application 실행 불가 log 확인한 결과, Web Config 를 읽은 후에, HikariPool-1 Starting에서 멈추는 현상이 계속 발생했다. 원인은 H2 Database에 Lock 발생해서 실행이 되지 않기 때문이다. 이 문제를 해결하기 위해 java-qna.mv.db, java-qna.trace.db 두 개의 파일을 삭제 했다. 이 파일들은 데이터베이스에 저장한 파일을 남겨 놓은 파일들이다. 이 파일들을 삭제하니, 해결이 되었다. User 디렉토리에서 ls-al 명령어를 사용하면 파일들을 확인할 수 있다. 솔직히, 정확한 원인과 삭제한 파일들의 역할은 아직 파악하..
1. 단방향 연관관계 - 회원은 하나의 팀에만 소속될 수 있다. - 팀에는 여러 회원을 가지고 있다. 먼저 위의 경우는 N (회원) : 1 (팀) 의 관계이다. 서로의 연관관계를 결정할 때, 항상 헷갈리고 어렵다. 이럴때 가장 좋은 방법은 역지사지의 방법이다.반대편의 입장을 결정하는 방법이다. 예를들어, 회원의 입장에서는 하나의 팀에만 소속될 수 있기 때문에 팀은 1이고, 팀의 입장에서는 여러 회원을 가질 수 있기 때문에 회원은 N 이다. 결론적으로 N : 1 의 관계이다. 이렇게 생각하면 어렵지 않다! 나는 항상 헷갈렸다! 위와 같은 경우에는 객체의 연관관계와 테이블의 연관관계가 서로 다르다. 객체의 연관관계에서는 회원 객체는 Member.team 필드로 팀과 연관관계를 가진다.회원은 Memeber.t..
이슈관리 시스템을 개발하면서 계속 오류가 발생하여 관련 내용을 포스팅하려고 한다. 오류는 클라이언트에서 서버로 Ajax 를 이용해서 비동기 요청를 했을 때 계속 발생했다. 오류는 '415 Unsupported Media Type' 였다. 415 오류는 지원되지 않는 형식으로 클라이언트가 요청을 해서 서버가 요청에 대한 승인을거부한 오류를 의미한다. 이럴 경우에는 ContentType, Content Encoding 데이터를 확인할 필요가 있다.결국 나는 AJax 요청을 했을 때, ContentType을 명시하지 않았기 때문에 오류가 발생했던 것이다. 오늘은 Ajax Option에 대해 알아보겠다! (1) async (boolan, default : true) - 해당 함수를 비동기 처리를 할지, 동기 처..
엔티티를 조회할 때, 연관된 데이터들이 항상 사용되는 것은 아니다. 예를들어 Question 엔티티가 아래와 같이 List를 가지고 있다고 하자! 물론 질문 상세보기에서 해당 답변 목록을 보여줄때는 List는 필요하다. 하지만 질문 상세 보기 이전에 질문들의 목록을 나타내는 게시판에서Answer의 갯수만 필요하다고 한다면, 굳이 List의 목록이 필요없다. 오히려 List를 모두 가져와야 한다는 것에서 굉장히 효율적이지 못한다.이럴때는 Answer의 갯수를 관리하는 필드가 있고, Answer의 내용이 필요할때만 Answer를 가져오고 그러지 않을 때는 Question의 필드값만 불러오면가장 베스트이지 않을까? 위와 같이 엔티티가 실제 사용될 때까지 데이터베이스의 데이터를 조회하는 것을 지연하는 방법을 지..
1. Java 구현 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String[] input = br.readLine().split(" "); int a = Integer.parseInt(input[0]); int b = Integer.parseInt(input[1]); inpu..
1. 프로세스 : 실행중인 프로그램 프로세스는 CPU로부터 시스템 자원을 할당받아 독립적으로 실행중인 프로그램을 의미한다. 여기서 주목해야할 키워드는 시스템 자원, 독립적 실행이다.프로세스는 CPU로부터 각각 독립된 Code, Data, Stack, Heap 영역을 할당받는다. 각각의 프로세스는 독립적인 메모리 영역을 가지고 있기 때문에 다른 프로세스의 자원에 접근하기 위해서는 IPC (Inter Process Communication)를 사용해야 한다. IPC는 메일슬롯, 파이프, 파일, 소켓 등을 이용하여 통신할 수 있다. 2. 스레드 : 프로세스 내에서 실행되는 작업의 단위 프로세스 내부에는 하나 이상의 스레드가 존재한다. 그리고 각각의 스레드는 독립적으로 시스템 자원을 할당받는 프로세스와는 달리 ..
JPA는 쿼리 메소드의 파라미터에 페이징과 정렬을 전달함으로써, 웹 서비스 개발에서 자주 사용되는 페이징 개발에 대한 편의성을 제공하고 있다.매개변수에 Pageable을 사용함으로써 아래와 같이 Page 또는 List 타입으로 반환하여 사용할 수 있다. 나는 개인적으로 Page로 리턴받아 처리를 했다.List 컬렉션에도 기본적으로 제공되는 기능도 많지만, Page에는 페이지 처리를 위한 다양한 기능을 제공하고 있다. 아래참고!실제 페이징 처리 예제를 통해 확인해보자! 예제코드는 Controller → Service → DB → Service → Domain → Controller → View 순서로 동작한다. Page findByName (String name, Pageable pageable);List..
1. Java 구현 package stream; import java.io.*; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringBuilder sb = new StringBuilder(); int t = Inte..