분류 전체보기 52

[기술면접준비] 멀티스레드 상황에서 어떤 Map 구현체를 사용해야할까?

들어가며 기술면접에서 면접관이 SynchronizedMap과 ConcurrentHashMap의 차이를 물어봤다. 근데 ConcurrentHashMap를 몰라서 대답을 못했다. 면접을 복기할 겸, Map에 대해 부족한 부분을 공부할 겸 포스팅을 쓴다. Q. HashMap과 HashTable의 차이는 무엇인가요? A. 가장 큰 차이는 HashTable은 동기화를 지원하는 반면, HashMap은 동기화를 지원하지 않습니다. 다만 HashTable은 모든 메서드에 동기화를 지원하는 만큼 상대적으로 느립니다. 또한 Iterator를 사용하는 중에 데이터 변경이 일어나면 Exception이 발생하게 됩니다. 또 key나 value에 null을 허용하지 않는 특징도 있습니다. HashMap은 반대로 동기화를 지원하지..

Development/Java 2023.04.05

[Git] 나는 이번 프로젝트에서 몇 번의 커밋을 했을까?

들어가며 총 10개월가량의 프로젝트가 오픈을 앞두고 근래 4달은 야근 없는 날이 없을 정도로 바쁘게 달려왔다. 평소에 우스개 소리로 "이번 프로젝트에서 천 번은 커밋한 거 같아"라고 이야기했는데 실제로 몇 번이나 했는지 문득 궁금해졌다. 그래서 저장소에 내가 커밋한 횟수를 알아내는 방법을 찾아보았다. 방법 빠르게 결론이 필요한 분들을 위해 결과부터 공개한다. git log --oneline --no-merges --author bbubbush | wc -l 하나씩 과정을 설명하면 git에는 커밋 내용을 확인할 수 있는 log 명령어를 제공한다. log에는 몇 가지 옵션이 있는데 그 중 커밋 메시지를 한 줄로 표시하는 '--oneline'과 커밋의 작성자를 필터링하는 '--author'가 있다. 두가지 옵..

Development/Etc 2023.04.04

org.h2.jdbc.JdbcSQLSyntaxErrorException 해결하기

들어가며 JPA 학습 중 테이블 생성과정에서 아래 오류가 발생했다. org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " drop table if exists order cascade " via JDBC Statement 바로 구글링을 해봤다. 문제의 원인 예제 코드의 엔티티 중 "Order"가 문제였다. SQL의 예약어를 엔티티 이름으로 사용하는 경우 위와 같은 문제가 발생한다. Order는 Order by에 사용되는 키워드다. 다른 예시로 이 글에서는 "Group"을 엔티티 이름으로 사용하여 동일한 문제가 발생했던 것을 알 수 있었다. Group 또한 Group by의 예약어로 사용된다. 해결방안 근본적으로 예약..

[기술면접 준비] 비전공자도 쉽게 이해하는 AOP

들어가며 스프링의 기술질문 주제로 단골로 등장하는 AOP. 개념은 잘 아는데 자세하게 설명하려고 하니 어렵다. 그래서 자주 나오는 질문과 질문의 답이 되는 코드를 작성해 보며 개념을 확실하게 머릿속에 넣기 위해 준비했다. 실제로 며칠 전 기술면접에서 AOP에 대한 질문을 받았는데 개념적으로 이해한다고 생각해 준비 없이 대답했다가 호되게 당했다. 이제부터 여러분과 나는 취준생이 되어 AOP에 대해 자세하게 알아보고 답을 정리해보자. Q. AOP는 무엇이고 왜 사용할까요? A. 관점지향 프로그래밍이란 뜻으로 OOP의 개념을 보완하기 위해 사용됩니다. 가령 모든 컨트롤러 요청의 파라미터를 로깅하고 싶을 때, 로깅이라는 기능이 중복될 수 있습니다. 이를 컨트롤러에 진입하기 전에 일괄적으로 처리해 줄 수 있다면 ..

[신.전.선.잔] 신입 개발자에게 전하는 선배 개발자의 잔소리 - 들어가며

과거나 현재나 회사는 매일 전쟁이다. 매 시간 마다 쏟아지는 업무폭탄과 칼날이 섞인 언행이 오가는 회의를 보내며 서로의 잘잘못을 저울질하기 바쁘다. 다만 과거에 비해 더욱 개인화 되고, 실무능력의 중요성이 커진 점은 오늘날의 회사 갖는 특징이다. 한 마디로 더욱 개인화되고, 전문화되었다고 할 수 있다. 그래서일까? 이제는 회사에서 애정 어린 잔소리를 기대할 수 없다. 누군가는 꼰대로 보일까 봐, 누군가는 나를 무시하는 것 같아 참지 못해서 등 각자의 이유로 더이상 잔소리를 하지 않는다. 내 성장을 기대하며 쓴소리 해주는 사람이 없어졌다는 뜻이다. 개인화된 팀원 사이에서 애정이 사라졌다는 뜻이기도 한다. '신입 개발자에게 전하는 선배 개발자의 잔소리', 줄여서 신전선잔은 오늘날 회사생활을 시작하는 사람, ..

Diary 2023.02.13

[모던 자바스크립트] 이름은 Optional, 적용은 Required

들어가며 ES6부터 객체의 값을 안정적으로 가져오는 옵셔널이 도입됐다. 개념도 쉽고 적용하기도 쉽기 때문에 활용도가 높다. 더 이야기할 게 없으니 바로 알아보자 🙂 전통적인 객체 프로퍼티 확인 개발하면서 발생할 수 있는 상황을 통해 전통적인 방식의 프로퍼티 확인 방식을 보려고 한다. 이번 목표는 책ID로 책 정보를 찾아 작가의 이름을 출력하는 코드를 만드는 것이다. 먼저 책의 정보가 어떻게 구성되었는지 보자. // book은 이런 형태로 데이터 구조를 갖는다. const sampleBook = { bookId: 1, title: '객체지향의 사실과 오해', isbn: '9788998139766', author: { name: '조영호', }, } 특별한 것 없이 최소한의 정보를 담았다. 마저 기능개발을 ..

Development/Etc 2022.09.17

[모던 자바스크립트] Promise 한 방에 뿌수기

들어가며 아마 ES6의 내용 중 이해하기 가장 어려운 내용이 프로미스가 아닐까 생각한다. 다른 변경사항은 기능에 충실한 반면, 프로미스는 특정한 상황을 해결하기 위해 등장했기 때문이라 생각한다. 예를 들면 배열과 객체의 새로운 활용방법은 그냥 기능이다. 그렇게 외워서 쓰면 누구나 금방 사용한다. 근데 프로미스는 사용해야 하는 상황이 있어야 한다. 비동기 처리가 업무에 포함된 상황이다. 그래서 이해하기도 어렵고, 응용해서 실무에 적용시키기는 더욱 어렵다. 그래서 처음 프로미스를 접하는 개발자에게 한방에 이해시키는 것을 목표로 내용을 최대한 간추리고 비유해서 설명하고자 한다. 우선 전체 내용을 정리하면 다음과 같다. 상황별 코드 예제는 아래 있다. 숲을 보고 나무를 보고자 함이니 흐름만 눈에 넣어두면 된다...

Development/Etc 2022.09.10

[모던 자바스크립트] 어썸한 Funtion 변경사항

들어가며 자바스크립트는 함수로 대표된다고 해도 과언이 아니다. 이제는 객체지향적인 방식으로 작업하는 개발자도 많지만 과거부터 함수를 정의하고 사용해왔기에 아직까지 함수 지향적인 코드를 접하는 분들도 많을 것이다. 이번에는 함수의 모던함을 정리하려고 한다. 주로 자주 반복되는 키워드를 생략하고, 축약하여 표현하는 방식으로 변경되었다. 크게 세 가지의 주제로 새로운 함수 사용방법을 정리했다. 그 전에 함수와 자주 혼동되는 메서드를 같이 비교하여 명확히 개념을 정리하고 시작하고자 한다. 함수와 메서드의 차이 함수와 메서드의 구분을 어려워하는 분들이 많아 간단명료하게 한 줄의 문장과 두 줄의 코드로 설명을 끝내겠다. " 바로 호출 가능하면 함수, 다른 객체를 통해서 호출해야 하면 메서드 " alert('Hell..

Development/Etc 2022.09.09

[모던 자바스크립트] Object 기깔나게 사용하기

들어가며 자바스크립트에서 맵(Map)은 ES6가 되어서야 등장했다. 다른 언어에 비하면 상당히 늦은 편이다. 왜일까? 바로 객체(Object)라는 대안이 있었기 때문이다. 따라서 맵을 어떻게 사용하는지 알아가는 것도 좋지만, 그전부터 맵을 대신하던 객체를 어떻게 기깔나게 사용할 수 있는지 파악하는 것이 더 중요하다는 생각이 들었다. 그래서 이번에는 객체에 대해 자세히 알아보려고 한다. 순서는 맵과 객체의 차이를 간단히 살피고, 기존의 객체 사용 방식을 어떻게 개선된 방법으로 사용할 수 있는지 비교하며 설명하면서 진행된다. 객체와 맵의 차이 두드러지는 차이는 키의 타입이다. 객체는 오로지 문자열만 키로 사용할 수 있고, 맵은 모든 데이터 타입을 사용할 수 있다. const sampleFunc = () =>..

Development/Etc 2022.09.08

[모던 자바스크립트] Array 스마트하게 사용하기

들어가며 배열(Array)은 맵과 함께 데이터를 관리하기 위한 가장 효율적인 자료구조다. 이번에는 배열로 무엇을 할 수 있는지 보면서 for 구문의 지옥에서 벗어날 수 있는 것을 목표로 한다. 고전적인 배열 사용방법 배열을 사용하면서 자주 만나는 상황을 통해 그동안 어떻게 해결했는지 살펴보자. 우선 예제로 사용할 데이터를 정의하고 출발한다. const memberList = [ {id: 0, name: '김철수', deptCd: '01', isManager: true}, {id: 1, name: '이영희', deptCd: '02', isManager: false}, {id: 2, name: '고냠이', deptCd: '02', isManager: false}, {id: 3, name: '강이지', dep..

Development/Etc 2022.09.04