목록Programing/Spring Boot (37)
월루를 꿈꾸는 대학생
메뉴얼 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 타임리프 특징 서버 사이드 html 랜더링 ssr 네츄럴 템플릿 스프링 통합 지원 서버사이드 html 랜더링 타임리프는 백엔드 서버에서 html 동적으로 랜더링 네츄럴 템플릿 html 파일을 순수하게 유지하려고 함 = 파일만 열어도 안 깨짐 서버를 통해 뷰 템플릿을 동적으로 변경하고 값을 덮어씌워서 랜더링함 순수 html을 유지하면서 뷰 템플릿도 사용할 수 있는 것을 네츄럴 템플릿이라고 한다 스프링 통합 지원 스프링과 통합이 아주 잘 되어 있음 타임리프 기본 기능 타임리프 선언 기본 표현식 https://www.thymeleaf.org/doc/tutorials/3.0/usingthym..
요구사항 분석 상품 도메인 모델 상품 ID 상품명 가격 수량 상품 관리 기능 상품 목록 상품 상세 상품 등록 상품 수정 흰색 - 컨트롤러 검은색 -뷰 https://javacan.tistory.com/entry/what-is-a-domain-model @Data는 데이터모델에 쓰기엔 예측하지 못한 동작을 할 수 있기에 게터 ,세터 정도만 쓰는 것이 좋음 쓸려면 확인하고 쓰자 ! 레포지토리 작업 @Repository // 안에 @Component가 있으니 컴포넌트 스캔 public class ItemRepository { private static final Map store = new HashMap(); //static 사용 private static long sequence = 0L; //static ..
Welcome 페이지 Jar를 사용하면 /resources/static/index.html 위치를 기본 웰컴페이지로 인식함 로깅 간단히 알아보기 운영 시스템이는 println으로 정보를 출력하는 것이 아니라 별도 로깅라이브러리를 써서 로그를 남긴다 로깅 라이브러리 @RestController public class LogTestController { // 내 클래스를 지정 private final Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping("/log-test") public String logTest(){ String name = "Spring"; //보통 개발 할 때는 프린트로 로그를 남기면 수만 개 출력이 생기니까 안 됨 Sy..
스프링 MVC 전체 구조 그 전 공부했던 프레임워크 구조 ==스프링 프레임워크 == 동작 순서 핸들러 조회 : 핸들러 매핑을 통해 url에 매핑된 핸들러 = 컨트롤러 조회 핸들러 어댑터 조회 : 핸들러 실행할 어댑터를 조회 핸들러 어댑터 실행 : 핸들러 어댑터 실행 핸들러 실행 : 어뎁터가 핸들러=컨트롤러를 실행 ModelAndView 반환 : 핸들러 어댑터가 핸들러가 반환한 정보를 ModelAndView로 변환해서 보냄 viewReslover호출 : 뷰 리졸버를 찾고 실행 : 논리를 물리로 View반환 : 물리적 경로 기반으로 랜더링할 뷰를 반환한다 뷰 랜더링: 뷰를 받아서 랜더링함 비교 FrontController -> DispatcherServlet handlerMappingMap -> Handle..
프론트 컨트롤러 패턴 소개 일단 지금은 손수 다 만들고.... 나중에 스프링 mvc패턴까지 가서 mvc패턴을 깊게 이해해보자 공통 로직을 각각 처리 아무거나 다 들어올 수 있으니까 컨트롤러마다 공통로직을 도입했어야했다 = 중복 프론트 컨트롤러 도입 후 특징 프론트 컨트롤러 서블릿 하나로 클라언트 요청을 받음 (수문장) 이 프론트 컨트롤러가 알아서 요청에 맞는 컨트롤러로 토스함 입구를 하나로 만들어서 공통 처리를 중복되지 않도록 하여 유지보수가 쉽도록 프론트 컨트롤러 제외한 나머지 컨트롤러는 서블릿 필요없음 서블릿이라는 것은 http요청이 들어왔을 때 was서버가 req,resp 객체를 만들어서 서블릿 컨테이너에 등록된 서블릿에다가 던져 준 다음 서블릿이 그 요청에 맞는 로직을 실행하는 것이었음 근데 이 ..
회원관리 웹 애필리케이션 요구사항 그냥 회원정보에 이름과 나이를 넣고 저장 및 조회하는 기능을 구현한다! 지금은 그냥 자바로만! 스프링없으니까 싱글톤 보장도 안 되니까 싱글톤도 알아서 만든다 public class MemberRepository { private Map store = new HashMap(); private static long sequence = 0L; private static final MemberRepository instance = new MemberRepository(); public static MemberRepository getInstance(){ return instance; } // 생성자를 프라이빗으로 해줘야 밖에서 생성못함 private MemberRepositor..
서블릿 http 요청을 어떻게 받고 http응답을 어떻게 내려줄 것인지 개발자가 편하게 해주도록 서버에서 구현해준 것 프로젝트 생성 gradle lomnbok hello 서블릿 스프링 부트 서블릿 환경 구성 @SpringBootApplication @ServletComponentScan // 스프링이 내 패키지 하위부터 싹 훝어서 서블릿 자동등록 해줌 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } } /hello http요청이 오면 request, response 객체를 was에서 만들어주고 이걸 서블릿에 전달해줌 서..
웹은 http 기반이고 html, json , image 등 거의 모든 형태의 데이터 전송이 가능 서버간에 데이터 주고 받을 때도 http를 사용 웹서버 http 기반 동작 *정적 리소스 제공 * 정적 (파일) htmol , css , js , 이미지, 영상 등등 nginx , apache 웹 애플리케이션 WAS (Web Application Server) http 기반 동작 웹서버 기능 포함 + 정적 리소스 제공 프로그램 코드 실행해서 애플리케이션 로직 수행 -> 요청온 사용자마다 다르게 표현 가능 프로그래밍 할 수 있으니까 동적 html ,http api (json) 서블릿 , jsp , 스프링 mvc ex ) 톰캣 웹서버와 was 차이 웹서버는 정적 리소스 (파일) / was는 애플리케이션 로직 자..
보통 디폴트로 사용한 거는 싱글톤 스코프임 스프링 컨테이너 시작과 종료까지 함께한 친구 스코프 : 빈이 존재할 수 있는 범위 싱글톤 : 디폴트 , 시작과 종료를 함께하는 가장 넓은 범위 프로토 타입 : 빈 생성과 의존관계 주입까지만 하는 가장 짧은 범위 웹 관련 1. request : 웹 요청이 들어오고 나갈때 까지 유지 2. session : 웹 세션이 생성되고 종료될 때 까지 유지 3. application : 웹 서블릿 컨텍스트 같은 범위로 유지 프로토타입 스코프 프로토타입 스코프는 싱글톤과 다르게 조회할 때마다 새로운 인스턴스를 만들어서 반환해줌 클라이언트 요청 시점에 새로 프로토타입 빈 생성하고 의존관계 주입한다 그 후 클라이언트에 객체 주고 컨테이너에서는 지워버림 관리 x 핵심 : 컨테이너는 ..
빈 생명주기 콜백 시작 디비 커넥션 풀 (서버 올라올 때 미리 디비 연결시킴 - 요청올 때 바로 대응 가능 ), 네트워크 소켓처럼 미리 열어놔서 필요한 연결 미리 해두고 어플리케이션 종료 시점에 연결을 모두 종료하는 작업하려면 객체의 초기화와 종료 작업이 필요하다! 다음과 같은 예시로 어떻게 움직이는지 확인해보자 스프링 빈의 라이프 사이클 객체 생성 -> 의존관계 주입 일단 객체부터 만들어 놔야 그 다음에 의존관계 주입이 가능하지 (생성자 주입 예외) 스프링 빈은 객체를 생성하고 , 의존관계 주입 끝난 다음 필요한 데이터 사용 가능 초기화 : 객체에 필요한 값이 다 세팅되어 있는거 개발자가 의존관계 주입 완료 시점을 어떻게 알 수 있을까? 스프링 빈에게 콜백 메서드를 통해서 초기화 시점 알려줌 스프링 빈..