목록전체 글 (531)
개발놀이터
이번 포스팅에서는 MySQL에서 MySQL로 데이터를 마이그레이션하는 방법에 대해서 포스팅하도록 하겠습니다. 이번 마이그레이션의 특징은 기존 데이터가 완전히 Overwrite 해버리기 때문에 데이터가 존재하는 상태에서 진행하는 마이그레이션은 더 나중에 해봐야할 것 같습니다. 그럼 마이그레이션 시작하도록 하겠습니다. DBeaver로 마이그레이션 먼저 복제하고싶은 데이터베이스를 오른쪽 클릭해서 도구 > Dump database를 클릭합니다. 마이그레이션할 테이블을 선택해야합니다. 디폴트는 모든 테이블이 선택됩니다. 그리고 "다음"을 눌러서 내가 복제할 데이터가 어디에 저장되는지 알아야합니다. 저는 C드라이브에 Users에 user군요. start를 누르면 해당 경로에 sql파일이 있을겁니다. 하지만 에러가 ..
이번 포스팅에선 Docker를 이용해 MySQL을 설치하고 외부 연결까지 해보도록 하겠습니다. 사전 준비로 ec2가 준비되어있어야 합니다. 또한 ec2의 크기를 medium으로 설정하셔야합니다. 그래야 docker를 돌렸을 때 렉이 안걸린다고 하네요. ec2 설치는 아래의 링크를 확인해주세요. https://coding-review.tistory.com/160 aws 배포 ec2 (1) : 모놀리식 배포 우선 aws ec2에 들어간다. 인스턴스 시작을 클릭! 더 많은 AMI 찾아보기를 클릭 후 우분투 리눅스를 둘중 하나 클릭 조금 내려가다 보면 키 페어를 선택하라고 나오는데 이부분은 새 키페어 생성을 coding-review.tistory.com 이제 시작해보죠! 1. Docker 설치 먼저 도커를 설치..
이번 프로젝트에서 단위테스트를 해야할 일이 생겨서 알아보던 중에 Mockito에 대해서 알게 되었습니다. 스프링을 공부한지 만으로 2년이 되어가지만 아직까지 Mockito를 이용해 테스트 케이스를 만드는 법을 모른다는 사실에 반성하게 되었습니다. 많은 개발자 선배님들이 TDD를 외치셨는데 저는 그걸 지키지 못한 것 같아서 조금 아쉽지만... 지금이라도 TDD를 실천하고자 이렇게 포스팅 적어봅니다. 이번엔 Mockito를 어떤 방식으로 사용해야 하는지 그리고 주요 문법은 무엇이 있는지에 대해서 알아보도록 하겠습니다. Mockito Mock 이라는 단어는 가짜, 허구의 라는 뜻입니다. 즉 Mock 객체를 만들어 (가짜 객체를 만들어) DB의 접근 없이도 자신의 코드의 논리적인 부분을 체크하는 방법이 바로 M..
이번 포스팅은 스프링 부트가 얼마전 3.0이 됨에 따라 바뀌게 된 점 중 저에게 해당하는 점만 정리해보겠습니다. 자세한 내용은 이곳! https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide Spring Boot 3.0 Migration Guide Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub. github.com 스프링 부트 3.0 1. JavaEE에서 JakartaEE로 변경 javax 패키지에 있던 것들이 전부 jakarta로 변경되었습니다. 때문에 만약 JPA를 사용하신다면 ..
Q. 스프링 시큐리티의 동작 방식에 대해서 설명해주세요. A. 먼저 Proxy Chain Filter가 필터를 만듭니다. 그리고 프록시로 생성된 필터가 request를 인터셉트합니다. 인터셉트한 request로 인증을 진행하고 인증이 끝나면 Security Context를 업데이트합니다. 업데이트함과 동시에 인가가 진행되고 Exception을 핸들링 한 다음 사용자의 요청을 핸들링합니다. Q. 스프링 시큐리티의 인증 방식에 대해서 설명해주세요. A. 먼저 request와 걸맞는 필터가 작동합니다. form 형식의 request는 UsernamePassowrdAuthenticationFilter가 작동하고 OAuth 2.0의 형식은 OAuthLoginAuthenticationFilter가 작동합니다. 그리..
Q. 낙관적 락과 비관적 락에 대해서 설명해주세요. A. 둘 다 데이터에 락을 걸어서 동시성 문제를 해결하는 방법중에 하나입니다. 낙관적 락은 충돌이 빈번하지 않은 경우에 효과적입니다. 낙관적 락은 커밋과정에서 충돌을 감지하여 Exception을 던지는데 이 때 Exception은 OptimisticLockingFailureException입니다. 이 예외를 처리함으로써 동시성 문제를 해결할 수 있습니다. 비관적 락은 충돌이 빈번한 경우에 더 효과적입니다. 비관적 락은 반드시 동시성 문제가 발생한다는 가정을 하고 락을 걸기 때문에 데이터의 정합성이 보장되지만 낙관적 락에 비해 성능이 조금 부족할 수 있습니다.
Q. 비동기 프로그래밍과 Non-blocking (Architecture) 의 차이에 대해서 설명해주세요. A. 동기 / 비동기 프로그래밍은 클라이언트와 서버간에 커뮤니케이션을 할 때 한번 request를 보내면 그에 상응하는 response가 올때까지 기다려야 한다는 것입니다. 반면에 블로킹 / 논블로킹 아키텍처는 여러개의 프로그램 혹은 스레드가 공유된 자원에 접근할 때 같은 자원에 하나의 스레드만 접근할 수 있도록 접근을 막는 것입니다.
스프링 부트가 5.0이 됨에 따라 그런지 모르겠지만 javax.persistence에 있던 EntityManager가 작동하지 않는 상황이 발생했습니다. 이제 EntityManager는 jakarta.persistence로 바뀌게 되었는데 이에따라 querydsl의 설정을 바꿔줘야할 필요가 생겼습니다. 구글링을 해본 결과는 다음과 같습니다. buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '3.1.0' id 'io.spring.dependency-management' version '1.1.0' // querydsl plugin 제거 //id "com.ewerk..
스프링 부트가 5.0에 들어오면서 기존 Job과 Step을 작성할 때 사용하던 JobBuilderFactory, StepBuilderFactory가 Deprecated 되었습니다. 때문에 기존 방법 대신 아래와 같은 방법으로 사용해야합니다. @Configuration @RequiredArgsConstructor @Slf4j public class MonthClickToZeroBatch { private final EntityManagerFactory emf; private final JobRepository jobRepository; private final PlatformTransactionManager platformTransactionManager; private static final int PA..
1. 기존 검색 방식 LIKE 연산자를 이용한 검색을 했습니다. 2. 기존 검색의 문제점 인덱스 설정을 할 수 없습니다. 인덱스를 설정하면 시간 복잡도가 O(log n)이지만 인덱스를 설정하지 못하기 때문에 시간 복잡도가 O(n)에 바인딩 즉, 풀스캔으로 조회합니다. 3. ver.2에서 개선한 점 Elasticsearch의 역색인을 이용해 검색 성능을 20배 (100만행 기준) 끌어올렸습니다. Elasticsearch 고난 항상 느끼는 것이지만 NoSQL은 진입장벽이 어마어마한 것 같습니다. RDBMS에 너무 익숙해진 것도 있겠지만 하나부터 열까지 새롭지 아니한게 없었습니다. RESTful API로 테이블 (인덱스)를 만들고 모든 CRUD 또한 RESTful API를 따르고 있었습니다. 또한, GUI도 ..