StudyRepository
728x90
article thumbnail
Model 추가
Spring 2023. 5. 29. 20:54

서블릿 종속성 제거 컨트롤러 입장에서 HttpServletRequest, HttpServletResponse이 꼭 필요할까? 요청 파라미터 정보는 자바의 Map으로 대신 넘기도록 하면 지금 구조에서는 컨트롤러가 서블릿 기술을 몰라도 동작할 수 있다. 그리고 request 객체를 Model로 사용하는 대신에 별도의 Model 객체를 만들어서 반환하면 된다. 우리가 구현하는 컨트롤러가 서블릿 기술을 전혀 사용하지 않도록 변경해보자. 이렇게 하면 구현 코드도 매우 단순해지고, 테스트 코드 작성이 쉽다. 뷰 이름 중복 제거 컨트롤러에서 지정하는 뷰 이름에 중복이 있는 것을 확인할 수 있다. 컨트롤러는 뷰의 논리 이름을 반환하고, 실제 물리 위치의 이름은 프론트 컨트롤러에서 처리하도록 단순화 하자. 이렇게 해두면..

article thumbnail
View 분리
Spring 2023. 5. 29. 19:05

모든 컨트롤러에서 뷰로 이동하는 부분에 중복이 있고, 깔끔하지 않다. String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); 이 부분을 깔끔하게 분리하기 위해 별도로 뷰를 처리하는 객체를 만들자. http://localhost:8080/front-controller/v2/members/new-form 위의 주소가 들어오면 아래의 서블릿이 호출이 된다. @WebServlet(name = "FrontControllerServletV2", urlPatterns = "/front-con..

article thumbnail
FrontController 패턴
Spring 2023. 5. 29. 18:25

본격적으로 스프링 웹 MVC를 공부하기 전에 스프링 웹 MVC의 핵심인 FrontController에 대해 알아보자 FrontController 패턴 특징 1. 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 2. 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 3. 입구를 하나로 4. 공통 처리 가능 5. 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 프론트 컨트롤러 도입 - v1 1. 클라이언트가 HTTP요청을 한다. 2. Front Conrtoller가 그 요청을 받아, HTTP요청에서 매핑된 정보를 매핑 정보에서 찾는다. 3. 매핑 정보에서 찾을 Controller를 호출한다. 4. Controller에서 View(JSP)로 forward한다. 5. JSP가 ..

article thumbnail
MVC 패턴
Spring 2023. 5. 29. 15:02

MVC는 1.Model 2. View 3. Controller 의 약자이다. 컨트롤러: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. 모델: 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다. 뷰: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다. 우리는 외부에서 직접 JSP에 접근할 수 없도록 설계를 해야한다(보안문제) WEB-INF > 이 경로안에 JSP가 있으면 외부에서 직접 JSP를 호출할 수 없다. 우리가 기대하는 것은 항..

article thumbnail
관심사의 분리
Spring 2023. 5. 9. 21:05

OrderService의 할인정책을 위한 코드 public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository(); private DiscountPolicy discountPolicy; @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice..

A star pathfinder
인공지능 2023. 5. 9. 20:51

https://github.com/nexmin0805/A_star_Pathfinder GitHub - nexmin0805/A_star_Pathfinder Contribute to nexmin0805/A_star_Pathfinder development by creating an account on GitHub. github.com 이 코드는 A* 경로 찾기 알고리즘을 시각화하는 프로그램입니다. Pygame 라이브러리를 사용하여 그래픽 사용자 인터페이스를 구현하였습니다. 이 프로그램은 사용자가 장애물을 생성하거나 랜덤하게 생성할 수 있고, 마우스를 드래그하여 시작점 및 도착점을 설정할 수 있게 해주며, 두 가지 휴리스틱 방식(맨하탄 거리, 유클리드 거리) 중 하나를 선택하여 A* 알고리즘을 실행할 수 있습..

SOLID(좋은 객체 지향 설계의 5가지 원칙)
Spring 2023. 5. 4. 20:19

클린 코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리했다. 1. SRP: 단일 책임 원칙(Single responsibility principle) 2. OCP: 개방-폐쇄 원칙(Open/closed principle) 3. LSP: 리스코프 치환 원칙(Liskov substitution principle) 4. ISP: 인터페이스 분리 원칙(Interface segregation principle) 5. DIP: 의존관계 역전 원칙(Dependency inversion principle) 1. SRP: 단일 책임 원칙 -한 클래스는 하나의 책임만 가져야 한다. -하나의 책임이라는 것은 모호하다. -클 수도 있고, 작을 수 있다. -문맥과 상황에 따라 다르다. -중요한 기준은 변경..

article thumbnail
13. 데이터베이스 사용
Spring 2023. 4. 12. 21:53

이번시간엔 스프링에서 데이터베이스를 사용하는 방법을 알아보겠습니다. https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 우선 다음 링크로 들어가서 1.4.200 버전을 설치해줍니다. Windows Installer를 이용해도 되지만 저희는 Zip을 다운받아주겠습니다. h2파일의 bin파일로 들어가서 chmod 755 h2.sh . ./h2.sh 터미널에 다음 두개의 명령어를 입력해줍니다. 그럼 다음과 같은 콘솔이 실행됩니다. 테이블 생성하기 create table member ( id bigint generated by default as identity, name varchar(255), pr..

article thumbnail
12. 회원 관리 예제 - 웹 MVC 개발(2. 회원 조회)
Spring 2023. 4. 11. 22:03

이번시간에는 회원 웹 기능 - 조회 를 만들어보겠습니다. MemberController에 다음 코드를 넣어주겠습니다. @GetMapping("/members") public String list(Model model){ List members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList"; } 그리고 members에 memberList를 만든 후 다음 html코드를 넣어줍니다. # 이름 이름을 등록하고 조회해보면 다음과 같이 잘 출력됩니다. 이 코드가 중요합니다. ${members}는 모델(controller) 안에 있는 값을 꺼내는 것입니다. th:each는 타임리프 문법으..

article thumbnail
11. 회원 관리 예제 - 웹 MVC 개발(1. 회원 등록)
Spring 2023. 4. 11. 21:31

이번 시간에는 홈 화면을 추가해보겠습니다. 우선 controller에서 HomeCotroller파일을 만들어주고, 아래 코드를 넣어줍니다. package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } 다음은 template에서 home.html파일을 만들고 다음 코드를 넣어줍니다. Hello Spring 회원 기능 회원 가입 회원..

article thumbnail
10. 자바 코드로 직접 스프링 빈 등록하기
Spring 2023. 4. 11. 20:38

이번 시간엔 자바 코드로 직접 스프링 빈에 등록하는 법을 배워보겠습니다. 먼저, SpringConfig라는 파일을 하나 만들어주겠습니다. @Configuration이라는 애노테이션을 써보겠습니다. package hello.hellospring.service; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfig { @Bean public MemberService memberService(){ return new MemberService(); } } 이 코드를 실행하면 Configurat..

728x90