자바 진영의 JPA와 TypeScript 진영의 TypeORM은 비슷한듯 다르다. 서비스 개발을 하면서 TypeORM을 사용했을 때는 TypeORM로 데이터를 조회할 때 자동으로 SoftDelete된 데이터는 제외해주는 기능이 있었는데, JPA에는 그런 기능이 없는 것이다.import jakarta.persistence.*;import org.hibernate.annotations.*;@Entity@SQLDelete(sql = "UPDATE my_table SET is_deleted = true WHERE id = ?")@Where(clause = "is_deleted = false")public class MyEntity { @Id @GeneratedValue(strategy = Genera..
사두고 언제 다 듣나 했는데 그래도 다 듣긴 했다. 2022년 5월에 산 '헤드 퍼스트 디자인 패턴' 책도 사놓고 보고 싶은 일부만 보고 나머지는 안 봐서 이 강의랑 같이 봤다. 헤드 퍼스트 디자인 패턴 같은 경우, 해당 패턴에 대한 이해가 목표로 써져 있어서 이것 저것 생각해볼 거리가 많았고, 본 강의는 실제로 자바, 스프링에서 해당 패턴을 어떻게 사용하고 있는지 알려줘서 적용 사례를 알 수 있어서 좋았다. 그래서 나는 헤드 퍼스트 디자인 패턴 책으로 패턴을 먼저 이해하고 강의를 들으며 내가 실제로 이해한 방향이 맞는지 확인도 하고 실제로 어떻게 적용되고 있는지 확인하는 방향으로 진행했다. 그래도 디자인패턴은 이렇게 강의 하나를 다 봤다고, 책 한 권을 다 봤다고 오롯이 내 것이 되는 건 아니다. 이제..
지난 추석, 인프런에서 뿌리는 30% 쿠폰에 난 뭘 살까 하다가 내내 한 번 해보고 싶었던 스프링 시큐리티 강의를 샀다. 그래서 추석 때도 듣고 틈틈이 들은 결과 오늘 완강할 수 있었다. 수료증에 찍힌 날짜를 보니 거의 한달이 걸렸는데 이 강의 들으면서 힘들었던 거에 비하면 완전 양호하다고 생각한다. 우선, 이 강의를 들으면서 스프링이나 JPA, AOP에 대한 이해가 있어서 소문으로 들은 것만큼 많이 어렵지는 않았는데, 문제는... 스프링 시큐리티 버전이었다. 나는 5.4버전으로 하고, 강의는 이전버전이었는데 이 사이에 너무 많은 게 바뀌어서 혼자 deprecated된거 바꿔가면서 듣느라 머리가 좀 아팠다. 그리고... 참고용 코드는 존재하지만 어디까지나 참고용이라 강의보면서 따라치다가 문제생기면 알아서..
윈도우 노트북에서 Redis를 이용하여 조회수 동시성 이슈 해결하고 Jmeter로 테스트해보기(https://dakafakadev.tistory.com/257)를 실행했을 때는 Jmeter가 이상없이 잘 작동했는데, macOS에서는 Jmeter가 제대로 실행되지 않는 문제가 있었는데 어쨌든 해결하긴 해서 정리해둔다. 요 문제는 구글링을 해도 답이 없어서 혼자 찾아봤다. 참고로 jmeter 5.6.2버전이고, 실행한 OS는 Sonoma 14.0버전이다. 문제 우선 나는 원래 homebrew를 사용하기 때문에 brew로 설치를 하고 실행했는데, 다음과 같은 문제가 발생했다. 여기서 주의깊게 볼 곳은 바로 이곳이다. /usr/local/Cellar/jmeter/5.6.2/libexec/bin/jmeter: l..
회사에서 사용하는 기술스택과는 다른 기술스택을 사용하고자 개인프로젝트를 하고 있는데, 그중 조회수 관련하여 동시성 이슈를 만들어 해결한 경험이 있어서 정리한다.문제public DataResponse findBoardById(Long boardId) { Board findBoard = boardRepository.findBoardById(boardId); findBoard.setViewCount(findBoard.getViewCount() + 1); return new DataResponse(findBoard != null ? findBoard.toBoardShow() : null); }이 부분은 게시물 아이디로 게시물을 조회한다. 이 부분에서 게시물의 조회수를 올려야 하므로 위와 같은 코드를 생각할 수 ..
1. 컴퓨터 구조와 프로그래밍 4장까지 다 읽고 5장도 약간 읽었다. 2. 기술면접 예상질문 5개 준비했다. 이번주는 시간이 없다보니 간단하게 정리했는데 좀 더 깊이있게 공부할 필요가 있다. 3. Redis강의 목표한 섹션4까지 다 들었다. 4. JPA로 게시판만드는 프로젝트를 이틀에 하루는 꼭 조금씩이라도 개발하자고 했는데, 중간에 빼먹은 날이 있다. 그래도 그외에는 약속을 지켰으니 양호하다. 그리고 어쩌다가 알게 된 글(https://cheese10yun.github.io/spring-guide-exception/)을 통해 유용한 Exception 전략을 알게 되서 적용해보았던 것이 큰 수확이었다.
영한님 강의 듣는 속도보다 사는 속도가 빨라서 '아 이거 언제 다 듣나'하고 생각했는데 드디어 오늘 그동안 사놓은 강의를 다 들었다. 👏👏👏👏👏 아래는 그동안 들은 영한님 강의 떼샷. 이 많은 강의 중 내가 마지막으로 들은 강의가 바로 '스프링 부트 - 핵심 원리와 활용'이다. 간단하게 스프링 부트를 훑는 강의였는데, 그 중 "섹션 5 자동 구성"이 좋았고, "섹션 6 ~7 외부설정과 프로필"은 이미 알고 있는 내용이라 편하게 들었다. 그리고 끝부분에 "섹션 8 액츄에이터", "섹션 9 마이크로미터, 프로메테우스, 그라파나", "섹션 10 모니터링 메트릭 활용" 이 몰아있는데 여기는 진짜 너무 너무 좋았다. 지난번에 더미데이터 150만개 만들어서 테스트하다가 out of memory가 났을 때(https..
RestTemplate 자바 11 이전까지 권장되는 HTTP 클라이언트 라이브러리 주로 동기식 방식으로 동작, 요청을 보내면 해당 요청이 완료될 때까지 블로킹 ListenableFuture나 CompletableFuture와 같은 타입을 사용하여 비동기식 요청 처리 가능 HttpClient 자바 11부터 표준 라이브러리 비동기 요청 지원 WebClient Spring 5.0부터 도입 비동기적인 리액티브 프로그래밍을 위한 기능 제공 RestClient SpringBoot 3.2에 새롭게 추가 RestTemplate과 동일한 기반 기술 바탕으로 함