시스템 디자인은 복잡하고 하나의 디자인이 모든 경우에 적합한 것도 아닙니다. 아래에서 면접에서 사용할 수 있는 유용한 규칙을 공유하겠습니다. 📌 읽기가 많은 시스템의 경우- 캐시 사용을 고려 📌 쓰기가 많은 시스템의 경우 - 비동기 처리를 위해 Message Queue 사용 📌 낮은 지연시간을 요구하는 경우 - 캐시 및 CDN 사용을 고려 📌 ACID 원칙이 필요한 경우 - RDBMS/SQL DB로 이동 📌 비정형 데이터의 경우 - NoSQL DB로 이동 📌 복잡한 데이터(비디오, 이미지, 파일)의 경우 - Blob/Object 저장소로 이동 📌 복잡한 사전 계산이 필요한 경우 - Message Queue & 캐시를 이용 📌 대용량 데이터 검색 - 검색 인덱스, 트리 또는 검색 엔진을 고려 📌 SQL 데..
레퍼런스
NullPointerException 위험을 줄이려면 메서드에서 null 값을 반환하지 않도록 노력하세요. 값이 없는 경우를 전달하기 위해서는 Optional, 빈 컬렉션, 또는 에러 핸들링을 사용하는 것과 같은 대체 전략을 사용하십시오. 📌 null을 반환하는 대신, Optional을 사용하여 값의 부재를 명시적으로 표현하는 것을 고려하세요. 이를 통해 클라이언트는 값이 있는 경우와 없는 경우를 모두 처리할 수 있습니다. import java.util.Optional; // A service class that may or may not find a user class UserService { // Simulating a method that may or may not find a user by ID ..
Topic 5: Hibernate/Spring-data Jpa/Database(SQL or NoSQL) 이 토픽에서는 Hibernate JPA 프레임워크가 등장하는 데이터 계층을 다룹니다. 면접관이 데이터베이스 담당자라면 그에 관련해 더 깊이 물어볼 수 있습니다. [토픽] JPA 레파지토리 엔티티들의 관계 SQL 쿼리 관계형과 비관계형 DB 개념 DB에서의 CRUD 연산 join, indexing, procs, functions [질문] SQL과 NoSQL의 차이는 무엇인가요? 데이터베이스의 샤딩이 무엇인가요? JPA란 무엇인가요? 부모-자식 관계란 무엇인가요? 조인이란 무엇인가요? 관련된 아티클1, 아티클2 Topic 6: 코딩 자바 코딩 토픽에서는 스트림 API를 사용하여 코드를 작성하는 것이 중요하..
면접을 통과한다는 것은 일반적으로 두 번의 씨름을 통과함을 의미합니다. HR과의 면담은 보통은 더 쉽습니다. 대부분의 사람들이 어려움을 겪는 것은 기술 면접입니다. 특히 대기업과 IT 회사는 일반적으로 인터뷰 하나당 약 1시간을 확보합니다. 자바는 배울 것이 많은 방대한 주제입니다. 자바 외에도, 면접관들은 여러분의 프로젝트, 아키텍처, 클라우드 컴퓨팅, 쿠버네티스 등에 대해 물어볼 것입니다. 다룰 것이 너무 많아요! 🤮 그래서 기본기를 잘 익히고 코딩 실력을 연습하는 데 집중해야 합니다. 각 주제를 철저히 다루면서 차근차근 진행해 나가도록 하겠습니다. 이제 1시간의 면접을 시작한다고 가정하겠습니다. 각 주제에 대해 8~10분을 배정해 면접을 진행하고, 면접관으로서 어떤 질문을 할 것인지 알아보겠습니다...
스프링 부트 애플리케이션인 lombok과 자바 14에서 출시된 새로운 기능인 record 클래스, 두 가지를 비교해 봅시다. 이 둘의 차이점과 어떤 것을 사용하는 것이 더 나은지 논의하기 전에, record와 lombok에 대해 간단하게 알아보겠습니다. Project Lombok Lombok은 에디터와 빌드 도구에 자동으로 연결되어 자바 개발 속도를 높여주는 자바 라이브러리입니다. getter와 equals 메서드를 작성할 필요가 없습니다. 어노테이션 하나만 추가하면 완전한 기능을 추가할 수 있으니까요. 자바로 개발하면서 매번 클래스에 getter/setter를 선언하는 것은 매우 고통스러운 일이었습니다. 새로운 클래스가 생성될 때마다 모든 빈에 대해 동일한 단계를 추가하는 것은 나쁜 디자인일 겁니다. ..
처음 컬리에 입사했을 때 팀 내에서는 Java/Spring 스택으로 백엔드 개발을 진행하고 있었습니다. 이전 회사에서도 같은 스택을 사용해서 적응하기에 별 무리 없겠구나~ 했는데 웬걸, 프로젝트 구조가 그동안 봐왔던 것과는 상이했던 거였죠. 원래는 계층형 아키텍처를 사용하였습니다. 흔히 백엔드 개발을 시작하면 배우게 되는 그 Controller/Service/Repository 구조입니다. 가장 단순하고 이해하기 쉬운 구조여서 그런지 학생들을 가르칠 때도 많이 사용하죠. 저도 예외는 아니었습니다. 그러나 마주친 것은 이름조차도 낯선 헥사고날 아키텍처(Hexagonal Architecture)였습니다. 어댑터, 유스케이스, 포트 등 현란한 용어들 사이에서 저는 정신을 차릴 수가 없었습니다. 헥사고날 아키텍..