분류 전체보기
-
[스프링MVC - 1편] MVC 프레임워크 만들기 (1)스프링&스프링부트 2025. 1. 12. 13:27
프론트 컨트롤러 패턴 소개프론트 컨트롤러 도입 전 프론트 컨트롤러 도입 후 FrontController 패턴 특징프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출입구를 하나로공통 처리 가능프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 스프링 웹 MVC와 프론트 컨트롤러스프링 웹 MVC의 핵심도 바로 FrontController이다스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있다 프론트 컨트롤러 도입 - v1[V1 구조 ] 1. ControllerV1public interface ControllerV1 { void process(HttpServletRequ..
-
[스프링MVC - 1편] MVC 패턴 적용, 한계스프링&스프링부트 2025. 1. 12. 12:11
MVC 패턴 - 적용서블릿을 컨트롤러로 사용하고, JSP를 뷰로 사용해서 MVC 패턴을 적용한다Model은 HttpServletRequest 객체를 사용한다request는 내부에 데이터 저장소를 가지고 있는데, request.setAttribute(), request.getAttribute()를 사용하면 데이터를 보관하고 조회할 수 있다 회원 등록 폼 - 컨트롤러@WebServlet(name="mvcMemberFormServlet", urlPatterns="/servlet-mvc/members/new-form")public class MvcMemberFormServlet extends HttpServlet { @Override protected void service(HttpServletRe..
-
[스프링MVC - 1편] MVC 패턴 개요스프링&스프링부트 2025. 1. 11. 18:56
MVC 패턴 개요너무 많은 역할하나의 서블릿이나 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 되면, 너무 많은 역할을하게 되고 결과적으로 유지보수가 어려워진다변경의 라이프 사이클변경의 라이프 사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수하기 좋지 않다기능 특화JSP 같은 뷰 템플릿은 화면을 렌더링 하는데 최적화되어 있기 때문에 이 부분의 업무만 담당하는 것이 좋다 Model View Controller- 컨트롤러 : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다- 모델 : 뷰에 출력할 데이터를 담아둔다 뷰가 필요한 데이터를 모두 모델에 담아서전달해 주는덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰..
-
[스프링MVC - 1편] JSP 회원관리 웹 애플리케이션 만들기스프링&스프링부트 2025. 1. 11. 15:12
1. JSP 라이브러리 추가dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // JSP 추가 시작 i..
-
[mac/스프링부트/intelliJ] .../.gradle/caches/8.11.1/groovy-dsl/ee4b830a1c754b6f6cc2bbd9b43341fb/metadata.bin (No such file or directory)error 2025. 1. 11. 13:53
평소에 잘 실행되던 프로젝트가 갑자기 gradle 빌드되지 않았다 맥북 기준 숨겨진 폴더 찾기 > finder에서 command+shift+g > .gradle 검색 사용자명 > .gradle > caches > 8.11.1 > dependencies-accessors"dependencies-accessors" 해당 폴더 삭제 후 intelliJ 재실행하면 프로젝트가 정상 reload된다
-
[스프링MVC - 1편] 회원관리 웹 애플리케이션 구현스프링&스프링부트 2025. 1. 5. 12:46
[ 서블릿 > JSP > MVC 패턴으로 구현 ] 회원 도메인 모델@Getter @Setterpublic class Member { private Long id; private String username; private int age; public Member(){ } public Member(String username, int age) { this.username = username; this.age = age; }}// 동시성 문제가 고려되어 있지 않음, 실무에선 ConcurrentHashMap, AtomicLong 사용 고려public class MemberRepository { private static Map store =..
-
[스프링MVC - 1편] HTTPServletResponse스프링&스프링부트 2025. 1. 5. 12:20
HTTPServletResponse 역할HTTP 응답 메세지 생성HTTP 응답 코드 지정헤더 생성바디 생성편의기능 제공Content-Type, 쿠키, Redirect HTTPServletResponse - 기본 사용법@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")public class ResponseHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ..
-
[스프링MVC - 1편] HTTP 요청 데이터스프링&스프링부트 2025. 1. 2. 20:08
HTTP 요청 데이터 개요HTTP 요청 메세지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 3가지GET - 쿼리 파라미터/url**?username=hello&age=20**메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달예) 검색, 필터, 페이징등에서 많이 사용하는 방식POST - HTML Formcontent-type: application/x-www-form-urlencoded메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20예) 회원 가입, 상품 주문, HTML Form 사용HTTP message body에 데이터를 직접 담아서 요청HTTP API에서 주로 사용, JSON, XML, TEXT데이터 형식은 주로 JSON 사용POST, PUT, ..