전체 글
-
[스프링MVC - 1편] 스프링 MVC 시작스프링&스프링부트 2025. 1. 27. 14:15
스프링 MVC - 시작하기@RequestMapping스프링은 애노테이션을 활용한 매우 유연하고, 실용적인 컨트롤러를 만들었는데 이것이 바로 @RequestMapping 애노테이션을 사용하는 컨트롤러이다RequestMappingHandlerMappingRequestMappingHandlerAdapter 1. SpringMemberFormControllerV1 - 회원 등록 폼@Controllerpublic class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process() { return new ModelAndView("new-form");..
-
[스프링MVC - 1편] 스프링 MVC 전체 구조스프링&스프링부트 2025. 1. 27. 13:15
SpringMVC 구조 DispatcherServlet 구조 살펴보기- org.springframework.web.servlet.DispatcherServlet스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있다스프링 MVC의 프론트 컨트롤러가 바로 디스패처 서블릿(DispatcherServlet)이다그리고 이 디스패처 서블릿이 바로 스프링 MVC의 핵심이다 요청 흐름서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출된다스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버라이드 해두었다FrameworkServlet.service()` 를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDi..
-
Enum, Java Stream API업무 2025. 1. 21. 15:18
간단히 공부해 본 적 있는 Enum을 실무에서 사용하려고 하니 많이 헷갈렸다단순히 Enum을 사용하게 된다면 타입 안정성 향상, 데이터 일관성의 장점이 있다는 것과간단한 예제만 만들어 봤으니 당연할 수밖에? @Slf4j@Servicepublic class TestService{ ``` public enum SttlCd { INCOME00, // 100 INCOME01, // 101 INCOME02, // 102 } ``` public List getTestBrdn() { ``` if (SttlCd.INCOME00.equals(TestDto.getTestCd())) { ``` } `..
-
pull patch 한 번에 뜰 때, commit 오류업무 2025. 1. 13. 19:14
(사진)소스트리에서 작업을 하다 보면 (아마도...?) 같은 브랜치에서 두 명이 동시에 작업을 할 때 pull과 push가 동시에 생기며 commit도 아무것도 불가한 상태가 종종 발생했다또한 급하게 업무를 처리하다보니 패치 풀을 받지 않고 커밋을 했을 때도 비슷한 오류가 발생했다이런 경우 다른 브랜치로 이동도 안되며 커밋으로 올려둔 작업물 또한 커밋이 안된다그동안은 시니어분께 부탁드려 브랜치를 다시 따는 방식으로 진행했는데 매번 부탁드리기 어려우니...실무에서 사용하는 소스트리라 구글링한 결과를 마음대로 해볼 수 없는 어려움이 있어 그나마 안전하게 충돌을 없앨 수 있는 방법을 찾았다 ( 해결 방안 )1. 새 브랜치를 만들어 자동으로 작업 공간을 이동한다2. 커밋으로 올렸지만 오류로 인해 제대로 커밋되..
-
[스프링MVC - 1편] MVC 프레임워크 만들기 (4)스프링&스프링부트 2025. 1. 12. 19:46
유연한 컨트롤러1 - v5어댑터 패턴지금까지 우리가 개발한 프론트 컨트롤러는 한가지 방식의 컨트롤러 인터페이스만 사용할 수 있다ControllerV3, ControllerV4는 완전히 다른 인터페이스이며 호환이 불가능하다어댑터 패턴을 사용해서 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 변경한다 V5 구조핸들러 어댑터 : 중간에 어댑터 역할을 하는 어댑터가 추가되었는데 이름이 핸들러 어댑터이다 여기서 어댑터 역할을 해주는 덕분에 다양한 종류의 컨트롤러를 호출할 수 있다핸들러 : 컨트롤러의 이름을 더 넓은 범위인 핸들러로 변경했다 그 이유는 이제 어댑터가 있기 때문에 꼭 컨트롤러의 개념 뿐만 아니라 어떠한 것이든 해당하는 종류의 어댑터만 있으면 다 처리할 수 있기 때문이다 1. MyHa..
-
[스프링부트/intelliJ] Unable to start embedded Tomcaterror 2025. 1. 12. 18:38
잘 돌아가던 프로그램이 controller를 추가하니 작동하지 않았다"unable to start embedded Tomcat"이라는 문구가 떴는데 찾아보니 다음과 같은 간단한 실수로 인해 발생하는 오류였다 해당 오류는 스프링부트 내장 톰캣이 서버를 시작하려고 할 때 설정이나 의존성 충돌에서 문제가 생겨 발생할 수 있다따라서 포트 번호 충돌 확인 / 의존성 충동 체크 / 서블릿 매핑 오류 확인 등을 확인하면 된다 나의 경우 서블릿 매핑 오류가 원인이었다@WebServlet 어노테이션을 사용한 URL 매핑을 다시 확인하니 / 가 빠져있었고 해당 부분을 수정하니 다시 잘 작동함을 확인했다
-
[스프링MVC - 1편] MVC 프레임워크 만들기 (3)스프링&스프링부트 2025. 1. 12. 18:28
단순하고 실용적인 컨트롤러 - V4v3 컨트롤러는 서블릿 종속성을 제거하고 뷰 경로의 중복을 제거하는 등, 잘 설계된 컨트롤러이다그런데 실제 컨트톨러 인터페이스를 구현하는 개발자 입장에서 보면, 항상 ModelView 객체를 생성하고 반환해야 하는 부분이조금은 번거롭다좋은 프레임워크는 아키텍처도 중요하지만, 그와 더불어 실제 개발하는 개발자가 단순하고 편리하게 사용할 수있어야 한다소위 실용성이 있어야 한다이번에는 v3를 조금 변경해서 실제 구현하는 개발자들이 매우 편리하게 개발할 수 있는 v4 버전을 개발한다 V4 구조 1. ControllerV4public interface ControllerV4 { String process(Map paramMap, Map model);} 2. Member..
-
[스프링MVC - 1편] MVC 프레임워크 만들기 (2)스프링&스프링부트 2025. 1. 12. 14:21
Model 추가 - v3서블릿 종속성 제거컨트롤러 입장에서 HttpServletRequest, HttpServletResponse이 꼭 필요할까?요청 파라미터 정보는 자바의 Map으로 대신 넘기도록 하면 지금 구조에서는 컨트롤러가 서블릿 기술을 몰라도 동작할 수 있다그리고 request 객체를 Model로 사용하는 대신에 별도의 Model 객체를 만들어서 반환하면 된다현재 구현하는 컨트롤러가 서블릿 기술을 전혀 사용하지 않도록 변경한다 뷰 이름 중복 제거컨트롤러에서 지정하는 뷰 이름에 중복된다컨트롤러는 뷰의 논리 이름을 반환하고, 실제 물리 위치의 이름은 프론트 컨트롤러에서 처리하도록 단순화한다이렇게 해두면 향후 뷰의 폴더 위치가 함께 이동해도 프론트 컨트롤러만 고치면 된다/WEB-INF/views/n..