전체 글
Junit 정리 - MockMvc를 이용한 컨트롤러 테스트
입사 후 개발을 한지 벌써 3년 차가 되었다. 개발을 처음 접할 때는 어떻게 구현해야 할지 어떻게 만들어야 하는지에 대한 관심이 더 컸다. 하지만 요새는 개발 후 어떻게 테스트를 진행하여 먼저 버그를 예방(?)할 수 있는지 고민하기 시작했다.성격이 덜렁거리거나 대충 하는 스타일은 아니었는데, 요즘 열정이 많이 식어서 그런지 단순한 부분에서 버그를 유발하는 것 같아서 TDD를 통해 고쳐보려고 Junit을 공부하기로 했다.스프링의 각 영역인 Controller. Service, Dao에 대한 테스트를 총 3장에 걸쳐서 설명하겠다.그리고 Mockito에 대한 설명을 추가로 진행하겠다. 0. 공통 우선 스프링에서 테스트를 진행하기 위해서는 몇가지 라이브러리가 필요하다. 1 2 3 4 5 6 7 8 9 10 11..
스프링 마이크로서비스 (MSA) 소개
많은 회사에서 마이크로서비스를 주목하고 있고 도입하고있다. 그 이유가 무엇인지 궁금했고, 알아보기 위해서 마이크로 서비스관련 책을 하나 구입하였다. 생각보다 책이 두껍지만 외국 저서 같지 않게 설명이 자세하게 되어있다. (사례도 많다.) 그럼 이제 마이크로 서비스가 무엇인지 알아보자. 아래 사진을 보자. 우리회사도 그렇고 기존에 웹 애플리케이션은 왼쪽의 사진처럼 하나의 구조로 이루어져있어 war 형태로 배포된다. 모든 서비스가 하나의 애플리케이션으로 구성되어있을 경우에는 새로운 기능을 추가하거나, 성능을 위해 시스템을 나누기 위하는 작업 등등이 너무 어렵다. 그래서 요새 대형 서비스에서는 서비스를 새로 추가하기도 쉽고, 더 많이 사용하는 서비스에 물리적인 자원을 더 할당할 수 있도록 마이크로서비스를 지원..
애플리케이션 확장 방법 스케일 큐브 (Scale Cube)
A애플리케이션을 확장하는 데 필요한 세 가지의 주요 접근방식이 있다. 크게 x, y, z 축으로 구분하여 설명한다. 먼저 x축 방향의 확장은 애플리케이션을 복제해서 수평적으로 확장하는 것을 의미y축 방향의 확장은 서로 다른 기능을 분리하는 것을 의미z축 방향의 확장은 데이터 파티셔닝(Partitioning) 또는 샤딩(Sharding)을 의미 y축 방향의 확장이 일체형 애플리케이션에서 마이크로서비스를 적용하여 분리하는 것을 의미한다.예를 들면, 항공사 예약에서 검색 500건당 예약 1건이 발생한다고 한다. 그럴경우 하나의 일체형 애플리케이션으로 만들경우 성능을 좋게 하기 보다는 두 개의 서비스를 분리하여 검색 서비스에 물리적은 리소스를 더 부여하고 예약에 상대적으로 낮게 부여 함으로써 효과적으로 애플리케..
Http 상태 코드 별 상태
100번대 : 현재 데이터의 처리 중인 상태 100: 데이터의 일부를 서버가 받은 상태 200번대 : 정상적인 응답 200 : 에러가 없이 정상 처리 204 : 정상 처리되었으나 서버에서 보내줄 데이터가 없음 300번대 : 다를 URL 처리 301 : 요청된 페이지가 새 URL로 변경되었음 304 : 이미 기존의 데이터와 변경된 것이 없음 400번대 : 서버에서 인식할 수 없음 400 : 전송된 Request에 문제가 있어서 서버가 인식할 수 없음 403 : 서버에서 허락되지 않음 404 : URL에 해당하는 자원이 없음 406 : 전송 방식이 허락되지 않음(Rest에서 자주 발생) 500번대 : 서버 내부의 문제 500 : 서버에서 처리 시 문제가 발생 502 : 게이트웨이나 프록시 상태의 문제(과부하..
RestController import 할때 오류가 발생하는 경우.
RestController 사용을 위해 org.springframework.web.bind.annotation.RestController 를 import할때 에러가 발생할 때가 있다. 그 경우에는 다음과 같이 maven의 webmvc 버전을 맞쳐 주어야 한다. org.springframeworkspring-webmvc4.1.6.RELEASE
GTune MKF40S 한성 기계식 키보드 갈축 사용기
연구실 사람들이 모두 기계식 키보드를 사용하고 있어서 부러움 반 궁금함 반인 마음으로 기계식 키보드 입문을 찾아보았다. 너무 비싼 키보드는 구매하기에는 겁이 났기에 입문용 키보드를 찾아보았다. 역시 가성비 갑으로 소문난 한성컴퓨터에서 카일축 갈축 키보드 mkf40s 를 찾았다. 다들 좋은 레오폴드, 체리축 사려했지만 우선 입문용으로 구매하고 싶어 질렀다. 박스는 약간 투박한 형태로 포장되어 있다. 갈축이라는 표시로 브라운 색상에 체크가 되어있다. 원래 이런식인건가.. ㅋㅋ 게이머들을 이해서 자주 닳아 없어지는 키보드wasd만 추가로 제공된다. 키보드 장착 모습이다. 나름 괜찮다. 키감 자체도 그렇게 나쁘지 않고 묵직한것이 좋다. 그런데 가끔 여러게 동시에 눌리는 버그가 있다. 그점 만 빼면 뭐 나쁘지 않..
UriComponents 클래스
UriComponents 클래스 UriComponents클래스는 Path나 query에 해당하는 문자열들을 추가해서 원하는 URI를 생성할 때 사용한다. UriComponents uricomponets = UriComponentsBuilder.newInstance().path("/board/read").queryParam("bno",12).queryParam("perPageNum", 20).build(); logger.info(uricomponets.toString()); 다음과 같이 지정하게 되면, INFO : com.wedul.spring.UriComponentsTest - /board/read?bno=12&perPageNum=20 다음과 같이 설정되어 출력된다.
Mybatis의 동적 SQL
Mybatis의 동적 SQL Mybatis가 가지는 표현식은 다음과 같다. IfChoose(when, otherwise)Trim(where, set)Foreach 기능 사용 예 설명 if AND title like #{title} 코드로 작성할 때의 if 구문에 대한 처리 -> 참 거짓을 구별해서 사용할 때 처리한다. Choose, When, otherwise AND title like #{title"" AND author_name like #{author.name} AND featured = 1 switch와 같은 상황에 대한 처리 Trim, Where,set … 로직을 처리하면서 필요한 구문을 변경 foreach
논리삭제와 물리삭제 소개
논리삭제와 물리삭제 물리 삭제는 데이터를 실제로 delete문장을 사용해서 지우는 것을 말하고 논리삭제는 실제로 데이터를 제거하는 것이 아니라 또 다른 컬럼에 삭제여부를 다루는 플래그를 설정하여 그 값을 기준으로 select를 해서 제거된 것 처럼 보이게 하는 방식입니다. 기존의 데이터 논리삭제 쇼핑사이트에서 해당 사용자가 쇼핑을 주문 취소하였을 때 이력을 남기는 대신 안보이게 하려고 하는 경우에 논리 삭제를 많이 사용합니다.