전체 글 9

[Spring] @NotNull, @NotEmpty, @NotBlank, @Null 의 차이점

Springboot의 어노테이션을 이용한 validation을 하는 방법에 대해 알아보자. API의 parameter에 따라 별도의 오류 메시지와 조건이 필요하고, 이런 경우 쉽게 사용할 수 있는 것이 @NotNull, @NotEmpty, @NotBlank, @Null 이다. 위의 4가지 annotation은 Bean Validation에서 제공하는 표준 Validation 으로 사용하는 방법은 유사하지만 잘못 사용하면 완전히 다른 결과를 초래할 수 있기 때문에 차이를 알아두어야한다. public class MemberLoginRequestDto { @NotNull(message = "이름은 Null 일 수 없습니다.") @Size(min = 1, max = 10, message = "이름은 1-10자 ..

Server 2022.08.02

[Spring] Spring boot와 JPA 활용 - 웹 계층 개발

홈 화면과 레이아웃 뷰 템플릿 변경사항을 서버 재시작 없이 즉시 반영할 때는 1. spring-boot-devtools 추가 2. html 파일을 build->recompile 디자인을 위해 bootstrap을 사용했다. css, js폴더를 resources/static 하위에 추가한다. 회원 등록 먼저 회원 가입 페이지를 만들기 위해서 폼 객체를 사용해서 화면 계층과 서비스 계층을 명확하게 분리한다. 회원 등록 폼 객체 controller/MemberForm.java @Getter @Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수입니다.") private String name; private String city; private Stri..

Server 2022.07.05

[Spring] Spring boot와 JPA 활용 - 주문 도메인 개발

가장 중요한 주문 도메인을 개발해볼 것이다. 중요한 이유는 비지니스 로직들이 얽혀서 돌아가는 걸 JPA나 entity를 가지고 어떻게 풀어내는지 알 수 있기 때문이다. 구현 기능 상품 주문 주문 내역 조회 주문 취소 주문, 주문 상품 엔티티 개발 domain/Order.java package jpabook2.jpashop2.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @..

Server 2022.06.24

[Spring] Spring boot와 JPA 활용 - 애플리케이션 구현 준비, 회원 도메인 개발

애플리케이션 아키텍처는 단방향으로 가져가되, Controller가 Repository에 접근할 수 있는 유연한 설계를 가져간다. 계층형 구조를 사용한다. - controller, web: 웹 계층 - service: 비지니스 로직, 트랜잭션 처리 - repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용 - domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용 회원 도메인 개발 회원 리포지토리 개발 @Repository 는 @Component 로 컴포넌트 스캔의 대상이 되어서 스프링빈으로 자동 등록된다. @PersistentContext는 JPA의 entitymanager로 스프링이 entitymanager로 주입받을 수 있다. 멤버를 가입시키는 save() 메서드는 영속성컨텍스트..

Server 2022.06.19

[Spring] Spring boot와 JPA 활용 - 도메인 분석 설계

@Embedded JPA 에서는 임베디드 타입(embedded type)이란 것이 존재하며, 새로운 값 타입을 직접 정의해서 사용할 수 있다. 직접 정의한 임베디드 타입도 int, string 처럼 값 타입이다. 평범한 회원 엔티티에서 "회원 엔티티는 이름, 주소 도시, 주소 번지, 주소 우편 번호, 주문상품들 을 가진다." 보다는 "회원 엔티티는 이름, 주소, 주문상품들을 가진다." 라고 말 할 때 더 응집력이 높은 명확한 코드를 작성할 수 있다. 임베디드 타입을 사용하는 방법은 @Embeddable 값 타입을 정의하는 곳에 표시한다. @Embedded 값 타입을 사용하는 곳에 표시한다. - 임베디드 타입은 기본 생성자가 필수이다. public한 생성자를 사용하도록 유도하기 위해 기본 생성자는 JPA가..

Server 2022.06.05

[Spring] Spring boot와 JPA 활용 - 프로젝트 환경설정

Spring 프로젝트 생성을 하려면 GroupId, ArtifactId 를 적어야 한다. GroupId - 모든 프로젝트 중에서 나의 프로젝트를 식별하게 해주는 식별자이다. - Java의 패키지 네이밍 룰을 따른다. eg. naver.com -> GroupId: com.naver - 일반적으로 작성하는 회사의 도메인 명을 거꾸로 쓴다. ArtifactId - 프로젝트 진행 시 해당 프로젝트의 이름을 사용한다. - 이 이름으로 버전을 제외한 컴파일된 Jar 파일이 생성된다. - 소문자로만 작성 / 특수문자 사용 금지 eg. 아톰 프로젝트 ArtifactId: atom 스프링 부트 라이브러리 살펴보기 - spring-boot-starter-web - spring-boot-starter-tomcat: 톰캣(웹..

Server 2022.06.05

[소프트웨어공학] 아키텍처 패턴

아키텍처 패턴 위키피디아에서 내린 정의로는, 주어진 상황에서의 소프트웨어 아키텍처에서 일반적으로 발생하는 문제점들에 대한 일반화되고 재사용 가능한 솔루션이다. 아키텍처 패턴은 소프트웨어 디자인 패턴과 유사하지만 더 큰 범주에 속한다. 라고 나와 있다. 아키텍처 패턴을 사용함으로써 얻을 수 있는 장점으로는 시행착오를 줄여 개발시간을 단축시킬 수 있고, 검증된 구조로 개발하기 때문에 안정적인 개발이 가능하며, 시스템의 구조를 이해하는 것이 쉬워지고 시스템의 특성을 개발 전에 예측하는 것이 가능하다는 등 이 있다. 다음과 같은 여러 아키텍처 패턴들이 있지만, 그 중에서도 클라이언트-서버, MVC, MVP에 대해서만 정리해볼 것이다. 계층화 패턴 (Layered pattern) 클라이언트-서버 패턴 (Clien..

[Network] Restful API, HTTP

API 란 어떤 기계를 만들면, 사용자가 그 기능들을 전부 활용할 수 있도록 제어장치를 마련해야 한다. 기계와 인간 간의 소통을 할 때는 TV의 리모컨, 컴퓨터의 모니터, 마우스, 키보드 등과 같이 인터페이스를 통해 소통할 수 있다. 소프트웨어와 인간 간의 소통을 할 때는 브라우저창, 슬라이더바 와 같이 UI를 통해 소통할 수 있다. 그렇다면 기계와 기계, 소프트웨어 소프트웨어 사이에서도 수많은 정보 요청이 이루어지고 있는데, 이들은 어떤 방식으로 소통할 수 있을까? 예를 들어, 기상정보가 관리되고 있는 기상청 서버가 있다. 날씨와 관련된 서비스를 제공하는 다양한 웹사이트, 앱들은 이 기상청 서버로부터 날씨 정보를 요청해서 받아가야 한다. 그런데 이 기상청 서버에 데이터를 요청할 때 지정된 형식이 있어야..

CS/Network 2022.05.08