DOM
DOM에서 HTML 에 엑세스 하는 방법

console.log(document.body.firstChild)
#text
assignedSlot
:
null
baseURI
:
"http://127.0.0.1:5500/index.html"
childNodes
:
NodeList []
data
:
"\n "
firstChild
:
.....
위와같은 텍스트 노드를 출력한다. #text'는 노드 유형이 텍스트 노드임을 나타냅니다.
그래서 h1 요소를 선택하고 싶으면 텍스트 노드를 건너뛰어야함.
Child vs children
console.log vs console.dir
요소 추가 삭제 이동
// ADD AN ELEMENT
// 1. Create the new element
let newAnchorElement = document.createElement('a');
newAnchorElement.href = 'https://google.com';
newAnchorElement.textContent = 'This leads to Google!';
// 2. Get access to the parent element that should hold the new element
let firstParagraph = document.querySelector('p');
// 3. Insert the new element into the parent element content
firstParagraph.append(newAnchorElement);
let firstH1Element = document.querySelector('h1');
firstH1Element.remove(); //최신용
//firstH1Element.parentElement.removeChild(firstParagraph); // 구식용
firstParagraph.parentElement.append(firstParagraph);
firstParagraph.innerHTML= "Hi ! This is <strong> </strong> !!</strong>";

firstParagraph.textContent = "Hi ! This is <strong> </strong> !!</strong>";

이벤트 리스너

let paragraphElement = document.querySelector("p");
function changeParagraphText() {
paragraphElement.textContent = "Clicked!";
console.log("Paragraph clicked");
}
paragraphElement.addEventListener("click", changeParagraphText); //changeParagraphText() 하면 브라우저가 바로 실행시키기 때문

let inputElement = document.querySelector("input");
function retrieveUserInput() {
let enteredText = inputElement.value;
console.log(enteredText);
}
inputElement.addEventListener("input", retrieveUserInput);
function changeBackgroundColor(event){
console.dir(event.target);
}
secondButtonElement.addEventListener('click',changeBackgroundColor);
멘토링 QnA
생각보다 시간이 안드는건 필요로하다. 현재쓰고 있는 버전에 대한 특징을 요약해놓은건 자료로 있을거야. 특정 빌드 툴에 대한 현재 버전의 툴 내용 문서정도는 읽는데 시간도 얼마 안걸리니까.
자바 컴파일러에 대한 이해는 많이 할수록 좋아. 자바 컴파일러, JVM 의 원리 등등 에 대해서는 면접도 그렇고 알아두면 좋아. SpringBooT 3 가 작년에 나왔는데, 어떤 기능이 추가되고 변화가 있었는가? 그럼 그 전버전 2는?? 하면서 내가 쓰고 있는 버전에서 하나씩 올라가면서 공부를 하는것도 나쁘지는 않은거같아.
예를들면 스프링부트 2.4를 썼다 -> 면접때 왜 2.4를 썼죠? 라는 질문도 간혹 오긴해.
어느시기를 기점으로, 프로젝트성 포트폴리오 라는것 만으로는 높은 점수를 주기 어려워. 최근에는, 실무에서 겪을만한 문제를 재현하는 포트폴리오.
이커머스다 하면 이커머스에서 결제에서 발생하는 문제, 결제모듈은 비동기통신을 해야하는데 그것의 실패율을 떨어트리는 디테일을 특정 플로우의 로직으로 만들고, 어떻게 만들면 이러한 이슈를 해결할 수 있다 등등.
일반적인 CRUD 는 쉽고, 실무에서 겪을법한 난이도 높은 기술 주제를 미리 겪어보려고하는 포트폴리오가 좋아. 예를들면 ,n+1 이슈를 어떤식으로 바라보냐의 문제. n+1 을 발생시키면 여러한 짧은 쿼리가 날라가는데 jpa 상 어떤 이슈가 발생한다 등등의 설명까지 필요해.
추가적으로 퇴근시간 이후에 내는 프로젝트를 제출하는 사람에게 좋은 점수를 주고있어. 이런 사람들은 찐 개발자기 때문에. 그런사람은 집에서 코딩을 안할리가 없다고 생각해.
로스트아크 낚시를 매크로로 만들고 이를 안걸리게 만들고 싶어. 그래서 키보드와 마우스 조작을 구현했다 + 소켓으로 구현한다면 절대 걸릴 일이 없다. 등등 => 내 불편함을 짧은 툴로 해결해나가구나.
업무에서 사용하는 단축키가 있는데, 한눈에 보이지 않고, 커스텀된 단축키가 필요해서 글로벌 핫키로 구현하기.
내가 바로 고치는 정도는 아니더라도, 꽤 많은 근거와 상황설명을 하고 해결을 요청하는게 좋아.
어떤 하나의 법칙에 의해서 행동하는게 애매할 때가 있어. getter setter 를 열었다는거 자체가. 객체지향적으로 옳지 않다라는 말이 있어. getter 를 사용함으로서 객체지향을 못지키는 상황이 많이 나오고, 이견이 많이나와.
어떤 객체가 가지고 있는 값을 마음껏 사용한다면, 단일책임원칙을 어길 수도 있어.
어떤 객체의 행위나 동작은 그 클래스에서 끝내야해. 큰 비즈니스가 드러내는게 좋지않다.
어떤 작업을 하다가 두 레이어 간의 처리가 매우 다양한 형태가 되고, 그 로직이 매우 헤비해지면 DTO 를 나눠도 될거같아.
타협을 본다고 생각해. 이 로직이 해당 비즈니스에 특화되고 거대해지고 복잡해지면, 불편하더라도 분리를 하는게 좋다. 그 시점은 팀이 잡는거야.
DDD가 필요한 작업은 한정적인것같아서 이렇게 답변한다.
클린코드와 솔리드는 생각보다 어렵고, 논란이 되는 주제야. 그럴수밖에 없기도 하고.
그래도 솔리드에 해당하는 다섯개의 원칙을 머리에 넣고 코딩을 하는게 좋아.
클린코드 솔리드는 한번 접근하고, 다섯가지 원칙이 이런거구나 하는 정의를 통해 성장했으면 좋겠어. 지금 너네 수준에서 보는 클린코드와 중간레벨이 되었을때 보면 또 다르거든. 그때 또 기록을 작성하고. 또 더 성장하고, 생각이 바뀌면 작성하고.
내가 성장한 경험들을 승화시키는 기록들을 작성하면 합격률이 높아져.
등등 이런 주제들에 대해 접근해도 좋아. 그래서 많이 틀리면서 기록해두고, 어떤 경험이 나의 소재로 승화시킬 수있는 이력서 전략이 아주 중요해.
블로그 모든 글을 눌러보기 어려우니. 어떠한 이슈에 관한 내용인지 요약해놓은 걸로 이력서에 연결하는게 좋고. 눌러보고 싶은 글제목도 좋아.
문제 해결로 이것과 이것이 있는데 이것의 장점이 있어서 이것을 택했다.. 하는 등의 글이 좋아.
장단을 비교하고, 장단 비교에 논리력이 필요해야해. A의 원리는 이렇고, B의 원리는 이런데, 성능비교를 하기 시작했다. 둘이 별차이가 없다 => 나머지에도 차이가 없다 => 인터페이스가 더 맘에 드는것을 선택했다.. 등등
비교대상군을 반드시 찾아야해. 처음에는 A로 시작했는데 무언가 더 좋은게 있나 접근했다... 등 고민을 한 습관을 보여주는.