개발
-
보수를 이용해 뺄셈을 할 때 자릿수가 맞지 않는 경우개발/etc 2024. 6. 28. 15:06
9 - 6을 연산을 해보자. 9의 이진수: 10016의 이진수: 01106의 2의 보수: 1001(1의 보수) + 1 -> 10101001 + 1010 = 0011은 3이므로 잘 된다. 올림이 일어난 비트는 버려지기 때문에 문제 없다. 16 - 6을 빼면 어떨까?16의 이진수: 0001 00006의 2의 보수는 1010인데 비트 수를 맞춰야 하니까 0000 1010으로 해서 더해보면 0001 1010이 되므로 26이 나와버린다. 이렇게 된 이유는 신호 확장을 올바르게 하지 못했기 때문이다. 보수를 구해서 덧셈을 했지만 우리는 뺄셈을 해야 하는 것이다. 즉 빼는 수가 음수라는 의미. 이진법에서 음수를 표현하는 방법은 최상위 비트를 1로 두는 것인데 우리의 사례처럼 비트 수를 확장해야 하는 경우에 "신호 확..
-
React-query 이용해서 무한 스크롤 구현하기(feat. Spring + Java)개발/React 2024. 6. 4. 17:00
직접 구현할 수 있는 부분에도 라이브러리를 쓰는 걸 별로 좋아하지 않지만, react-query는 회사에서 많이 쓰는 기술이기도 하고 철학이나 인사이트를 얻을 수 있는 점에서 공부할 거리가 있긴 하다. useInfiniteQuery를 이용해서 무한 스크롤을 구현하려는 사람에게 조금이나마 도움이 되기를 바란다.기술환경Next.js 14.1.3@tanstack/react-query: 5.28.4(react-query 버전이 올라가면서 @tanstack이 붙음)Spring boot starter: 3.2.3Spring boot starter security: 3.2.3(spring security core: 6.2.2)Spring data jpa: 3.2.3(hibernate core: 6.4.4.Final)..
-
[돌다리 두들기기] IOS 스타일의 토글 스위치개발/HTML CSS 2024. 5. 23. 16:40
React로만 프론트엔드를 다루다 보니까 바닐라 JavaScript의 기본도 어색해져 가는 것 같다.그래서 되짚어보는 IOS 스타일의 토글 스위치다. 설명은 코드에 주석으로 달았다(box-shadow는 적용 안 함). .switch { position: relative; /* 이렇게 하면 slider에서 absolute로 내부 위치를 편리하게 조정 가능 */ display: inline-block; /* inline이지만 높이와 길이를 가질 수 있다 */ width: 50px; height: 24px;}/* 체크박스를 안 보이게 한다 */.switch input { opacity: 0; width: 0; height: 0;}/* - 실제 스타일링은 여기에서 이루어진다- 토글의 원..
-
[돌다리 두들기기] Builder 패턴개발/JPA 2024. 4. 24. 14:43
JPA 엔티티에서 롬복의 @Builder 패턴을 사용할 경우 @AllAgrsConstructor와 @NoArgsContructor를 붙여야 한다. JPA 스펙에서 엔티티 클래스는 기본 생성자를 가져야 하며, @Builder에서 코드를 만들 때 필드를 받아서 객체를 생성하는 생성자를 필요로 한다. @Builder 패턴에서 생성되는 코드는 다음과 같다. 롬복의 코드와 똑같진 않지만 기본 흐름은 다르지 않다. public class Person { private String name; private int age; public static class PersonBuilder { private String name; private int age; ..
-
정리된 인증 과정개발/etc 2024. 4. 16. 16:42
별도의 인증 서버는 두지 않는다프론트엔드를 Next.js로만 구현하려고 했고 이는 키클록 인가 서버 혹은 스프링으로 인가 서버를 두게 되면 페이지를 Next.js로 개발하는 것에 한계가 있다. 키클록 인가 서버는 자체 페이지를 쓰거나 프리마커로 커스텀 하는 방식을 써야 하며, 스프링 인가 서버는 프레임워크에서 로그인 페이지를 렌더링해야 한다. 타임리프를 쓰면 되긴 하지만 이번 프로젝트에서는 직접 토큰을 다뤄보는 연습을 해보자.리소스 서버에서 토큰을 발행한다JJWT 라이브러리를 사용해서 토큰을 발행하고 클레임을 추출한다토큰 정책액세스 토큰의 만료 기간을 짧게 가져가고 리프레시 토큰의 만료 기간을 길게 가져가는 방식액세스 토큰이 유출됐을 때의 대안인데 리프레시 토큰이 유출되면 관리자가 무효..
-
[JPA][Archiving] in_clause_parameter_padding 옵션개발/JPA 2024. 3. 3. 12:38
이 글은 nhn cloud 기술 블로그에 올라온 글을 그대로 가져왔습니다. (원본 링크) Java ORM 기술의 표준 명세인 JPA가 소개된 지 참 오래되었지만, 국내 현실상 대규모 시스템에서 적용되어 사용된 운영 경험이 충분히 쌓이지 않고 공유되지도 않는 것 같습니다. 대부분 JPA를 사용한다고 하면 Hibernate를 구현체로 사용하게 됩니다. 제가 담당하는 서비스 역시 Spring Data JPA를 활용하고 있고 JPA 구현체로 Hibernate를 사용하고 있습니다. 개발과 서비스를 운영하면서 겪은 일 중에 SQL의 in 절과 관련해서 발생한 문제를 해결하면서 알게 된 옵션과 그로 인한 효과를 소개해 드리고자 합니다. 증상 운영 중인 서버가 이유 없이 응답이 느려집니다. 그리고 가비지 컬렉션을 너무..
-
Update개발/JPA 2024. 3. 3. 12:35
특정 필드만 업데이트 하려는 목적으로 코드를 작성하지만 JPA가 작성하는 query를 보면 해당 레코드 전체를 업데이트 한다. 이는 JPA가 어플리케이션을 로딩할 시점에 PreparedStatement로 해당 엔티티의 update query를 미리 만들어둔다고(참고 인프런 김영한님 답변). 해당 내용은 공식 문서에서 찾게 되면 해당 내용를 업데이트 하겠다. 어쨌든 오동작이나 최적화 문제는 아니라는 것을 알고 있자. 굳이 필요하면 @DynamicUpdate를 하이버네이트가 변경된 필드에 대해서는 업데이트하도록 할 수 있다. 아직 개발을 오래 한 건 아니지만 '굳이' 해야 되는 일은 대부분 안 해도 되는 거더라.