Http (HyperText Transfer Protocol) HyperText: html http 메시지에 모든 것을 전송 http의 역사 기반 프로토콜 http 특징 Client Server 구조 Stateful & Stateless 무상태 프로토콜 (Stateless) 상태 유지 (Stateful) 서버가 클라이언트의 이전 상태(문맥 context)를 보존 -> Stateful 상태에서 점원이 중간에 바뀌는 경우 무상태 (Stateless) 점원에게 필요한 정보를 그때그때 넘겨줌 -> 점원이 바뀌어도 문제가 발생하지 않음 클라이언트에서 필요한 정보를 데이터에 담아 넘겨주기 때문에 서버가 중간에 바뀌어도 문제가 발생하지 않는다. Stateful vs Sateless Stateful 항상 같은 서버가 ..
분류 전체보기
URI Uniform: 리소스를 식별하는 통일된 방식 Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier: 다른 항목과 구분하는데 필요한 정보 URL: Uniform Resource Locator -> 리소스가 있는 위치를 지정 URN: Uniform Resource Name -> 리소스에 이름을 부여 -> 위치는 변할 수 있지만 이름은 변하지 않는다. URN 이름만으로 실제 리소스를 찾을 수 있는 방법은 보편화되지 않음(거의 URL을 사용) schme 주로 프로토콜 사용 프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙 ex) http(80 포트), https(443 포트), ftp 등 포트는 생략 가능 https는 http에 강력한 보안 추가 use..
인터넷 통신 IP (인터넷 프로토콜) 인터넷 프로토콜의 역할 지정한 IP 주소(IP Address)에 데이터 전달 패킷이라는 통신 단위로 데이터 전달 IP 프로토콜의 한계 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 비신뢰성: 중간에 패킷이 사라지거나 순서대로 안 오는 경우 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우 -> 이런 문제를 해결하기 위해 TCP, UDP를 입혀서 사용 TCP & UDP 패킷: 수하물 덩어리 TCP TCP 특징 전송 제어 프로토콜 연결지향 - TCP 3 way handshake(가상 연결) 데이터 전달 보증: 패킷이 유실되는 경우 알려줌 순서 보장: TCP 패킷에 순서 정보가 있기 때문에 가능 신뢰할 수 있는 프..
AOP가 필요한 상황 모든 메소드의 실행 시간을 측정하고 싶을 때 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간 측정하고 싶을 때 모든 메소드의 실행시간 측정 MemberService.java // 회원가입 (중복 이름 불가) public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMember(member); // 중복 이름 체크 repository.save(member); return member.getId(); } finally { long finish = System.currentTimeMi..
GROUP BY GROUP BY절은 선택된 열의 값이 같은 행끼리 그룹화하는 데 사용된다. 이를 통해 특정 열의 값에 따른 집계 함수의 결과를 계산할 수 있다. -> COUNT, AVG, SUM, MIN, MAX 등 AVG 예제 SELECT Subject, AVG(Score) as AverageScore FROM StudentGrades GROUP BY Subject; 과목 별 평균 점수를 계산하는 쿼리 또한, 여러 열을 동시에 그룹화하는 것도 가능하다. SELECT Subject, Gender, AVG(Score) as AverageScore FROM StudentGrades GROUP BY Subject, Gender; 과목과 성별이 동일한 행끼리 그룹화되고, 각 그룹의 평균 점수를 계산하는 쿼리 H..
JOIN vs UNION ALL JOIN과 UNION은 모두 두 개 이상의 테이블을 합칠 때 사용되지만, 사용 방식과 결과가 다르다. JOIN JOIN은 기본적으로 두 테이블에서 공통된 값을 기준으로 행을 합친다. 테이블 사이에 관계를 설정하고, 그 관계를 기반으로 테이블을 합치려는 경우 주로 사용된다. -> ex) 고객 테이블과 주문 테이블 UNION ALL 두 개 이상의 SELECT문 결과를 단순히 위아래로 합친다. 두 테이블이 동일한 열 구조(Column의 갯수와 타입)를 가지고 있으며, 모든 행을 하나의 테이블로 합치려는 경우 주로 사용된다. 아래의 아이스크림 예제의 경우 FIRST_HALF와 JULY 테이블이 동일한 열 구조(FLAVOR, TOTAL_ORDER를 포함)를 가지고 있기 때문에 두 ..
프로그래머스 MySQL 문제를 풀던 중, 학원에서 배웠던 서브 쿼리가 잘 기억나지 않아 다시 정리해보려 한다. SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE ORDER BY FAVORITES DESC; 처음에 이렇게 쿼리를 짰으나 오답이라고 나온다. SQL에서 Group By 절은 MAX와 같은 집계 함수를 이용할 때 특정 그룹을 기준으로 수행하는데, Group By 절은 선택한 모든 컬럼에 적용되어야 한다. 즉, 쿼리에서 REST_ID와 REST_NAME을 Group By 절에 포함시키지 않았기 때문에 오류가 발생한 것이다. 또한, MAX(FAVORITES)를 이용하면 가장 많이 즐겨찾기 된 수..
H2DB를 이용할 건데 이미 설치되어 있어서 등록부터 진행하겠다. test2라는 이름으로 데이터 베이스를 등록하고 이후 사용을 할 땐 충돌의 위험이 있으니 아래와 같이 url을 변경한 뒤 사용한다. (파일에 직접 접근하는 게 아닌 톰캣을 통해서 접근하게 됨) jdbc:h2:tcp://localhost/~/test2 member 테이블 생성 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) ) drop table if exists member CASCADE; create table member ( id bigi..