변경감지와 병합
·
💻 Dev/DB&JPA
JPA에서 데이터를 변경할때의 기본 메커니즘은 변경 감지(Dirty Checking)이다.개인적으로 신기하다고 생각해서 정리하게 되었다.아직은 내용이 많이 부족해서 더 채워야 할 것 같다... 더티 체킹(Dirty Checking) a.k.a 변경 감지란?@Transactionalpublic void updateItem(Long itemId, String name, int price, int stockQuantity) { Item findItem = itemRepository.findOne(itemId); findItem.setName(name); findItem.setPrice(price); findItem.setStockQuantity(stockQuantity);}위는 pk인 i..
2023년 회고
·
📝 끄적끄적/후기 및 회고
첫 회고'지나간 일을 돌이켜 생각함'이라는 뜻을 가진 회고,3년 차 개발자인 2023년에 처음으로 써보고자 한다. 찾아보니 회고에도 다양한 방법이 있던데.. 회고에서조차 뭘 분석하고 쓰긴 싫어서 손이 가는 대로 쓸 거다! 사실 저 회고의 뜻을 위해 월간 일기를 네이버 블로그에 쓰고 있었다. 나이가 드니 남는 건 사진과 기록뿐이라는 생각이 더 많이 들기 때문..(기억력이 안 좋아져서도 있음) 저 일기는 개발자인 '나'가 아니라 자본주의의 노예, 도비인 '나'의 일기기 때문에이제 개발자인 '나'의 1년을 회고해보고자 한다. 첫 모각코어떤 이유에선지 모르겠는데 문득 인프런 커뮤니티를 보다가, 대구도 개발자 단톡이 있고, 거기서 모각코를 한다는 글을 보게 됐다.혼자 공부하다가 심심했는데 잘됐다 싶어서 바로 오픈..
aria-label을 사용한 웹 접근성 처리
·
💻 Dev/Etc
최근 웹, 모바일 접근성 심사를 진행하면서 대체 텍스트에 대한 부분을 맡게 되었다. 여태까지는 웹 접근성만 했어서 title, alt로 처리했었는데, 모바일 접근성도 하게 되면서 WAI-ARIA를 사용했다. 그리고 Title 속성 사용을 지양해야 하는 이유라는 글을 보고 aria 태그를 적극적으로 활용해야겠다고 생각했다. 간단한 예시로 기록하려고 한다. (안하면 까먹을 것 같아서) 이미 전체적인 CSS가 너무 범용적으로 입혀져 있어서 기존 태그 변화 없이 진행해야 했음을 미리 밝힙니다... 사용 속성 role role은 태그의 역할을 지정하는 속성이다. 정해진 태그만 사용할 수 있음 ex) link, button, tab ... aria-label aria-label 은 태그에 이름표를 붙이는 것과 같다..
미션2. 로또 - TDD 회고
·
📝 끄적끄적/TDD, 클린 코드 with Java 17기
본격적으로 TDD 기반으로 테스트 코드를 작성했다. 도메인 설계 기본기가 부족하니 객체에 대한 책임을 분리하는 게 어려웠다. 처음에는 프로덕션 코드보다 테스트 코드를 먼저 짜는 게 이상하고, 시간적으로 비효율적이라고 생각했는데 '이건 이렇게 동작해야 해!' 하는 테스트 코드가 있으니 과감하지만 안정적으로 리팩토링 할 수 있었다. 😮 1단계 - 문자열 계산기 "2 + 3 * 4 / 2"와 같은 문자열을 입력할 경우 이를 계산해 10을 출력하는 계산기를 구현해야 했다. 항상 메서드 재사용을 고려하자 나는 사칙연산 기호+기능을 enum 클래스로 구현했기 때문에 연산을 하려면 문자열 내의 기호와 일치하는 상수 값을 찾아야 했다. 처음에는 `values()` 메서드를 그대로 사용했다. public enum Ope..
미션1. 자동차 경주 - 단위테스트 회고
·
📝 끄적끄적/TDD, 클린 코드 with Java 17기
포비님이 첫 번째 미션은 쉽다고 말하셔서 할만하겠지 했는데 완전 오산이었다.첫 번째 미션부터 정말 어려웠고, 단기간에 이렇게 많은 블로그를 보고 학습한 적이 있었나 싶을 정도였다.몇 시간 동안 고민하다 손도 못 댈 때도 있고, 진지하게 내 수준이 아닌 것 같아서 그만둬야 되는 거 아닌가 생각했다 😥매 단계마다 엄청나게 많은 리뷰가 쏟아졌고, 계속 리팩토링 하면서 '재밌다!'라고 느끼는 게 신기했다! 1단계 - 학습 테스트 실습1단계는 본 미션에 들어가기 전 워밍업 단계로 String과 Set Collection에 대한 테스트를 구현하는 미션이었다. @DisplayName()에는 테스트 대상의 input과 output에 대한 시나리오를 설명하자처음에는 아래처럼 테스트 이름에 코드 로직을 설명했었다.@Te..
[Git] 원격 저장소의 브랜치 가져오기 (remote branch)
·
🛠 DevOps & Tool/Git
나는 최근 repository 하나를 2대의 PC에서 작업하고 있다. 즉 집에서 step1 브랜치에서 작업하다가, 회사 가서 step1 브랜치에서 이어서 작업한다. 평소처럼 집에서 push해놓은 걸 회사에서 이어서 작업하고 push 하려는데...! 회사 로컬에 원격 저장소의 step1 브랜치가 계속 안 떴다. 로컬, 원격 저장소를 확인하니 원격 저장소에 기본 브랜치만 뜸.. 구글링해서 `git remote update` , `git checkout -t origin/step1` 를 해봐도 안 됐다.....😥 해결 1. 원격 저장소의 모든 브랜치를 가져온다. $ git remote set-branches origin \* 2. 원격 저장소에 변경사항이 있는지 확인한다. $ git fetch origin 없..
동등성과 동일성&String.equals()
·
💻 Dev/Java & OOP
동일성, ==동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 것은 두 객체의 주소값이 같아 동일하다고 봐도 무방하다는 말이다. ==와 != 연산자는 기본 자료형에서만 값 비교를 위해 사용할 수 있다.참조 자료형에서 사용해도 되지만 참조 자료형에서 사용하면 값을 비교하는 게 아니라 주소값을 비교한다.Parent parent1 = new Parent("hyun");Parent parent2 = new Parent("hyun");System.out.println(parent1 == parent2); //falseParent 객체 안에 String name 이라는 변수에 같은 값을 넣고 비교해도 결과는 false다. 두 객체는 각자의 생성자를 사용하여 만들었기 때문..