1. 개발 환경 (1) 개발 환경 개발도구 : Intellij IDEA Ultimate 2022.1 소스코드 관리 (형상 관리 / 버전 관리) : Git 2.36.1 : 변경사항을 쉽게 비교할 수 있으며, 롤백도 가능하다. Git 호스팅 : GitHub : 협업을 위한 공유를 위해 사용할 수 있다. Git GUI : GitKraken Pro 8.5.0 : CLI 이기 때문에 이해하기 어려운 것을 도와주는 역할을 한다. 깃헙과의 연동도 편리하다. free trail로 사용해도 실습에 문제없다. 2. Part2. 게시판 서비스 개발 목적 (1) 게시판 서비스 프로젝트의 목표 누구나 접하기 쉽고, 이해하기 쉬운 게시판 서비스로 명확한 기능 요구사항을 만든다. 개발하는 과정에서 도움이 되는 다양한 문서 작업을 ..
1. Reflection 힙 영역(메모리)에 로드되어 있는 클래스 타입의 객체를 통해 필드, 메소드, 생성자를 접근 제어자(private, public 등)와 상관없이 접근할 수 있도록 지원하는 API이다. 이미 로드되어 있는 클래스 타입의 객체(User)를 가져오는 방법은 세 가지가 있다. Class.class Instance.getClass() Class.forName() // 1 Class clazz1 = User.class; // 2 User user = new User("userid", "kim"); Class clazz3 = Class.forName("org.example.User"); JVM의 클래스 로더는 클래스 파일에 대한 로딩이 끝나면 클래스 타입의 객체를 생성하고, 메모리 힙 영역에 ..
1. DI (Dependency Injection) (1) 의존성(Dependency) 한 객체(A)가 다른 객체(B)를 사용하는 것을 의미한다. A->B 만약 B가 변경된다면 A에도 영향을 미친다. 즉 A는 B의 변화에 취약하다. 이를 개선하기 위해 인터페이스를 두어 서로의 결합도가 느슨해지도록 설계를 하기도 한다. (2) 의존성 주입(Dependency Injection / DI) 런타임 시 의존 관계를 맺는 대상을 외부(스프링 프레임워크)에서 결정하고 주입해 주는 것을 의미한다. 스프링 프레임워크는 DI 기능을 지원해 주는 프레임워크이다. (3) DI 장점 의존성 주입을 인터페이스 기반으로 설계하면, 느슨한 결합도(loose coupling)를 가질 수 있고, class 간의 결합도를 낮출 수 있으..
1. MVC 프레임워크 (1) 스프링 웹 MVC 프레임워크 구조 ①, ②, ③ 순서대로 프로세스가 진행된다. 요청이 들어오면 Dispatcher Servlet이 요청을 받아 Handler Mapping을 통해 적절한 핸들러(컨트롤러)를 찾아 보내게 된다. 핸들러는 view name을 return 한다. Dispatcher Servlet는 return 받은 view name을 가지고 View Resolver를 통해 View 객체를 return 받게 된다. 최종적으로 view render를 응답 값을 return 하게 된다. 2. MVC 프레임워크 실습 (1) 목표 DispatcherServlet AnnotationHandlerMapping HandlerAdapter ViewResolver (2) mvc-p..
1. 프런트 컨트롤러 단일 handler에서 모든 요청을 처리하는 패턴을 가진다. 즉, 중앙집중식 요청 처리 메커니즘이라 할 수 있다. 스프링 웹 MVC 프레임워크의 DispatcherServlet이 프런트 컨트롤러 패턴으로 구현되어 프런트 컨트롤러의 역할을 한다. 다시 말해, 요청이 들어오면 프런트 컨트롤러가 받아 적절한 컨트롤러에게 위임해준다. 2. Forward VS Redirect (1) Forward 서블릿에서 웹 브라우저(클라이언트)를 거치지 않고 바로 다른 서블릿에게 요청하는 방식으로 url 주소가 달라지지 않는다. 서버 내부에서 일어나는 요청이기 때문에 기존에 생성되었던 HttpServletRequest, HttpServletResponse 객체가 공유된다. // 기존의 객체 전달 Requ..
1. DBCP (1) DBCP (Database Connection Pool) 미리 여러개 DB 커넥션을 생성하여 하나의 풀에 저장해 두었다가 필요에 따라 풀에서 커넥션을 불러와 사용하는 기법이다. 스프링 부트 2.0 부터는 디폴트 커넥션 풀로 HikariCP가 설정되어 있다. DBCP 라이브러리 종류로는 HikariCP, 톰캣JDBC 등이 있다. (2) 커넥션 풀 사용 시 유의 사항 커넥션의 사용 주체는 WAS 스레드(HTTP 웹 서버에서 생성했던 스레드)이므로 커넥션의 개수는 WAS 스레드 수와 함께 고려해야 한다. 커넥션 수가 커질수록 메모리 소모가 커지지만, 동시 접속자 수가 많을 때에는 사용자 대기 시간이 감소하는 이점이 있다. 반대로 커넥션 수가 감소한다면 비례하여 메모리 소모가 감소하지만 사..
1. JDBC(Java Database Connectivity) 자바 애플리케이션에서 데이터베이스(DB) 프로그래밍을 할 수 있도록 도와주는 표준 인터페이스이다. 표준이기 때문에 DBMS 종류에 상관이 없다. JDBC 인터페이스들을 구현한 구현체들은 각 DB 벤더 사들이 제공해주며 이를 JDBC 드라이버라 한다. 자바 코드에서는 보통 JDBC 인터페이스에만 의존하기 때문에 DB가 바뀌더라도 코드를 수정이 필요 없다. 2. JDBC 실습 (1) 의존성 추가 implementation(‘com.zaxxer:HikariCP:5.0.1’) implementation(‘org.sptingframework:splitng-jdbc:5.3.22’) // assert testImplementation(‘org.asser..