들어가며업무를 하며 form 데이터를 서버에 보내야 할일이 생겼다.form 에서 User 가 Sign 을 하면 그 Sign 한 값을 서버로 보내야 했다. 위 사인한 값을 추출해서 서버로 보내야 했고, 서버로 값을 같이 보내기 위해 아래 방법을 사용했다.function onSignSave() { const canvas = document.getElementById('drawCanvas'); const dataUrl = canvas.toDataURL(); // 숨겨진 input 필드에 Data URL 저장 document.getElementById('signImg').value = dataUrl;} 위 코드를 사용하고 사용하여 input 폼에 Value 를 줘서 서버로 보내지게 만들었..
들어가며Spring 어플리케이션을 사용해 무언가를 만들다보면 트랜잭션을 당연하게 사용한다.추가적으로 여러 사람에 코드를 보면 @Transactional 어노테이션이 붙어있는 코드를 보고는 한다. 나 또한 무의식 속에 @Transactional 을 서비스 계층에 있는 비즈니스 로직에 붙이고는 한다.대충 알기로 트랜잭션, 즉 CUD 작업이 일어나는 곳에 붙이면 된다. 정도만 알고 있었고 어떠한 역할을 하고, 왜 붙여야 하는지는 제대로 알지 못했다.이번 공부를 통해 확실하게 알아본 내용을 적어보려고 한다. 본론데이터를 관리할 때 가장 중요하게 여기는 점은 정확한 데이터를 유지하는 것이다 우리는 특정 실행 시나리오가 잘못되거나 일관되지 못한 데이터로 끝나 버리기를 원치 않는다.위 시나리오가 위배될 경우 당..
들어가며토이 프로젝트를 하며 이 오류를 처음 접하게 되었다. 아래 내용을 통해 어떻게 해결하는지 알아보자 아래 코드를 보자@RequiredArgsConstructorpublic class CustomUserDetails implements UserDetails { private final LoginEntity login; private MemberEntity member; @Override public Collection getAuthorities () { Collection collection = new ArrayList(); collection.add(new GrantedAuthority() { @Override public String getAuthority () { return l..
들어가며토이 프로젝트에서 JWT 랑 Spring Security 를 사용하여 로그인을 구현하는 기능을 만들고 있던 중여러 인증,인가 관련된 여러 에러 를 만나게 되었습니다. 위 기능을 잘 사용하기 위해서는 Security 기본은 알아야 더 잘 구현할 수 있겠다는 생각이 들어기초적인 내용을 공부를 해본 후 중요한 내용만 포스팅을 하려고 합니다. 들어가기 전에 앞서 Spring Security 의 동작 구조에 대해서 간단하게 설명을 하며,Spring Security 가 어느 부분에서 개입을 하는지, 어떤 역할을 하는지를 위주로 알아보겠습니다. 보통 Java, Spring 개발자들이 security 를 사용하는 이유는 여러 이유가 있겠지만,저는 JWT토큰 로그인을 기능을 알아보면서 자연스럽게 spring-se..
들어가며위 Jackson 라이브러리는 Spring 에서 객체를 직렬화, 역직렬화 할 때 필수 라이브러리이다.위 라이브러리를 사용 안하는 백엔드 개발자는 없을 것? 이라고 생각한다. 회사 코드를 보다가 자주 보이는 것이지만, 매번 검색하는 번거로움을 줄이기 위해 정리를 해놓으려고 한다. https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind Jackson 라이브러리를 사용하기 위해선 위 URL 에 접속해서 gradle or Maven 본인이 사용하는빌드 도구 코드를 따서 의존성 주입을 시키면 된다. Gradle// https://mvnrepository.com/artifact/com.fasterxml.jackson.cor..
들어가며가끔 JDK API 에 내부 구현이 궁금해 내부 구현을 파고들다 보면 몇몇의 상위 객체는implements Serializable 을 구현 하고 있는 것을 본적이 있을 것 입니다. 평소에는 그냥 이런게 있구나 하고 가볍게 넘기곤했다.그러다 JPA 관련 문서를 보다가, JPA 공식 문서에 Entity 의 기본 구현은 Serializable 을 구현하는 것이라는 것을 봤다. 하지만 저는 Entity 를 구성하면서 한번도 Serializable 을 구현한적이 없었죠. 그래서 궁금했습니다. 이게 뭐길래 다양한 객체 내부구현을 타고가다 보면 최상위에 있는지 왜? 이걸 구현하는지가 궁금했다. 그래서 한번 공부를 해봤다. 1. 직렬화, 역직렬화직렬화는 간단하게 설명해 객체를 외부의 자바 시스템에서도 사용할 ..
서론 토이프로젝트를 진행하다가 insert 쿼리를 날리는 회원가입 로직을 작성하는데자꾸 마지막에 쿼리에 update 쿼리가 발생하는 문제를 확인하였다. DB에 insert 되는 데이터에는 크게 문제가 없긴했다.하지만 궁금했다, 나는 분명 insert 로직만 작성을 했는데 왜 update 쿼리가 날라갈까? 본론을 들어가기 전에 간단한 더티 체킹 개념에 대해서 이야기 해보겠습니다. 더티 체킹이란?JPA에서 더티 체킹(dirty checking)이란 영속성 컨테이너가 관리하는 엔티티의 상태를 감지해서, 변경된 부분이 있다면 자동으로 트랜잭션이 끝나는 시점에 데이터베이스에 반영하는 기능이다.여기서 말하는 dirty는 “엔티티 데이터의 변경된 부분”을 뜻하며 checking은 변경된 부분을 감지한다는 의미이다. ..
서론문득 Java 공부를 하면서 abstract 로 선언된 클래스랑 interface 를 알게되었습니다.둘이 하는 역할이 비슷한데 왜 하나로 통합하지 않고 각각을 사용할까? 라는 고민이 들었습니다. 그래서 역시나 생각할 시간에 직접 만들어서 내가 비교를 해보면 개념을 파악하는데도움이 될 걸 알기 때문에 직접 해보고 공부한 내용을 바탕으로 글을 써 봤습니다.(부족한 내용은 내 개발 인생 동반자인 자바의정석 과 ChatGPT 를 참고 했습니다) 본론객제치향 관점에서 abstract 와 interface 는 추상화 라는 개념을 사용하는 도구로 쓰입니다. 위 '추상화' 를 통해 컴파일 시점 의존성과 런타임 시점 의존성이 달라지는걸 볼 수있죠.위 방법을 '동적 바인딩' 이라고 합니다. 이제 abstract 랑 i..