🎯 면접관이 된 계기대표님이 해외 지부에 저와 브라이언의 업무를 같이 할 사람을 원하셨습니다! (영어를 잘하는..)저희는 신제품 아키텍쳐 설계를 담당하시기를 바랬어요.. 물론, 개발도..! 하겠지만요.. 그래서, 이번에 처음으로 면접관 자리에 앉게 되었어요. 브라이언과 함께 백엔드 개발자 4명을 면접하는 자리였는데, 생각보다 많은 걸 배우게 된 경험이었습니다. 📋 면접 준비 과정 실무에서 자주 마주치는 상황들로 문제를 준비했어요:코드 리팩토링 문제: 하나의 메서드에 모든 로직이 들어있는 OrderService 개선하기로깅 최적화: PaymentService에 적절한 로그 레벨과 위치 설정하기Stream API 활용: 사용자 데이터 필터링, 정렬, 집계 처리JavaScript 함수형 메서드: 배열..
어느 평범한 오후, 나는 카페에서 아이스 아메리카노를 주문했다. 평소보다 긴 빨대가 들어있었는데, 30센티미터쯤 되어 보였다. 기존에 쓰던 25센티미터 빨대보다 5센티미터나 길었다. 빨대로 커피를 빨아올리는데 뭔가 평소보다 힘이 더 드는 것 같았다. "빨대가 길어지면 빨아올리는 힘이 얼마나 달라지는 걸까?" 궁금해서 AI에게 물어봤다. 빨대의 숨겨진 과학 AI는 흥미로운 답변을 해주었다. 물리학적으로 보면, 빨대를 통해 음료를 빨아올릴 때는 대기압과 입 안의 압력 차이를 이용한다고 했다. 평상시 내 입 안은 대기압인 1기압과 같다. 하지만 빨대로 음료를 마실 때는 입 안 압력을 0.9기압 정도로 낮춘다. 이 0.1기압의 차이 때문에 대기압이 빨대 아래쪽 음료 표면을 눌러서 음료가 위로 올라오는 것이다...
정규식이 유한상태기계라는 건 알겠는데, 실제로는 어떻게 구현되어 있을까요? 그리고 ,전 글의 예시에서 보여준 [IF문]을 연속으로 쓴거랑 뭐가 다를까요? 실제 Java 정규식 엔진의 내부를 파헤쳐보겠습니다. Java 정규식 엔진의 진짜 정체노드 기반 그래프 구조Java의 정규식 엔진은 실제로 노드들을 연결한 그래프로 구현되어 있어요.// OpenJDK 내부 구조 (실제)abstract class Node { Node next; // 다음 노드로의 포인터 abstract boolean match(Matcher matcher, int i, CharSequence seq);}이게 바로 상태기계의 그래프 표현입니다:각 Node = 상태next 포인터 = 상태 전이match() 메서드 = 전이 조건 ..
백엔드 개발하다 보면 정규식 많이 쓰잖아요. 이메일 검증이나 입력값 체크할 때 말이죠.그런데 어느 날 "정규식이 유한상태기계다"라는 말을 듣고... 솔직히 뭔 소리인지 모르겠더라고요. 그래서 파헤쳐봤습니다. 유한상태기계가 뭔데?일단 이름부터가 어려워 보이죠. 근데 개념은 생각보다 간단해요.TV 리모컨 생각해보세요.TV 꺼짐 --전원버튼--> TV 켜짐TV 켜짐 --전원버튼--> TV 꺼짐이게 유한상태기계예요. TV는 항상 "꺼짐" 아니면 "켜짐" 둘 중 하나 상태에 있고, 전원버튼 누르면 상태가 바뀌는 거죠.신호등도 마찬가지:빨간불 → 초록불 → 노란불 → 빨간불 (반복)핵심은 이거예요:지금 어떤 상태인지 기억하고 있음뭔가 입력이 들어오면 (시간 지남, 버튼 누름 등)정해진 규칙대로 다른 상태로 바뀜 ..
소프트웨어 개발에서 데이터 구조를 선택할 때는 성능뿐만 아니라 팀 협업과 코드 유지보수도 고려해야 합니다.이런 상황을 상상해보세요, 한 개발자가 성능 최적화를 위해 인터페이스의 반환값을 Set으로 정의했습니다. 하지만, 팀원들은 순서(index)가 필요하거나 기존 코드와의 호환성 때문에 List를 선호합니다.결국, Set을 List로 변환하는 추가 작업이 빈번해지고, 이 과정이 코드 복잡도를 유발합니다.😓 왜 이런 일이 발생하고, List를 표준으로 사용하는 것이 팀 프로젝트에서 더 나은 선택인지 알아봅시다. 🌟 문제: Set에서 List로의 변환 😕 한 개발자가 HashSet을 사용해 중복 제거와 빠른 조회를 구현했습니다. 인터페이스는 이렇게 정의되었죠:interface UserService { ..