목록분류 전체보기 (167)
늦은 프로그래밍 이야기
List, Set, Map, HashMap의 차이에 대해서 설명해주세요. 데이터의 중복 여부와 순서 혹은 Key-Value의 구조, 데이터의 Read에 유용한지 Update에 유용한지의 차이점이 있습니다. List List는 데이터를 순서대로 저장하며, 중복된 값을 허용합니다. 데이터를 추가, 삭제, 수정할 때 유용합니다. 대표적인 구현체로는 ArrayList와 LinkedList가 있습니다. Set Set은 순서를 보장하지 않으며, 중복된 값을 허용하지 않습니다. 데이터를 추가, 삭제, 조회할 때 유용합니다. 대표적인 구현체로는 HashSet과 TreeSet이 있습니다. Map Map은 Key-Value 상으로 데이터를 저장하며, 중복된 Key값을 허용하지 않습니다. Key를 이용하여 Value에 접근..
MSA(Microservice Architecture)란? MSA는 Microservice Architecture의 약자로, 마이크로서비스 아키텍쳐라고도 불리며, 대규모 어플리케이션을 여러 개의 작은 서비스로 분리하여 개발하고 운영하는 아키텍처 패턴입니다. 기존의 모놀리식 아키텍처에서는 모든 기능을 담당하는 하나의 어플리케이션으로 개발 되었습니다. 하지만 이런 모놀리식 아키텍처는 어플리케이션 규모가 커질수록 개발, 배포, 확장 등의 이슈가 발생할 가능성이 높아졌습니다. 또한, 한 번에 모든 기능을 업데이트하기 때문에, 작은 수정 사항도 전체 어플리케이션의 배포에 영향을 미치게 됩니다. 이에 반해 MSA는 각각의 서비스를 작게 분할하고, 서비스 간의 의존성을 최소화하여 개발 및 운영을 보다 쉽게 관리할 수..
DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요 DI(Dependency Injection)는 의존성 주입이라는 뜻으로, 객체 간의 의존 관계를 컨테이너가 관리하여 객체 간 결합도를 낮추는 디자인 패턴입니다. 객체 간의 의존 관계를 직접 코드에서 구현하는 것이 아니라, 컨테이너가 의존 관계를 관리하여 객체 생성 및 의존 관계 설정을 대신 처리하는 방식입니다. 이를 통해 코드의 유지보수성, 확장성, 테스트 용이성 등이 증가하게 됩니다. DI의 주요 장점은 다음과 같습니다. 결합도의 감소 DI를 적용하면 의존성이 감소하므로, 객체 간의 결합도가 낮아집니다. 이를 통해 코드의 재사용성, 유지보수성, 확장성 등이 증가하게 됩니다. 모듈화 DI를 적용하면 모듈화가 ..
객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요 1. SOLID 원칙 SRP (단일 책임 원칙, Single Responsibility Principle) 클래스는 하나의 책임만 가지며, 그 책임을 완전히 캡슐화 해야 합니다. OCP (개방-폐쇄 원칙, Open-Closed Principle) 클래스는 확장에 대해 열려 있어야 하지만, 변경에 대해서는 닫혀 있어야 합니다. LSP (리스코프 치환 원칙, Liskov substitution Principle) 자식 클래스는 언제나 부모 클래스의 자리에 사용될 수 있어야 합니다. ISP (인터페이스 분리 원칙, interface Segregation Principle) 인터페이스는 클라이언트가 필요로 하는 메서드만 포..
프로젝트 현재 위치의 반경 3km 내의 레스토랑 목록 조회 작업을 분배받은 것들 중 프론트 구현을 제외하고 가장 마지막 남은 기능이었다. 가장 어려운 기능이어서 앞쪽에서 작업 했다가는 시간을 다 허비할 것 같고 다른 팀원이 담당한 레스토랑 생성 부분이 완료되어야 할 수 있는 기능이어서 제일 후순위에 작업을 하였다. 해당 작업을 진행하면서 가장 어려웠던 부분은 역시나 위도 경도를 이용하여 반경 3키로 이내의 레스토랑의 위도 경도를 구하는 것이었다. 어제 작업하였던 검색을 사용하여 현재 위치의 위도 경도와 레스토랑의 위도 경도를 사용하여 거리를 구하는 것에서 살짝 변형된 식이었지만, 해당 산식을 정확히 이해하지 못해서 식을 변형하는데 어려움이 따랐다. 구글에 검색한 결과 해당 식을 SQL문으로 작성한 것을 ..
프로젝트 검색 키워드로 레스토랑 목록 조회 키워드로 검색하면 해당 키워드를 가지고 있는 레스토랑만 조회해서 보여주는 기능을 구현하였다. 처음에는 그냥 키워드를 받아서 해당 키워드에 해당하는 레스토랑을 반환하는 쉬운 기능인줄 알았는데, 반환 값에 현재 유저의 위치와 레스토랑의 위치 간의 거리를 구해서 반환해야 하는 기능이었다. 검색 기능에 LIKE 이외의 다른 쿼리문을 사용할 수 있는지 검색 기능에 LIKE 문을 사용하여 레스토랑이 가지고 있는 키워드 값이 “XX XXX XX”의 형태여서 와일드카드를 사용하여 입력받은 키워드 값을 포함하고 있는 레스토랑을 가져오는 JPA 쿼리메소드를 구현하였는데 그동안 LIKE 문과 와일드카드를 함께 사용하면 성능도 안나오고 실무에서 거의 사용하지 않는다고 많이 들어와서 ..
프로젝트 Pull Request 그동안 프로젝트를 진행하며 Pull Request를 사용하지 않고 팀원들이 한자리에 모여 다같이 merge를 진행하였는데 이번에는 Pull Request를 통해 서로의 코드를 리뷰하고 모든 팀원들의 승인을 받은 코드만 merge하는 방식으로 진행하였다. 프로젝트를 시작하며 작성한 entity 부분에서도 리뷰가 있었고, 어제 작성한 카테고리에서도 리뷰가 있었다. 서로의 코드를 리뷰하며 작성한 코드의 부족한 부분을 수정하다 보니 금요일에 작성한 코드도 오늘 merge가 되었다. 은근 오래 걸리고 까다로운 작업이지만, 무결한 코드를 dev 브랜치에 merge하기 위한 필수 작업이라는 생각이 들었고, 내가 작성한 코드의 미숙한 부분을 채워 나갈 수 있어서 많은 도움이 되었다. 레..
프로젝트 Category CRUD 오늘부터 프로젝트의 기능들을 구현하기 시작했다. 내가 하기로 한 작업에는 도메인 단위로 크게는 Restaurant에 관련된 작업이고 작게는 Category CRUD, Menu CRUD, Restaurant 조회(일반조회, 키워드검색, 현재위치 기반 반경 3km 이내 조회) 가 있다. 일단 Restaurant에 Category 값을 가지고 있어야 하기 때문에 최우선 순위라고 생각이 들어 Category CRUD부터 작업을 하게 되었다. 이미 저저번 프로젝트에서 카테고리를 구현했었던 터라 그리 어렵지 않게 구현할 수 있었다. 기능구현 public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)..