일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Collection
- Real MySQL
- OS
- list
- 자바
- IntellJ
- 보조스트림
- 백준
- mysql
- Stream
- 토비의 스프링 정리
- GC
- 토비의 스프링
- thread
- 스프링
- 쿠버네티스
- 자바 ORM 표준 JPA 프로그래밍
- gradle
- redis
- 스트림
- spring
- Java
- Kotlin
- 이스티오
- jvm
- SpringBoot
- MSA
- K8s
- Stack
- JPA
- Today
- Total
목록Spring (38)
인생을 코딩하다.

open API 활용을 위해 서비스 인증 키를 이용하여 raw 데이터를 받아오면서 공부하게된 RestTemplate 우선 서비스 인증키를 이용하기 위해 String decodeServiceKey = URLDecoder.decode(serviceKey, "UTF-8"); 디코딩하고 UriComponents 클래스를 이용하였다. UriComponents uri = UriComponentsBuilder.fromHttpUrl(url).queryParam("serviceKey", decodeServiceKey) .queryParam("pageNo", pageNo) .queryParam("numOfRows", numOfRows) .queryParam("startCreateDt", startCreateDt) .que..

CORS : Cross - Origin Resource Sharing 프론트 관련 서버를 별도로 띄었는데 백엔드 API 서버와 완전히 다른 주소로 인식하게 되었다. 이런 경우에 보안성 때문에 서로 접근할 수 없게 처리가 되어있었다. 프론트 서버는 http://localhost:3000/ 이였고, 백엔드 API 서버는 http://localhost:8080/restaurants 였다. 개발자도구(F12)에서 API 서버를 호출하기 위해 fetch('http://localhost/restaurants') 를 해주었는데 아래와 같은 CORS 에러가 발생하였다. 그래서 이 부분을 스프링에서 제공하는 @CrossOrigin을 이용해서 해결하고자 하였다. 그래서 controller 클래스 맨 위에 @CrossOri..
============ 기준으로 위 4, 아래 5 content().string(containsString()) // Junit4 ==================================================================== content().string(org.hamcrest.Matchers.containsString()))) // Junit5 assertThat(skhu.getId(), is()); // import org.hamcrest.core.Is.is; ================================================================================================== assertThat(skhu.getId..

요즘 공부하면서 이론이 많이 부족하다고 느꼈고, 이론 공부가 정말 중요하다는 생각을 많이 했다. 그러다가 SpringBoot와 Spring 차이를 대강 알고만 있었지, 누가 물어보면 정확히 말을 하지 못할 것 같아서 유튜브, 구글링 등을 통해 이론 학습을 좀 해보았다. 궁금해서 스프링 공식 문서를 살펴보다가, docs.spring.io/spring-framework/docs/current/reference/html/overview.html#overview-spring Spring Framework Overview The term "Spring" means different things in different contexts. It can be used to refer to the Spring Framew..

@ExceptionHandler를 이용해서 메소드마다 예외처리를 해주다보니 같은 에러를 처리할때 마다 중복된 코드를 쓰게되었다. 중복된 코드를 쓰다보니 코드도 길어지고 유지보수 할 때 불편한 점이 많았다. 스프링 프레임워크의 큰 장점중에 하나가 AOP인데 중복된 코드를 쓴다는 것은 AOP에 어긋난다는 생각이 들었다. 그래서 나는 재사용성을 높여 중복된 코드를 없애 객체 지향적인 코드를 구현하고 싶었고, (메서드는 한 가지 일만 해야하기 때문에) 에러를 한 곳에서 처리해서 controller 전역에 적용되는 예외처리 구문을 만들어야겠다는 생각을 하였다. 그래서 공부하던 중 ControllerAdvice annotation의 @ControllerAdvice와@RestControllerAdvice을 알게되었고..

흔히 알려진 스프링의 장점들 중 하나인 AOP란 것이 있다.'관점 지향 프로그래밍' 이라고 한다. AOP에 관해 공부하던 중, 갑자기 내가 만든 메소드들에 성능을 측정해보고 비교해 보고 싶었다.그래서 AOP를 이용하여 메소드들의 성능을 측정해 볼 수 있다는 것을 알게되어서 구글링을 통한 학습을 하였고 AOP를 적용해서 2개의 메소드에 시간을 시간을 측정해보았다. LogExecutionTime.java와 LogAspect.java는 Controller.java와 같은 패키지에 생성했다. bulid.gradle에 dependancy를 추가해줘야 한다 implementation 'org.springframework.boot:spring-boot-starter-aop' @Target로 어노테이션을 메서드에 사용..

예외처리 할 떄, Controller에서 이런식으로 try { } ~ catch { } 문으로 처리를 해주면 Status가 200으로 떠서 클라이언트에서는 이 정보가 처리가 된 것인지, 안 된 것인지 알기가 어렵기 떄문에 곤란하다. 위를 보면 Headers, Content type, Body에 아무 것도 들어오지 않아서 어떻게 처리가 되었는지 알 수가 없다. 그래서 조금더 나은 방법으로, @ExceptionHandler를 지정해준다. @ExceptionHandler같은 경우는 @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 인자로 캐치하고 싶은 예외 클래스를 등록해준다. @ExceptionHandler를 이용해서..

예외를 처리할 때 로그를 활용하는 것 이외에 checked exception을 unchecked exception으로 변경해서 던져야 하는 경우가 있었다. 이를 자바에서는 RuntimeException 클래스를 상속받아서 할 수 있다. @Transactional public void modify(Long id, String name) { // 이름 정보만 받아서 해당로직에 업데이트 Person person = personRepository.findById(id).orElseThrow(() -> new RuntimeException("아이디가 존재하지 않습니다")); person.setName(name); personRepository.save(person); } orElseThrow(() -> new R..