본문 바로가기

전체보기

(243)
개발자 기술 과제, 라이브 코딩 테스트 후기(자바 스트림 활용 능력 with flatMap) 과제 겸 라이브 코딩 1. 후기 제가 생각하는 일반적인 개발자 채용 프로세스는 아래와 같습니다. 서류전형 → 코딩테스트(온라인) → 기술면접 → 임원면접 → 최종합격 여기에 조금 추가되면 코딩테스트를 여러번 본다든지 오프라인 코딩테스트를 한 번 더 본다든지하는 경우가 있습니다. 또한 경우에 따라 기술 면접 전에 필기 문제를 푸는 경우도 있고, 코딩테스트 대신 과제 전형이나 기술 면접 중 수도코드 작성, 아주 드물게 기술 면접 단계에서 라이브 코딩을 할 수도 있죠. 그러한 여러 과정 중 제가 이번에 "라이브 코딩"을 봐서 후기를 남기려고 합니다. 조쉬 롱(josh long)만큼 라이브 코딩을 할 수 있다면 두려울 것이 없겠지만 제 현실은 나약한 주니어 개발자죠.... 그래도 나름 깨달은 것이 있어서 공유하..
자바 람다에서 final이거나 final처럼 쓰인 지역 변수만 접근할 수 있는 이유 Java lambda effectively final local variable 1. 자바 람다에서 final이거나 final처럼 쓰인 지역 변수에만 접근할 수 있는 이유 면접에서 또 하나 배워왔습니다. (기술 면접에서 떨어졌지만...ㅜㅜ) 먼저 질문부터 말씀드리면 원래 질문은 "Anonymous Inner Class에서 외부의 지역 변수에 접근할 때 final처럼 쓰여야만 가능한데 왜 그렇게 동작하는지에 대해 자유롭게 답을 해보라"는 질문이었습니다. 답변은 제대로 못했는데 나름대로 생각하기를 뭔가 동시성 문제가 있지 않을까?하고 단순하게 이정도만 생각하고 답변했던 것 같습니다. (근거도 없이...) (물론 final 키워드로 지정된 변수는 재할당을 못하게 할뿐이지 동시성 문제를 해결하는 키워드는 아닙니..
Virtual DOM 동작 원리와 이해 (with 브라우저의 렌더링 과정) Virtual DOM? 1. Virtual DOM이란? → "DOM을 추상화한 가상의 객체" DOM을 추상화한 가상의 객체라고 표현해봤습니다. (개인이 내린 정의) 그러면 우선 저 문장을 이해하기 위해서 DOM이란 뭔지 알아야합니다. 1.1 DOM(Document Object Model) DOM은 문서 객체 모델이라고 하는데 결국은 브라우저에서 다룰 HTML 문서를 파싱하여 "문서의 구성요소들을 객체로 구조화하여 나타낸 것"입니다. DOM은 HTML Elements, Attributes, CSS styles, Events, Methods 등을 제어할 수 있는 표준 인터페이스를 제공합니다. 단순하고 실용적인 측면에서 다시 정의하면 "웹 페이지를 구성하는 요소를 구조화해서 나타낸 객체고 이 객체를 이용해서 ..
자바8이후 인터페이스의 변경점 2가지와 변경한 이유(default method, static method) Java Interface (JDK8~) 1. 자바 인터페이스 변경점 자바 8에서 대대적인 변화중 하나인 인터페이스에 변경점이 있습니다. 과거에는 인터페이스와 추상클래스의 차이점에 대한 질문이 면접에 가끔 등장했으나, 요새는 인터페이스의 변경점으로 인해 인터페이스에 대해 물어보는 질문이 더 자주 등장하는 것 같습니다. (자바8은 2014년에 나왔고, 현재 2020년에는 JDK14가 나왔는데 뒤늦게 뭔 자바8이야? 라고 하실 수 있지만, 결국 해당 변경점이 어떤 문제를 해결하기 위한 변경 혹은 기술인지 이해하고 사용하는게 중요하기 때문에 공부한 내용을 정리했습니다.) 각설하고... 자바 인터페이스의 변경점은 두 가지가 있습니다. Default Method Static Method 기존(자바7 이전)에는 추..
자바 람다(Java Lambda) 단 하나의 abstract method를 구현하는 함수 자바 람다 입문 1. 람다란? 단 하나의 abstract method를 갖는 인터페이스를 구현한 익명 클래스 인스턴스를 표현하는 함수다. (필자가 생각한 정의다.) 만약, 익명 클래스를 축약 표현(syntactic sugar)한 거라고 생각하면 되냐?! 라고 한다면 그건 또 아니다. 익명클래스는 내부 변수를 가질 수 있으나 람다는 불가능하다. this가 가리키는 것도 다르고 내부 동작도 좀 다르다고 한다. (근데 람다를 쓰면 익명의 클래스가 생성됨) '람다식' 이라고도 표현하는데 대부분 람다를 쓸 때 표현식 즉, "코드 조각"으로 구현하기 때문에 그렇지 않을까한다. 2. 람다는 어떤 문제를 해결하기 위한 기술인가? 자바에서 람다는 함수형 프로그래밍 패러다임으로 전환하기 위한 하나의 '단계'다. 따라서 람..
지금 당장 좋은 커밋 메시지를 남기는 방법(with Git Commit Template) clean code? clean commit! 좋은 코드를 작성하는 것은 엄청 중요하고, 꾸준히 반복하고 또 연습해도 상당히 어려운 일이다. 갑자기 좋은 코드를 작성하는 것에 대해서 왜 얘기하냐고 할 수 있는데, 그 이유는 좋은 코드를 남기는 것 만큼 중요한 게 "좋은 커밋 메세지(Commit Message)를 남기는 것"이라고 말하고 싶기 때문이다. (그런데 사람들은 이것을 간과한다...) 물론 어떤 것이 좋은 코드인가? 라는 질문에도 여러 답변이 있다. 결합도는 낮고 응집도는 높은 객체지향적인 코드 짧고 간결한 코드 가독성이 좋은 코드 더 이상 고칠게 없는 코드 중복이 없는 코드 테스트가 많은 코드 기타 등등... 이와 유사하게 어떤 것이 좋은 커밋 메시지인가? 라는 질문에도 여러 답변이 있다. 먼 ..
스프링 부트 애플리케이션에서 초기화 코드를 넣는 3가지 방법 (by 토비님) 스프링 부트에서 초기화 코드를 넣는 3가지 방법 이 포스트는 토비님의 유튜브 강의를 보고 내용을 정리한 포스트입니다. (출처 : https://www.youtube.com/watch?v=f017PD5BIEc) 위의 영상을 보면서 같이 공부하기 어려운 경우(시간이 없거나 집중하기 어려운 경우..?)에 제 글을 가볍게 참고하시면 좋을 것 같습니다. 배경 스프링부트 애플리케이션이 시작할 때 백그라운드에서 굉장히 많은 스프링 빈(Bean)들이 만들어지고 그 외에 스프링 컨테이너가 초기화하는 과정이 진행된다. 여기서 하고자 하는 것은 앞서 언급한 모든 작업을 마치고 나서 "초기화 코드"를 넣어야 하는 경우에 어떤 방법이 있을까에 대한 것이다. 내가 만든 스프링 부트 애플리케이션이 정상적으로 실행이 완료되면, 모니..
로그인 과정으로 살펴보는 스프링 시큐리티 아키텍처(Spring Security Architecture) Spring Security Architecture 학습 목표 스프링 시큐리티를 처음 배우는 사람 또는 적어도 한 번은 적용해본 사람을 기준으로 "가장 기본이자 뼈대인 구조를 이해한다"는 학습 목표가 있다. 수 많은 블로그를 참고하면서 이해가 가지 않던 부분을 필자가 학습해 본 방법(로그인 동작으로 살펴보는 방법)으로 구조와 개념을 확립하고자 한다. 용어 정리 스프링 시큐리티에서는 "인증"과 "권한"을 분리하여 체크할 수 있도록 구조를 만들었다. Authentication(인증) : 'A'라고 주장하는 주체(user, subject, principal)가 'A'가 맞는지 확인하는 것 코드에서 Authentication : 인증 과정에 사용되는 핵심 객체 ID/PASSWORD, JWT, OAuth 등 여러..