목록우당탕탕 삽질기 (13)
지나공 : 지식을 나누는 공간
들어가는 말 최근 회사에서 solid 원칙을 적용하여 리팩터링을 진행했다. 워낙 의존성이 꼬여 있어서 무언가 로직을 바꾸기 보다는 최대한 기존의 로직을 유지하면서 진행해야 했다. 그래서 기존 로직을 유지한다는 요구사항을 만족하지만 더 적합한 기술(?)로 바꾸는 작업만 했는데 그 과정에서 직면한 문제가 있었다. 일단 문제에 들어가기 앞서 스프링 빈 콜백에 대해 훑어보고 들어가자. 스프링 빈 콜백 리마인드 스프링 빈으로 등록되는 클래스 안에서 어떤 멤버변수가 딱 한번만 초기화되게 하려면 어떻게 해야할까? 일단 스프링 빈은 기본적으로 싱글톤이기 때문에 딱 한번만 초기화해놓고 계속 그때 초기화된 그대로 멤버변수를 반환하는 것이 가능하다. 기존 로직은 아래처럼 매번 그 멤버변수의 size를 확인하여 원하는 값으로..
git pull을 어떻게 할지 전략이 세가지가 있으니 선택해서 명시해달라는 내용이다. 타 블로그 왈 git 2.27부터 추가된 기능이라고 한다. 기존 git pull의 문제점 : 세 가지 전략으로 나뉘게 된 배경 git pull --help에서는 아래처럼 설명한다. In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD. 번역하자면, 디폴트모드에서는 git pull이 git fetch, 즉 git merge FETCH_HEAD의 작업에 대한 간단명령어(속기)라는 말이다. 다시 말해 git pull의 내부 동작이 git merge FETCH_HEAD처럼 동작한다는 말이다. 따라서 이 디폴트모드에서는 g..
지난 신입 과제 때 webclient로 기상청 API를 호출하는 과정에서 아래와 같은 에러를 마주한 적이 있다. (해결법을 보고 싶은 분은 이 포스팅 맨 아래쪽으로 내리세욤) HTTP 헤더에 대한 기본 지식이 없었다. 그래서 지금 보니 진짜 엉망진창의 요청헤더였네?!?! 어디로 숨을가... 이 사진을 그대로 여쭤봤다니....어휴어휴.. 아무튼 과거의 쪽팔림은 뒤로 하고,(ㅋㅋ) HTTP 헤더 기본 내용도 공부했으니, 이제 이 내용을 적용해서 위에서 뭐가 잘못됐었는지 아래에서 살펴볼 예정이다. Header 기본 뭐가 잘못됐는지 보기에 앞서, 필요한 기본 개념부터 정리하잣. Header의 용도 HTTP 전송에 필요한 모든 부가 정보. 메시지 바디의 내용, 크기, 압축은 뭘로 했는지, 인증에 대해서, 캐시 관..
요즘 동기들이랑 매주 모던 자바 인 액션의 챕터를 읽고 궁금한 내용을 대화로 풀어가는 시간을 가지고 있다. 이번엔 스트림에 대해 읽었는데 읽으면서 우리가 되게 헷갈려서 궁금해했던 질문이 있었다. 흥미로운 것 같아 기록하려고 한다. 보고 잘못된 부분 있으면 답글 달아주세요~!!! 의문들 모든 요소가 만족되는 filter를 만들어놨을 때. stream에 findAny를 하면 filter건 조건에 만족하는 것들 중에 반드시 맨 첫 번째 요소가 나오고, parallelStream에 findAny를 하면 첫째 요소가 아닐 수도 있겠네!? 확인해보고 싶다! stream과 parallelStream에 각각 findFirst를 하면 어떨까? 1의 결과로 보아 parallelStream은 과연 진짜로 first인 값을 ..
이번 포스팅은 올해 5월에 올렸던 포스팅에 대한 후속 포스팅이다. https://eocoding.tistory.com/74 @Transactional에서 JPA로 delete한 뒤 insert가 안될 때, duplicate entry 에러가 날 때 해결하기 일단 원인과 해결 방법부터 적고 내 사례와 해봤던 시도들을 구체적으로 적는 건 다음 포스팅으로 넘기려고 한다. Spring Data JPA 사용 중에 데이터를 삭제한 뒤 추가하려고 했더니 duplicate entry 에 eocoding.tistory.com 댓글로도 후속 포스팅을 궁금해하신 분이 계셨는데 그동안 인턴도 하고 취업 준비도 하느라 블로그 포스팅을 못 쓰고 있었다. 대체 얼마만의 포스팅이지 ㅎㅎ 그럼 이제 본론을! 목차는 아래와 같다. 1...
일단 원인과 해결 방법부터 적고 내 사례와 해봤던 시도들을 구체적으로 적는 건 다음 포스팅으로 넘기려고 한다. Spring Data JPA 사용 중에 데이터를 삭제한 뒤 추가하려고 했더니 duplicate entry 에러가 발생했다. unique 조건이 있는 데이터인데 삭제가 되지 않은 채로 추가를 하려 해서 발생하는 에러였다. (이게 중복 허용하는 데이터였고 디버깅을 제대로 안했다면 얼마나 큰 일이 났을런지 ...ㅎㅎ 상상하기 싫다.) 실제 코드를 실행하는 부분에서 로그를 찍어보면 delete코드가 먼저 적혀있음에도 불구하고 hibernate가 insert를 먼저 실행하고 delete는 나중에 실행하는 걸 확인할 수 있다. 원인 : hibernate에서 동작하는 SQL 순서가 정해져 있기 때문. 실제 ..
회원가입 API를 개발하던 중, @ColumnDefault가 작동되지 않는 문제를 직면했었다. 어제 내 시간을 뺏어가버린...... 현재 상황 : 회원가입 API에서 request DTO에서는 email, password만 받고, User의 또다른 컬럼인 privateYn은 request에서 값을 받지 않으므로 Entity로 매핑했을 때 privateYn이 null이 된다. 하지만 privateYn은 not null이고 default값인 'N'로 저장되어야 한다. 현재 상황에서 저장을 하면 privateYn이 not null 이어야 하는데 null이라면서 에러가 발생한다. 그럼 어떻게 해야, request dto에서 값을 받지 않아서 null이 된 필드를 default값으로 변경해서 not null 조건..
SecurityConfiguration을 작성하던 중에 에러가 발생했다. authenticationManagerBean이 중복선언되었다는 내용이다. 열심히 오버라이딩을 할 방안을 찾다가 action에 있는 문구를 발견했다. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true. spring.main.allow-bean-definition-overriding=true 그래서 application.yml로 가서 spring. 밑에 아래와 같은 내용을 추가했다. spring boot 2.1부터는 bean definition overridi..
메모리 문제. sudo free -m 을 해 보면 swap이 0이다. sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo swapon -s free -h swapfile을 만들어서 권한을 설정하자.....
error : The following untracked working tree files would be overwritten by merge: Please move or remove them before you merge 문제가 되는 파일을 이동하거나 지우라는 의미. git pull하면서 충돌이 난 것이니 해결해주자. 일단 untracked 되는 파일이 있다는 것이다. git이 관리해주고 있지 않은 상태이므로 tracked 상태가 되도록 하자. git add -A git stash git pull 하면 된다. *tracked file : git이 관리해주는 파일이고 파일의 상태는 세 가지다. unmodified(파일이 수정되지 않은 상태), modified(수정된 상태), staged(저장할 예정인 ..