본문 바로가기

Spring/Spring-detail47

동시성 문제 해결 - Synchronized, Pessimistic Lock, Optimistic Lock, Redis https://www.inflearn.com/course/%EB%8F%99%EC%8B%9C%EC%84%B1%EC%9D%B4%EC%8A%88-%EC%9E%AC%EA%B3%A0%EC%8B%9C%EC%8A%A4%ED%85%9C/dashboard 재고시스템으로 알아보는 동시성이슈 해결방법 | 최상용 - 인프런 최상용 | 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., 동시성 이슈 처리도 자신있게! 간단한 재고 시스템으로 차근차근 배워보세요. 백엔드 개발자라면 꼭 알아야 할 동 www.inflearn.com 위 강의를 학습하며 작성. 작업환경 세팅 brew install docker brew link docker docker version docker pull mysql docker run -d .. 2024. 4. 8.
@Transactional 안에 @Transactional 테스트 @Transactional 안에 @Transactional 이 있는 경우 테스트를 해보았습니다. TransactionSynchronizationManager.*isActualTransactionActive*() 메서드를 이용해서 트랜잭션이 적용되는지 확인 할 수 있습니다. 1. ### 외부메서드(트랜잭션) + 이너메서드 @Slf4j @Service public class TransactionService { @Transactional public void outerMethod() { log.info(" ****** outerMethod start ******"); log.info(" ****** outerMethod transaction Active : {}" , TransactionSynchroniza.. 2024. 3. 4.
@Conditional 을 이용해 특정 조건일 때만 사용 @Conditional 특정 조건이 참인 경우에만 빈에 등록해야하는 상황에 사용할 수 있습니다. Condition 인터페이스를 상속받아 구현해 사용합니다. 반환타입은 boolean 값입니다. @FunctionalInterface public interface Condition { boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata); } @Slf4j public class MemoryCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { // -Doption=.. 2024. 2. 22.
@ConfigurationProperties / @ConfigurationPropertiesBean url: naver: www.naver.com depth: google: www.google.com yml 에 설정한 값들을 편리하게 사용할 수 있는 어노테이션입니다. 기존에 프로젝트에서 사용했던 방법은 2가지를 사용했습니다. 1. Enviroment 를 사용 2. 각각의 설정파일을 불러 객체로 만들어 사용 @ConfigurationProperties / @ConfigurationPropertiesBean 를 사용하게 되면 객체지향적으로 설정파일의 값을 사용할 수 있습니다. application.yml 을 간단히 설정했습니다. naver 처럼 첫 줄에 값을 설정할 수도 있지만, google 처럼 두번째 depth 로 사용하는 경우도 많습니다. url: naver: www.naver.com depth: g.. 2023. 8. 23.
JAVA 싱글톤, Spring 싱글톤에 대해. 스프링이나 디자인 패턴을 공부하면 싱글톤 패턴을 학습하고 어떤 의미인지 인지하고 있다고 생각합니다. 싱글톤은 인스턴스를 오직 한개만 제공하는 클래스입니다. 먼저, 몇가지 싱글톤을 구현하는 방법에 대해 알아보고 사용하는 이유와 주의해야할 점에 대해 알아보겠습니다. JAVA 싱글톤 생성방법 첫 번째 방법입니다. 가장 간단하게 생성할 수 있으며, 보편적으로 사용하는 형태입니다. static 을 통해 생성한 Singleton 은 클래스가 로드 될때 객체를 생성해 사용합니다. 해당 방법은 객체를 사용하지 않더라도 무조건 생성되기 때문에, 자원의 낭비가 발생합니다. 또한, 객체 생성시에 예외처리가 불가능합니다. public class Singleton { // static 을 통해 class 로드될때 객체를 생성 .. 2023. 3. 23.
Jar 파일에 대해 김영한님의 스프링 부트 - 핵심 원리와 활용 편을 보고 간단히 정리한 내용입니다. 강의를 직접 들어보시는 것을 추천합니다. 스프링부트로 생성한 프로젝트를 빌드하면 Jar 파일이 생성됩니다. Jar 파일을 확인하기 위해 cmd 창에서 해당 프로젝트 경로로 들어가서 빌드를 합니다. gradlew clean build 를 입력하고 jar 파일을 찾아들어갑니다. build -> libs 에서 확인할 수 있습니다. boot-0.0.1-SNAPSHOT.jar 파일의 크기를 보면 약 18M 인 것을 확인할 수 있습니다. 작지 않은 크기인데, jar 에 어떤 내용이 있는지 확인해보겠습니다. 압축을 푸는 방법은 jar -xvf boot-0.0.1-SNAPSHOT.jar 를 입력합니다. BOOT-INF 와 META-INF.. 2023. 3. 1.
RestTemplate의 개념과 기본 사용법 스프링에서 제공하는 HTTP 통신 기능을 쉽게 사용할 수 있게 설계되어 있는 템플릿입니다. HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킬수 있으며 동기 방식으로 처리됩니다. REST 서비스를 호출하도록 설계되어 HTTP 프로토콜의 메소드에 맞게 여러 메소드를 제공합니다. + 스프링 5.0 이후 부터는 WebClient 를 사용하기를 권장합니다. https://tecoble.techcourse.co.kr/post/2021-07-25-resttemplate-webclient/ RestTemplate과 WebClient 이 글은 자바에서 HTTP 요청을 써봤거나 써보려고 하는 독자를 대상을 작성하였습니다. 스프링 어플리케이션에서 HTTP 요청할 때 사용하는 방법으로 RestTemplate과 W.. 2023. 2. 26.
@ResponseStatus 와 ResponseEntity 차이점 프로젝트를 진행하면서 처음에는 ResponseEntity 로 전부 깔고 시작했다. 현 프로젝트에서는 "복잡성을 굳이 가져갈 필요 없다, 대중적으로 사용하지만 사용하지 않는(어울리지 않는) 것은 단순화 할 필요가 있다" 라는 생각이 들어 @ResponseStatus 로 리팩토링했다. 추상화 VS 커스터마이징 이 둘중에 하나를 사용해야 한다고 하면 그 상황에 맞는 선택이 필요하고 생각한다. 간편하게 빠르게 사용할 수 있는 추상화를 사용하고, 이후 리팩토링을 진행하거나 필요에 맞게 커스터마이징 할 수 있는 레벨로 변경하는 것이 좋은 방법이 아니지 않을까 생각한다. 정답은 없으니 프로젝트에 맞는 유연한 대처가 필요하다. @ResponseStatus 어노테이션은 HttpStatus 를 표현하는 방식 중 하나이다... 2023. 1. 21.
Multipart 는 HTTP POST 로만 사용 프로젝트 중 상품 수정 관련하여 통합테스트 작성 중 Multipart 관련하여 오류가 발생해 찾아보게 되었다. 발생한 오류는 405 에러로, HTTP 메서드가 잘못된 에러였다. 여기서 궁금했던 점은 , 상품 등록 할 때와 똑같이 multipart 를 사용했고, contentType 도 MIXED 를 사용을 했는데 에러가 발생했다는 점이었다. 405에러니까 HTTP 메서드를 보았는데, 등록은 POST 수정은 PUT 이었다. 따라서 PUT 이 잘못되었다는 건데, POST 가 수정으로 사용할 수 있으니 바꾸어 테스트 해보니 정상적으로 통과가 되었으며, 실제 POSTMAN 에서 직접 POST 로 수정했을 때 정상적으로 DB 데이터와 S3 데이터 모두 정상변경 되는 것을 확인했다. 이제 왜 PUT 은 안되는지 확.. 2023. 1. 11.