DBCP DBCP는 DataBase Connection Pool. 즉, DB와 연결을 맺어놓은 것들이 쌓여있는 곳이라고 할 수 있다. 보통 Application과 DB는 TCP 통신을 이용하여 연결을 하게 되는데 TCP 연결은 3-way hand shaking이 필요하기 때문에 시간과 자원이 많이 소모된다. Application으로 client 요청이 하나가 오더라도 DB로의 접근은 여러 번이 될 수 있기 때문에 매번 요청이 올 때마다 DB connection을 맺는 것은 좋은 방법이 아니다. 그래서 application이 실행될 때 DB와 미리 여러 개의 connection을 맺어두고 DB에 접근할 일이 생기면 pool에서 connection을 가져와서 사용하고 다시 connection을 반납하는 구조..
equals()와 hashCode() 는 객체 간의 비교를 위한 Object 클래스의 함수이다. 이 함수들은 Object를 구현한 객체 즉, 자바의 모든 클래스에서 상속하고 있다. equals() equals() 함수는 기본적으로 == 연산자를 사용하여 비교를 한다. 이는 객체 내부의 값을 비교하는게 아니라 객체가 저장된 메모리 위치를 비교하는 것과 같다. /** Indicates whether some other object is "equal to" this one. ... */ public class Object { ... public boolean equals(Object obj) { return (this == obj); } ... } 단순 객체의 주소를 비교하려면 == 연산자를 사용하면 되지만 ..
람다식 람다식은 익명 함수를 생성하기 위한 것으로 자바8 부터 등장하게 되었습니다. 객체 지향 언어인 자바에서 함수 지향에 가까운 람다식을 사용할 수 있게 된 것이죠. 람다식을 사용할 때의 장점은 코드가 간결해지고, 함수형 프로그래밍의 이점을 가져올 수 있기 때문입니다. 사용 이유가 가장 중요하기 때문에 함수형 프로그래밍을 조금 알아보고 갈까요? Functional Programming is programming without assignment satements 클린코드 책에서는 함수형 프로그래밍을 이렇게 정의하고 있습니다. 즉 대입문이 없는 프로그래밍이라는 것인데요. 자바처럼 객체 지향, 명령형 프로그래밍에서는 함수에 값을 대입할 수 있습니다. 그렇기 때문에 대입되는 값에 따라 전혀 다른 결과가 나오..
배열이란? 배열은 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료 구조를 나타낸다 Array와 ArrayList 모두 index로 데이터를 관리하는 선형적인 구조의 자료 구조로 index를 통해 데이터에 접근할 수 있다는 공통점이 있습니다. 하지만 둘은 다른 특징을 가지고 있습니다. Array는 선언 시 크기를 정해주어 크기가 변하지 않는 Fixed-sized Array 입니다. 반면, ArrayList는 크기가 정해져 있지 않아 데이터가 추가되면 동적으로 크기가 늘어나는 Dynamically sized Array입니다. ArrayList를 살펴보면 초기 사이즈는 10으로 정해져 있고 배열의 크기에 따라 Capacity 변수가 늘어나며 배열의 크기를 동적으로 변경하게 됩니다 public clas..
프로세스란? 컴퓨터에서 연속적으로 실행되고 있는 프로그램으로 하나의 작업 단위 여기서 프로그램이란 실행되기 위해 하드디스크나 SSD 등 보조장치에 저장되어 있는 코드 묶음(바이너리 형식)을 얘기합니다. 이 프로그램이 OS에 의해 메모리를 할당받아 메모리에 올라가게 되면 하나의 프로세스라고 볼 수 있습니다. 여러 개의 프로세스가 동시에 동작할 수 있을까? 정답은 '없다'입니다. 우리는 컴퓨터를 사용할 때 자연스럽게 여러 개의 프로그램을 동시에 사용합니다. 그럼 이러한 작업은 어떻게 이루어지는 것일까요? 결론부터 얘기하자면 우리가 알아차리지 못할만큼 빠르게 여러 개의 프로세스를 작업 공간에 올렸다 내렸다 하면서 프로그램들을 실행하기 때문입니다. 이러한 과정이 워낙 짧은 순간에 이루어지다 보니 동시에 여러 개..
99일간의 항해 7주차 클론 프로젝트 주 클론 프로젝트주가 끝났다. 우리조는 인스타그램을 클론 코딩하기로 했다. 아쉬웠던 점은 지난주는 팀원이 5명이었고 프론트 개발자가 3명이었는데 이번주는 팀원 4명에 프론트 개발자분들이 2명이었다. 거기에다가 지난주에 재정비반에 계셨던 분들이 들어오셔서 그분들은 아직 프론트와 백엔드 협업이 낯설어서 시간이 조금 걸렸다. 그래서 지난주에 이번주는 더 깊은 기술을 하도록 발전시켜보고 싶었지만 아쉽게도 지난주보다 스코프가 줄어들게 되었다. 이번주에는 수정, 삭제 기능도 없어서 관심을 쏟을 곳이 무엇이 있을까하다가 DB설계에 더 신경을 써보기로 했다. 최근에 듣기 시작한 JPA 강의를 듣고 또 모르는 부분은 다시 찾아보고 검색하면서 관계형 DB와 ORM에 대해서 확실히 익힐..
99일간의 항해 6주차 미니 프로젝트 주 이번주는 미니 프로젝트를 진행하였다. 처음으로 프론트와 백엔드가 나뉘어져 협업을 진행하여서 무척 기대가 되었던 주였다. 처음으로 팀장이 되어서 처음에는 조금 부담스럽기도 했지만 팀원들이 워낙 활발하고 얘기도 잘 들어주어서 팀장하기 정말 좋은 팀이었고, 조금씩 리드를 하면서 리더의 경험도 쌓을 수 있었다. 우리 팀의 주제는 반려견 예약 플랫폼으로 정하였다. 앱 형식으로 만들었고, 병원 진료과목을 카테고리화해서 쉽게 확인할 수 있고, 예약 기능, 리뷰 기능, 평가 기능 정도를 추가하였다. 프론트 3명에 백엔드 2명으로 팀이 이루어졌는데 나는 그 중에서 백엔드 로그인 부분을 제외한 병원 목록, 예약 기능, 리뷰 기능, 평가 기능 등을 맡아서 구현하였다. 기존에는 혼자 ..
HTTP(HyperText Transfer Protocol) 클라이언트-서버 사이에 이루어지는 요청, 응답 프로토콜로 텍스트 기반의 통신 규약이라고 할 수 있다. 앞서 알아본 TCP/IP를 이용한다. (HTTP3 경우는 UDP 사용) 특징 1. 무상태 프로토콜(Stateless) - 서버가 클라이언트의 상태를 보존하지 않는다. -> 클라이언트의 상태를 보존하지 않기 때문에 서버가 증설되어도 요청을 똑같이 처리해준다. 확장성이 크다! - 상태 유지가 필요한 경우에는 최소한만 사용하고, 꼭 필요한 경우에는 쿠키/세션을 사용하여 상태를 유지한다. 2. 비연결성(Connectionless) - 연결 후 연결을 지속하지 않고 끊어버린다. -> 최소한의 서버 자원을 사용할 수 있다. - 연결을 할때 마다 연결을 확..