1. 들어가며실무를 하며 느끼는게 하나가 있다.내가 생각한대로 개발 일정 및 개발 요구사항이 평온하게 진행되는 경우는 없다고 느꼈다. 그렇기에 실질적인 요구사항에 맞춰 개발하는 나로써는 항상 이러한 고민을 하게 된다. '어떻게 하면 유동적으로 코드를 변경할 수 있을까?''어차피 요구사항이 계속 추가될걸 예상하고, 어떻게 코드를 추상화시켜서 내가 덜 고생할 수 있을까?' 라는 고민이 요즘들어 많이 든다. 평소에는 내가 코드를 짜는 방식은 일단, 작동은 되게 만들어 둔 후, 천천히 리팩토링 및 고도화를 시키는게 나만의 코딩 방식이였다. 하지만...바뀌는 요구사항들 및 버려지는 내 코드들을 보며, 느끼게 되었다. 처음부터 내가 코드 설계를 쪼금만 더 잘했다면??? 덜 고생하지 않았을까? 하는 생각을 한다. ..
들어가며업무를 하며 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 를 줘서 서버로 보내지게 만들었..
들어가며위 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. 직렬화, 역직렬화직렬화는 간단하게 설명해 객체를 외부의 자바 시스템에서도 사용할 ..
서론문득 Java 공부를 하면서 abstract 로 선언된 클래스랑 interface 를 알게되었습니다.둘이 하는 역할이 비슷한데 왜 하나로 통합하지 않고 각각을 사용할까? 라는 고민이 들었습니다. 그래서 역시나 생각할 시간에 직접 만들어서 내가 비교를 해보면 개념을 파악하는데도움이 될 걸 알기 때문에 직접 해보고 공부한 내용을 바탕으로 글을 써 봤습니다.(부족한 내용은 내 개발 인생 동반자인 자바의정석 과 ChatGPT 를 참고 했습니다) 본론객제치향 관점에서 abstract 와 interface 는 추상화 라는 개념을 사용하는 도구로 쓰입니다. 위 '추상화' 를 통해 컴파일 시점 의존성과 런타임 시점 의존성이 달라지는걸 볼 수있죠.위 방법을 '동적 바인딩' 이라고 합니다. 이제 abstract 랑 i..
안녕하세요 🤚오늘은 Instant & LocalDateTime 차이에 대하여 알아보려고 합니다.위 내용을 다루기 전에 간단하게 자바8 전 후 에 다루던 날짜, 시간 API 가 어떻게 변했는지도 살짝 알아보려고 합니다. 서론 회사 프로젝트를 살펴보던 중 시간 관련 데이터들을 DB에 TimeStamp 로 데이터 타입이 지정되어 있었다.그리고 엔티티에서는 LocalDateTIme 이 아닌 Instant 로 설계가 되어 있었다. 기존에 내가 했던 프로젝트는 DB에서 LocalDateTime 을 사용했고, 엔티티에는 DateTIme&TimeStamp 으로 설계를 해왔기 때문에왜 그럴까? 라는 궁금증이 생겨 따로 정리를 해보고 포스팅하게 되었습니다. 위 내용을 설명하기 전에 간단하게 자바8 전 후 날짜,시간 A..
안녕하세요 👐오늘은 성능측정도구 JMH 에 대한 이야기를 해보려고 합니다. 서론제가 JMH 를 알게 된 계기는 자바에서 Stream 과 일반 for loop 에 대한 성능 측정을 해보고둘에 대한 차이를 알아보다가 자연스럽게 알게 되었습니다. JMH 라이브러리는 간단하고, 어노테이션 기반 방식을 지원하며, 안정적으로 자바 프로그램 또는 JVM 메모리를 사용하는모든 언어를 대상으로 벤치마크를 구현할 수 있습니다. 벤치마크라는 단어가 생소 했습니다. 맨처음엔 mysql workbench 랑 헷갈렸었죠..😅 벤치마크는 컴퓨터 시스템, 소프트웨어, 하드웨어, 디바이스 등으 성능을 측정하고 비교하기 위해 사용되는 표준화된 테스트 입니다.이 테스트는 일반적으로 속도,처리량,응답시간,성능 과 같은 측면을 측정..
안녕하세요🤚오늘은 Stream API 를 공부하며 궁금했던 내용에 대해서 이야기 해보려고 합니다. 서론요즘 모던 자바 인 액션 책에 푹 빠져있어, 매일 매일 책을 읽으며 새로운 지식들을 쌓아가고 있습니다.아직 응애 개발자인, 3개월차 개발자가 보기엔 어려운 내용이 많지만, 새로운 내용이 많아서 처음부터 시작하는 거 같은 신기한 기분을 느끼고 흥미로워서 재밌습니다. 스트림은 자바 8부터 새롭게 생긴 문법으로 기존의 자바 문법들 보다 더 좋을 것이라고 생각했습니다. 그래서 아직 사용이 자연스럽지 않음에도 연습할 필요성을 느껴서 책을 사서 공부를 하는 중입니다. 모던 자바 인 액션은 자바8 이후 새로운 문법에 대해서 이야기하는 책으로대표적으로 Lambda, Stream, Optional 등 새로운 문법들을 ..