목록Spring 공부 (12)
고코딩
[Spring Boot] when(), given(), any() 및 BDD 설명 패스트 캠퍼스 강의를 듣던 도중 테스트 구문 작성 코드에서 처음 보는 코드를 보았다. when(this.todoRepository.save(any(TodoEntity.class))) .then(AdditionalAnswers.returnsFirstArg()); //TodoRepository가 save()메소드를 호출해서 TodoEntity값을 받으면 받은 엔티티 값을 반환하도록 설정 원래 given-when-then 의 구조는 알고 있었지만 저렇게 스태틱 함수로 구현되어 있는 건 처음 봐서 이해가 되지 않았다. 여러가지 서치를 해보고 정리를 해본다. 용어 정리 TDD Test Driven Development의 약자로 테스..
@Size, @Length, @Column 차이점 팀 프로젝트를 하면서 내가 JPA쪽 부분을 담당하게 되었다. Entity를 작성하던중 필드의 속성을 지정해줘야 했는데 필드의 사이즈를 무엇으로 주어야하나 고민을 했다. 구글링을 해보니 @Size, @Length, @Column 3개중 하나로 필드의 사이즈를 지정해주었느데 도대체 무슨 차이인지 궁금했다. 이곳저곳을 찾아보던중 잘 설명해 놓은곳이 있어서, 이 사이트의 설명을 번역해서 올린다. https://www.baeldung.com/jpa-size-length-column-differences 1. Overview JSR-330의 @Size, Hibernate의 @Length , 그리고 JPA의 @Column에 대해서 살펴보겠습니다. 언뜻 보기엔 비슷해 ..
JUnit 5로 바뀌면서 나온 이슈들 Cast Issue .andExpect(jsonPath()) 를 사용하면서 강제로 ResultMatcher 형태로 형 변환을 해야하는 Issue가 발생하였다. 이 문제들은 기존에 사용하던 라이브러리가 바뀌면서 생긴 현상인데 import 구문을 바꿔주면 된다. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.assertj.core.internal.bytebuddy.matcher.ElementMatchers.is; import static org.mockito.Mockito.doReturn; import static org.springf..
SpringBoot JPA 순환 참조 문제 및 해결 토이 프로젝트를 진행하던 중 순환참조 문제에 마주하였다. 순환 참조란 무엇일 까? 순환 참조(Circular reference)란, 참조하는 대상이 서로 물려 있어서 참조할 수 없게 되는 현상을 말한다. JPA에서는 양방향으로 연결된 Entity끼리 조회하는 경우 서로의 정보를 순환하면서 조회하다가 stackoverflow가 발생하게 된다. 그럼 순환참조가 왜 일어나는 것일까? JPA에서 순환참조 이유 Spring Boot는 @ResponseBody를 선언 할시 Object를 json상태로 변환하기 위해 Jackson라이브러리를 이용합니다. Jackson은 직렬화를 이용해서 json 형태로 객체를 변환시키게 됩니다. 직렬화란? 객체의 직렬화는 객체의 내..
스프링클라우드와 MSA의 이해 아래 링크의 블로그 글을 공부할겸 정리해보았습니다. 블로그 Springframework은 자바 기반 애플리케이션을 구축하는 사실상 표준 개발 프레임워크가 되었습니다. Spring은 의존성 주입(Dependenc Injection)이라는 핵심 개념에 기반을 두고 있습니다. 일반적인 자바 애플리케이션이 각 클래스가 애플리케이션의 다른 클래스와 명시적으로 링크된 클래스로 분해됩니다. 링크는 코드에서 클래스 생성자를 직접 호출하는 것으로, 일단 코드가 컴파일되면 이러한 링크 지점은 변경될 수 없습니다. 이러한 이유로 DI를 활용한 개발 방법으로 다양한 자바 클래스 사이의 매개체 역할을 수행하며 클래스 의존성을 관리하게 되었습니다. 스프링의 기능을 빠르게 추가해 사용성을 높인 덕분에..
실시간 웹 통신 방식에 대한 정리 웹 클라이언트에서 정보를 주고받는 방식은 여러가지가 있지만, 그중에서도 실시간 웹 통신은 매우 까다롭게 구성되어 있다. 단순히 서버에 request만 계속 보내게 된다면 서버에 쓸데 없는 부하도 많이 생길 것이고 만약에 매번의 request마다 페이지를 새로 로드해야 한다면 서버에서는 페이지 정보를 매번 클라이언트로 보내야하는 불상사가 발생할 수 있다. 웹은 태생 자체부터 실시간을 위해 필수적인 지속되는 연결(persistence connection)을 가질 수 없다. 클라리언트에서 서버에 접속하면 응답하고 연결이 끊어진다.(HTTP의 특징) 때문에 안타깝게도 현재 웹에서 운용되는 실시간 서비스들은 대부분 실시간이 아니다. (10초 단위 30초 단위 라고 말할 수는 있을..
Swagger? 스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태걔의 지원을 받는 오픈 소스 스프트웨어 프레임워크입니다. 현재 진행하고 있는 프로젝트에 대해서 유지보수를 진행하거나 API를 만들게 될때 API서버가 어떤 스펙을 가지고 있는지 파악해야 한다. Swagger는 API의 명세와 문서를 대신 작성해 주는 아주 착한 친구 입니다. 스웨거의 공식 사이트입니다. 저 자세한 정보르 알고싶다면 위 링크에 접속해서 알아보시면 될거에요. 여러가지 환경에서 Swagger를 사용가능한데 이 글에서는 Spring Boot + Swagger 세팅을 해볼께요. Spring Boot + Swagger SpringBoot 스펙 JDK 8 Spring B..
보안 관련 공부를 하던중 HttpSecurity와 WebSecurity의 차이점을 찾다가 좋은 글을 발견하였다. 링크를 남기면서 한번씩 읽어보길 바란다. https://okky.kr/article/382738
SpringBoot로 간단한 정보를 보내야하는데 json 타입으로 보내야 할 일이 있었다. 처음에는 @GetMapping() public String getBirthYmd() throws Exception { ...생략... return "문자열"; } 위 처럼 보내면 json 방식으로 Response Body에 담겨서 날아가는 줄 알았는데 그냥 문자열만 날아갔다. 이렇게 날리면 받는 쪽에서는 원하는 정보를 빼내기 힘들다. 물론 new ResponseEntity(T,HttpStatus); 로 보내면 T타입 객체가 자동으로 json으로 파싱되지만 json 방식을 커스텀 하고 싶을때는 여간 귀찮은게 아니다. 다행히 좋은 라이브러리가 있다. SpringBoot 4.0.0 java 8 build 도구 : Mav..
eclipse로 SpringBoot 공부를 하던중 application.properties를 작성해줘야할 일이 생겼다. 문제는 원래 Ctrl+Space를 누르면 프로퍼티 목록을 볼수 있어햐 하는데 단축키 기능이 작동하지 않았다. 이 경우 에디터를 설정해줘야한다. application.prorpeties 파일을 선택하고 우클릭에서 Open With -> Spring Properties editor를 선택해줘야하는데 아래 처럼 해당 목록이 없는 경우가 있었다. 해결법은 Spring IDE - Spring IDE Boot Support 확장자를 설치해줘야 한다. Help -> InstallNew Software를 클릭 Work with에서 https://download.springsource.com/relea..
비동기 전송을 위해서 Ajax를 사용하던중 클라이언트에서 배열을 담아서 보낼일이 생겼다. 이 전까지는 단순히 값만 json 형식으로 보냈었다. 그럼 배열은 어떤 형식으로 보내고 어떤 방식으로 받아야 하는 것일까? 먼저 checkBox를 이용해서 체크된 값들을 new Array()에 담는다. 그리고 자바스크립트 객체 형식으로 data에 담아서 보낸다. 이 때 반드시 post 형식으로 보내야 한다. var checkArr = new Array(); ... $.ajax({ url : "/shop/deleteCart", type : "post", data : { chbox : checkArr }, success : function(result){ if(result == 1) { location.href = "/..
Spring 공부를 하다가 Project를 Clean할 이유가 생겨서 Clean을 하였다. 하지만 늘 그렇듯이 Clean 만으로는 해결되지 않는 오류였다. 이것저것 시도해보다가 Tomcat서버까지 지웠다가 다시 설치하는 둥 여러가지 시도를 하다가 오류를 고쳤지만 root path가 망가지는 현상이 생겼다. 정리해보자면 Tomcat Server를 다시 설정하면서 Web module의 path 설정이 초기화 되었기 때문이다. 이 글은 Tomcat Server를 지웠다가 다시 깔았을때 참고하려고 써 놓은 글이다. 처음 Spring에서 Tomcat을 연결하면 이런식으로 화면이 나올텐데 Tomcat v8.5 Server at localhost를 더블클릭하면 위의 탭이 나오게 된다. 여기서 localhost에 대한..