목록[백엔드] (121)
개발자로 후회없는 삶 살기
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 스프링 MVC 전체 구조Dispatcher Servlet : 프론트 컨트롤러Handler Mapping : 핸들러를 보관하는 맵 - 디스패쳐 서블릿 구조 살펴보기스프링도 프론트 컨트롤러 패턴을 사용한다. HttpServlet을 상속 받고, urlPattens를 "/'로 모든 요청을 받는다. -> 요청 흐름디스패쳐 핸들러의 doDispatch 메서드에서 핸들러 매핑을 찾고 핸들러 매핑을 인자로 핸들러 어댑터를 찾는다. get 메서드 내부를 보면 for문으로 support 메서드로 해당 핸들러를 처리할 수있는 어댑터를 찾는다. 어댑터는 support 메서드를 가지고 handle로 컨트롤러를 호출한다. -> 스프..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 웹 서버http를 기반으로 정적 리소스를 반환하는 역할을 한다. static 폴더에 정적 리소스(html, css, 이미지)를 넣어두면 웹 서버가 반환한다. 웹 서버에는 nginx, 아파치가 있다. - 웹 어플리케이션http 기반으로 동작하며 웹 서버 기능을 대부분 포함하다. 큰 차이는 프로그램 코드를 실행해서 어플리케이션 로직을 수행할 수 있다는 것으로 웹 서버는 정적인 파일을 주는 것이기 때문에 html을 특정 사용자마다 다르게 보여줄 수 없는데 WAS는 http 요청이 오면 로직을 수행하여 다른 화면을 보여줄 수 있다. - 웹 시스템 구성웹 서비스에서는 최소한 was와 db 2개가 필요하다. was는 ..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 빈 생명주기 콜백빈이 생성되거나 죽기 직전에 스프링이 빈 안에 있는 메서드를 호출해줄 수 있는 기능이다. 빈이 처음 등록되면서 생성될 때, 초기화할 때 호출되고 빈이 사라지기 직전에 안전하게 종료할 수 있는 메서드를 호출하는 내용이다. 3가지 방식이 있다. => 예제서버가 뜰 때 미리 외부 네트워크와 연결을 하고 내려갈 때 미리 연결을 끊어야하는 서버가 있어야 한다고 해보자. 어플 시작 시점에 connect()를 호출하여 미리 연결을 맺어 두어야하고 종료할 때 discount()를 호출해서 연결을 끊어야한다. public class NetworkClient { private String url; ..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 다양한 의존 관계 주입 방법1. 생성자 주입빈에 등록하기 위해 생성자를 호출할 때, @Autowired가 있으면 생성자의 인자의 타입에 해당하는 스프링 빈을 컨테이너에서 찾아서 주입한다. 1) 생성자 호출 시점에 딱 1번만 호출되고 변하지 않은 불변 의존관계를 보장하고자 할 때 사용 2) 생성자가 하나면 autowired 생략 가능3) 빈 등록과 의존 관계가 동시에 일어남 2. 세터 주입set 메서드에 autowired를 붙이면 된다. 재대입으로 인해, final을 제거해야 한다. 빈을 등록하는 단계와 의존 관계를 주입하는 단계가 나뉘어져 있고 빈을 전체 한 번에 다 생성하고 주입을 하는 순서이다. 3. 필..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 화면 동작 원리웹 어플리케이션에서 첫 진입점은 컨트롤러이다. 도메인/URL로 요청이 오면 매칭되는 메서드를 호출한다. 웹 브라우저에서 요청을 하면, 내장 톰켓이 받고, 스프링으로 전달하여 요청에 매칭되는 메서드를 찾고 실행시킨다. 1) 스프링 프론트 컨트롤러에서 해당 메서드를 실행2) 인자로 Model을 넣어주고 addAttribute로 키-벨류 형태로 저장3) 뷰 리졸버가 반환형에 명시된 파일명으로 주소를 만듦4) 브라우저에게 template 폴더에 있는 html을 반환반환된 문자열은 논리적 주소일 뿐이며, 이를 뷰 리졸버가 물리 주소로 변환하여 html을 찾고 브라우저에게 반환한다. resources:t..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 실행 계획DBMS가 실행을 할 때 어떻게 쿼리가 실행되는지 분석한 것을 보여주는 것으로 실행 계획을 함으로써 적절한 인덱스를 선택할 수 있다. type은 위에서 부터 조회 속도가 빠른 순이다. 개발자는 ALL을 없애는 방향으로 개발하면 된다. - pk로 검색first name은 중복 가능한 컬럼이라 데이터를 찾고 또 다음 행을 찾는 full scan을 하는데 중복을 불허한 컬럼은 검색할 데이터 1개를 찾고 바로 끝내서 매우 빠르다. 이 처럼 중복을 불허한 컬럼으로 인덱스를 생성하고 단 1건 검색하면 실행 계획 const를 사용한다. pk 검색이 가장 빠르고 일반적으로 pk 검색이 가장 좋다. - UQ로 검색..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- JVM, JDK, JRE, JAR 구분1. JVM자바 바이트 코드를 어떻게 실행할 지에 대한 표준 스펙으로 바이트 코드를 OS에 특화된 코드로(기계어) 변환하고 실행하는 것의 표준이고 구현체이다. class 파일을 열어보면 바이트 코드를 디컴파일해서 보기 좋게 만들어 준다. JVM이 바이트 코드를 Mac, Window에 맞는 머신 코드로 변경한 후(기계어) 실행하는 것이다. 이외에도, 클래스 로드, 메모리에 로드하고 실행하는 자바를 사용하는 개발자를 위한 OS 인터페이스라고 볼 수 있다. 하는 일이 물리 컴퓨터의 OS와 비슷하다. ※ 바이트 코드 : java 파일을 컴파일해서 생긴 class 파일 안에 들어..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다.자바의 데이터 형식Arrays, Collections 클래스본론- 자바의 데이터 형식1. List : 데이터의 중복을 허용하는 순서가 있는 데이터 집합2. Set : 데이터의 중복을 허용하지 않고, 순서가 없는 데이터 집합, List와 Set은 상위에 공통 기능을 가지는 Collection 인터페이스를 가짐3. Map : 키-벨류 쌍의 데이터 집합, 상위에 Collection 인터페이스가 없음 🚨 컬랙션에서 동기화란?Arraylist와 Vector, HashTable과 HashMap은 동일한 기능을 제공하는 것처럼 보이나, 동기화 지원 여부라는 차이가 있다. -> HashTable의 Putsynchronized 키..