하나씩 차근차근
article thumbnail
예제 만들기 - 주문과 할인 도메인 설계
Spring/Spring 핵심 원리 2023. 1. 20. 13:24

다음으로 주문과 할인 도메인을 작성하겠습니다. 요구사항 회원은 상품을 주문 회원 등급에 따라 할인을 받을 수 있다. 할인은 모든 VIP 를 1000원 할인해주는 할인과 주문 금액당 할인을 해주는 두 가지 방법 주문 엔티티 다음과 같이 주문 엔티티를 작성하기 위해 order 패키지를 만들어 그 안에 생성합니다. package hello.core.order; public class Order { private Long memberId; private String itemName; private int itemPrice; private int discountPrice; public Order(Long memberId, String itemName, int itemPrice, int discountPrice) ..

article thumbnail
게시판 만들기 - 답변 등록 기능
Spring/Springboot 실습 2023. 1. 18. 16:02

앞에서 만든 질문 등록 기능과 비슷하게 답변 등록 기능을 만들겠습니다. AnswerForm 작성 package com.crud.model; import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.Setter; @Getter @Setter public class AnswerForm { @NotEmpty(message = "내용을 입력해주세요.") private String content; } 답변은 content 만 있으므로 AnswerForm 은 content 하나만 속성으로 갖습니다. AnswerController 수정 다음으로 AnswerController 를 AnswerForm 을 통해 검증을 할 수 있도..

article thumbnail
게시판 만들기 - 질문 등록 기능 (2)
Spring/Springboot 실습 2023. 1. 18. 15:41

앞에서 질문을 등록하고 데이터베이스에 추가하는 기능을 만들었습니다. 하지만 질문을 등록할때 subject 나 content 를 비워두고 등록 버튼을 클릭하면 데이터베이스에는 해당값이 없는채로 등록이 됩니다. 이번에는 값이 비워져있으면 검증을 통해 메세지를 출력하도록 하겠습니다. 시작 먼저 pom.xml 파일에 아래와 같이 dependency 를 추가합니다. org.springframework.boot spring-boot-starter-validation QuestionForm 작성 다음으로 question_form 페이지에서 입력값이 제대로 작성되었는지 확인하기 위해서 subject 와 content 를 갖는 QuestionForm 클래스를 작성해서 검증을 하겠습니다. QuestionForm 클래스는 ..

article thumbnail
게시판 만들기 - 질문 등록 기능 (1)
Spring/Springboot 실습 2023. 1. 18. 14:30

이번 포스트에서는 질문을 등록하는 기능을 만들어보겠습니다. 시작 먼저 메인 페이지에서 질문 등록하기 버튼을 만들어서 질문 등록 페이지로 이동할 수 있도록 하겠습니다. ... 질문 등록하기 메인페이지인 question_list.html 파일 안에 질문 등록하기 버튼을 추가합니다. 이 버튼을 클릭하면 get 방식으로 localhost:8080/question/create 로 이동하게 됩니다. 질문 등록 페이지 다음으로 질문을 등록할 수 있는 페이지인 question_form.html 파일을 templates 폴더 안에 만들어줍니다. 앞에서 만든 layout.html 을 상속해서 작성을 합니다. 질문등록 제목 내용 th:action="@{/question/create}" 을 통해 버튼을 클릭하면 post 방식..

article thumbnail
게시판 만들기 - 템플릿 상속
Spring/Springboot 실습 2023. 1. 18. 13:44

앞에서 만든 question_list.html 과 question_detail.html 은 body 태그의 바깥 부분은 동일한 내용입니다. 이후 다른 html 파일을 만들게 되더라도 body 태그의 바깥 부분은 계속 동일하기 때문에 템플릿을 상속받아 기본틀을 만들고 그 안에 내용을 채우는 방식으로 진행하겠습니다. 시작 제일 먼저 thymeleaf 의 layout 기능을 사용하기 위해 pom.xml 파일에 라이브러리를 추가합니다. nz.net.ultraq.thymeleaf thymeleaf-layout-dialect 기본틀 다음과 같이 기본틀이 되는 layout.html 파일을 templates 폴더 안에 생성합니다. 위 코드에서 body 태그 안의 layout:fragment 부분에 기존에 작성된 내용들..

객체 지향과 스프링 - 좋은 객체 지향 설계의 5가지 원칙
Spring/Spring 핵심 원리 2023. 1. 16. 21:11

이번 포스트에서는 클린코드로 유명한 로버트 마틴의 좋은 객체 지향 설계의 5가지 원칙(SOLID)을 정리했습니다. SRP : 단일 책임 원칙 (Single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른것 OCP 개방-폐쇄 원칙 소프트웨어 요소는 ..

article thumbnail
객체 지향과 스프링 - 좋은 객체 지향 프로그램이란
Spring/Spring 핵심 원리 2023. 1. 16. 20:39

스프링은 객체 지향의 특징 중 다형성을 극대화해서 이용할 수 있게 도와줍니다. 이 포스트에서는 다형성과 좋은 객체 지향 프로그램에 대해 정리해보았습니다. 객체 지향 프로그램 컴퓨터 프로그램을 명령어의 목록이 아닌 여러개의 독립된 단위 (객체) 들의 모임으로 보는 것. 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 사용됨 다형성 프로그램 언어의 각 요소들이 다양한 자료형에 속하는것이 허가되는 성질 다형성을 통해 인터페이스를 구현한 객체 인스턴트를 실행 시점에 유연하게 변경할 수 있다. 역할과 구현을 분리 인터페이스를 구현한 객체 인스턴트를 유연하게 변경하는 예제를 실생활의 예를 통해 알아보면 먼저 역할과 구현으로 구분을 해보겠습니다. 위 그림에서 자동차라는 역할(인터페이스) 를..

article thumbnail
예제 만들기 - 회원 도메인 설계
Spring/Spring 핵심 원리 2023. 1. 14. 02:51

이번 포스트에서는 회원 도메인의 요구사항을 토대로 설계를 해보겠습니다. 요구사항 회원가입과 조회 회원등급은 일반과 VIP 회원 데이터는 자체 DB 또는 외부 시스템과 연동 회원 엔티티 먼저 회원등급을 위한 Grade 라는 eum 을 member 패키지를 하나 만들어서 생성합니다. package hello.core.member; public enum Grade { BASIC, VIP } 다음으로 회원 도메인을 위한 Member 클래스를 생성합니다. package hello.core.member; public class Member { private Long id; private String name; private Grade grade; public Member(Long id, String name, Gr..