본문 바로가기

Java/[패스트캠퍼스] 50일 포트폴리오 챌린지

(31)
[14일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) MVC vs. Spring MVC ① Dispatcher Servlet : 모든 요청을 Dispatcher Servlet이 받도록 한다. (직접 만든) MVC : HttpServlet를 상속받는다. Spring MVC : org.springframework.web.servlet; FrameworkServlet를 상속받는다. 결과적으로 HttpServlet를 상속받는다. FrameworkServlet > HttpServletBean > HttpServlet ② Handler Mapping : 적절한 Handler(Controller)를 선택한다. 유사 : service(Object handler) ↔ doDispatch(getHandler) : Handler를 반환하는 코드 유사 : service(Hand..
[13일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) DI(Dependency Injection) 의존성 주입 한 객체(A)가 다른 객체(B)를 사용할 때 "의존성이 있다"고 한다. A가 B를 의존한다. A -- B : 의존 대상(B)이 변경되면 A에게 영향을 미친다.(강한 결합) A -- Interface -- B : 의존 대상(B)의 변화에 영향을 덜 받게 된다.(느슨한 결합) 런타임 시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 주는 걸 의미한다. 스프링 프레임워크는 DI 기능을 지원하는 프레임워크이다. DI(Dependency Injection) 장점 코드의 유연 : 의존성 주입을 인터페이스 기반으로 설계한다. 변경의 유연 : 객체의 결합도가 낮으면 변경이 용이하고, 테스트하기 좋은 코드가 된다. 실습 : DI 프레임워크 만들기 Applica..
[12일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 스프링 웹 MVC 프레임워크 프로세스 흐름 ① 요청이 들어오게 되면 ② Dispatcher Servlet : 해당 요청을 받아 Handler Mapping을 통해 적절한 Handler(Controller)를 선택한다. ③ Handler Adapter : 적절한 Adapter를 통해 Handler(Controller)를 실행한다. ④ Controller : 해당하는 ViewName을 반환한다. ⑤ Dispatcher Servlet : View Resolver(ViewName)를 통해 View객체를 반환 받는다. ⑥ View Render를 통해 응답 값을 반환한다. 17. Web MVC framework (spring.io) 17. Web MVC framework @RequestMapping(method =..
[11일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 프런트 컨트롤러 패턴 모든 요청을 단일 handler(처리기)에서 처리하도록 하는 패턴 스프링 웹 MVC 프레임워크의 DispatcherServlet(프런트 컨트롤러 역할)이 프런트 컨트롤러 패턴으로 구현 됨. MVC 프레임워크를 만드는 기반 코드로 활용된다. 프런트 컨트롤러 실습 DispatcherServlet과 몇 가지 Controller를 만들어 모든 요청을 DispatcherServlet이 받아 적절한 Controller에게 위임한다. 의존성 설정 dependencies { // 임베디드 톰캣 implementation 'org.apache.tomcat.embed:tomcat-embed-core:8.5.42' implementation 'org.apache.tomcat.embed:tomcat-em..
[10일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) Reflection 힙 영역에 로드된 객체(클래스 타입)를 통해 필드/메소드/생성자를 접근 제어자에 상관 없이 사용 가능하도록 지원하는 API 런타임 시점에 동적으로 특정 클래스의 정보를 추출해 낼 수 있는 프로그래밍 기법이다. 주로 프레임워크 or 라이브러리 개발 시에 사용한다. https://www.baeldung.com/reflections-library Reflection을 사용하는 프레임워크 & 라이브러리 • Spring 프레임워크(예 : DI) • Test 프레임워크(예 : JUnit) • JSON Serialization/Deserialization 라이브러리(예 : Jackson) 등 요구사항 @Controller 애너테이션이 설정된 모든 클래스를 찾아 출력한다. 의존성 설정 depende..
[9일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) JDBC 프로그래밍 실습 프로젝트 생성 dependencies 설정 implementation('com.zaxxer:HikariCP:5.0.1') implementation('org.springframework:spring-jdbc:5.3.22') testImplementation('org.assertj:assertj-core:3.22.0') testImplementation('com.h2database:h2:2.1.214') 간단한 CRUD ① SetUp Method 생성 테스트 코드를 실행하기 전 수행해야 하는 작업을 작성한다(테이블 생성 or 초기 데이터 수행). sql 파일을 읽어 테이블을 생성한다. sql 파일을 실행한다.(이때, 데이터 소스도 함께 가져와야 한다.) ② 데이터 소스를 받아오기 ..
[8일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) Servlet 인터페이스 tomcat을 호출하기 위해 Servlet을 구현한 Servlet 인터페이스를 만든다.(호출 규약) Servlet 컨테이너가 Servlet 인터페이스의 메서드들을 호출한다. Servlet 인터페이스 메서드 메서드 종류 : 라이프 사이클 관련 메서드, 그 외 라이프 사이클 관련 메서드 init(), service(), destroy() init() : Servlet 컨테이너가 Servlet을 생성한 다음에 초기화 작업을 수행하기 위해 호출하는 메서드(처음 한 번만 호출) service() : Servlet 컨테이너가 클라이언트 요청이 들어올 때마다 호출하는 메서드 destroy() : Servlet 컨테이너가 종료될 때 호출하는 메서드(자원 해제) 그 외 getServletConf..
[7일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 계산기 웹 애플리케이션 요구사항 • Step1 : 사용자 요청을 메인 Thread가 처리하도록 한다. • Step2 : 사용자 요청이 들어올 때마다 Thread를 새로 생성해서 사용자 요청을 처리 하도록 한다. • Step3 : Thread Pool을 적용해 안정적인 서비스가 가능하도록 한다. 문제점 Step1 : 사용자 요청을 메인 Thread가 처리하도록 한다. 메인 Thread의 작업이 오래 걸리면 다음 요청이 메인 Thread가 끝날 때까지 기다려야 한다. Step2 : 사용자 요청이 들어올 때마다 Thread를 새로 생성해서 사용자 요청을 처리 하도록 한다. 동시 접속자의 수가 많아지면 많아질수록, 많은 쓰레드가 생성된다.(비용적인 측면, 성능 저하) 이로 인해 CPU Context Switch..