목록모든 글 (287)
개발자로 후회없는 삶 살기
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 검증 요구사항타입 검증 : 가격, 수량엔 숫자만 가능 필드 검증 : null 불가, 가격에 범위 검증, 수량 검증지금까지 만든 프로그램은 상품명을 입력 안해도 되고, 가격, 수량에 문자를 적으도 된다. 웹 서비스는 이러한 것을 모두 검증으로 막아야 한다. 검증 실패시 중요한 것은 고객의 편의성이다. 폼에 고객이 넣은 데이터 그대로 다시 보여줘야 한다. 기존 정보와 error 정보를 담아서 폼에 넣어야 한다. - 검증 하기컨트롤러에 검증 로직을 작성한다. 먼저 오류가 뜨면, 어떤 오류가 떴나 담는 객체가 필요하다. 검증 오류를 보관하는 Map을 만든다. 필드 별로 실패 정보를 담는다. -> 검증에 실패오류가 ..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- Http 요청 메세지(단순 텍스트)서블릿에서는 메세지 바디 데이터를 읽기 위해선 InputStream으로 바디 데이터를 스트림 데이터로 저장하고 인코딩하여 문자로 변환해야 한다. 스프링에서는 Http 바디에 있는 것을 원하는 포멧으로 바꿔주는 HttpMessageConverter가 동작한다. HttpEntity는 바디 정보를 편리하게 조회할 수 있는 객체이다. -> 개선http entity를 쓰는 것도 개선하여, requestbody가 제공된다. 이는 바디에서 데이터를 읽어서 문자로 바꿔버린다. HttpMessageConverter는 바디 데이터를 스트림으로 바이트 데이터를 받고 string으로 utf8로 ..
서론※ 과거에 기록한 내용에서 중요한 부분만 발췌하여 모두가 이해하기 쉽게 다시 서술한다. 본론- 스프링 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..
서론※ 아래 내용을 다룹니다.조인 원리종류 https://github.com/SangBeom-Hahn/boost-interview GitHub - SangBeom-Hahn/boost-interview: Naver BoostCamp 6기, AI 엔지니어 기반을 다지는 공간 🎇Naver BoostCamp 6기, AI 엔지니어 기반을 다지는 공간 🎇. Contribute to SangBeom-Hahn/boost-interview development by creating an account on GitHub.github.com 본론- 조인의 원리이너 조인, 아우터 조인 등 조인의 기반이 되는 원리를 알아보자. 1. 중첩 루프 조인1) 선행 테이블의 모든 행을 순차적으로 조회2) 각 행마다 두 번째 테이블의..