분류 전체보기
Spring-Rest Docs(3)
목차 Spring-Rest Docs(1) Spring-Rest Docs(2) Spring-Rest Docs(3) request.fields.snippet 커스텀 진행시에는 Mustache 문법을 사용해서 진행을 한다 제약조건과 optional 추가시 .{{title}} |=== |Path|Type|Description|Constraints|Optional {{#fields}} |{{path}} |{{type}} |{{description}} |{{constraints}} |{{optional}} {{/fields}} |=== ```
Spring-Rest Docs(1)
목차 Spring-Rest Docs(1) IDE내에서도 static/docs 확인 가능 asccidoctor 작업 이후 생성된 HTML 파일을 static/docs 로 copy build 의 의존작업 명시 jar 빌드 전에 doc생성build 폴더 내에서만 확인 가능 (7,8,9 과정 실행시 굳이 안해도 됨) jar안에 static/docs directory로 doc copy Spring 공식 문서를 참조하여 설정했습니다 테스트코드 import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; im..
Spring boot CORS 설정
스프링 부트로 REST API 서버를 만들면 테스트 다돌려보고 마지막으로 postman에서까지 실행이 잘 되는데 프론트쪽에서 실행할 때 에러가 나는 경우가 있었다 이번에 처음 겪어본 에러였는데 SOP를 따르지 않아서 발생하는 문제였다 CORS(Cross-Origin Resource Sharing) 다른 출처의 자원들을 공유하는 것을 의미한다 따라서 CORS를 설정해주지 않거나 제대로 설정하지 않은 경우 원하는대로 자원을 공유하지 못하게 된다 처음에 다른 출처라는 것에 대해서 이해하는데 정확히 어떤 의미인지 어려운 감이 있었다 우선 다른 출처에 대해서 먼저 알고 넘어가겠다 출처(Origin) 출처는 URL의 Protocol Host Port로 구분된다 Protocol : Http, Https, FTP와 같..
졸작 프로젝트 마무리
프로젝트를 마무리하면서 부족했던 부분을 정리하고자 한다 처음으로 스프링을 사용해서 처음 부터 끝까지 진행한 프로젝트이고 많은 어려움이 있었지만 완벽하다고는 하지 못하지만 완성을 해냈다 아쉬웠던 점 컨트롤러에서 Entity 노출 JPA를 사용하면서 몇몇 엔티티에 양방향 관계를 맺어 둔 것이 있다 개발을 첫 시작할때만 해도 우선 기능이 돌아가게끔 만들자라는 생각 뿐이었고 뷰에 반환 하는 값에 대해서는 전혀 생각을 하지 않고 있었다 이부분이 화두의 시작이었다 뷰에 반환하는 값에 양방향 관계를 맺은 값이 포함이 되었고 순환참조의 문제가 생기게 되었다 경험해보지 못한 오류상황이었고 꽤 긴시간 골머리를 앓았던 기억이 있다 그 당시에는 DTO를 만들어서 보낼 생각은 하지 않은채 결국 문제만 해결하기 위해 @JsonI..
앞으로 계획
푸념 오늘을 마지막으로 졸업 작품 프로젝트를 마무리를 했다. 물론 2학기 시작하고 교수님 피드백으로 여러 수정사항이 생길 수 도 있지만 내가 첫 계획한 모든 기능들은 구현을 하였다 기능 외에도 여러 쿼리가 나가던 것을 하나로 묶어 줄이기도하고 처음 죽써놨던 컨트롤러에서 엔티티를 반환하는 것들도 전부 DTO로 변경하였다 스프링을 공부하면서 그리고 프로젝트를 진행하면서 홀로 서버단에서 렌더링을 하는 과정은 그리 어려운 것이 아니였다 잘못되면 내가 변경하면 되는 것이었고 값을 전달 하는 것에 있어도 너무나도 쉽게 진행이 되었다 하지만 이렇게 수정을 거쳐서 진행을 하니 나중가선 어떤 값이 넘어오는지 필요로 하는지 조차 헷갈리기 시작했다 원래 계획대로 였으면 친구와 둘이서 프로젝트를 진행을 해야 했는데 피치못할 ..
DTO관련 고민
컨틀롤러와 서비스간 값을 전달할 때 어떤 형식으로 보내야 하는가 1. 고민시작 졸업작품 프로젝트를 진행을 끝내고 시간적 여유가 있는 다음달부터 코드 정리를 하기 위해서 기능적인 부분 수정이나 명칭 변경과 같이 TODO목록을 작성하던 도중 가장 코드가 많은 Service계층과 Controller계층 사이에 데이터 전달되는 형식이 어느것은 DTO를, 어느것은 Entity를 사용하면서 일관적이지 않은 것을 보고 정말 많은 고민이 시작되게 되고 방안들을 생각해 봤다. 선행 기준 방안을 생각하기에 앞서 무조건 선행된 기준은 있었다. Controller는 client로 부터 Entity가아닌 DTO로 값을 받고 DTO를 넘겨주게된다 DTO란 프로세스간 데이터를 전달하는 객체 마틴 파울러가 정의한 내용 첫번째 고민 ..
졸작 도메인 구성
개요 졸작을 위해 만든 프로젝트를 정리 사용기술 Spring boot JPA thymeleaf MySQL H2(테스트 용도) 도메인 설계 기본 시간 사용자 정보 작성 위 ERD를 보면 알 수 있듯이 저장되는 거의 모든 엔티티에 시간정보와 사용자 정보를 기본으로 입력을 하도록 설정을 하였다 모든 엔티티에 직접 작성하여 넣을 수도 있지만 하나의 클래스로 도출하여 값만 상속을 받을 수 있도록 설계를 하였다 하지만 어느 엔티티는 시간정보만 다른 엔티티느 시간, 사용자 정보둘다 필요로 하기 때문에 위 문제는 아래와 같이 두개의 클래스로 나누어서 사용을 하였다 @Getter @MappedSuperclass public class TimeInfo { @Column(name = "CREATED_AT", updatabl..
람다 2
앞서 람다를 왜쓰는지 Version1부터 6까지 알아왔다 이번엔 람다를 어떻게 작성하는지 람다는 어디에 쓰이는지에 대해서 알아보겠다 람다 작성법 (파라미터) -> {람다 바디} 람다는 파라미터와 화살표 바디 이렇게 세개로 이루어져 있다 이전에 사용하던 익명 클래스를 단순화 하여 나타낸 것이다 저번 글에 Version4를 보면 사용하는 예제가 있을 것이다 기억이 나지 않는다면 아래 링크를 가서 확인해보면 되겠다 람다 사용 예제 몇가지 규칙이 있긴한데 일단 이런게 있다고 보고 몇번 사용하다보면 금방 감이 올것이다 매개 변수 타입은 생략가능 --> 추후 설명 매개 변수가 하나만 있다면 괄호 생략 가능 (user) -> user.getName().equals("userB") --> user -> user.get..
람다
람다란 메서들 전달 할 수 있는 함수를 단순화 한 것 그니까 코드를 더 짜기 귀찮아서 간결하게 표현하기 위해서 만들어 진 것이 람다식이다 람다를 알기 전에 도데체 어떤 코드를 간결하게 표현을 하는 것이고 덜 짜는 지에 대해 알기 위해서 가장 기초적인 자바 문법을 가지고 차례대로 개선을 해 나갈 것이다 예제에서 사용 될 모델 public class User { private String name; private int age; private Role role; } public enum Role { USER, ADMIN } private static List users; static { users = Arrays.asList( new User("userA", 10, Role.USER), new User("u..