본문 바로가기

Spring

(28)
AOP는 또 뭐에요? 처음 들어봐요 AOP라는 말을 처음들었다. 이해한 바로는 공통적인 기능과 핵심적인 기능을 분리해서 관리하기 위해 사용된다고 이해했다. AOP(Aspect Oriented Programming) 열심히 메소드들과 여러 기능들을 조합해서 코드를 짰다. 그 때, 상사가 각각의 메소드들의 걸리는 시간을 로깅해달라고 했다. 이 때 사용할 수 있는 기능이 AOP다. 엄청나게 많은 메소드들에 일일이 로깅을 찍는 코드를 작성하는 것은 여간 쉬운 일이 아니다. 그래서 로깅을 찍는 코드를 분리해서 원하는 곳(메소드)에 적용시켜 주면 일일이 메소드들에 찾아가서 찍지 않아도 로깅 기능을 사용할 수 있게 된다. 핵심은 공통적인 기능을 따로 관리한다는 점이다. 이를 통해 유지보수가 용이해지고 쉽게 관리할 수 있다. 구글링을 통해 AOP에 대해..
H2 DB File corrupted while reading record: null. Possible solution: use the recovery tool [90030-200] 90030/90030 오류 : 해결방법 예전에 사용했던 h2 db를 다시 사용하기 위해 설치부터 실행까지 처음부터 진행했다. File corrupted while reading record: null. Possible solution: use the recovery tool [90030-200] 90030/90030 에러가 발생했다. 파일이 손상되었다는 메세지다. 내 생각에는 예전에 h2 db를 사용했었는데 그 때 설정된 파일이 지금 적용하려다 보니까 에러가 난 듯 했다. 그래서 local.mv.db를 제거해줬다. C 드라이브/사용자(Users)에 local.mv.db 파일이 있을 것이다. (이름이 다를 수도 있다. 나는 local로 만들었기 때문에 local.mv.db이다.) 아무튼 ~.mv.db라는 파일이 있을텐데 삭제하고 이름만 같게 해..
Spring html작업할 때 Livereload 쓰면 아주 편해요! HTML & CSS 공부나 스프링 프로젝트 중에서 html파일을 수정하고 확인할 때 Livereload를 이용하면 아주 편리하게 바로바로 반영되는 결과를 확인할 수 있다. 1. 의존성 추가 developmentOnly 'org.springframework.boot:spring-boot-devtools' gradle에 의존성을 추가해준다. 2.properties 파일 수정 spring.devtools.livereload.enabled=true properties 파일에 위와 같이 true로 변경해준다. 3. 구글 크롬에서 Livereload를설치한다. 설치하면 위와 같이 새로고침모양이 생기거나, 퍼즐 모양을 누르면 볼 수 있다. 4. Livereload를 실행해준다. 새로고침 모양 안에 초록섹 체크모양이 ..
쓰지않는 import문 지우는 단축키 Ctrl + Alt + O BaseControllerTest를 만들면서 기존의 test에서 쓰지않는 import문이 많아졌다. (좌측 그림) Ctrl + Alt + O 단축키를 누르면 우측의 그림처럼 자동으로 쓰지않는 import문을 삭제해준다.
Spring의 DI와 IoC에 대해 설명할 수 있나요? DI : Dependecy Injection 번역하면 의존성주입 이다. 예시를 들어서 설명해보자 컴퓨터가 있다. 컴퓨터를 살 때, 조립식 컴퓨터가 있고 그냥 완성품 컴퓨터를 살 수 있다. 조립식 컴퓨터를 산다고 할 때, 각각의 부품을 사서 컴퓨터에 끼우는 방식이다. 여기서 각각의 부품을 D : Dependency라고 볼 수 있다. 그리고 끼우는 과정을 I : Injection이라고 할 수 있다. 현실에서 부품을 사서 조립하는 과정을 돈 주고 맡기기도 하는 것 처럼 Spring이 조립을 해준다. 이 기능을 Spring의 핵심기능 중 하나인 DI라고 볼 수 있다. IoC : Inversion of Control 일체형 프로그램은 큰 단위로부터 작은 단위로 생성이 된다. 하지만 결합형 프로그램 (위에서 예시로..
Junit5에서 parmeter를 이용한 Test실행하기 Junit4와 Junit5에서는 parameter를 이용한 Test를 실행할 때 조금 다르다. Junit 4 : JunitParams 이용 @RunWith(JunitParams.class) public class EventTest { @Test @Parameters public void testFree(int basePrice, int maxPrice, boolean isFree) { Event event = Event.builder() .basePrice(basePrice) .maxPrice(maxPrice) .build(); event.update(); assertThat(event.isFree()).isEqualTo(isFree); } private Object[] parametersForTestF..
Transaction에 대해서 아시나요? 모르겠습니다. 내 대답이었다. 내 첫 면접에서의 질문 중 하나였다. 쓰는 것도 많이 봤지만 정확히 어떤 기능인지 몰랐고 굳이 알려고 하지도 않았었다. 공부해야할 것들이 엄청나게 많다. 그리고 이제 결과만 쫓는 형태가 아니라 HOW를 알아야 한다고 생각이 든다. Transaction 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미 즉, 병행 제어 시 처리되는 작업의 논리적 단위 모든 작업이 성공한다면 완료 작업 상태를 모두 반영하고, 이것을 Commit, 반면, 하나라도 실패하게 된다면 모든 사항을 폐기하고, 이것을 Rollback. Transaction의 4가지 성질 ACID ✔️ Atomicity 원자성 : 한 트랜잭션 내의 실행 작업은 하나의 단위로 처리 즉, 모두 성공..
JSON 응답에서 한글 깨질 때 해결 방법 @Controller @RequestMapping(value = "/api/events", produces= MediaTypes.HAL_JSON_VALUE) @RequiredArgsConstructor JSON 응답에서 한글응답이 깨지는 현상이 발생했다. 스프링부트 버전 2.2.5 이상은 MediaTypes.HAL_JSON_UTF8_VALUE -> MediaTypes.HAL_JSON_VALUE 로 변경 되었다. 그래서 응답을 보면 아래 그림과 같이 깨지는 형태를 볼 수 있다. @Controller @RequestMapping(value = "/api/events", produces = "application/hal+json; charset=UTF-8") @RequiredArgsConstructor 위에서..